diff --git a/stage1/00-boot-files/files/cmdline.txt b/stage1/00-boot-files/files/cmdline.txt index 5193101..7e1c163 100644 --- a/stage1/00-boot-files/files/cmdline.txt +++ b/stage1/00-boot-files/files/cmdline.txt @@ -1,2 +1,2 @@ -dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait +dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait splash plymouth.ignore-serial-consoles cgroup_enable=memory cgroup_memory=1 diff --git a/stage1/00-boot-files/files/config.txt b/stage1/00-boot-files/files/config.txt index 4df5bdc..367c7ad 100644 --- a/stage1/00-boot-files/files/config.txt +++ b/stage1/00-boot-files/files/config.txt @@ -63,4 +63,4 @@ max_framebuffers=2 [all] #dtoverlay=vc4-fkms-v3d start_x=1 -gpu_mem=16 +gpu_mem=256 diff --git a/stage2/01-sys-tweaks/00-patches/07-resize-init.diff b/stage2/01-sys-tweaks/00-patches/07-resize-init.diff index 882b3b1..5ea1258 100644 --- a/stage2/01-sys-tweaks/00-patches/07-resize-init.diff +++ b/stage2/01-sys-tweaks/00-patches/07-resize-init.diff @@ -1,5 +1,5 @@ --- stage2.orig/rootfs/boot/cmdline.txt +++ stage2/rootfs/boot/cmdline.txt @@ -1 +1 @@ --dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait -+dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh +-dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait splash plymouth.ignore-serial-consoles cgroup_enable=memory cgroup_memory=1 ++dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait splash plymouth.ignore-serial-consoles cgroup_enable=memory cgroup_memory=1 quiet init=/usr/lib/raspi-config/init_resize.sh diff --git a/stage2/EXPORT_IMAGE b/stage2/EXPORT_IMAGE deleted file mode 100644 index aa8f936..0000000 --- a/stage2/EXPORT_IMAGE +++ /dev/null @@ -1,4 +0,0 @@ -IMG_SUFFIX="-lite" -if [ "${USE_QEMU}" = "1" ]; then - export IMG_SUFFIX="${IMG_SUFFIX}-qemu" -fi diff --git a/stage2/EXPORT_NOOBS b/stage2/EXPORT_NOOBS deleted file mode 100644 index 136cc77..0000000 --- a/stage2/EXPORT_NOOBS +++ /dev/null @@ -1,2 +0,0 @@ -NOOBS_NAME="Raspbian Lite" -NOOBS_DESCRIPTION="A port of Debian with no desktop environment" diff --git a/stage4/EXPORT_IMAGE b/stage4/EXPORT_IMAGE deleted file mode 100644 index 79ec11a..0000000 --- a/stage4/EXPORT_IMAGE +++ /dev/null @@ -1,4 +0,0 @@ -IMG_SUFFIX="" -if [ "${USE_QEMU}" = "1" ]; then - export IMG_SUFFIX="${IMG_SUFFIX}-qemu" -fi diff --git a/stage4/EXPORT_NOOBS b/stage4/EXPORT_NOOBS deleted file mode 100644 index 2ef6d7b..0000000 --- a/stage4/EXPORT_NOOBS +++ /dev/null @@ -1,2 +0,0 @@ -NOOBS_NAME="Raspbian" -NOOBS_DESCRIPTION="A port of Debian with the Raspberry Pi Desktop" diff --git a/stageX/02-greengrass/00-run.sh b/stageX/02-greengrass/00-run.sh old mode 100644 new mode 100755 index e52df53..215cf46 --- a/stageX/02-greengrass/00-run.sh +++ b/stageX/02-greengrass/00-run.sh @@ -3,7 +3,6 @@ install -m 755 files/install-greengrass.sh "${ROOTFS_DIR}/bin/" install -m 644 files/greengrass.service "${ROOTFS_DIR}/etc/systemd/system/greengrass.service" install -m 755 files/S02greengrass "${ROOTFS_DIR}/etc/init.d/S02greengrass" -sed -i.bak -e 's/$/"splash plymouth.ignore-serial-consoles cgroup_enable=memory cgroup_memory=1"/' "${ROOTFS_DIR}/boot/cmdline.txt" [ -f "${ROOTFS_DIR}/etc/sysctl.d/98-rpi.conf" ] || touch "${ROOTFS_DIR}/etc/sysctl.d/98-rpi.conf" @@ -12,10 +11,10 @@ fs.protected_hardlinks = 1 fs.protected_symlinks = 1 EOF -wget -c -q -O greengrass.tar.gz "https://d1onfpft10uf5o.cloudfront.net/greengrass-core/downloads/1.10.0/greengrass-raspbian-armv7l-1.10.0.tar.gz" +wget -c -q -O greengrass.tar.gz "https://d1onfpft10uf5o.cloudfront.net/greengrass-core/downloads/1.10.0/greengrass-linux-armv7l-1.10.0.tar.gz" tar xfvz greengrass.tar.gz -C ${ROOTFS_DIR}/ rm -f greengrass.tar.gz -sudo wget -O ${ROOTFS_DIR}//greengrass/certs/root.ca.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem +wget -O ${ROOTFS_DIR}//greengrass/certs/root.ca.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem on_chroot << EOF adduser --system ggc_user diff --git a/stageX/02-greengrass/files/S02greengrass b/stageX/02-greengrass/files/S02greengrass index 4165581..d039b49 100644 --- a/stageX/02-greengrass/files/S02greengrass +++ b/stageX/02-greengrass/files/S02greengrass @@ -1,5 +1,6 @@ #!/bin/sh -mkdir -p /greengrass/certs -mkdir -p /greengrass/config -cd /greengrass/ggc/core -./greengrassd \$@ + +cd /greengrass/ggc/packages/1.10.0/ +./greengrassd $@ + + diff --git a/stageX/03-opencv/00-packages b/stageX/03-opencv/00-packages index f38dd36..333a345 100644 --- a/stageX/03-opencv/00-packages +++ b/stageX/03-opencv/00-packages @@ -2,3 +2,7 @@ liblapack3 libopenblas-dev liblapack-dev python3.7-dev +python-pip python3-pip +python-opencv +python-scipy +python-picamera python3-picamera \ No newline at end of file diff --git a/stageX/03-opencv/01-run.sh b/stageX/03-opencv/01-run.sh old mode 100644 new mode 100755 index a6b3b4e..94fd0c3 --- a/stageX/03-opencv/01-run.sh +++ b/stageX/03-opencv/01-run.sh @@ -2,19 +2,12 @@ # Note: Setting versions because of https://github.com/EdjeElectronics/TensorFlow-Object-Detection-on-the-Raspberry-Pi/issues/67 on_chroot << EOF -# Installing for Python 2.7 -pip2 install numpy>=1.16.2 -pip2 install opencv-python==3.4.6.27 -pip2 install python-scipy -pip2 install wheel -pip2 install picamera +apt install --reinstall -yqq python-pip python3-pip +pip install wheel # For Python3 -pip3 install numpy>=1.16.2 -pip3 install opencv-python==3.4.6.27 -pip3 install python-scipy pip3 install wheel -pip3 install picamera +pip3 install opencv-python==3.4.6.27 if [ ! -r /dev/raw1394 ]; then sudo ln /dev/null /dev/raw1394 diff --git a/stageX/04-ml-frameworks/00-packages b/stageX/04-ml-frameworks/00-packages index 944d857..648f75f 100644 --- a/stageX/04-ml-frameworks/00-packages +++ b/stageX/04-ml-frameworks/00-packages @@ -2,3 +2,11 @@ python-dev python-nose python-pip zip +gfortran +python-setuptools +python-pandas python3-pandas +python-scipy python3-scipy +libhdf5-dev +build-essential cmake pkg-config libx11-dev +libgtk-3-dev libboost-python-dev +python-markdown python3-markdown \ No newline at end of file diff --git a/stageX/04-ml-frameworks/01-run.sh b/stageX/04-ml-frameworks/01-run.sh old mode 100644 new mode 100755 index 49d4780..bcd9e3d --- a/stageX/04-ml-frameworks/01-run.sh +++ b/stageX/04-ml-frameworks/01-run.sh @@ -2,33 +2,41 @@ # Install MXNet wget -c -q -O mxnet.tar.gz https://d1onfpft10uf5o.cloudfront.net/greengrass-ml-installers/mxnet/ggc-mxnet-v1.2.1-python-raspi.tar.gz -tar -xzf mxnet.tar.gz -c "${ROOTFS_DIR}/opt" +tar xvzf mxnet.tar.gz -C "${ROOTFS_DIR}/opt" rm -f mxnet.tar.gz +on_chroot << EOF +pip -vv install imutils h5py dlib pandas scipy +pip install markdown==3.1.1 +pip3 -vv install imutils h5py dlib pandas scipy +EOF + on_chroot << EOF cd /opt/ggc-mxnet-v1.2.1-python-raspi -pip install mxnet-1.2.1-py2.py3-none-any.whl +pip -vv install mxnet-1.2.1-py2.py3-none-any.whl +pip3 -vv install mxnet-1.2.1-py2.py3-none-any.whl EOF # Install Tensorflow -wget -c -q -O tensorflow.tar.gz https://d1onfpft10uf5o.cloudfront.net/greengrass-ml-installers/tf/greengrass_ML@Edge_TF_v1_4_0_installer_cp27_raspi3_armv7.tar.gz -tar -xzf tensorflow.tar.gz -c "${ROOTFS_DIR}/opt" -rm -f tensorflow.tar.gz +# wget -c -q -O tensorflow.tar.gz https://d1onfpft10uf5o.cloudfront.net/greengrass-ml-installers/tf/greengrass_ML@Edge_TF_v1_4_0_installer_cp27_raspi3_armv7.tar.gz +# tar xvzf tensorflow.tar.gz -C "${ROOTFS_DIR}/opt" +# rm -f tensorflow.tar.gz on_chroot << EOF cd /opt -pip install tensorflow-1.4.0-cp27-none-linux_armv7l.whl +wget -c https://github.com/lhelontra/tensorflow-on-arm/releases/download/v1.14.0-buster/tensorflow-1.14.0-cp27-none-linux_armv7l.whl +pip install -vv tensorflow-1.14.0-cp27-none-linux_armv7l.whl EOF # Install DL Framework -wget -c -q -O dlr.tar.gz https://d1onfpft10uf5o.cloudfront.net/greengrass-ml-installers/dlr/dlr-1.0-py2-armv7l.tar.gz -tar -xzf dlr.tar.gz -c "${ROOTFS_DIR}/opt" -rm -f dlr.tar.gz +# wget -c -q -O dlr.tar.gz https://d1onfpft10uf5o.cloudfront.net/greengrass-ml-installers/dlr/dlr-1.0-py2-armv7l.tar.gz +# tar xvzf dlr.tar.gz -C "${ROOTFS_DIR}/opt" +# rm -f dlr.tar.gz -on_chroot << EOF -cd /opt/dlr-1.0-py2-armv7l -easy_install dlr-1.0-py2.7-linux-armv7l.egg -EOF +# on_chroot << EOF +# cd /opt/dlr-1.0-py2-armv7l +# easy_install dlr-1.0-py2.7-linux-armv7l.egg +# EOF ### NOT DOING THESE FOR NOW. Not sure what the use case is # Install Chainer diff --git a/stageX/05-first-boot/files/firstboot.sh b/stageX/05-first-boot/files/firstboot.sh index 3509f6f..973d085 100644 --- a/stageX/05-first-boot/files/firstboot.sh +++ b/stageX/05-first-boot/files/firstboot.sh @@ -18,22 +18,22 @@ set-hostname() { return "${SERIAL}" } -request-iot-package() { - SERIAL="$1" - curl -q -XGET http://frontend.hitachi.net/register?serial="$SERIAL" -} +# request-iot-package() { +# SERIAL="$1" +# curl -q -XGET http://frontend.hitachi.net/register?serial="$SERIAL" +# } -download-iot-package() { - DL_URL="$1" - ATTEMPT=0 - RETRIES=10 +# download-iot-package() { +# DL_URL="$1" +# ATTEMPT=0 +# RETRIES=10 - while [ ${ATTEMPT} -lt ${RETRIES} ]; do - curl -q -XGET "${DL_URL}" -o package.tgz && break - ATTEMPT=${ATTEMPT}+1 - sleep 30 - done -} +# while [ ${ATTEMPT} -lt ${RETRIES} ]; do +# curl -q -XGET "${DL_URL}" -o package.tgz && break +# ATTEMPT=${ATTEMPT}+1 +# sleep 30 +# done +# } # Only runs if we are at first boot run-if-unlocked() { @@ -48,8 +48,8 @@ set-lock-file() { # Default run run() { SERIAL=$(set-hostname) - DL_URL=$(request-iot-package) - download-iot-package ${DL_URL} && { + # DL_URL=$(request-iot-package) + # download-iot-package ${DL_URL} && { set-lock-file reboot now } || { diff --git a/stageX/06-sys-tweaks/00-run.sh b/stageX/06-sys-tweaks/00-run.sh new file mode 100755 index 0000000..88d1e27 --- /dev/null +++ b/stageX/06-sys-tweaks/00-run.sh @@ -0,0 +1,24 @@ +#!/bin/bash -e + +install -m 644 files/greengrass "${ROOTFS_DIR}/etc/logrotate.d/greengrass" +install -m 644 files/rsyslog "${ROOTFS_DIR}/etc/logrotate.d/rsyslog" +grep -qxF '/opt/va' || { + echo "tmpfs /opt/va tmpfs defaults,noatime,nosuid,size=256m 0 0" | tee -a "${ROOTFS_DIR}/etc/fstab" +} +mkdir -p ${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.config/lxsession/LXDE +install -m 644 files/autostart "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.config/lxsession/LXDE/autostart" + +cat > "${ROOTFS_DIR}/etc/systemd/system/getty@tty1.service.d/autologin.conf" << EOF +[Service] +ExecStart= +ExecStart=-/sbin/agetty --autologin ${FIRST_USER_NAME} --noclear %I \$TERM +EOF + +sed "${ROOTFS_DIR}/etc/lightdm/lightdm.conf" -i -e "s/^\(#\|\)autologin-user=.*/autologin-user=${FIRST_USER_NAME}/" + +on_chroot << EOF +mkdir -p /opt/va +chown ${FIRST_USER_NAME}:${FIRST_USER_NAME} /home/${FIRST_USER_NAME}/.config/lxsession/LXDE/autostart +systemctl set-default graphical.target +ln -fs /lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@tty1.service +EOF \ No newline at end of file diff --git a/stageX/06-sys-tweaks/files/autostart b/stageX/06-sys-tweaks/files/autostart new file mode 100644 index 0000000..adb887c --- /dev/null +++ b/stageX/06-sys-tweaks/files/autostart @@ -0,0 +1,8 @@ +@lxpanel --profile LXDE +@pcmanfm --desktop --profile LXDE +@xscreensaver -no-splash +@xset s 0 0 +@xset s noblank +@xset s noexpose +@xset dpms 0 0 0 + diff --git a/stageX/06-sys-tweaks/files/greengrass b/stageX/06-sys-tweaks/files/greengrass new file mode 100644 index 0000000..5b342f2 --- /dev/null +++ b/stageX/06-sys-tweaks/files/greengrass @@ -0,0 +1,13 @@ +/greengrass/ggc/var/log/system/*.log { + size 10M + weekly + rotate 3 + compress +} + +/greengrass/ggc/var/log/user/*/*/*.log { + size 10M + weekly + rotate 3 + compress +} diff --git a/stageX/06-sys-tweaks/files/rsyslog b/stageX/06-sys-tweaks/files/rsyslog new file mode 100644 index 0000000..f048183 --- /dev/null +++ b/stageX/06-sys-tweaks/files/rsyslog @@ -0,0 +1,49 @@ +/var/log/syslog +{ + rotate 3 + size 10M + missingok + notifempty + delaycompress + compress + postrotate + /usr/lib/rsyslog/rsyslog-rotate + endscript +} + +/var/log/mail.info +/var/log/mail.warn +/var/log/mail.err +/var/log/mail.log +/var/log/daemon.log +/var/log/kern.log +{ + rotate 3 + size 10M + missingok + notifempty + compress + delaycompress + sharedscripts + postrotate + /usr/lib/rsyslog/rsyslog-rotate + endscript +} +/var/log/auth.log +/var/log/user.log +/var/log/lpr.log +/var/log/cron.log +/var/log/debug +/var/log/messages +{ + rotate 3 + size 10M + missingok + notifempty + compress + delaycompress + sharedscripts + postrotate + /usr/lib/rsyslog/rsyslog-rotate + endscript +} diff --git a/stageX/07-uv4l/00-run.sh b/stageX/07-uv4l/00-run.sh new file mode 100755 index 0000000..a874e12 --- /dev/null +++ b/stageX/07-uv4l/00-run.sh @@ -0,0 +1,8 @@ +#!/bin/bash -e + +install -m 644 files/uv4l.list "${ROOTFS_DIR}/etc/apt/sources.list.d/" + +on_chroot apt-key add - < files/lpkey.asc +on_chroot << EOF +apt update +EOF diff --git a/stageX/07-uv4l/01-packages b/stageX/07-uv4l/01-packages new file mode 100644 index 0000000..9cc5d1a --- /dev/null +++ b/stageX/07-uv4l/01-packages @@ -0,0 +1,5 @@ +uv4l +uv4l-server +uv4l-raspicam +uv4l-mjpegstream +uv4l-raspicam-extras diff --git a/stageX/07-uv4l/02-run.sh b/stageX/07-uv4l/02-run.sh new file mode 100755 index 0000000..c5ecd63 --- /dev/null +++ b/stageX/07-uv4l/02-run.sh @@ -0,0 +1,3 @@ +#!/bin/bash -e + +install -m 644 files/uv4l-raspicam.conf "${ROOTFS_DIR}/etc/uv4l/uv4l-raspicam.conf" diff --git a/stageX/07-uv4l/files/lpkey.asc b/stageX/07-uv4l/files/lpkey.asc new file mode 100644 index 0000000..73ca742 --- /dev/null +++ b/stageX/07-uv4l/files/lpkey.asc @@ -0,0 +1,415 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1 + +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 +4D6TOqghzja2rTUV7Q== +=X1/G +-----END PGP PUBLIC KEY BLOCK----- diff --git a/stageX/07-uv4l/files/uv4l-raspicam.conf b/stageX/07-uv4l/files/uv4l-raspicam.conf new file mode 100644 index 0000000..7916218 --- /dev/null +++ b/stageX/07-uv4l/files/uv4l-raspicam.conf @@ -0,0 +1,331 @@ +# You can use this file to override the built-in defaults of the options in +# the following modules: +# - UV4L core +# - raspicam driver +# - Streaming Server module. +# +# To get a full list of the available options with their defaults and +# descriptions, please refer to the 'uv4l', 'uv4l-raspicam' and 'uv4l-server' +# manual pages, or alternatively type the following command: +# +# uv4l --driver raspicam --help --driver-help --server-help +# +# This file is parsed by uv4l through the 'uv4l_raspicam' system service script, +# if installed. If you are not using the service facility to load the raspicam +# driver, then to instruct uv4l to parse this file you must explicitly pass its +# path to the '--driver-config-file' driver option and/or to the '--config-file' +# options, for example (in one line): +# +# uv4l [...] --driver raspicam --config-file=/path/to/uv4l-raspicam.conf \ +# --driver-config-file=/path/to/uv4l-raspicam.conf +# +# NOTE: multi argument options must be specified with one argument per line, +# e.g the command line option '--min-object-size 80 120', in this file becomes: +# min-object-size = 80 +# min-object-size = 120 +# another example: +# server-option = --webrtc-stun-urls=stun:stun.l.google.com:19302 +# server-option = --webrtc-stun-urls=stun1.l.google.com:19302 +# +# NOTE: to comment out an option override put a # at the beginning of the +# corresponding line. Remember that any commented out option that may appear +# on a standard installation of this file is *not* necessarily specified with +# its default built-in value. + +################################## +# uv4l core options +################################## + +driver = raspicam +# video_nr = 0 +auto-video_nr = yes +# verbosity = 6 +# log-color = false +# syslog-host = localhost +# syslog-port = 514 +# frame-timeout = 5000 +frame-buffers = 4 +# zero_copy = yes +drop-bad-frames = yes +# relaxed-ownership = yes +# extension-presence = no + +################################## +# raspicam driver options +################################## + +encoding = jpeg +width = 3920 +height = 2160 +framerate = 25 +#custom-sensor-config = 2 + +### dual camera options: +# stereoscopic-mode = side_by_side +# camera-number = 1 +# decimate = yes +# swap-eyes = yes + +### still and/or video options: +# quality = 85 +stills-denoise = yes +video-denoise = no +# raw = no + +### h264 options: +# profile = high +# level = 4.2 +# bitrate = 8000000 +# intra-refresh-mode = dummy +# intra-period = #arg +# inline-headers = yes +# sps-timing = no +# quantisation-parameter #arg + +### video overlay options: +nopreview = yes +fullscreen = no +# osd-layer = 2 +# opacity = 255 +### preview window : +#preview = 480 +#preview = 240 +#preview = 320 +#preview = 240 + +### post-processing options: +# text-overlay = yes +# text-filename = /usr/share/uv4l/raspicam/text.json +# object-detection = yes +# object-detection-mode = accurate_tracking +# min-object-size = 80 +# min-object-size = 80 +# main-classifier = /usr/share/uv4l/raspicam/lbpcascade_frontalface.xml +# secondary-classifier =/usr/share/uv4l/raspicam/lbpcascade_frontalface.xml + +### image settings options: +# sharpness = 0 +# contrast = 0 +# brightness = 50 +# saturation = 0 +# iso = 400 +# vstab = yes +# ev = 0 +# exposure = auto +# flicker = off +# awb = auto +# imgfx = none +# metering = average +# rotation = 0 +hflip = yes +vflip = yes +# shutter-speed = 0 +# drc = off +# red-gain = 100 +# blue-gain = 100 +# text-annotation = HelloWorld! +# text-annotation-background = yes +### ROI normalized to [0, 1] +# roi = 0 +# roi = 0 +# roi = 1 +# roi = 1 +### ISP blocks +# black-level-compensation = yes +# lens-shading = yes +# automatic-defective-pixel-correlation = yes +# white-balance-gain = yes +# crosstalk = yes +# gamma = yes +# sharpening = yes + +### TC358743 HDMI to MIPI converter options: +# tc358743 = no +# tc358743-i2c-dev = /dev/i2c-1 +# tc358743-init-command = /usr/share/uv4l/raspicam/tc358743_init.sh +# tc358743-no-signal-fallthrough = no +# tc358743-edid-file = #path +# record = no +# recording-dir = /usr/share/uv4l/recordings +# recording-bitrate = 800000 + +### advanced options: +# statistics = yes +# output-buffers = 3 + +### License Key associated to serial number (from --serial-number): +# license-key = #arg + + +################################# +# streaming server options +################################# + +### path to a separate config file that will be parsed by the streaming server +### module directly when it's loaded, +### in which you are allowed to specify all the streaming server options +### listed below in the short form "option=value" instead of the longer +### "--server-option = --option=value" form that you must use +### in this configuration file. +#server-config-file = #path + +# server-option = --port=8080 +# server-option = --bind-host-address=localhost +# server-option = --md5-passwords=no +# server-option = --user-password=myp4ssw0rd +# server-option = --admin-password=myp4ssw0rd +### To enable 'config' user authentication +# server-option = --config-password=myp4ssw0rd + +### HTTPS options: +# server-option = --use-ssl=no +# server-option = --ssl-private-key-file=#path +# server-option = --ssl-certificate-file=#path + +### WebRTC options: +# server-option = --enable-webrtc=yes +# server-option = --enable-webrtc-datachannels=yes +# server-option = --webrtc-datachannel-label=uv4l +# server-option = --webrtc-datachannel-socket=/tmp/uv4l.socket +# server-option = --webrtc-old-sctp-syntax=true +# server-option = --enable-webrtc-video=yes +# server-option = --enable-webrtc-audio=yes +# server-option = --webrtc-receive-video=yes +# server-option = --webrtc-receive-datachannels=no +# server-option = --webrtc-received-datachannel-socket=/tmp/uv4l.socket +# server-option = --webrtc-receive-audio=yes +# server-option = --webrtc-received-audio-volume=5.0 +# server-option = --webrtc-prerenderer-smoothing=yes +# server-option = --webrtc-audio-layer=1 +# server-option = --webrtc-recdevice-index=0 +# server-option = --webrtc-vad=yes +# server-option = --webrtc-echo-cancellation=no +# server-option = --webrtc-preferred-vcodec=0 +# server-option = --webrtc-enable-hw-codec=yes +# server-option = --webrtc-video-format=60 +# server-option = --webrtc-hw-vcodec-minbitrate=800 +# server-option = --webrtc-hw-vcodec-maxbitrate=4000 +# server-option = --webrtc-hw-vcodec-startbitrate=1200 +# server-option = --webrtc-hw-vcodec-intra-period=1800 +# server-option = --webrtc-hw-vcodec-sps-pps-idr=yes +# server-option = --webrtc-suspend-below-min-bitrate=no +server-option = --webrtc-max-playout-delay=34 +# server-option = --webrtc-cpu-overuse-detection=no +# server-option = --webrtc-combined-audiovideo-bwe=no +# server-option = --webrtc-stun-urls=stun:stun.l.google.com:19302 +# server-option = --webrtc-stun-urls # use this for no urls +# server-option = --webrtc-ice-servers=[{"urls": "stun:stun1.example.net"}, {"urls": "turn:turn.example.org", "username": "user", "credential": "myPassword"}] +# server-option = --webrtc-stun-server=yes +# server-option = --webrtc-tcp-candidate-policy=1 +# server-option = --webrtc-rtcp-mux-policy=0 +# server-option = --webrtc-enable-dscp=no +# server-option = --webrtc-ignore-loopback=yes +# server-option = --webrtc-trickle-ice=yes +# server-option = --webrtc-stats-dir=/usr/share/uv4l/statistics/ +### video rendering window positions and sizes on the display. +### for each window, default values can be optionally overridden, but if you +### do this you must specify one line for each of the four x, y, width, height +### window properties (in that order). +### If fullscreen is set the image is stretched to the maximum available display +### resolution from the specified size. +### window 1 +# server-option = --webrtc-renderer-window=0 +# server-option = --webrtc-renderer-window=0 +# server-option = --webrtc-renderer-window=480 +# server-option = --webrtc-renderer-window=352 +# server-option = --webrtc-renderer-fullscreen=no +# server-option = --webrtc-renderer-rotation=180 +# server-option = --webrtc-renderer-opacity=255 +### window 2 +# server-option = --webrtc-renderer2-window=480 +# server-option = --webrtc-renderer2-window=0 +# server-option = --webrtc-renderer2-window=320 +# server-option = --webrtc-renderer2-window=240 +### window 3 +# server-option = --webrtc-renderer3-window=0 +# server-option = --webrtc-renderer3-window=352 +# server-option = --webrtc-renderer3-window=176 +# server-option = --webrtc-renderer3-window=128 +# if enabled, this overrides the size of the rendering windows: +# server-option = --webrtc-renderer-source-size=no + +### XMPP options: +# server-option = --xmpp-server=lambada.jitsi.net +# server-option = --xmpp-port=5222 +# server-option = --xmpp-muc-domain=meet.jit.si +# server-option = --xmpp-room=room +# server-option = --xmpp-room-password=room_password +# server-option = --xmpp-username=me +# server-option = --xmpp-password=mypassword +# server-option = --xmpp-reconnect=yes +# server-option = --xmpp-bosh-enable +# server-option = --xmpp-bosh-tls +# server-option = --xmpp-bosh-server +# server-option = --xmpp-bosh-port +# server-option = --xmpp-bosh-hostname +# server-option = --xmpp-bosh-path +# server-option = --xmpp-bridge-host=localhost +# server-option = --xmpp-bridge-port=7999 + +### Janus WebRTC Gateway options: +# server-option = --janus-gateway-url=https://janus.conf.meetecho.com +# server-option = --janus-gateway-root=/janus +# server-option = --janus-room=1234 +# server-option = --janus-room-pin=#pin +# server-option = --janus-username=test +# server-option = --janus-token=#token +# server-option = --janus-proxy-host=#host +# server-option = --janus-proxy-port=80 +# server-option = --janus-proxy-username=#user +# server-option = --janus-proxy-password=#password +# server-option = --janus-proxy-bypass=#regex +# server-option = --janus-force-hw-vcodec=no +# server-option = --janus-video-format=#code +# server-option = --janus-publish=yes +# server-option = --janus-subscribe=no +# server-option = --janus-reconnect=yes + +### Fine-tuning options: +# server-option = --connection-timeout=15 +# server-option = --enable-keepalive=yes +# server-option = --max-keepalive-requests=0 +# server-option = --keepalive-timeout=7 +# server-option = --max-queued-connections=8 +# server-option = --max-streams=3 +# server-option = --max-threads=5 +# server-option = --thread-idle-time=10 +# server-option = --chuncked-transfer-encoding=yes +# server-option = --acao=* + +### Advanced options: +# server-option = --frame-timeout=5000 +# server-option = --frame-buffers=auto + +### These options are specific to the HTTP/HTTPS Server +### serving custom Web pages only: +# server-option = --enable-www-server=no +# server-option = --www-root-path=/usr/share/uv4l/www/ +# server-option = --www-index-file=index.html +# server-option = --www-port=8888 +# server-option = --www-bind-host-address=#host +# server-option = --www-password=#password +# server-option = --www-use-ssl=no +# server-option = --www-ssl-private-key-file=#path +# server-option = --www-ssl-certificate-file=#path +# server-option = --www-connection-timeout=15 +# server-option = --www-enable-keepalive=no +# server-option = --www-max-keepalive-requests=0 +# server-option = --www-keepalive-timeout=7 +# server-option = --www-max-queued-connections=8 +# server-option = --www-max-threads=4 +# server-option = --www-thread-idle-time=10 +# server-option = --www-chuncked-transfer-encoding=no +# server-option = --www-set-etag-header=yes +# server-option = --www-webrtc-signaling-path=/webrtc +# server-option = --www-acao=* + +### Other options: +# server-option = --editable-config-file=#path +# server-option = --enable-builtin-ui=yes +# server-option = --enable-control-panel=yes +# server-option = --enable-rest-api=yes diff --git a/stageX/07-uv4l/files/uv4l.list b/stageX/07-uv4l/files/uv4l.list new file mode 100644 index 0000000..dc2e6b7 --- /dev/null +++ b/stageX/07-uv4l/files/uv4l.list @@ -0,0 +1 @@ +deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/stretch stretch main diff --git a/stageX/EXPORT_NOOBS b/stageX/EXPORT_NOOBS deleted file mode 100644 index cb10203..0000000 --- a/stageX/EXPORT_NOOBS +++ /dev/null @@ -1,2 +0,0 @@ -NOOBS_NAME="Raspbian Full" -NOOBS_DESCRIPTION="A port of Debian with desktop and recommended applications"