/[fai]/trunk/scripts/make-fai-nfsroot
ViewVC logotype

Contents of /trunk/scripts/make-fai-nfsroot

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1737 - (hide annotations) (download)
Thu Mar 27 16:40:21 2003 UTC (10 years, 1 month ago) by lange
File size: 13100 byte(s)
add dhclient3 support
fix ownership of $NFSROOT/root/.ssh/authorized_keys
1 lange 46 #! /bin/sh
2 lange 2
3     # $Id$
4     #*********************************************************************
5     #
6     # make-fai-nfsroot -- create nfsroot directory and add additional packages
7     #
8     # This script is part of FAI (Fully Automatic Installation)
9 lange 1737 # (c) 2000-2003 by Thomas Lange, lange@informatik.uni-koeln.de
10 lange 2 # Universitaet zu Koeln
11     #
12     #*********************************************************************
13     # This program is free software; you can redistribute it and/or modify
14     # it under the terms of the GNU General Public License as published by
15     # the Free Software Foundation; either version 2 of the License, or
16     # (at your option) any later version.
17     #
18     # This program is distributed in the hope that it will be useful, but
19     # WITHOUT ANY WARRANTY; without even the implied warranty of
20     # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21     # General Public License for more details.
22     #
23     # A copy of the GNU General Public License is available as
24     # `/usr/share/common-licences/GPL' in the Debian GNU/Linux distribution
25     # or on the World Wide Web at http://www.gnu.org/copyleft/gpl.html. You
26     # can also obtain it by writing to the Free Software Foundation, Inc.,
27     # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
28     #*********************************************************************
29    
30 lange 1035 # Packages that are install to nfsroot by default Additional packages are
31     # defined with $NFSROOT_PACKAGES in fai.conf
32 lange 1737 packages="dhcp3-client ssh portmap file rdate cfengine cvs bootpc rsync wget
33     rsh-client less dump reiserfsprogs dpkg-dev ext2resize strace hdparm parted
34     dnsutils grub ntpdate dosfstools sysutils dialog libdetect0 discover mdetect
35     read-edid kudzu hwtools"
36 lange 485
37 lange 1303 PATH=/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin
38 lange 2
39 lange 1297 if [ `id -u` -ne 0 ]; then
40 lange 1035 echo "Run this program as root."
41     exit 9
42 lange 485 fi
43    
44 lange 1035 while getopts rv opt ; do
45     case "$opt" in
46 lange 119 v) verbose=1 ;;
47 lange 1035 r) recover=1 ;;
48     esac
49 lange 119 done
50    
51 lange 330 set -e
52 lange 936 . /etc/fai/fai.conf
53 lange 1035
54 lange 1331 echo Creating FAI nfsroot can take a long time and will
55     echo need more than 160MB disk space in $NFSROOT.
56 lange 491 ROOTCMD="chroot $NFSROOT"
57 lange 119
58 lange 1035 RUNDIR=/var/run/fai/make-nfs-root
59     [ ! -d $RUNDIR ] && mkdir -p $RUNDIR
60     [ ! "$recover" ] && rm -rf $RUNDIR/*
61    
62 lange 691 LIBFAI=/usr/lib/fai
63 lange 981 SHAREFAI=/usr/share/fai
64 lange 119 conffile=$NFSROOT/etc/rcS_fai.conf
65 lange 1161 export DEBIAN_FRONTEND=noninteractive
66 lange 2
67 lange 581 trap "umount_dirs" EXIT
68 lange 2 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
69 lange 203 die() {
70    
71 lange 1028 echo "$@"
72 lange 203 exit 99
73     }
74     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
75 lange 1035 call_with_stamp() {
76    
77     local func=$1
78     local stamp=$RUNDIR/$func
79     # call subroutine
80     [ "$recover" -a -f $stamp ] && return 0
81     "$@"
82     > $stamp
83     }
84     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
85 lange 888 call_verbose() {
86    
87     if [ "$verbose" ]; then
88 lange 1035 "$@"
89 lange 888 else
90 lange 1035 "$@" > /dev/null
91 lange 888 fi
92     }
93     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
94 lange 545 install_kernel_nfsroot() {
95 lange 597
96 lange 545 rm -rf $NFSROOT/boot/*-$KERNELVERSION $NFSROOT/lib/modules/$KERNELVERSION
97 lange 999 # since woody we can install the kernel using dpkg -i
98     echo "do_boot_enable=no" > $NFSROOT/etc/kernel-img.conf
99 lange 545 dpkg -x $KERNELPACKAGE $NFSROOT
100     # if $NFROOT/proc/modules exists, then update-modules calls depmod -a without
101     # these special flags; so umount first
102 lange 1035 [ -e $NFSROOT/proc/modules ] && umount $NFSROOT/proc
103 lange 545 chroot $NFSROOT update-modules
104     chroot $NFSROOT depmod -a -F /boot/System.map-$KERNELVERSION $KERNELVERSION
105     }
106     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
107 lange 69 setup_ssh() {
108    
109 lange 485 # nothing to do if no ssh is available in nfsroot
110     [ -f $NFSROOT/var/lib/dpkg/info/ssh.list ] || return 0
111 lange 425 mkdir -p -m 700 $NFSROOT/root/.ssh
112 lange 1040 if [ -n "$LOGUSER" ] ; then
113     loguserhome=`eval "cd ~$LOGUSER 2>/dev/null && pwd;true"`
114 lange 1278 # is copying of *.pub important?
115 lange 1601 [ -f $loguserhome/.ssh/known_hosts ] && cp $loguserhome/.ssh/known_hosts $NFSROOT/root/.ssh/known_hosts
116 lange 1255 [ -d $loguserhome/.ssh ] && {
117     [ -f $loguserhome/.ssh/id_dsa ] &&
118     cp -p $loguserhome/.ssh/id_dsa* $NFSROOT/root/.ssh/
119     [ -f $loguserhome/.ssh/id_rsa ] &&
120     cp -p $loguserhome/.ssh/id_rsa* $NFSROOT/root/.ssh/
121     cp -p $loguserhome/.ssh/*.pub $NFSROOT/root/.ssh/
122     }
123 lange 1040 fi
124 lange 425
125 lange 119 # enable root login
126     perl -pi -e 's/PermitRootLogin no/PermitRootLogin yes/' $NFSROOT/etc/ssh/sshd_config
127     if [ -f "$SSH_IDENTITY" ]; then
128 lange 1737 cp $SSH_IDENTITY $NFSROOT/root/.ssh/authorized_keys
129     chmod 0644 $NFSROOT/root/.ssh/authorized_keys
130 lange 1035 echo You can log into install clients without password using $SSH_IDENTITY
131 lange 119 fi
132 lange 69 }
133     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
134 lange 119 copy_fai_files() {
135 lange 2
136 lange 485 # copy to nfsroot
137 lange 1084 perl -pi -e "s#^root::#root:${FAI_ROOTPW}:#" etc/passwd
138 lange 1303 mkdir -p $NFSROOT/$FAI/fai_config $NFSROOT/$SHAREFAI $NFSROOT/$LIBFAI $NFSROOT/etc/fai
139 lange 485 cd $NFSROOT
140 lange 1737 cp -p $SHAREFAI/etc/dhclient.conf etc/dhcp3
141     ln -fs ../../sbin/dhclient-script etc/dhcp3/dhclient-script
142 lange 1035 cp -Rp /etc/fai etc/
143 lange 1026 [ -f /etc/fai/.cvspass ] && cp -p /etc/fai/.cvspass .cvspass
144 lange 936 cp -p $LIBFAI/sbin/* sbin/
145 lange 1737 cp -p /usr/sbin/{ftar,fcopy,install_packages,bootsector} usr/sbin/
146 lange 1348 cp -p /usr/bin/fai-class usr/bin/
147 lange 1316 cp -p $LIBFAI/* usr/lib/fai 2>/dev/null || true # cp will complain about directories
148 lange 981 cp -p $SHAREFAI/etc/fai_modules_off etc/modutils/
149 lange 485
150 lange 1120 cp -p $SHAREFAI/subroutines* usr/share/fai
151 lange 981 cp -p $SHAREFAI/etc/apt.conf etc/apt
152 lange 1212 cp -p /usr/share/perl5/Debian/Fai.pm usr/share/perl5/Debian/
153 lange 485 echo $NFSROOT_ETC_HOSTS >> etc/hosts
154 lange 119 }
155     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
156 lange 661 call_debootstrap() {
157 lange 1035
158 lange 674 echo "Creating nfsroot for $1 using debootstrap"
159 lange 1536 [ "$verbose" ] && echo "Calling debootstrap $1 $NFSROOT $2"
160 lange 1475 yes '' | call_verbose debootstrap $FAI_DEBOOTSTRAP_OPTS $1 $NFSROOT $2 || true
161 lange 661 }
162     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
163     create_base() {
164    
165 lange 669 if [ "$FAI_DEBOOTSTRAP" ]; then
166 lange 1475 call_with_stamp call_debootstrap $FAI_DEBOOTSTRAP
167 lange 1035 $ROOTCMD apt-get clean
168     echo "Creating base.tgz"
169 lange 1278 tar -l -C $NFSROOT -cf - . | gzip > $NFSROOT/../base.tgz
170 lange 1035 mv $NFSROOT/../base.tgz $NFSROOT/var/tmp/base.tgz
171 lange 661 else
172 lange 1284 die "\$FAI_DEBOOTSTRAP not defined."
173 lange 661 fi
174     }
175     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
176 lange 119 create_nfsroot() {
177    
178 lange 999 mkdir -p $NFSROOT/$FAI
179 lange 217 cd $NFSROOT || die "Error: Can't cd to $NFSROOT"
180 lange 119
181 lange 1035 call_with_stamp create_base
182    
183 lange 480 if [ "$FAI_DEBMIRROR" ]; then
184 lange 1035 mkdir -p $NFSROOT/$MNTPOINT
185 lange 1278 mount -o ro,noatime,rsize=8192 $FAI_DEBMIRROR $NFSROOT/$MNTPOINT || \
186 lange 1035 die "Can't mount $FAI_DEBMIRROR"
187     fi
188 lange 203
189 lange 119 # hoaks some packages
190 lange 889 # liloconfig, dump and raidtool2 needs these files
191     echo "# UNCONFIGURED FSTAB FOR BASE SYSTEM" > etc/fstab
192 lange 683 > etc/raidtab
193 lange 217 mkdir -p lib/modules/$KERNELVERSION # dirty trick to hoax lvm
194 lange 683 > lib/modules/$KERNELVERSION/modules.dep # dirty trick to hoax lvm
195 lange 1316
196 lange 1080 echo 'NTPSERVERS=""' > etc/default/ntp-servers
197 lange 908
198     # woody uses debconf
199 lange 119
200 lange 1373 # use FAI_SOURCES_LIST, if undefined copy from /etc/fai or last try from /etc/apt
201 lange 708 if [ "$FAI_SOURCES_LIST" ]; then
202 lange 1035 echo "$FAI_SOURCES_LIST" > etc/apt/sources.list
203 lange 708 else
204 lange 1373 cp /etc/fai/sources.list etc/apt/sources.list || \
205 lange 1035 cp /etc/apt/sources.list etc/apt/sources.list
206 lange 1373
207 lange 708 fi
208 lange 960 [ -f /etc/apt/preferences ] && cp /etc/apt/preferences etc/apt
209 lange 888 echo "Upgrading $NFSROOT"
210 lange 1035 call_verbose call_with_stamp upgrade_nfsroot
211 lange 888 echo "Adding additional packages to $NFSROOT:"
212     echo "$packages"
213 lange 1035 call_verbose call_with_stamp add_packages_nfsroot
214     call_with_stamp copy_fai_files
215 lange 119
216     # set timezone
217 lange 485 rm -f etc/localtime
218     cp -d /etc/localtime /etc/timezone etc
219 lange 119
220 lange 485 # make little changes to nfsroot, because nfsroot is
221 lange 217 # read only for the install clients
222 lange 1112 rm -rf etc/mtab var/run etc/sysconfig
223 lange 485 mv etc/init.d/rcS etc/init.d/rcS.orig
224     ln -s /proc/mounts etc/mtab
225     ln -s /tmp/var/run var/run
226     ln -sf /tmp/etc/resolv.conf etc/resolv.conf
227 lange 1112 ln -sf /tmp etc/sysconfig
228 lange 1255 ln -s ../../sbin/rcS_fai etc/init.d/rcS
229 lange 893 ln -s /dev/null etc/network/ifstate
230 lange 714 # for nis
231     [ -d var/yp ] && ln -s /tmp/binding var/yp/binding
232 lange 2
233 lange 217 # turn off logging of loading kernel modules
234 lange 735 [ -d var/log/ksymoops/ ] && rmdir var/log/ksymoops/
235 lange 485 ln -s /dev/null var/log/ksymoops
236 lange 119
237 lange 217 # definition for loopback device
238 lange 485 echo "iface lo inet loopback" > etc/network/interfaces
239 lange 305
240 lange 1327 echo "*.* /tmp/fai/syslog.log" > etc/syslog.conf
241 lange 1211 cat >> root/.profile <<-EOF
242 lange 1322 PATH=/usr/local/sbin:/usr/local/bin:/usr/lib/fai:/bin:/sbin:/usr/bin:/usr/sbin:
243     export PATH
244 lange 1211 . $SHAREFAI/subroutines
245     . $SHAREFAI/subroutines-$OS_TYPE
246     set -a
247     . /etc/fai/fai.conf
248     . /tmp/rcsfai.var
249     EOF
250 lange 361
251 lange 1035 call_verbose call_with_stamp setup_ssh
252 lange 119
253 lange 217 cat >$NFSROOT/etc/rc2.d/S01fai_abort <<-EOF
254 lange 1035 #!/bin/sh
255     echo FAI: installation aborted.
256     echo reboot with: faireboot
257     echo or after a logout
258     sh
259     cd /
260     umount -ar
261     reboot -dfi
262 lange 2 EOF
263 lange 217 chmod a+rx $NFSROOT/etc/rc2.d/S01fai_abort
264 lange 1493
265     echo "$FAI_LOCAL_REPOSITORY" >> etc/apt/sources.list
266 lange 2 }
267     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
268 lange 27 upgrade_nfsroot() {
269 lange 2
270 lange 242 cp /etc/resolv.conf $NFSROOT/etc
271 lange 491 $ROOTCMD apt-get update
272     $ROOTCMD apt-get check
273 lange 750 rm -rf $NFSROOT/etc/apm
274 lange 485 mount -t proc /proc $NFSROOT/proc
275 lange 1102 $ROOTCMD apt-get --purge -y install debconf </dev/null
276 lange 57
277 lange 217 # fake start-stop-dameon
278 lange 491 $ROOTCMD dpkg-divert --quiet --package fai --add --rename /sbin/start-stop-daemon
279 lange 1408 $ROOTCMD dpkg-divert --quiet --package fai --add --rename /sbin/discover
280 lange 217 cp $LIBFAI/sbin/start-stop-daemon $NFSROOT/sbin
281 lange 491 $ROOTCMD apt-get -y upgrade
282 lange 888 }
283     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
284     add_packages_nfsroot() {
285    
286 lange 491 $ROOTCMD apt-get -y --fix-missing install $packages </dev/null
287 lange 1040 if [ -n "$NFSROOT_PACKAGES" ] ; then
288     $ROOTCMD apt-get -y --fix-missing install $NFSROOT_PACKAGES </dev/null
289     fi
290 lange 491 $ROOTCMD apt-get clean
291 lange 2 }
292     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
293 lange 581 umount_dirs() {
294    
295 lange 1411 $ROOTCMD dpkg-divert --package fai --rename --remove /sbin/discover
296 lange 581 cd /
297     sleep 2
298     umount $NFSROOT/proc 1>/dev/null 2>&1 || true
299     umount $NFSROOT/dev/pts 1>/dev/null 2>&1 ||true
300     if [ "$FAI_DEBMIRROR" ]; then
301 lange 1035 test -d $NFSROOT/$MNTPOINT && umount $NFSROOT/$MNTPOINT || true
302 lange 581 fi
303     # show directories still mounted on nfsroot
304 lange 586 mount | grep " on $NFSROOT " || true
305 lange 581 }
306     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
307 lange 1022 get_kernel_version() {
308    
309     local package=$1
310     KERNELVERSION=`dpkg --info $1 | grep "Package: kernel-image" | sed -e 's/.*kernel-image-'//`
311     }
312     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
313 lange 1035 setup_bootp(){
314    
315 lange 1284 if [ -x "`which mknbi-linux`" ]; then
316 lange 1317 mknbi-linux --verbose -a "ip=both" \
317 lange 1278 $NFSROOT/boot/vmlinuz-$KERNELVERSION /boot/fai/installimage
318     else
319 lange 1553 echo "Command mknbi-linux not found. Can not set up BOOTP booting. Please install the package netboot and rerun fai-setup."
320     return
321 lange 1035 fi
322 lange 1278
323     # imggen is free software from 3com - use ver1.00: 1.01 produces "Image too Big" errors.
324     # it converts netboot images to images which are bootable by 3com network cards
325     if [ -x "`which imggen`" ]; then
326     imggen -a /boot/fai/installimage /boot/fai/installimage_3com
327     fi
328 lange 1035 echo "BOOTP environment prepared."
329     }
330    
331     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
332     setup_dhcp(){
333    
334     # pxe and dhcp environment
335 lange 1255 local pxebin=/usr/lib/syslinux/pxelinux.0
336 lange 1035 cp -p $NFSROOT/boot/vmlinuz-$KERNELVERSION /boot/fai/installkernel
337 lange 1255 [ -f $pxebin ] && cp $pxebin /boot/fai
338 lange 1035 [ -d /boot/fai/pxelinux.cfg ] || mkdir /boot/fai/pxelinux.cfg || true
339     cp -p /usr/share/fai/etc/pxelinux.cfg /boot/fai/pxelinux.cfg/default
340 lange 1692 echo "DHCP environment prepared. If you want to use it, you have to enable the dhcpd and the special tftp daemon."
341 lange 1035 }
342     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
343 lange 169 # main routine
344    
345 lange 1035 # Kill the directory if not in recover mode
346     if [ -d $NFSROOT/$FAI -a ! "$recover" ]
347     then
348 lange 119 echo $NFSROOT already exists. Removing $NFSROOT
349 lange 361 umount $NFSROOT/dev/pts 1>/dev/null 2>&1 || true
350 lange 691 rm -rf $NFSROOT/.??* $NFSROOT/*
351     # also remove files $NFSROOT/.? but not . and ..
352     find $NFSROOT ! -type d -xdev -maxdepth 1 | xargs -r rm -f
353 lange 2 fi
354    
355 lange 1035 # Create a new nfsroot
356     call_with_stamp create_nfsroot
357 lange 330
358 lange 1035 # Install the kernel package
359 lange 545 if [ -f $KERNELPACKAGE ]; then
360 lange 1022 # determine kernel version
361     get_kernel_version $KERNELPACKAGE
362 lange 1035
363 lange 545 # create tftp boot images
364 lange 1035 call_with_stamp install_kernel_nfsroot
365 lange 914
366 lange 1316 # setup for both DHCP and BOOTP
367     call_with_stamp setup_dhcp
368     call_with_stamp setup_bootp
369 lange 545 else
370 lange 597 echo "Kernel package $KERNELPACKAGE not found."
371     echo "No install kernel installed in /boot/fai."
372     echo "No kernel modules available in nfsroot."
373 lange 545 fi
374    
375 lange 485 echo make-fai-nfsroot finished.
376 lange 14 exit 0

Properties

Name Value
svn:eol-style native
svn:executable *
svn:keywords Author Date Id Revision

  ViewVC Help
Powered by ViewVC 1.1.5