diff options
Diffstat (limited to 'debian/local/setup-translators')
-rwxr-xr-x | debian/local/setup-translators | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/debian/local/setup-translators b/debian/local/setup-translators new file mode 100755 index 00000000..4a019fcd --- /dev/null +++ b/debian/local/setup-translators @@ -0,0 +1,162 @@ +#!/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 /hurd/$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 exec +st default-pager proxy-defpager +st socket/1 pflocal +st socket/local 'symlink 1' '(+link)' +st socket/2 pfinet +st socket/inet 'symlink 2' '(+link)' +st socket/inet6 'symlink 26' '(+link)' +st /proc 'procfs -c' + +if [ -z "$MINIMAL" ]; then + st password password + st crash-kill 'crash --kill' crash-kill + st crash-suspend 'crash --suspend' crash-suspend + st crash-dump-core 'crash --dump-core' crash-dump-core + st crash 'symlink crash-kill' crash +fi + +echo . + + +echo -n "Creating device nodes:" +cd /dev + +md fd +md fdX 01 +md std +md vcs +md hdX 0123 +md hdXsY 0123 123456789 +md hdXs1Y 0123 0123456 +md sdX 0123 +md sdXsY 0123 123456789 +md sdXs1Y 0123 0123456 +md cdX 01 + +if [ "$MINIMAL" ]; then + md loopX 0123 + md ttyX 1234 + md ptypX 0123 + md comX 0123 +else + md loopX 01234567 + md ttyX 123456 + md ptyp + md ptyq + md lprX 0123 + md comX 0123 + st random-hurd 'random --seed-file /var/spool/random-seed' random + st urandom-hurd 'random --seed-file /var/spool/random-seed --fast' urandom +fi + +st kbd 'symlink cons/kbd' kbd +st mouse 'symlink cons/mouse' mouse +st shm 'symlink /run/shm' shm + +# until we properly start /etc/rcS.d +mkdir -p /run/lock /run/shm +chmod 1777 /run/lock /run/shm + +echo . + |