summaryrefslogtreecommitdiff
path: root/debian/local/setup-translators
blob: ebebf5dc5169db4807b4698191e551f60d730d15 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#!/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 -6 /servers/socket/26' inet
st socket/inet  '/hurd/symlink 2'  '(+link)'
st socket/26 '/hurd/pfinet -4 /servers/socket/2' inet6
st socket/inet6 '/hurd/symlink 26' '(+link)'
st /proc '/hurd/procfs -c'
touch startup 2> /dev/null

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 .