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

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

Parent Directory Parent Directory | Revision Log Revision Log


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