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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
|
# Copyright (c) 2003..2006 - RZ Uni Freiburg
# Copyright (c) 2006..2011 - OpenSLX GmbH
#
# This program/file is free software distributed under the GPL version 2.
# See http://openslx.org/COPYING
#
# If you have any feedback please consult http://openslx.org/feedback and
# send your feedback to feedback@openslx.org
#
# General information about OpenSLX can be found under http://openslx.org
#
# Configuration script for general Ubuntu to configure OpenSLX Linux
# stateless clients (executed within initial ramdisk after genconfig)
# distro specific configuration variables used in the setup functions
# (formerly done via config-*, these variables are disputable ...)
# D_ETCEXCL - list of files, wildcards to be excluded from /etc when using
# bind mounts
# D_DIRINBINDMNT - lists of directories to be created in bind mounted rw part
# of the client filesystem
# D_RODIRSINRW - ReadOnly Directories in RW part of filesystem to save on
# TempFS usage
# D_DIRINDXS - directories in client filesystem which should be present anyhow
D_BINDMPTS="tmp root home media"
D_DIRINBINDMNT="/var/run /var/log /var/tmp /var/lib/gdm"
D_RODIRSINRW="/etc/X11/xkb /var/lib/gconf /var/lib/dpkg /var/lib/aspell \
/var/lib/pango /var/lib/defoma /var/cache/fontconfig /var/lib/dkms"
# creating required(?) directories like /var/run/sysconfig/tmp or
# /var/run/console does not make much sense here as they get overmounted,
# see ticket #813
D_DIRINDXS="/var/lib/nobody /var/lib/misc /var/lib/pam \
/var/lib/bluetooth /var/lib/texmf /var/lib/nfs/sm /var/lib/acpi_support \
/var/spool/cron /var/lib/alsa"
# distro specific stuff to initialize
postinit () {
if [ $DEBUGLEVEL -gt 3 ]; then
export DEBUG_UPSTART=" -v --debug"
fi
}
config_netconsole () {
local MY_IP=$1
local MY_OLDDEV=$2
local MY_DEV=$3
local T_IP=$4
local T_MAC=$(arp -n |grep $T_IP| awk '{print $5}')
# FIXME: we need to set a valid ip for ethx if we use the bridge config
# from the virtualization plugins
[ "$MY_OLDDEV" = "$MY_DEV" ] || ip a a $MY_IP dev $MY_OLDDEV
modprobe netconsole netconsole=4444@$MY_IP/$MY_OLDDEV,514@$T_IP/$T_MAC
dmesg -n 8
}
# distro specific function called from servconfig script
config_distro () {
# runlevel system changed significantly compared to pre 9.10 sys-v-init
# clean up nevertheless
for dir in rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rcS.d ; do
rm -rf /mnt/etc/${dir}/*
done
# remove unneeded init scripts (stuff handled in stage3 which would
# interface with already existing setup)
# copy all event scripts to a special directory
testmkd /mnt/etc/init.inactive
echo -e "# This directory was created in OpenSLX stage3 and contains all \
disabled\n# upstart scripts. They are moved by servconfig to init if this is \
required." >/mnt/etc/init.inactive/README
mv /mnt/etc/init/* /mnt/etc/init.inactive
# remove plymouth component from *dm.conf (not needed with splashy)
sed "/# Check kernel c/,/done/d" -i /mnt/etc/init.inactive/*dm.conf
# copy initial upstart scripts back
for file in alsa-mixer-save control-alt-delete console-setup dbus \
dmesg hwclock hwclock-save irqbalance module-init-tools \
mountall mounted* networking procps rc* tty* udev* \
upstart-socket-bridge upstart-udev-bridge ; do
mv /mnt/etc/init.inactive/${file}.conf /mnt/etc/init >/dev/null 2>&1
done
# remove annoying udev rule set for changing eth interface and cd/dvds
rm /mnt/etc/udev/rules.d/*persistent*.rules >/dev/null 2>&1
# for screen sessions
testmkd /mnt/var/run/screen root:utmp 0777
# apt stuff
testmkd /mnt/var/cache/apt/archives/partial
# add the slx specific path (/var/opt/openslx/bin) to the PATH variable
echo -e "# stuff generated by $0 (out of InitRamFS written $date)\n\
export PATH=\"\$PATH:/var/opt/openslx/bin\"" >>/mnt/etc/profile
}
# initial boot looks different since ubuntu upstart
# (executed after plugin config in stage3)
initial_boot () {
# fix depenencies of upstart files (remove network stuff)
upstart_set_starton rc-sysinit filesystem
upstart_set_starton autofs filesystem
upstart_set_starton portmap filesystem
}
upstart_set_starton () {
local script="$1"
local starton="$2"
local file_not_found="f"
if [ -e /mnt/etc/init.inactive/${script}.conf ]; then
local script_path=/mnt/etc/init.inactive/${script}.conf
elif [ -e /mnt/etc/init/${script}.conf ]; then
local script_path=/mnt/etc/init/${script}.conf
else
local file_not_found="t"
fi
if [ "$file_not_found" = "f" ]; then
# replace multi-line dependencies with ##starton##
sed -n '1h;1!H;${;g;s/start on[\t ]*([^)]*)/start on ##starton##/g;p;}' \
-i $script_path
# replace single-line dependencies with ##starton##
sed -e 's/start on.*$/start on ##starton##/' \
-i $script_path
# replace placeholder with our new value
sed -e "s,##starton##,$starton," \
-i $script_path
else
error "Script: ${script} does not exist. Skipping modification.." nonfatal}
fi
}
# runlevel linker - mostly deprecated in the old form because of new upstart
# mechanism (with backward compatibility)
rllinker () {
local script="$1"
# activating the new way, check if a appropriate script is available, else
# try the traditional approach
if [ -e /mnt/etc/init.inactive/${script}.conf -o -e /mnt/etc/init/${script}.conf ]; then
# we have upstart scripts
if [ -e /mnt/etc/init.inactive/${script}.conf ] ; then
mv /mnt/etc/init.inactive/${script}.conf /mnt/etc/init
fi
elif [ -e /mnt/etc/init.d/${script} ]; then
# we old rc scripts
if [ -e /mnt/etc/init.d/${script} -a -n "$1" -a -n "$2" ] ; then
if [ $2 -lt 10 ] ; then
local start="0$2"; else local start="$2"
fi
if [ $3 -lt 10 ] ; then
local stop="0$3"; else local stop="$3"
fi
for i in rc2.d/K$stop$script rc3.d/K$stop$script \
rc2.d/S$start$script rc3.d/S$start$script ; do
ln -sf ../init.d/$script /mnt/etc/$i
[ "$DEBUGLEVEL" == 5 ] && echo "Linked $script"
done
fi
else
error "Script: ${script} does not exist. Skipping setup of startscipts/events.." nonfatal
fi
}
# set up localization like keytable, console
dlocale () {
# fixme -- use keytable setup script here
# echo -e "\t# entries added by $0: $date" >> /mnt/etc/init.d/boot.slx
sed -e "1i# File modified during SLX stage3 bootup (config_distro)" \
-e "s/LANG.*/LANG=\"${LANG}\"/" -i /mnt/etc/default/locale
echo "LC_ALL=\"${LANG}\"" >> /mnt/etc/default/locale
echo "LANGUAGE=\"${LANG}:en\"" >> /mnt/etc/default/locale
echo "LC_ALL=\"${LANG}\"" >> /mnt/etc/environment
}
# function for ntp configuration
config_ntp () {
if [ -f /mnt/etc/init.d/ntp -a "x$start_ntp" != "xno" ] ; then
echo -e "ntp:x:74:65534:NTP daemon:/var/lib/ntp:/bin/false" \
>>/mnt/etc/passwd
# testmkd /mnt/var/lib/ntp/var/run/ntp # see #813
fi
}
# function for atd
config_atd () {
if [ "x$start_atd" = "xyes" ]; then
# testmkd /mnt/var/spool/atjobs
# testmkd /mnt/var/spool/atspool
# chown 1:1 /mnt/var/spool/atjobs /mnt/var/spool/atspool
if [ -f /mnt/etc/init.inactive/atd ] ; then
mv /mnt/etc/init.inactive/atd /mnt/etc/init
else
error "$df_erratd" nonfatal
fi
fi
}
# function for configuration of cron services (fixme: to be moved to a plugin?)
config_cron () {
if [ "x$start_cron" = "xyes" ] ; then
if [ -f /mnt/etc/init.inactive/anacron ] ; then
mv /mnt/etc/init.inactive/anacron /mnt/etc/init
# fixme! check for proper permissions!
testmkd /mnt/var/spool/crontabs
echo -e "# /etc/crontab - file generated by $0:\n\
#\t$date\nSHELL=/bin/sh\nPATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin\
\nMAILTO=\n-*/15 * * * *\troot\ttest -x /usr/lib/cron/run-crons && \
/usr/lib/cron/run-crons >/dev/null 2>&1\n" >/mnt/etc/crontab
else
error "$df_errcron" nonfatal
fi
fi
}
# secure shell service
config_sshd () {
if [ "x$start_sshd" = "xyes" ] ; then
if [ -f /mnt/etc/init.inactive/ssh.conf ] ; then
# testmkd /mnt/var/run/sshd # see #813
mv /mnt/etc/init.inactive/ssh.conf /mnt/etc/init
else
error "$df_errsshd" nonfatal
fi
fi
}
# snmp agent for remote monitoring (upstart functionality unchecked)
config_snmp () {
if [ "x$start_snmp" = "xyes" ] ; then
if [ -f /mnt/etc/init.inactive/snmpd.conf ] ; then
testmkd /mnt/var/lib/net-snmp
mv /mnt/etc/init.inactive/snmpd.conf /mnt/etc/init
else
# fixme!!
# write service monitor depending on services started
:
fi
fi
}
# acpi and powersave
config_acpi () {
if [ -f /mnt/etc/init.inactive/acpid.conf ] ; then
mv /mnt/etc/init.inactive/acpid.conf /mnt/etc/init
else
# fixme!!
# write service monitor depending on services started
:
fi
}
# configure hal, dbus, policykitd and services like that
config_dreshal () {
if [ "x$start_dreshal" = "xyes" ]; then
testmkd /mnt/var/lib/dbus
testmkd /mnt/var/lib/misc
testmkd /mnt/var/cache/hald
rm -rf /mnt/etc/dbus-1/system.d/*etwork*anager.conf \
/mnt/etc/dbus-1/system.d/nm-* \
/mnt/etc/dbus-1/event.d/*NetworkManager*
sed -i /mnt/etc/dbus-1/system.d/hal.conf \
-e "s/^\([^d]*\)deny\(.*Volume.*\)/\1allow\2/"
for dir in 10-vendor.d 20-org.d 30-site.d 50-local.d 90-mandatory.d ; do
testmkd /mnt/var/lib/polkit-1/localauthority/${dir}
done
fi
}
# initialize boot.slx - skript to be executed during early system startup
# (before most of the normal boot init scripts)
# this script should operate like a normal runlevel script (fixme!!)
d_mkrlscript () {
local switch="$1"
local name="$2"
local info="$3"
# ToDo: needs to be adapted to upstart mechanism
case "$switch" in
init)
echo -e "#!/bin/sh\n# skeleton of /etc/init.d/$name written \
from $0\n# after you applied changes to the creation scripts you have to \
rerun\n# the mkdxsinitrd script to get them applied\n\n\
. /lib/lsb/init-functions\n" >/mnt/etc/init.d/$name
echo -e "\n\ncase \"\$1\" in\n start)\n\tlog_begin_msg \"$info\"" \
>>/mnt/etc/init.d/$name
chmod u+x /mnt/etc/init.d/$name
;;
entry)
echo -e "\t${info}" >>/mnt/etc/init.d/${name}
;;
close)
echo -e "\tlog_end_msg 0\n\t;;\n stop)\n\t;;\nesac\nexit 0" \
>>/mnt/etc/init.d/$name
;;
esac
}
# configure automounter (unchecked)
config_automount () {
if [ -f /mnt/etc/init.inactive/autofs.conf ] ; then
mv /mnt/etc/init.inactive/autofs.conf /mnt/etc/init
testmkd /mnt/var/lock/subsys
sed -e "1i# /etc/default/autofs - file modified by\n#\t$0:\n#" \
-e "s,TIMEOUT.*,TIMEOUT=60," -i /mnt/etc/default/autofs
config_portmap
config_nfs
fi
}
# start portmapper (needed at least for nfsN and nis services)
config_portmap () {
if [ -f /mnt/etc/init.inactive/portmap.conf ]; then
mv /mnt/etc/init.inactive/portmap.conf /mnt/etc/init
mv /mnt/etc/init.inactive/statd.conf /mnt/etc/init
else
error "$df_errpmap" nonfatal
fi
}
# mostly unused yet (needs to be properly integrated)
config_nfs () {
[ -e /mnt/etc/init.inactive/gssd.conf ] && \
mv /mnt/etc/init.inactive/gssd.conf /mnt/etc/init
[ -e /mnt/etc/init.inactive/rpc_pipefs.conf ] && \
mv /mnt/etc/init.inactive/rpc_pipefs.conf /mnt/etc/init
[ -e /mnt/etc/init.inactive/idmapd.conf ] && \
mv /mnt/etc/init.inactive/idmapd.conf /mnt/etc/init
}
# start NIS (unchecked!! fixme - does the service is really named ypbind??)
config_nis () {
if [ -f /mnt/etc/init.inactive/ypbind.conf ] ; then
mv /mnt/etc/init.inactive/ypbind.conf /mnt/etc/init
config_portmap
testmkd /mnt/var/yp/nicknames
else
error "$df_erryp" nonfatal
fi
}
# name service caching daemon (really existing!?)
config_nscd () {
# if upstart compatible
if [ -f /mnt/etc/init.inactive/nscd.conf ] ; then
testmkd /mnt/var/cache/nscd
# otherwise the old method
elif [ -f /mnt/etc/init.d/nscd ] ; then
ln -sf /etc/init.d/nscd /mnt/etc/rc2.d/S10nscd
ln -sf /etc/init.d/nscd /mnt/etc/rc3.d/S10nscd
fi
}
|