From 6c1b5665723dc977f5c44201ebff1908120eba6f Mon Sep 17 00:00:00 2001 From: Steven Seifried Date: Thu, 13 Jan 2022 20:04:10 +0100 Subject: [PATCH] Added lxc-autodev.sh --- lxc-autodev.sh | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 lxc-autodev.sh diff --git a/lxc-autodev.sh b/lxc-autodev.sh new file mode 100644 index 0000000..8eb7f64 --- /dev/null +++ b/lxc-autodev.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash + +while true; do + printf "Did you replaced 100 with your LXC ID?\n" + read -p "Proceed(y/n)?" yn + case $yn in + [Yy]* ) break;; + [Nn]* ) exit;; + * ) echo "Please answer yes or no.";; + esac +done + +set -o errexit +set -o errtrace +set -o nounset +set -o pipefail +shopt -s expand_aliases +alias die='EXIT=$? LINE=$LINENO error_exit' +trap die ERR +trap cleanup EXIT + +function error_exit() { + trap - ERR + local DEFAULT='Unknown failure occured.' + local REASON="\e[97m${1:-$DEFAULT}\e[39m" + local FLAG="\e[91m[ERROR] \e[93m$EXIT@$LINE" + msg "$FLAG $REASON" + exit $EXIT +} +function msg() { + local TEXT="$1" + echo -e "$TEXT" +} +function cleanup() { + popd >/dev/null + rm -rf $TEMP_DIR +} +TEMP_DIR=$(mktemp -d) +pushd $TEMP_DIR >/dev/null + +CHAR_DEVS+=("1:1") +CHAR_DEVS+=("4:\([3-9]\|[1-5][0-9]\|6[0-3]\)") +CHAR_DEVS+=("4:\(6[4-9]\|[7-9][0-9]\|1[0-9][0-9]\|2[0-4][0-9]\|25[0-5]\)") +CHAR_DEVS+=("10:200") +CHAR_DEVS+=("116:.*") +CHAR_DEVS+=("166:.*") +CHAR_DEVS+=("180:\([0-9]\|1[0-5]\)") +CHAR_DEVS+=("188:.*") +CHAR_DEVS+=("189:.*") +CHAR_DEVS+=("24[0-2]:.*") + +for char_dev in ${CHAR_DEVS[@]}; do + [ ! -z "${CHAR_DEV_STRING-}" ] && CHAR_DEV_STRING+=" -o" + CHAR_DEV_STRING+=" -regex \".*/${char_dev}\"" +done + +read -r -d '' HOOK_SCRIPT <<- EOF || true +for char_dev in \$(find /sys/dev/char -regextype sed $CHAR_DEV_STRING); do + dev="/dev/\$(sed -n "/DEVNAME/ s/^.*=\(.*\)$/\1/p" \${char_dev}/uevent)"; + mkdir -p \$(dirname \${LXC_ROOTFS_MOUNT}\${dev}); + for link in \$(udevadm info --query=property \$dev | sed -n "s/DEVLINKS=//p"); do + mkdir -p \${LXC_ROOTFS_MOUNT}\$(dirname \$link); + cp -dpR \$link \${LXC_ROOTFS_MOUNT}\${link}; + done; + cp -dpR \$dev \${LXC_ROOTFS_MOUNT}\${dev}; +done; +EOF +HOOK_SCRIPT=${HOOK_SCRIPT//$'\n'/} + +CTID=$1 +CTID_CONFIG_PATH=/etc/pve/lxc/${CTID}.conf +sed '/autodev/d' $CTID_CONFIG_PATH >CTID.conf +cat CTID.conf >$CTID_CONFIG_PATH + +cat <> $CTID_CONFIG_PATH +lxc.autodev: 1 +lxc.hook.autodev: bash -c '$HOOK_SCRIPT' +EOF