many fixes and add uv4l and ML frameworks

pull/388/head
Samuel Cozannet 2020-02-09 14:18:36 +01:00
parent 1111e00bdb
commit 199a4dcb81
25 changed files with 920 additions and 64 deletions

View File

@ -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

View File

@ -63,4 +63,4 @@ max_framebuffers=2
[all]
#dtoverlay=vc4-fkms-v3d
start_x=1
gpu_mem=16
gpu_mem=256

View File

@ -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

View File

@ -1,4 +0,0 @@
IMG_SUFFIX="-lite"
if [ "${USE_QEMU}" = "1" ]; then
export IMG_SUFFIX="${IMG_SUFFIX}-qemu"
fi

View File

@ -1,2 +0,0 @@
NOOBS_NAME="Raspbian Lite"
NOOBS_DESCRIPTION="A port of Debian with no desktop environment"

View File

@ -1,4 +0,0 @@
IMG_SUFFIX=""
if [ "${USE_QEMU}" = "1" ]; then
export IMG_SUFFIX="${IMG_SUFFIX}-qemu"
fi

View File

@ -1,2 +0,0 @@
NOOBS_NAME="Raspbian"
NOOBS_DESCRIPTION="A port of Debian with the Raspberry Pi Desktop"

5
stageX/02-greengrass/00-run.sh Normal file → Executable file
View File

@ -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

View File

@ -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 $@

View File

@ -2,3 +2,7 @@ liblapack3
libopenblas-dev
liblapack-dev
python3.7-dev
python-pip python3-pip
python-opencv
python-scipy
python-picamera python3-picamera

13
stageX/03-opencv/01-run.sh Normal file → Executable file
View File

@ -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

View File

@ -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

34
stageX/04-ml-frameworks/01-run.sh Normal file → Executable file
View File

@ -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

View File

@ -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
} || {

24
stageX/06-sys-tweaks/00-run.sh Executable file
View File

@ -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

View File

@ -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

View File

@ -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
}

View File

@ -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
}

8
stageX/07-uv4l/00-run.sh Executable file
View File

@ -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

View File

@ -0,0 +1,5 @@
uv4l
uv4l-server
uv4l-raspicam
uv4l-mjpegstream
uv4l-raspicam-extras

3
stageX/07-uv4l/02-run.sh Executable file
View File

@ -0,0 +1,3 @@
#!/bin/bash -e
install -m 644 files/uv4l-raspicam.conf "${ROOTFS_DIR}/etc/uv4l/uv4l-raspicam.conf"

View File

@ -0,0 +1,415 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1
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
4D6TOqghzja2rTUV7Q==
=X1/G
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -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 <x, y, w, h>:
#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 <x, y, w, h> 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

View File

@ -0,0 +1 @@
deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/stretch stretch main

View File

@ -1,2 +0,0 @@
NOOBS_NAME="Raspbian Full"
NOOBS_DESCRIPTION="A port of Debian with desktop and recommended applications"