summaryrefslogtreecommitdiff
path: root/debian/local/setup-translators
diff options
context:
space:
mode:
Diffstat (limited to 'debian/local/setup-translators')
-rwxr-xr-xdebian/local/setup-translators163
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 .
+