From 89e85397dda2e5c40ec0c306a162d71512524383 Mon Sep 17 00:00:00 2001 From: "Josh.5" Date: Fri, 14 Jan 2022 09:21:45 +1300 Subject: [PATCH] Add udev to container --- devops/run_server.sh | 3 +- overlay/etc/cont-init.d/30-configure_udev.sh | 41 ++++++++++++++++++++ overlay/etc/supervisor/conf.d/udev.conf | 11 ++++++ overlay/usr/bin/start-udev.sh | 23 +++++++++++ 4 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 overlay/etc/cont-init.d/30-configure_udev.sh create mode 100644 overlay/etc/supervisor/conf.d/udev.conf create mode 100644 overlay/usr/bin/start-udev.sh diff --git a/devops/run_server.sh b/devops/run_server.sh index 08f89d4..cf4bf1e 100755 --- a/devops/run_server.sh +++ b/devops/run_server.sh @@ -5,7 +5,7 @@ # File Created: Saturday, 8th January 2022 2:34:23 pm # Author: Josh.5 (jsunnex@gmail.com) # ----- -# Last Modified: Friday, 14th January 2022 8:45:04 am +# Last Modified: Friday, 14th January 2022 8:53:16 am # Modified By: Josh.5 (jsunnex@gmail.com) ### @@ -124,7 +124,6 @@ docker run -d --name="${container_name}" \ -v "${project_base_path}/config/home/default-${container_name}":"/home/default":"rw" \ -v "/tmp/":"/tmp/":"rw" \ -v /dev/input:/dev/input:ro \ - -v /run/udev:/run/udev:ro \ --hostname="${container_name}" \ --shm-size=2G \ ${additional_docker_params} \ diff --git a/overlay/etc/cont-init.d/30-configure_udev.sh b/overlay/etc/cont-init.d/30-configure_udev.sh new file mode 100644 index 0000000..cabc163 --- /dev/null +++ b/overlay/etc/cont-init.d/30-configure_udev.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash +### +# File: 30-configure_udev.sh +# Project: cont-init.d +# File Created: Friday, 12th January 2022 8:54:01 am +# Author: Josh.5 (jsunnex@gmail.com) +# ----- +# Last Modified: Friday, 14th January 2022 9:21:11 am +# Modified By: Josh.5 (jsunnex@gmail.com) +### + +# Running udev only works in privileged container +# Source: https://github.com/balena-io-playground/balena-base-images/ +tmp_mount='/tmp/privileged_test' +mkdir -p "${tmp_mount}" +if mount -t devtmpfs none "${tmp_mount}" &> /dev/null; then + is_privileged=true + umount "${tmp_mount}" +else + is_privileged=false +fi +rm -rf "${tmp_mount}" + + +if [[ "${is_privileged}" == "true" ]]; then + echo "**** Configure container to run udev management ****"; + # Enable supervisord script + sed -i 's|^autostart.*=.*$|autostart=true|' /etc/supervisor/conf.d/udev.conf + # Make startup script executable + chmod +x /usr/bin/start-udev.sh + # Configure udev permissions + sed -i 's/MODE="0660"/MODE="0666"/' /lib/udev/rules.d/60-steam-input.rules +else + # Disable supervisord script + sed -i 's|^autostart.*=.*$|autostart=false|' /etc/supervisor/conf.d/udev.conf +fi + + +echo "**** Ensure the default user has the correct permissions on input devices ****"; +chmod +x /usr/bin/ensure-groups +/usr/bin/ensure-groups /dev/uinput /dev/input/event* diff --git a/overlay/etc/supervisor/conf.d/udev.conf b/overlay/etc/supervisor/conf.d/udev.conf new file mode 100644 index 0000000..53c0b6b --- /dev/null +++ b/overlay/etc/supervisor/conf.d/udev.conf @@ -0,0 +1,11 @@ + +[program:udev] +autostart=false +priority=10 +directory=/ +command=/usr/bin/start-udev.sh +user=root +autorestart=true +stopsignal=QUIT +stdout_logfile=/var/log/supervisor/udev.log +stderr_logfile=/var/log/supervisor/udev.err diff --git a/overlay/usr/bin/start-udev.sh b/overlay/usr/bin/start-udev.sh new file mode 100644 index 0000000..84bdd95 --- /dev/null +++ b/overlay/usr/bin/start-udev.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +### +# File: start-xorg.sh +# Project: bin +# File Created: Tuesday, 12th January 2022 8:46:47 am +# Author: Josh.5 (jsunnex@gmail.com) +# ----- +# Last Modified: Friday, 14th January 2022 9:21:00 am +# Modified By: Josh.5 (jsunnex@gmail.com) +### + +# Start udev +# Source: https://github.com/balena-io-playground/balena-base-images/ +if command -v udevd &> /dev/null; then + unshare --net udevd --daemon &> /dev/null +else + unshare --net /lib/systemd/systemd-udevd --daemon &> /dev/null +fi +udevadm trigger &> /dev/null + + +# Monitry kernel uevents +udevadm monitor