Update to how we choose if we are running udevd or dumb-udev
This fixes some issues I found with startup.
This commit is contained in:
@@ -9,50 +9,44 @@
|
|||||||
# Modified By: Josh.5 (jsunnex@gmail.com)
|
# Modified By: Josh.5 (jsunnex@gmail.com)
|
||||||
###
|
###
|
||||||
|
|
||||||
# Running udev only works in privileged container
|
# Since this container may also be run with CAP_SYS_ADMIN, ensure we can actually execute "udevadm trigger"
|
||||||
# Source: https://github.com/balena-io-playground/balena-base-images/
|
run_dumb_udev="false"
|
||||||
tmp_mount='/tmp/privileged_test'
|
if [ ! -w /sys ]; then
|
||||||
mkdir -p "${tmp_mount}"
|
# Disable supervisord script since we are not able to write to sysfs
|
||||||
if mount -t devtmpfs none "${tmp_mount}" &> /dev/null; then
|
echo "**** Disable udevd - /sys is mounted RO ****";
|
||||||
is_privileged=true
|
|
||||||
umount "${tmp_mount}"
|
|
||||||
else
|
|
||||||
is_privileged=false
|
|
||||||
fi
|
|
||||||
rm -rf "${tmp_mount}"
|
|
||||||
|
|
||||||
|
|
||||||
if [[ "${is_privileged}" == "true" ]]; then
|
|
||||||
# Since this container may also be run with CAP_SYS_ADMIN, ensure we can actually execute "udevadm trigger"
|
|
||||||
if [ ! -w /sys ]; then
|
|
||||||
# Disable supervisord script since we are not able to write to sysfs
|
|
||||||
echo "**** Disable udev - /sys is mounted RO ****";
|
|
||||||
sed -i 's|^autostart.*=.*$|autostart=false|' /etc/supervisor.d/udev.ini
|
|
||||||
elif [ ! -w /run/udev ]; then
|
|
||||||
# Disable supervisord script since we are not able to write to udev/data path
|
|
||||||
echo "**** Disable udev - /run/udev is mounted RO ****";
|
|
||||||
sed -i 's|^autostart.*=.*$|autostart=false|' /etc/supervisor.d/udev.ini
|
|
||||||
elif udevadm trigger &> /dev/null; then
|
|
||||||
echo "**** Configure container to run udev management ****";
|
|
||||||
# Enable supervisord script
|
|
||||||
sed -i 's|^autostart.*=.*$|autostart=true|' /etc/supervisor.d/udev.ini
|
|
||||||
# Configure udev permissions
|
|
||||||
if [[ -f /lib/udev/rules.d/60-steam-input.rules ]]; then
|
|
||||||
sed -i 's/MODE="0660"/MODE="0666"/' /lib/udev/rules.d/60-steam-input.rules
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# Disable supervisord script since we are not able to execute "udevadm trigger"
|
|
||||||
echo "**** Disable udev service due to privilege restrictions ****";
|
|
||||||
sed -i 's|^autostart.*=.*$|autostart=false|' /etc/supervisor.d/udev.ini
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# Disable supervisord script
|
|
||||||
echo "**** Disable udev service ****";
|
|
||||||
sed -i 's|^autostart.*=.*$|autostart=false|' /etc/supervisor.d/udev.ini
|
sed -i 's|^autostart.*=.*$|autostart=false|' /etc/supervisor.d/udev.ini
|
||||||
if [ ! -d /run/udev/data ]; then
|
run_dumb_udev="true"
|
||||||
echo "**** Enable dumb-udev service ****";
|
elif [ ! -d /run/udev ]; then
|
||||||
sed -i 's|^autostart.*=.*$|autostart=true|' /etc/supervisor.d/dumb-udev.ini
|
# Disable supervisord script since we are not able to write to udev/data path
|
||||||
|
echo "**** Disable udevd - /run/udev does not exist ****";
|
||||||
|
sed -i 's|^autostart.*=.*$|autostart=false|' /etc/supervisor.d/udev.ini
|
||||||
|
run_dumb_udev="true"
|
||||||
|
elif [ ! -w /run/udev ]; then
|
||||||
|
# Disable supervisord script since we are not able to write to udev/data path
|
||||||
|
echo "**** Disable udevd - /run/udev is mounted RO ****";
|
||||||
|
sed -i 's|^autostart.*=.*$|autostart=false|' /etc/supervisor.d/udev.ini
|
||||||
|
run_dumb_udev="false"
|
||||||
|
elif udevadm trigger &> /dev/null; then
|
||||||
|
echo "**** Configure container to run udev management ****";
|
||||||
|
# Enable supervisord script
|
||||||
|
sed -i 's|^autostart.*=.*$|autostart=true|' /etc/supervisor.d/udev.ini
|
||||||
|
# Configure udev permissions
|
||||||
|
if [[ -f /lib/udev/rules.d/60-steam-input.rules ]]; then
|
||||||
|
sed -i 's/MODE="0660"/MODE="0666"/' /lib/udev/rules.d/60-steam-input.rules
|
||||||
fi
|
fi
|
||||||
|
run_dumb_udev="false"
|
||||||
|
else
|
||||||
|
# Disable supervisord script since we are not able to execute "udevadm trigger"
|
||||||
|
echo "**** Disable udev service due to privilege restrictions ****";
|
||||||
|
sed -i 's|^autostart.*=.*$|autostart=false|' /etc/supervisor.d/udev.ini
|
||||||
|
run_dumb_udev="true"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${run_dumb_udev}" = "true" ]; then
|
||||||
|
# Enable dumb-udev instead of udevd
|
||||||
|
echo "**** Enable dumb-udev service ****";
|
||||||
|
sed -i 's|^command.*=.*$|command=start-dumb-udev.sh|' /etc/supervisor.d/udev.ini
|
||||||
|
sed -i 's|^autostart.*=.*$|autostart=true|' /etc/supervisor.d/udev.ini
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
|
|
||||||
[program:udev]
|
|
||||||
priority=10
|
|
||||||
autostart=false
|
|
||||||
autorestart=true
|
|
||||||
user=root
|
|
||||||
directory=/
|
|
||||||
command=start-dumb-udev.sh
|
|
||||||
stopsignal=INT
|
|
||||||
stdout_logfile=/var/log/supervisor/dumb-udev.log
|
|
||||||
stdout_logfile_maxbytes=10MB
|
|
||||||
stdout_logfile_backups=7
|
|
||||||
stderr_logfile=/var/log/supervisor/dumb-udev.err.log
|
|
||||||
stderr_logfile_maxbytes=10MB
|
|
||||||
stderr_logfile_backups=7
|
|
||||||
@@ -28,7 +28,7 @@ wait_for_x() {
|
|||||||
wait_for_udev() {
|
wait_for_udev() {
|
||||||
MAX=10
|
MAX=10
|
||||||
CT=0
|
CT=0
|
||||||
while [ ! -f /tmp/.started-udev ]; do
|
while [ ! -e /run/udev/control ]; do
|
||||||
sleep 1
|
sleep 1
|
||||||
CT=$(( CT + 1 ))
|
CT=$(( CT + 1 ))
|
||||||
if [ "$CT" -ge "$MAX" ]; then
|
if [ "$CT" -ge "$MAX" ]; then
|
||||||
@@ -36,6 +36,7 @@ wait_for_udev() {
|
|||||||
exit 11
|
exit 11
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
sleep 5
|
||||||
}
|
}
|
||||||
|
|
||||||
# Wait for dockerd to start
|
# Wait for dockerd to start
|
||||||
|
|||||||
@@ -17,18 +17,10 @@ _term() {
|
|||||||
trap _term SIGTERM SIGINT
|
trap _term SIGTERM SIGINT
|
||||||
|
|
||||||
|
|
||||||
# CONFIGURE:
|
|
||||||
# Remove lockfile
|
|
||||||
rm -f /tmp/.started-udev
|
|
||||||
|
|
||||||
|
|
||||||
# EXECUTE PROCESS:
|
# EXECUTE PROCESS:
|
||||||
# Start dumb-udev
|
# Start dumb-udev
|
||||||
dumb-udev
|
dumb-udev &
|
||||||
dumb_udev_pid=$!
|
dumb_udev_pid=$!
|
||||||
# Touch lockfile
|
|
||||||
sleep 1
|
|
||||||
touch /tmp/.started-udev
|
|
||||||
|
|
||||||
# WAIT FOR CHILD PROCESS:
|
# WAIT FOR CHILD PROCESS:
|
||||||
wait "$dumb_udev_pid"
|
wait "$dumb_udev_pid"
|
||||||
|
|||||||
@@ -16,12 +16,6 @@ _term() {
|
|||||||
}
|
}
|
||||||
trap _term SIGTERM SIGINT
|
trap _term SIGTERM SIGINT
|
||||||
|
|
||||||
|
|
||||||
# CONFIGURE:
|
|
||||||
# Remove lockfile
|
|
||||||
rm -f /tmp/.started-udev
|
|
||||||
|
|
||||||
|
|
||||||
# EXECUTE PROCESS:
|
# EXECUTE PROCESS:
|
||||||
# Start udev
|
# Start udev
|
||||||
if command -v udevd &>/dev/null; then
|
if command -v udevd &>/dev/null; then
|
||||||
@@ -32,9 +26,6 @@ fi
|
|||||||
# Monitor kernel uevents
|
# Monitor kernel uevents
|
||||||
udevadm monitor &
|
udevadm monitor &
|
||||||
monitor_pid=$!
|
monitor_pid=$!
|
||||||
# Touch lockfile
|
|
||||||
sleep 1
|
|
||||||
touch /tmp/.started-udev
|
|
||||||
# Wait for 10 seconds, then request device events from the kernel
|
# Wait for 10 seconds, then request device events from the kernel
|
||||||
sleep 10
|
sleep 10
|
||||||
udevadm trigger
|
udevadm trigger
|
||||||
|
|||||||
Reference in New Issue
Block a user