diff options
Diffstat (limited to 'debian/local/setup-translators')
-rwxr-xr-x | debian/local/setup-translators | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/debian/local/setup-translators b/debian/local/setup-translators new file mode 100755 index 00000000..d4ddd892 --- /dev/null +++ b/debian/local/setup-translators @@ -0,0 +1,163 @@ +#!/bin/sh +# Set up device nodes and /servers translators. +# +# Use cases: +# - from d-i's /libexec/runsystem, to create a minimal set of device nodes +# and translators for the installer environment; +# - from debootstrap on initial installation, to create device and server +# nodes before /dev and /servers are firmlinked to the host system. +# - from hurd.postinst, on upgrade, where only non-existant nodes should be +# created, and the other ones should be left alone. + + +PATH=/bin:/sbin:/usr/bin:/usr/sbin +export PATH + +usage () { +cat >&2 <<EOU +Usage: $0 [OPTIONS] +Set up device nodes and /servers translators. + + -k, --keep-active Keep active translators running + -K, --keep-all Don't even set passive translators on existing files + -m, --minimal Create a minimal subset of nodes only + -p, --parted Prefer parted stores for partition devices + +At least one of -k or -K must be given. +EOU +} + +# Parse command-line arguments +REPLACE= +MDFLAGS= +MINIMAL= +while [ $# -gt 0 ]; do + case "$1" in + -k|--keep-active) + MDFLAGS="$MDFLAGS -k" + REPLACE=y + shift;; + -K|--keep-all) + MDFLAGS="$MDFLAGS -K" + REPLACE=n + shift;; + -m|--minimal) + MINIMAL=y + shift;; + -p|--parted) + MDFLAGS="$MDFLAGS -p" + shift;; + *) + usage + exit 1;; + esac +done + +if [ -z "$REPLACE" ]; then + usage + exit 1 +fi + +# Usage: foldsubst <pat> xxxx yyyy zzzz ... +# <pat> is substituted for every character of xxxx with sed, the character in +# question being accessible as a '\0' in <pat>, and the result is used as the +# new pattern to handle the remaining arguments. +foldsubst () { + [ "$2" ] || { echo $1; return; } + expanded=$(echo "$2" | sed "s/./ $1/g"); shift 2 + foldsubst "$expanded" $@; +} + +# Verbosely attach a translator. +st () { + node=$1 + cmdl=$2 + name=${3:-$cmdl} + + echo -n " $name" + if [ "$REPLACE" = y ] || ! showtrans $1 > /dev/null 2>&1 ; then + # Work around a bug in ext2fs, which crashes if a non-empty + # file is turned into a symlink through settrans, by clearing + # the passive translator first. + settrans -ck $node + settrans -ck $node $cmdl + fi +} + +# Verbosely create device nodes, with some help from foldsubst. +md () { + pattern=$1; shift + sedrepl=$(echo $pattern | sed -e 's/X/\\0/' -e 's/Y/\\\\0/') + devs=$(foldsubst "$sedrepl" $@) + + echo -n " $pattern" + /sbin/MAKEDEV $MDFLAGS $devs +} + + +echo -n "Setting up translators:" +cd /servers +mkdir -p socket + +st exec /hurd/exec +st default-pager /hurd/proxy-defpager +st socket/1 /hurd/pflocal +st socket/local '/hurd/symlink 1' '(+link)' +st socket/2 /hurd/pfinet +st socket/inet '/hurd/symlink 2' '(+link)' +st socket/inet6 '/hurd/symlink 26' '(+link)' +st /proc '/hurd/procfs -c' + +if [ -z "$MINIMAL" ]; then + st password /hurd/password + st crash-kill '/hurd/crash --kill' crash-kill + st crash-suspend '/hurd/crash --suspend' crash-suspend + st crash-dump-core '/hurd/crash --dump-core' crash-dump-core + st crash '/hurd/symlink crash-kill' crash +fi + +echo . + + +echo -n "Creating device nodes:" +cd /dev + +md fd +md fdX 01 +md std +md vcs +md hdX 012345 +md hdXsY 012345 123456789 +md hdXs1Y 012345 0123456 +md sdX 012345 +md sdXsY 012345 123456789 +md sdXs1Y 012345 0123456 +md cdX 01 +md netdde +md ethX 0123 + +if [ "$MINIMAL" ]; then + md loopX 0123 + md ttyX 1234 + md ptypX 0123 + md comX 0123 + st random /hurd/random random + st urandom /hurd/random urandom +else + md loopX 01234567 + md ttyX 123456 + md ptyp + md ptyq + md lprX 012 + md comX 0123 + st random /etc/alternatives/random.sh random + st urandom /etc/alternatives/urandom.sh urandom +fi + +st kbd '/hurd/symlink cons/kbd' kbd +st mouse '/hurd/symlink cons/mouse' mouse +[ -d shm ] && ! [ -L shm ] && rmdir shm +st shm '/hurd/symlink /run/shm' shm + +echo . + |