1 |
beyerle@PS |
1 |
#!/bin/bash
|
|
|
2 |
#
|
|
|
3 |
# Fix things during bootup - run last
|
|
|
4 |
#
|
|
|
5 |
# Urs Beyerle, PSI
|
|
|
6 |
#
|
|
|
7 |
|
|
|
8 |
### -----------------------------------------------------------
|
|
|
9 |
### definitions
|
|
|
10 |
### -----------------------------------------------------------
|
|
|
11 |
|
|
|
12 |
# dir of mounted live system: /$MOUNTDIR/live
|
|
|
13 |
MOUNTDIR=livecd
|
|
|
14 |
|
|
|
15 |
# source functions
|
|
|
16 |
. /$MOUNTDIR/live/liblinuxlive
|
|
|
17 |
. /etc/init.d/functions
|
|
|
18 |
|
71 |
beyerle@PS |
19 |
# defaults for xorg.conf
|
|
|
20 |
XORG_CONF=/etc/X11/xorg.conf
|
73 |
beyerle@PS |
21 |
|
71 |
beyerle@PS |
22 |
HSYNC_DEFAULT="30.0-80.0"
|
|
|
23 |
VSYNC_DEFAULT="50.0-90.0"
|
73 |
beyerle@PS |
24 |
SCREEN_DEFAULT="1400x1050"
|
|
|
25 |
|
71 |
beyerle@PS |
26 |
MODES_DEFAULT='"2048x1536" "1920x1200" "1600x1200" "1400x1050" "1280x1024" "1280x960" "1280x800" "1152x864" "1152x768" "1024x768" "800x600" "640x480"'
|
1 |
beyerle@PS |
27 |
|
71 |
beyerle@PS |
28 |
|
1 |
beyerle@PS |
29 |
### -----------------------------------------------------------
|
|
|
30 |
### Get boot parameters
|
|
|
31 |
### -----------------------------------------------------------
|
|
|
32 |
|
|
|
33 |
# root on NFS?
|
|
|
34 |
NFSROOT=$( cmdline_value nfsroot )
|
|
|
35 |
|
|
|
36 |
# NFS Server
|
|
|
37 |
NFSSERVER=$( echo $NFSROOT | cut -d":" -f1 )
|
|
|
38 |
|
|
|
39 |
# no local user?
|
|
|
40 |
NOLOCAL=$( cmdline_parameter nolocal )
|
|
|
41 |
|
|
|
42 |
# no root user?
|
|
|
43 |
NOROOT=$( cmdline_parameter noroot )
|
|
|
44 |
|
|
|
45 |
# no localadmin?
|
|
|
46 |
NOADMIN=$( cmdline_parameter noadmin )
|
|
|
47 |
LocalAdminGroup=localadmin
|
|
|
48 |
|
|
|
49 |
# set password
|
|
|
50 |
PASSWD=$( cmdline_value passwd )
|
|
|
51 |
[ ! $PASSWD ] && PASSWD=$( cmdline_value pw )
|
|
|
52 |
|
|
|
53 |
# no password = empty password ?
|
|
|
54 |
NOPASSWD=$( cmdline_parameter nopasswd )
|
|
|
55 |
|
|
|
56 |
# keyboard layout (kb= or keyboard=)
|
|
|
57 |
KEYBOARD=$( cmdline_value keyboard )
|
|
|
58 |
KB=$( cmdline_value kb )
|
|
|
59 |
|
|
|
60 |
# PSI setup?
|
|
|
61 |
PSI=$( cmdline_parameter psi )
|
|
|
62 |
|
|
|
63 |
# cups server
|
|
|
64 |
CUPS=$( cmdline_value cups )
|
|
|
65 |
|
|
|
66 |
# failsafe X server
|
|
|
67 |
SIMPLEX=$( cmdline_parameter simplex )
|
|
|
68 |
|
|
|
69 |
# NVIDIA driver
|
|
|
70 |
NVIDIA=$( cmdline_parameter nvidia )
|
|
|
71 |
if [ "$XDRIVER" = "nvidia" ]; then
|
|
|
72 |
NVIDIA=nvidia
|
|
|
73 |
fi
|
|
|
74 |
|
|
|
75 |
# force NO NVIDIA driver - will overwite NVIDIA option
|
|
|
76 |
NONVIDIA=$( cmdline_parameter nonvidia )
|
|
|
77 |
|
|
|
78 |
# VESA driver
|
|
|
79 |
VESA=$( cmdline_parameter vesa )
|
|
|
80 |
|
|
|
81 |
# force to use a video driver ?
|
|
|
82 |
XDRIVER=$( cmdline_value xdriver )
|
|
|
83 |
|
|
|
84 |
# Xserver configurations
|
|
|
85 |
HSYNC=$( cmdline_value hsync )
|
|
|
86 |
VSYNC=$( cmdline_value vsync )
|
|
|
87 |
SCREEN=$( cmdline_value screen )
|
|
|
88 |
|
|
|
89 |
# no SWAP
|
|
|
90 |
NOSWAP=$( cmdline_parameter noswap )
|
|
|
91 |
|
|
|
92 |
# should we auto mount all found devices?
|
|
|
93 |
AUTOMOUNT=$( cmdline_parameter automount )
|
|
|
94 |
if [ $AUTOMOUNT ]; then
|
|
|
95 |
MOUNTOPT="auto,users"
|
|
|
96 |
else
|
|
|
97 |
MOUNTOPT="noauto,users,ro"
|
|
|
98 |
fi
|
|
|
99 |
|
|
|
100 |
# folder where we find data which was previously stored
|
|
|
101 |
# (normally on a usbstick, but can be partition)
|
|
|
102 |
if [ $PSI ]; then
|
|
|
103 |
SAVEFOLDER=PSI_LIVECD
|
|
|
104 |
else
|
|
|
105 |
SAVEFOLDER=SL_LIVECD
|
|
|
106 |
fi
|
|
|
107 |
|
|
|
108 |
# local home partition?
|
|
|
109 |
# (e.g. /dev/hda1, /dev/hda1:/my_home)
|
|
|
110 |
HOMELOCAL=$( cmdline_value home )
|
|
|
111 |
|
|
|
112 |
# fast booting ?
|
|
|
113 |
FASTBOOT=$( cmdline_parameter fastboot )
|
|
|
114 |
|
|
|
115 |
# start afs?
|
|
|
116 |
AFS=$( cmdline_parameter afs )
|
|
|
117 |
|
|
|
118 |
# or force no afs
|
|
|
119 |
[ $( cmdline_parameter noafs ) ] && AFS=""
|
|
|
120 |
|
|
|
121 |
# turn of sound (volume=0)
|
|
|
122 |
NOSOUND=$( cmdline_parameter nosound )
|
|
|
123 |
|
|
|
124 |
# local user name?
|
|
|
125 |
LOCALUSER=$( cmdline_value user )
|
|
|
126 |
|
|
|
127 |
# hostname?
|
|
|
128 |
HOSTNAME=$( cmdline_value hostname )
|
|
|
129 |
|
|
|
130 |
# do we have defined a configuration directory?
|
|
|
131 |
CONFIG=$( cmdline_value config )
|
|
|
132 |
|
|
|
133 |
# do not udpate fstab?
|
|
|
134 |
NOFSTAB=$( cmdline_parameter nofstab )
|
|
|
135 |
|
|
|
136 |
# kde/gnome as desktop
|
|
|
137 |
GNOME=$( cmdline_parameter gnome )
|
|
|
138 |
KDE=$( cmdline_parameter kde )
|
|
|
139 |
|
78 |
beyerle@PS |
140 |
# do no fixes (useful for debugging)
|
|
|
141 |
NOFIX=$( cmdline_parameter nofix )
|
1 |
beyerle@PS |
142 |
|
83 |
beyerle@PS |
143 |
# do not start network
|
|
|
144 |
NONET=$( cmdline_parameter nonet )
|
78 |
beyerle@PS |
145 |
|
83 |
beyerle@PS |
146 |
|
|
|
147 |
|
1 |
beyerle@PS |
148 |
### -----------------------------------------------------------
|
78 |
beyerle@PS |
149 |
### Functions
|
|
|
150 |
### -----------------------------------------------------------
|
|
|
151 |
|
|
|
152 |
reload_soundmodule() {
|
|
|
153 |
|
|
|
154 |
### unload/load sound module for snd-card-X (timing problem?)
|
|
|
155 |
if [ ! $NOFIX ]; then
|
|
|
156 |
rpm -q alsa-lib | grep el5 >/dev/null
|
|
|
157 |
if [ "$?" = "0" ]; then
|
|
|
158 |
# disable kernel messages
|
|
|
159 |
echo "0" > /proc/sys/kernel/printk
|
|
|
160 |
sound_modules=$( grep snd-card- /etc/modprobe.conf | awk ' $1 ~ /alias/ { print $3 }' | tr - _ )
|
|
|
161 |
for module in $sound_modules; do
|
|
|
162 |
lsmod | awk '{ print $1 }' | grep $module >/dev/null 2>&1
|
|
|
163 |
if [ "$?" = "0" ]; then
|
|
|
164 |
rmmod $module >/dev/null 2>&1
|
|
|
165 |
modprobe $module >/dev/null 2>&1
|
|
|
166 |
fi
|
|
|
167 |
done
|
|
|
168 |
# enable kernel messages
|
|
|
169 |
echo "6" > /proc/sys/kernel/printk
|
|
|
170 |
fi
|
|
|
171 |
fi
|
|
|
172 |
}
|
|
|
173 |
|
|
|
174 |
|
|
|
175 |
### -----------------------------------------------------------
|
1 |
beyerle@PS |
176 |
### Improved hardware detection
|
|
|
177 |
### -----------------------------------------------------------
|
|
|
178 |
|
78 |
beyerle@PS |
179 |
### Improved graphic card detection
|
1 |
beyerle@PS |
180 |
|
78 |
beyerle@PS |
181 |
if [ ! $SIMPLEX ] && [ ! $NOFIX ]; then
|
1 |
beyerle@PS |
182 |
|
|
|
183 |
### Intel Mobile 945GM
|
|
|
184 |
lspci | grep -q VGA.*Intel.*Mobile.*945GM
|
|
|
185 |
if [ "$?" = "0" ]; then
|
|
|
186 |
I945GM=i945gm
|
|
|
187 |
## not yet supported by i810 driver
|
|
|
188 |
## [ $XDRIVER ] || XDRIVER=i810
|
|
|
189 |
I915RESOLUTION=on
|
|
|
190 |
fi
|
|
|
191 |
### Intel Mobile 915GM
|
|
|
192 |
lspci | grep -q VGA.*Intel.*Mobile.*915GM
|
|
|
193 |
if [ "$?" = "0" ]; then
|
|
|
194 |
I915GM=i915gm
|
|
|
195 |
[ $XDRIVER ] || XDRIVER=i810
|
|
|
196 |
I855RESOLUTION=on
|
|
|
197 |
fi
|
|
|
198 |
|
|
|
199 |
### Intel Mobile 855GM
|
|
|
200 |
lspci | grep -q VGA.*Intel.*855GM
|
|
|
201 |
if [ "$?" = "0" ]; then
|
|
|
202 |
I855GM=i855gm
|
|
|
203 |
I855RESOLUTION=on
|
|
|
204 |
fi
|
|
|
205 |
fi
|
|
|
206 |
|
|
|
207 |
|
|
|
208 |
### -----------------------------------------------------------
|
|
|
209 |
### Main
|
|
|
210 |
### -----------------------------------------------------------
|
|
|
211 |
|
|
|
212 |
### try load fuse kernel module
|
|
|
213 |
modprobe fuse 2>/dev/null
|
|
|
214 |
|
78 |
beyerle@PS |
215 |
### reload sound module (first time)
|
|
|
216 |
reload_soundmodule
|
|
|
217 |
|
1 |
beyerle@PS |
218 |
### activate SWAP
|
|
|
219 |
# delete all swap lines in fstab
|
|
|
220 |
sed -i -e "/ swap /d" /etc/fstab
|
|
|
221 |
# search for swap partition
|
|
|
222 |
fdisk -l > /var/log/fdisk
|
|
|
223 |
swap_part=$( fdisk -l 2>/dev/null | grep -i "Linux swap" \
|
|
|
224 |
| grep "^/dev/" | cut -f 1 -d " " | head -1 )
|
|
|
225 |
# add to /etc/fstab and activate SWAP
|
|
|
226 |
if [ $swap_part ] && [ ! $NOSWAP ]; then
|
|
|
227 |
echo "$swap_part swap swap defaults 0 0" >>/etc/fstab
|
|
|
228 |
# activate SWAP
|
|
|
229 |
swapoff -a
|
|
|
230 |
swapon -a -e
|
|
|
231 |
fi
|
|
|
232 |
|
|
|
233 |
### MAC Address of eth0
|
|
|
234 |
MAC_ETH0=$( ifconfig | grep eth0 | awk '{print $5}' )
|
|
|
235 |
|
|
|
236 |
### Get CONFIG_FOLDER for this machine from NFS Server (if existing)
|
|
|
237 |
# and copy it to /$MOUNTDIR
|
|
|
238 |
if [ $NFSSERVER ] && [ $CONFIG ]; then
|
|
|
239 |
mkdir -p /mnt/config
|
|
|
240 |
echo "Search for configuration files on the server ..."
|
|
|
241 |
/etc/init.d/portmap start >/dev/null
|
|
|
242 |
mount -t nfs $NFSSERVER:$CONFIG /mnt/config 2>/dev/null
|
|
|
243 |
if [ "$?" != "0" ]; then
|
|
|
244 |
echo "Could not mount $NFSSERVER:$CONFIG."
|
|
|
245 |
else
|
|
|
246 |
if [ -d /mnt/config/$MAC_ETH0 ]; then
|
|
|
247 |
CONFIG_FOLDER=/$MOUNTDIR/config
|
|
|
248 |
mkdir -p $CONFIG_FOLDER
|
|
|
249 |
cp -a /mnt/config/$MAC_ETH0/* /$CONFIG_FOLDER/ 2>/dev/null
|
|
|
250 |
if [ "$?" != "0" ]; then
|
|
|
251 |
echo "Could not get $NFSSERVER:$CONFIG/$MAC_ETH0"
|
|
|
252 |
CONFIG_FOLDER=""
|
|
|
253 |
else
|
|
|
254 |
echo "Found configuration files on the server."
|
|
|
255 |
fi
|
|
|
256 |
fi
|
|
|
257 |
umount /mnt/config
|
|
|
258 |
fi
|
|
|
259 |
/etc/init.d/portmap stop >/dev/null
|
|
|
260 |
fi
|
|
|
261 |
|
|
|
262 |
### search for partitions and update fstab
|
|
|
263 |
### and look for $SAVEFOLDER (previously stored data)
|
|
|
264 |
if [ ! $FASTBOOT ] && [ ! $NOFSTAB ]; then
|
|
|
265 |
echo "Update /etc/fstab ..."
|
|
|
266 |
# disable kernel messages during mount/unmount
|
|
|
267 |
echo 0 > /proc/sys/kernel/printk
|
|
|
268 |
DEVICES=$( list_partition_devices )
|
|
|
269 |
for DEVICE in $DEVICES; do
|
|
|
270 |
# try to mount the device and unmount it.
|
|
|
271 |
# If OK, we can add it to fstab
|
|
|
272 |
DEV=$( echo $DEVICE | cut -d"/" -f 3 )
|
|
|
273 |
if [ $DEV ]; then
|
|
|
274 |
mkdir -p /mnt/$DEV
|
|
|
275 |
mount $DEVICE /mnt/$DEV >/dev/null 2>&1
|
|
|
276 |
# search for $SAVEFOLDER
|
|
|
277 |
if [ -d /mnt/$DEV/$SAVEFOLDER ]; then
|
|
|
278 |
FOUND_RESTORE_DEV=/dev/$DEV
|
|
|
279 |
echo "Found folder '$SAVEFOLDER' on $FOUND_RESTORE_DEV"
|
|
|
280 |
fi
|
|
|
281 |
# unmount again
|
|
|
282 |
umount /mnt/$DEV >/dev/null 2>&1
|
|
|
283 |
# if sucsessful add to fstab, if not already done
|
|
|
284 |
if [ "$?" = "0" ]; then
|
|
|
285 |
grep -q "^$DEVICE " /etc/fstab
|
|
|
286 |
if [ "$?" != "0" ]; then
|
|
|
287 |
echo -e "$DEVICE \t /mnt/$DEV \t auto \t $MOUNTOPT,suid,dev,exec 0 0" >> /etc/fstab
|
|
|
288 |
fi
|
|
|
289 |
else
|
|
|
290 |
rmdir /mnt/$DEV 2>/dev/null
|
|
|
291 |
fi
|
|
|
292 |
fi
|
|
|
293 |
done
|
|
|
294 |
# enable kernel messages again
|
|
|
295 |
echo 6 > /proc/sys/kernel/printk
|
|
|
296 |
fi
|
|
|
297 |
|
|
|
298 |
### if $SAVEFOLDER found, set $CONFIG_FOLDER and mount $FOUND_RESTORE_MNT
|
|
|
299 |
if [ $FOUND_RESTORE_DEV ]; then
|
|
|
300 |
FOUND_RESTORE_MNT=$( grep "^$FOUND_RESTORE_DEV " /etc/fstab | awk '{ print $2 }' )
|
|
|
301 |
CONFIG_FOLDER=$FOUND_RESTORE_MNT/$SAVEFOLDER
|
|
|
302 |
echo "Will restore data from $CONFIG_FOLDER"
|
|
|
303 |
mount $FOUND_RESTORE_MNT
|
|
|
304 |
fi
|
|
|
305 |
|
|
|
306 |
### source the file "config", if found in $CONFIG_FOLDER
|
|
|
307 |
if [ -f $CONFIG_FOLDER/config ]; then
|
|
|
308 |
. $CONFIG_FOLDER/config
|
|
|
309 |
fi
|
|
|
310 |
|
|
|
311 |
### do we have a shadow/passwd file in $FOUND_FOULDER
|
|
|
312 |
if [ -r $CONFIG_FOLDER/passwd.tar.gz ] && [ -r $CONFIG_FOLDER/shadow.tar.gz ]; then
|
|
|
313 |
# we do not need a password for local user and root
|
|
|
314 |
NOLOCAL=nolocal
|
|
|
315 |
NOROOT=noroot
|
|
|
316 |
fi
|
|
|
317 |
|
|
|
318 |
### set local user name and default hostname
|
|
|
319 |
if [ $PSI ]; then
|
|
|
320 |
[ $LOCALUSER ] || LOCALUSER=l_psi
|
|
|
321 |
DEFAULT_HOSTNAME=psi
|
|
|
322 |
else
|
|
|
323 |
[ $LOCALUSER ] || LOCALUSER=sluser
|
|
|
324 |
DEFAULT_HOSTNAME=slinux
|
|
|
325 |
fi
|
|
|
326 |
|
|
|
327 |
### start 855resolution?
|
|
|
328 |
[ $I855RESOLUTION ] && /etc/init.d/855resolution start 2>/dev/null
|
|
|
329 |
|
|
|
330 |
### start 915resolution?
|
|
|
331 |
[ $I915RESOLUTION ] && /etc/init.d/915resolution start 2>/dev/null
|
|
|
332 |
|
|
|
333 |
### configure Xserver
|
|
|
334 |
|
|
|
335 |
### check for xorg.conf in CONFIG_FOLDER
|
|
|
336 |
if [ -r $CONFIG_FOLDER/xorg.conf ]; then
|
71 |
beyerle@PS |
337 |
cp -af $CONFIG_FOLDER/xorg.conf $XORG_CONF
|
1 |
beyerle@PS |
338 |
if [ "$?" = "0" ]; then
|
|
|
339 |
echo "Saved xorg.conf file found."
|
|
|
340 |
XDRIVER=""
|
|
|
341 |
HAVE_XORG_CONF="yes"
|
|
|
342 |
fi
|
|
|
343 |
fi
|
|
|
344 |
|
|
|
345 |
### use vesa driver?
|
|
|
346 |
if [ $VESA ]; then
|
|
|
347 |
echo "Force to use VESA driver!"
|
|
|
348 |
video_driver="--set-driver=vesa"
|
|
|
349 |
else
|
|
|
350 |
video_driver=""
|
|
|
351 |
fi
|
|
|
352 |
|
|
|
353 |
### force an other video driver?
|
|
|
354 |
if [ $XDRIVER ]; then
|
|
|
355 |
echo "Force to use $XDRIVER driver!"
|
|
|
356 |
video_driver="--set-driver=$XDRIVER"
|
|
|
357 |
fi
|
|
|
358 |
|
71 |
beyerle@PS |
359 |
### configure Xserver
|
1 |
beyerle@PS |
360 |
if [ -x /usr/bin/system-config-display ]; then
|
|
|
361 |
echo "Configure Xserver:"
|
|
|
362 |
if [ ! $HAVE_XORG_CONF ]; then
|
|
|
363 |
if [ ! $SIMPLEX ]; then
|
71 |
beyerle@PS |
364 |
|
1 |
beyerle@PS |
365 |
# default values
|
71 |
beyerle@PS |
366 |
[ ! $HSYNC ] && HSYNC="$HSYNC_DEFAULT"
|
|
|
367 |
[ ! $VSYNC ] && VSYNC="$VSYNC_DEFAULT"
|
|
|
368 |
[ ! $SCREEN ] && SCREEN="$SCREEN_DEFAULT"
|
|
|
369 |
|
|
|
370 |
# run system-config-display
|
1 |
beyerle@PS |
371 |
system-config-display \
|
|
|
372 |
--reconfig \
|
|
|
373 |
-v \
|
|
|
374 |
--set-resolution=$SCREEN \
|
|
|
375 |
--set-hsync=$HSYNC \
|
|
|
376 |
--set-vsync=$VSYNC \
|
|
|
377 |
$video_driver | grep Trying
|
71 |
beyerle@PS |
378 |
|
72 |
beyerle@PS |
379 |
# system-config-display in SL5 does not work nicely :-(
|
|
|
380 |
# e.g. No Monitor Section
|
71 |
beyerle@PS |
381 |
|
|
|
382 |
# add Monitor Section and add Monitor0 to Screen Section
|
|
|
383 |
grep -q Monitor $XORG_CONF
|
72 |
beyerle@PS |
384 |
if [ "$?" != "0" ]; then
|
71 |
beyerle@PS |
385 |
echo "Section \"Monitor\"" >> $XORG_CONF
|
|
|
386 |
echo -e "\tIdentifier \"Monitor0\"" >> $XORG_CONF
|
|
|
387 |
echo -e "\tHorizSync $HSYNC" >> $XORG_CONF
|
|
|
388 |
echo -e "\tVertRefresh $VSYNC" >> $XORG_CONF
|
|
|
389 |
echo -e "\tOption \"dpms\"" >> $XORG_CONF
|
|
|
390 |
echo -e "EndSection" >> $XORG_CONF
|
|
|
391 |
sed -i "s|Device \"Videocard0\"|Device \"Videocard0\"\n\tMonitor \"Monitor0\"|" $XORG_CONF
|
|
|
392 |
fi
|
|
|
393 |
|
72 |
beyerle@PS |
394 |
# add Modes for $SCREEN, if not yet there
|
71 |
beyerle@PS |
395 |
grep -q Modes $XORG_CONF
|
72 |
beyerle@PS |
396 |
if [ "$?" != "0" ]; then
|
71 |
beyerle@PS |
397 |
modeline=$( echo ${MODES_DEFAULT} | sed "s|.*\"$SCREEN|\"$SCREEN|" )
|
|
|
398 |
if [ "$modeline" ]; then
|
|
|
399 |
sed -i "s|\tDepth.*|\tDepth 24\n\t\tModes $modeline|" $XORG_CONF
|
|
|
400 |
fi
|
|
|
401 |
fi
|
|
|
402 |
|
72 |
beyerle@PS |
403 |
|
71 |
beyerle@PS |
404 |
# simple Xserver configuration.
|
1 |
beyerle@PS |
405 |
else
|
|
|
406 |
echo "Use simple Xserver configuration."
|
|
|
407 |
system-config-display --noui --reconfig -v | grep Trying
|
|
|
408 |
fi
|
|
|
409 |
fi
|
|
|
410 |
fi
|
|
|
411 |
|
71 |
beyerle@PS |
412 |
|
1 |
beyerle@PS |
413 |
### enable NVIDIA driver (needs nvidia, nvidia-libs rpms)
|
|
|
414 |
if [ $NVIDIA ] && [ ! $NONVIDIA ]; then
|
|
|
415 |
# serach for Nvidia Video Card
|
|
|
416 |
/sbin/lspci | grep VGA | grep -i -q nvidia
|
|
|
417 |
if [ "$?" = "0" ]; then
|
|
|
418 |
# lib or lib64 ?
|
|
|
419 |
LIB=lib
|
|
|
420 |
[ $( arch ) = "x86_64" ] && LIB=lib64
|
|
|
421 |
# find out installed Nvidia driver version
|
|
|
422 |
libglx=$( ls /usr/X11R6/$LIB/modules/extensions/libglx.so.1.* | head -n 1 )
|
|
|
423 |
nvidia_version=${libglx##*.so.1.}
|
|
|
424 |
# enable Nvidia driver (normally done by nvidia-enable - does not work on LiveCD)
|
|
|
425 |
echo -n "NVIDIA graphic card found. Enable the nvidia driver ${nvidia_version} ... "
|
|
|
426 |
NVLOG=/var/log/nvidia.log
|
|
|
427 |
# assuming that the kernel modules are already build
|
|
|
428 |
# link to Nvidia libs
|
|
|
429 |
ln -sf ../../usr/X11R6/$LIB/libGL.so.1.${nvidia_version} /usr/$LIB/libGL.so
|
|
|
430 |
ln -sf libGL.so.1.${nvidia_version} /usr/X11R6/$LIB/libGL.so
|
43 |
beyerle@PS |
431 |
mv /usr/X11R6/$LIB/modules/extensions/libGLcore.a /usr/X11R6/$LIB/modules/extensions/xxx.libGLcore.a.saved_by_nvidia
|
|
|
432 |
mv /usr/X11R6/$LIB/modules/extensions/libglx.a /usr/X11R6/$LIB/modules/extensions/xxx.libglx.a.saved_by_nvidia
|
1 |
beyerle@PS |
433 |
ln -sf libglx.so.1.${nvidia_version} /usr/X11R6/$LIB/modules/extensions/libglx.so
|
|
|
434 |
# reconfigure X
|
|
|
435 |
/usr/sbin/nvidia-xconfig >> $NVLOG 2>&1
|
|
|
436 |
if [ $PSI ]; then
|
|
|
437 |
echo 'NVIDIA=on' >> /etc/sysconfig/cfengine
|
|
|
438 |
fi
|
|
|
439 |
echo "ok."
|
|
|
440 |
fi
|
|
|
441 |
fi
|
|
|
442 |
|
|
|
443 |
### set special video driver options for Intel Mobile
|
|
|
444 |
|
|
|
445 |
# (external VGA output: Clone)
|
|
|
446 |
if [ $I915GM ] || [ $I855GM ]; then
|
|
|
447 |
sed -e "/Section[ \t]*\"Device\"/,/EndSection/{
|
|
|
448 |
/^[ \t]*Option[ \t]*\"MonitorLayout\"/d
|
|
|
449 |
/^[ \t]*Option[ \t]*\"Clone/d
|
|
|
450 |
/EndSection/i\\
|
|
|
451 |
Option \"MonitorLayout\" \"CRT,LFP\"\\
|
|
|
452 |
Option \"Clone\" \"1\"\\
|
|
|
453 |
Option \"CloneRefresh\" \"60\"
|
71 |
beyerle@PS |
454 |
}" -i $XORG_CONF
|
1 |
beyerle@PS |
455 |
fi
|
|
|
456 |
|
|
|
457 |
# Set BoardName for Intel 915GM
|
|
|
458 |
if [ $I915GM ]; then
|
71 |
beyerle@PS |
459 |
sed -i 's/BoardName.*VESA driver.*/BoardName "Intel 915"/' $XORG_CONF
|
1 |
beyerle@PS |
460 |
fi
|
|
|
461 |
|
|
|
462 |
|
|
|
463 |
### parameter KB = KEYBOARD
|
|
|
464 |
KEYBOARD=$KB
|
|
|
465 |
|
|
|
466 |
### ask user for keyboard layout if no keyboard given
|
|
|
467 |
if [ -x /usr/bin/system-config-keyboard ]; then
|
|
|
468 |
if [ ! $KEYBOARD ]; then
|
|
|
469 |
MORE_LAYOUTS="more..."
|
|
|
470 |
keytables="U.S...........(us) \
|
|
|
471 |
Swiss-German..(sg-latin1) \
|
|
|
472 |
Swiss-French..(fr_CH-latin1) \
|
|
|
473 |
German........(de-latin1) \
|
|
|
474 |
Japanese......(jp106) \
|
|
|
475 |
$MORE_LAYOUTS"
|
|
|
476 |
PS3="-> "
|
|
|
477 |
echo
|
|
|
478 |
echo "Please choose keyboard layout (type 1-6):"
|
|
|
479 |
select KEYBOARD in $keytables;
|
|
|
480 |
do
|
|
|
481 |
case $KEYBOARD in
|
|
|
482 |
*)
|
|
|
483 |
# extract keyboard layout string from $KEYBOARD
|
|
|
484 |
KEYBOARD=${KEYBOARD##*(}
|
|
|
485 |
KEYBOARD=${KEYBOARD%%)}
|
|
|
486 |
break
|
|
|
487 |
;;
|
|
|
488 |
esac
|
|
|
489 |
done
|
|
|
490 |
fi
|
|
|
491 |
fi
|
|
|
492 |
|
|
|
493 |
### set keyboard
|
|
|
494 |
if [ -x /usr/bin/system-config-keyboard ]; then
|
|
|
495 |
if [ "$KEYBOARD" = "$MORE_LAYOUTS" ]; then
|
|
|
496 |
system-config-keyboard --text
|
|
|
497 |
else
|
|
|
498 |
echo -n "Set keyboard to '$KEYBOARD', please wait ... "
|
|
|
499 |
system-config-keyboard --noui $KEYBOARD >/dev/null 2>&1
|
|
|
500 |
echo "done."
|
|
|
501 |
fi
|
|
|
502 |
echo
|
|
|
503 |
fi
|
|
|
504 |
|
|
|
505 |
### update AFS users and SEPP links (only for PSI)
|
|
|
506 |
if [ $PSI ] && [ $AFS ]; then
|
|
|
507 |
echo "Update AFS users and SEPP links..."
|
|
|
508 |
[ -x /afs/psi.ch/sys/common/update_user.pl ] && /afs/psi.ch/sys/common/update_user.pl >/dev/null 2>&1 &
|
|
|
509 |
[ -x /afs/psi.ch/sys/common/update_sepp.pl ] && /afs/psi.ch/sys/common/update_sepp.pl >/dev/null 2>&1 &
|
|
|
510 |
echo
|
|
|
511 |
fi
|
|
|
512 |
|
|
|
513 |
### create local user, if "nolocal" is not set
|
|
|
514 |
if [ ! $NOLOCAL ]; then
|
|
|
515 |
|
|
|
516 |
user=$LOCALUSER
|
|
|
517 |
# execute useradd twice, to make it work (don't know why)
|
|
|
518 |
if [ $PSI ] && [ ! $NOADMIN ]; then
|
|
|
519 |
userdel -r $user 2>/dev/null
|
|
|
520 |
useradd -G $LocalAdminGroup $user 2>/dev/null
|
|
|
521 |
userdel -r $user 2>/dev/null
|
|
|
522 |
useradd -G $LocalAdminGroup $user
|
|
|
523 |
else
|
|
|
524 |
userdel -r $user 2>/dev/null
|
|
|
525 |
useradd $user 2>/dev/null
|
|
|
526 |
userdel -r $user 2>/dev/null
|
|
|
527 |
useradd $user
|
|
|
528 |
fi
|
|
|
529 |
|
|
|
530 |
# only for PSI: change users's group to GID=UID+50000
|
|
|
531 |
if [ $PSI ]; then
|
|
|
532 |
uid=$( id -u $user )
|
|
|
533 |
old_gid=$( id -g $user )
|
|
|
534 |
new_gid=$(( $old_gid + 50000 ))
|
|
|
535 |
# fix /etc/group
|
|
|
536 |
sed -i "s/${user}:x:${old_gid}:/${user}:x:${new_gid}:/" /etc/group
|
|
|
537 |
# fix /etc/passwd
|
|
|
538 |
sed -i "s/${user}:x:${uid}:${old_gid}:/${user}:x:${uid}:${new_gid}:/" /etc/passwd
|
|
|
539 |
# fix perm of /home/${user)
|
|
|
540 |
chgrp -R $user /home/${user}
|
|
|
541 |
fi
|
|
|
542 |
fi
|
|
|
543 |
|
|
|
544 |
### copy special files for PSI user l_psi
|
|
|
545 |
if [ $PSI ] && [ ! $NOLOCAL ]; then
|
|
|
546 |
find /usr/share/${LOCALUSER}/ -maxdepth 1 -mindepth 1 2>/dev/null | \
|
|
|
547 |
while read dir; do
|
|
|
548 |
cp -a $dir /home/${LOCALUSER}/
|
|
|
549 |
done
|
|
|
550 |
# set owner
|
|
|
551 |
chown -R ${LOCALUSER}.${LOCALUSER} /home/${LOCALUSER}
|
|
|
552 |
fi
|
|
|
553 |
|
74 |
beyerle@PS |
554 |
### autostart kmix and krandrtray in KDE
|
|
|
555 |
if [ ! $NOLOCAL ]; then
|
|
|
556 |
mkdir -p /home/${LOCALUSER}/.kde/Autostart
|
|
|
557 |
cp -a /usr/share/applications/kde/krandrtray.desktop /home/${LOCALUSER}/.kde/Autostart 2>/dev/null
|
|
|
558 |
cp -a /usr/share/applications/kde/kmix.desktop /home/${LOCALUSER}/.kde/Autostart 2>/dev/null
|
|
|
559 |
chown -R ${LOCALUSER}.${LOCALUSER} /home/${LOCALUSER}/.kde/Autostart
|
|
|
560 |
fi
|
|
|
561 |
|
1 |
beyerle@PS |
562 |
### set password for root and local user
|
|
|
563 |
if [ ! $NOPASSWD ]; then
|
|
|
564 |
if [ ! $NOROOT ] || [ ! $NOLOCAL ]; then
|
|
|
565 |
echo -n "Set password for "
|
|
|
566 |
if [ ! $NOROOT ]; then
|
|
|
567 |
echo -n "'root' "
|
|
|
568 |
fi
|
|
|
569 |
if [ ! $NOROOT ] && [ ! $NOLOCAL ]; then
|
|
|
570 |
echo -n "and "
|
|
|
571 |
fi
|
|
|
572 |
if [ ! $NOLOCAL ]; then
|
|
|
573 |
echo -n "local user '$user' "
|
|
|
574 |
fi
|
|
|
575 |
echo
|
|
|
576 |
|
|
|
577 |
if [ ! $NOLOCAL ]; then
|
|
|
578 |
echo "Login as local user '$user' with this password."
|
|
|
579 |
echo
|
|
|
580 |
fi
|
|
|
581 |
|
|
|
582 |
# set password, if not yet given by $PASSWD
|
|
|
583 |
until [ $PASSWD ]; do
|
|
|
584 |
echo -n "Password: "
|
|
|
585 |
read -s PASSWD
|
|
|
586 |
echo
|
|
|
587 |
done
|
|
|
588 |
if [ ! $NOROOT ]; then
|
|
|
589 |
echo $PASSWD | passwd --stdin root >/dev/null
|
|
|
590 |
fi
|
|
|
591 |
if [ ! $NOLOCAL ]; then
|
|
|
592 |
echo $PASSWD | passwd --stdin $user >/dev/null
|
|
|
593 |
fi
|
|
|
594 |
echo
|
|
|
595 |
fi
|
|
|
596 |
|
|
|
597 |
else
|
|
|
598 |
# set root and $LOCALUSER to empty password
|
|
|
599 |
sed -i "s|^root:.*|root::12345:0:99999:1:::|" /etc/shadow
|
|
|
600 |
sed -i "s|^$LOCALUSER:.*|$LOCALUSER::12345:0:99999:1:::|" /etc/shadow
|
|
|
601 |
fi
|
|
|
602 |
|
|
|
603 |
### try to get hostname from DNS, if not yet defined
|
|
|
604 |
if [ ! $HOSTNAME ]; then
|
|
|
605 |
echo "Try to get hostname from DNS ..."
|
|
|
606 |
IP=$( /sbin/ip add show dev eth0 2>/dev/null | grep "inet " | cut -d" " -f6 | sed 's|/.*||' )
|
|
|
607 |
if [ "$IP" = "" ]; then
|
|
|
608 |
IP=$( /sbin/ip add show dev eth1 2>/dev/null | grep "inet " | cut -d" " -f6 | sed 's|/.*||' )
|
|
|
609 |
fi
|
|
|
610 |
if [ "$IP" != "" ]; then
|
|
|
611 |
host -W 1 $IP >/dev/null 2>&1
|
|
|
612 |
if [ "$?" = "0" ]; then
|
|
|
613 |
HOSTNAME=$( host -W 1 $IP | cut -d" " -f 5 | cut -d"." -f 1 )
|
|
|
614 |
if [ "$HOSTNAME" = "3(NXDOMAIN)" ]; then
|
|
|
615 |
HOSTNAME=$DEFAULT_HOSTNAME
|
|
|
616 |
fi
|
|
|
617 |
if [ "$HOSTNAME" = "no" ]; then
|
|
|
618 |
HOSTNAME=$DEFAULT_HOSTNAME
|
|
|
619 |
fi
|
|
|
620 |
fi
|
|
|
621 |
fi
|
|
|
622 |
fi
|
|
|
623 |
|
|
|
624 |
### define default hostname, if $HOSTNAME still not yet set
|
|
|
625 |
if [ ! $HOSTNAME ]; then
|
|
|
626 |
HOSTNAME=$DEFAULT_HOSTNAME
|
|
|
627 |
fi
|
|
|
628 |
|
|
|
629 |
### set hostname
|
|
|
630 |
export HOSTNAME=$HOSTNAME
|
|
|
631 |
hostname $HOSTNAME
|
|
|
632 |
sed -i "s/HOSTNAME=.*/HOSTNAME=${HOSTNAME}/" /etc/sysconfig/network
|
|
|
633 |
if [ $PSI ]; then
|
|
|
634 |
sed -i "s/hostname=.*/hostname=${HOSTNAME}.psi.ch/" /etc/ssmtp/ssmtp.conf
|
|
|
635 |
sed -i "s/HOSTNAME=.*/HOSTNAME=${HOSTNAME}/" /etc/sysconfig/cfengine
|
|
|
636 |
fi
|
|
|
637 |
for iface in eth0 eth1 eth2 eth3; do
|
|
|
638 |
if [ -e /etc/sysconfig/network-scripts/ifcfg-${iface} ]; then
|
|
|
639 |
echo "DHCP_HOSTNAME=${HOSTNAME}" >> /etc/sysconfig/network-scripts/ifcfg-${iface}
|
|
|
640 |
fi
|
|
|
641 |
done
|
|
|
642 |
|
|
|
643 |
echo "Hostname set to: $HOSTNAME"
|
|
|
644 |
echo
|
|
|
645 |
|
|
|
646 |
### set cups server
|
|
|
647 |
if [ $CUPS ]; then
|
|
|
648 |
sed -i "s|.*ServerName .*|ServerName $CUPS|" /etc/cups/client.conf
|
|
|
649 |
fi
|
|
|
650 |
|
|
|
651 |
### some magic: just access this file in order that it can be sourced later
|
|
|
652 |
ls -lag /etc/X11/xinit/xinitrc-common >/dev/null 2>&1
|
|
|
653 |
|
|
|
654 |
### set keyboard for rdesktop
|
71 |
beyerle@PS |
655 |
if [ -e $XORG_CONF ]; then
|
|
|
656 |
grep -q de_CH $XORG_CONF && RDESKTOP_OPT="-k de-ch"
|
|
|
657 |
grep -q fr_CH $XORG_CONF && RDESKTOP_OPT="-k fr-ch"
|
|
|
658 |
grep -q jp106 $XORG_CONF && RDESKTOP_OPT="-k ja"
|
1 |
beyerle@PS |
659 |
fi
|
|
|
660 |
|
|
|
661 |
if [ "$RDESKTOP_OPT" ]; then
|
|
|
662 |
echo "alias rdesktop='rdesktop $RDESKTOP_OPT'" > /etc/profile.d/rdesktop.sh
|
|
|
663 |
echo "export RDESKTOP_OPT='$RDESKTOP_OPT'" >> /etc/profile.d/rdesktop.sh
|
|
|
664 |
chmod 755 /etc/profile.d/rdesktop.sh
|
|
|
665 |
fi
|
|
|
666 |
|
|
|
667 |
### run setup script, if found in $CONFIG_FOLDER on $FOUND_RESTORE_MNT
|
|
|
668 |
if [ -r $CONFIG_FOLDER/setup ]; then
|
|
|
669 |
CONFIG_FOLDER=$CONFIG_FOLDER bash $CONFIG_FOLDER/setup
|
|
|
670 |
fi
|
|
|
671 |
|
|
|
672 |
### umount $FOUND_RESTORE_MNT
|
|
|
673 |
if [ $FOUND_RESTORE_MNT ]; then
|
|
|
674 |
echo "Unmount $FOUND_RESTORE_MNT"
|
|
|
675 |
umount $FOUND_RESTORE_MNT 2>/dev/null
|
|
|
676 |
sleep 3
|
|
|
677 |
fi
|
|
|
678 |
|
|
|
679 |
### local home partition?
|
|
|
680 |
if [ $HOMELOCAL ]; then
|
|
|
681 |
mv /home /home.old
|
|
|
682 |
mkdir -p /mnt/home_par
|
|
|
683 |
# which partition? which folder?
|
|
|
684 |
HOMEPAR=$( echo $HOMELOCAL | cut -d":" -f1 )
|
|
|
685 |
HOMEDIR=$( echo $HOMELOCAL | grep ":" | cut -d":" -f2 )
|
|
|
686 |
umount $HOMEPAR 2>/dev/null
|
|
|
687 |
# mount it with option noatime, healthy for USB flash drives
|
|
|
688 |
mount -o noatime -rw $HOMEPAR /mnt/home_par 2>/dev/null
|
|
|
689 |
if [ "$?" != "0" ]; then
|
|
|
690 |
echo "ERROR: Could not mount read/write $HOMEPAR"
|
|
|
691 |
umount $HOMEPAR >/dev/null 2&>1
|
|
|
692 |
mv /home.old /home
|
|
|
693 |
else
|
|
|
694 |
echo "$HOMEPAR mounted on /mnt/home_par"
|
|
|
695 |
# link to new home
|
|
|
696 |
ln -s /mnt/home_par/$HOMEDIR /home
|
|
|
697 |
if [ ! -d /mnt/home_par/$HOMEDIR ]; then
|
|
|
698 |
echo "$HOMELOCAL not found on $HOMEPAR"
|
|
|
699 |
echo mkdir -p /mnt/home_par/$HOMEDIR
|
|
|
700 |
if [ "$?" != "0" ]; then
|
|
|
701 |
echo "ERROR: Could not create $HOMELOCAL on $HOMEPAR"
|
|
|
702 |
umount $HOMEPAR >/dev/null 2&>1
|
|
|
703 |
rm -f /home
|
|
|
704 |
mv /home.old /home
|
|
|
705 |
else
|
|
|
706 |
echo "Folder $HOMEDIR created on $HOMEPAR"
|
|
|
707 |
fi
|
|
|
708 |
fi
|
|
|
709 |
if [ -d /mnt/home_par/$HOMEDIR ]; then
|
|
|
710 |
echo "/home is linked to /mnt/home_par${HOMEDIR}"
|
|
|
711 |
# copy files from /home.old to /home, which are not yet there
|
|
|
712 |
/bin/cp -a -i --reply=no /home.old/* /home/
|
|
|
713 |
rm -rf /home.old
|
|
|
714 |
fi
|
|
|
715 |
fi
|
|
|
716 |
sleep 2
|
|
|
717 |
fi
|
|
|
718 |
|
|
|
719 |
### mount all if AUTOMOUNT set
|
|
|
720 |
if [ $AUTOMOUNT ]; then
|
|
|
721 |
mount -a
|
|
|
722 |
fi
|
|
|
723 |
|
|
|
724 |
### unmute all mixers and set volumes
|
|
|
725 |
if [ -x /usr/bin/set-volume ]; then
|
|
|
726 |
if [ $NOSOUND ]; then
|
|
|
727 |
/usr/bin/set-volume 0 > /var/log/set-volume.log 2>&1 &
|
|
|
728 |
else
|
|
|
729 |
/usr/bin/set-volume 60 > /var/log/set-volume.log 2>&1 &
|
|
|
730 |
fi
|
|
|
731 |
fi
|
|
|
732 |
|
|
|
733 |
### set kde or gnome as desktop
|
|
|
734 |
if [ $KDE ]; then
|
|
|
735 |
sed -i "/^DESKTOP=.*/d" /etc/sysconfig/desktop 2&>/dev/null
|
|
|
736 |
echo "DESKTOP=KDE" >> /etc/sysconfig/desktop
|
|
|
737 |
fi
|
|
|
738 |
if [ $GNOME ]; then
|
|
|
739 |
sed -i "/^DESKTOP=.*/d" /etc/sysconfig/desktop 2&>/dev/null
|
|
|
740 |
echo "DESKTOP=GNOME" >> /etc/sysconfig/desktop
|
|
|
741 |
fi
|
|
|
742 |
|
78 |
beyerle@PS |
743 |
### reload sound module (second time)
|
|
|
744 |
reload_soundmodule
|
83 |
beyerle@PS |
745 |
|
|
|
746 |
### bring up all network interfaces (useful to enable WLAN devices)
|
|
|
747 |
if [ ! $NONET ]; then
|
|
|
748 |
devices=$( ls /etc/sysconfig/network-scripts/ifcfg-* \
|
|
|
749 |
| sed "s|/etc/sysconfig/network-scripts/ifcfg-||" | grep -v lo )
|
|
|
750 |
for device in $devices; do
|
|
|
751 |
ifconfig $device up > /dev/null 2>&1 &
|
|
|
752 |
done
|
|
|
753 |
fi
|
|
|
754 |
|