#!/usr/bin/env bash # Crow's Nest # A multiple Cam and Stream Service for mainsailOS # Written by Stephan Wendel aka KwadFan # Copyright 2021 # https://github.com/mainsail-crew/crowsnest # GPL V3 ######## # Error handling, leave this in place # set -x set -e source /common.sh install_cleanup_trap ### Module Specific functions function copy_config { echo_green "Copying Default configuration File to ${CROWSNEST_DEFAULT_CONF_DIR}" sudo -u "${BASE_USER}" cp sample_configs/${CROWSNEST_DEFAULT_CONF} "${CROWSNEST_DEFAULT_CONF_DIR}"/webcam.conf } ## Check Dependencies, install if not installed apt_update_skip check_install_pkgs ${CROWSNEST_DEPS} # Move to $HOME dir cd /home/${BASE_USER} ### Install crowsnest ## Clone Repo gitclone CROWSNEST_CROWSNEST_REPO crowsnest # Check succsessfull clone. if [ -d "/home/${BASE_USER}/webcamd" ]; then pushd webcamd > /dev/null if [ -d "$CROWSNEST_DEFAULT_CONF_DIR" ]; then copy_config else echo_red "${CROWSNEST_DEFAULT_CONF_DIR} does not exist!" echo_green "Creating ${CROWSNEST_DEFAULT_CONF_DIR}." sudo -u ${BASE_USER} mkdir -p ${CROWSNEST_DEFAULT_CONF_DIR} copy_config fi # Create symlink to webcamd script in /usr/local/bin echo_green "Create Sym Link to ${PWD}/webcamd in /usr/local/bin ..." sudo ln -sf $PWD/webcamd /usr/local/bin/ # Add webcamd to moonraker.conf if [ "${CROWSNEST_MOONRAKER_SUPPORT}" = "y" ]; then echo_green "Add webcamd (crowsnest) to Moonraker's Update Manager" # Make sure moonraker.conf exists if [ -f "${CROWSNEST_DEFAULT_CONF_DIR}/moonraker.conf" ]; then echo -e "\n" >> ${CROWSNEST_DEFAULT_CONF_DIR}/moonraker.conf while read -r line; do echo -e "${line}" >> ${CROWSNEST_DEFAULT_CONF_DIR}/moonraker.conf done < "$PWD/file_templates/moonraker_update.txt" echo -e "\n" >> ${CROWSNEST_DEFAULT_CONF_DIR}/moonraker.conf else echo_red "File 'moonraker.conf' does not exist. [SKIPPING]" fi else echo_red "Moonraker's Update Manager Support disabled [SKIPPING]" fi ### Install Service echo_green "Copying webcamd.service file \ to '/etc/systemd/system/webcamd.service'.. " cp -p file_templates/webcamd.service /etc/systemd/system/ ## Make sure raspicam become /dev/video0 Workaround sudo sh -c "echo bcm2835-v4l2 >> /etc/modules" ## Enable systemd service echo_green "Enable webcamd.service ..." systemctl_if_exists enable webcamd.service popd > /dev/null fi echo_green "Installing mjpeg-streamer ..." ### Clone and compile mjpg_streamer ## Due the fact that used mjpg_streamer has a weird folder structure ## We need some 'magic' to workaround that. echo_green "Cloning mjpg-streamer Sources." gitclone CROWSNEST_MJPG_REPO mjpg_tmp sudo -u ${BASE_USER} mkdir -p mjpg-streamer sudo -u ${BASE_USER} mv mjpg_tmp/mjpg-streamer-experimental/* mjpg-streamer/ ## This Part is out of the original mjpg-streamer Module ## Credits to: Raymond Himle ## (Adapted from the OctoPi image creation scripts. Thanks Gina and Guysoft!) echo_green "Installing mjpg-streamer Dependencies." apt update check_install_pkgs ${CROWSNEST_MJPG_DEPS} apt install -y --allow-downgrades cmake=3.13.4-1 cmake-data=3.13.4-1 if [ $( is_in_apt libjpeg62-turbo-dev ) -eq 1 ]; then apt-get -y --force-yes install libjpeg62-turbo-dev elif [ $( is_in_apt libjpeg8-dev ) -eq 1 ]; then apt-get -y --force-yes install libjpeg8-dev fi ## Compile mjpg_streamer echo_green "Compiling mjpg-streamer" pushd mjpg-streamer > /dev/null MJPG_STREAMER_BUILD_DIR=_build [ -d ${MJPG_STREAMER_BUILD_DIR} ] || (mkdir ${MJPG_STREAMER_BUILD_DIR} && \ chown ${BASE_USER}:${BASE_USER} ${MJPG_STREAMER_BUILD_DIR}) [ -f ${MJPG_STREAMER_BUILD_DIR}/Makefile ] || (cd ${MJPG_STREAMER_BUILD_DIR} && \ sudo -u ${BASE_USER} cmake -DCMAKE${MJPG_STREAMER_BUILD_DIR}_TYPE=Release ..) sudo -u ${BASE_USER} make -j $(nproc) -C ${MJPG_STREAMER_BUILD_DIR} sudo -u ${BASE_USER} cp ${MJPG_STREAMER_BUILD_DIR}/mjpg_streamer . sudo -u ${BASE_USER} find ${MJPG_STREAMER_BUILD_DIR} -name "*.so" -type f -exec cp {} . \; popd > /dev/null ## Cleanup echo_green "Removing temporary Repo Folder." rm -rf mjpg_tmp ## Due the fact mjpg uses an older version of cmake we have to upgrade it. apt install cmake cmake-data ## Create sym links echo_green "Creating sym links..." sudo ln -sf $PWD/mjpg-streamer/mjpg_streamer /usr/local/bin/ # Finished echo_green "Successful installed mjpg-streamer." ### Install ustreamer echo_green "Installing ustreamer ..." ### Clone and compile ustreamer echo_green "Cloning ustreamer Sources." gitclone CROWSNEST_USTREAMER_REPO ustreamer echo_green "Installing ustreamer Dependencies." apt update apt --yes install ${CROWSNEST_USTREAMER_DEPS} ## Compile ustreamer echo_green "Compiling ustreamer" pushd ustreamer > /dev/null if [ "${CROWSNEST_USTREAMER_WITH_OMX}" = "y" ] && \ [ "${CROWSNEST_USTREAMER_WITH_GPIO}" = "y" ]; then echo_green "Compile ustreamer with OMX and GPIO Support..." WITH_OMX=1 WITH_GPIO=1 make -j $(nproc) elif [ "${CROWSNEST_USTREAMER_WITH_OMX}" = "y" ] && \ [ "${CROWSNEST_USTREAMER_WITH_GPIO}" = "n" ]; then echo_green "Compile ustreamer with OMX Support..." WITH_OMX=1 make -j $(nproc) else "Compile ustreamer without OMX and GPIO Support..." make -j $(nproc) fi popd > /dev/null ## Create sym links echo_green "Creating sym links..." sudo ln -sf $PWD/ustreamer/ustreamer /usr/local/bin/ # Finished echo_green "Successful installed ustreamer." ### Install v4l2rtspserver echo_green "Installing v4l2rtspserver ..." ### Clone and compile ustreamer echo_green "Cloning v4l2rtspserver Sources." gitclone CROWSNEST_V4L2RTSP_REPO v4l2rtspserver echo_green "Installing v4l2rtspserv Dependencies." apt update apt --yes install ${CROWSNEST_V4L2RTSP_DEPS} # It seems v4l2rtspserver has trouble to compile with cmake 3.16 apt install -y --allow-downgrades cmake=3.13.4-1 cmake-data=3.13.4-1 ## Compile ustreamer echo_green "Compiling v4l2rtspserver" pushd v4l2rtspserver > /dev/null cmake -j $(nproc) . && make -j $(nproc) popd > /dev/null ## Create sym links echo_green "Creating sym links..." sudo ln -sf $PWD/v4l2rtspserver/v4l2rtspserver /usr/local/bin/ # Finished echo_green "Successful installed v4l2rtspserver." ### Final Cleanup apt clean --yes apt autoclean --yes apt autoremove --purge --yes