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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 888 - (hide annotations) (download)
Thu Nov 8 15:18:14 2001 UTC (11 years, 7 months ago) by lange
Original Path: trunk/scripts/make-fai-nfsroot
File size: 9950 byte(s)
added call_verbose() and add_packages_nfsroot()
you can now redirect the output of make-fai-nfsroot -v to a file
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 368 # (c) 2000-2001 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 485 # Packages that are install to nfsroot by default
31     # Additional packages are defined with $NFSROOT_PACKAGES in fai.conf
32 lange 869 packages="dhcp-client file rdate cfengine bootpc wget rsh-client less dump ext2resize strace hdparm parted dnsutils grub ntpdate psmisc hwtools dosfstools"
33 lange 485
34 lange 217 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
35 lange 2
36 lange 485 if [ "$UID" -ne 0 ]; then
37     echo "Run this program as root."
38     exit 9
39     fi
40    
41 lange 119 while getopts v opt ; do
42     case "$opt" in
43     v) verbose=1 ;;
44     esac
45     done
46    
47 lange 330 set -e
48 lange 119 . /etc/fai.conf
49 lange 485 packages="$packages $NFSROOT_PACKAGES"
50 lange 491 ROOTCMD="chroot $NFSROOT"
51 lange 119
52 lange 691 LIBFAI=/usr/lib/fai
53 lange 119 conffile=$NFSROOT/etc/rcS_fai.conf
54 lange 14 export DEBIAN_FRONTEND=Noninteractive
55 lange 2
56 lange 581 trap "umount_dirs" EXIT
57 lange 2 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
58 lange 203 die() {
59    
60     echo $*
61     exit 99
62     }
63     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
64 lange 888 call_verbose() {
65    
66     if [ "$verbose" ]; then
67     $*
68     else
69     $* > /dev/null
70     fi
71     }
72     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
73 lange 545 install_kernel_nfsroot() {
74 lange 597
75 lange 545 rm -rf $NFSROOT/boot/*-$KERNELVERSION $NFSROOT/lib/modules/$KERNELVERSION
76     dpkg -x $KERNELPACKAGE $NFSROOT
77     # if $NFROOT/proc/modules exists, then update-modules calls depmod -a without
78     # these special flags; so umount first
79     umount $NFSROOT/proc
80     chroot $NFSROOT update-modules
81     chroot $NFSROOT depmod -a -F /boot/System.map-$KERNELVERSION $KERNELVERSION
82     }
83     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
84 lange 69 setup_ssh() {
85    
86 lange 485 # nothing to do if no ssh is available in nfsroot
87     [ -f $NFSROOT/var/lib/dpkg/info/ssh.list ] || return 0
88 lange 425 mkdir -p -m 700 $NFSROOT/root/.ssh
89 lange 581 [ -f /etc/ssh/ssh_known_hosts ] && cp /etc/ssh/ssh_known_hosts $NFSROOT/root/.ssh/known_hosts
90 lange 425 loguserhome=`eval "cd ~$LOGUSER 2>/dev/null && pwd;true"`
91     [ -d $loguserhome/.ssh ] && cp -p $loguserhome/.ssh/identity* $NFSROOT/root/.ssh/
92    
93 lange 119 # enable root login
94     perl -pi -e 's/PermitRootLogin no/PermitRootLogin yes/' $NFSROOT/etc/ssh/sshd_config
95     if [ -f "$SSH_IDENTITY" ]; then
96 lange 130 cp -p $SSH_IDENTITY $NFSROOT/root/.ssh/authorized_keys
97 lange 217 echo You can log into install clients without password using $SSH_IDENTITY
98 lange 119 fi
99 lange 69 }
100     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
101 lange 119 copy_fai_files() {
102 lange 2
103 lange 485 # copy to nfsroot
104 lange 217 perl -pi -e "s/^root::/root:${FAI_ROOTPW}:/" etc/passwd
105 lange 119 mkdir -p $NFSROOT/fai/fai_config $NFSROOT/usr/share/fai
106 lange 485 cd $NFSROOT
107     cp -p $LIBFAI/sbin/dhclient-script $LIBFAI/etc/dhclient.conf /etc/fai.conf etc
108     cp -p $LIBFAI/sbin/* sbin
109     cp -p $LIBFAI/etc/fai_modules_off etc/modutils
110    
111 lange 632 cp -p /usr/share/fai/subroutines usr/share/fai
112 lange 485 cp -p $LIBFAI/etc/apt.conf etc/apt
113     cp -p /usr/lib/perl5/Debian/Fai.pm usr/lib/perl5/Debian/
114     echo $NFSROOT_ETC_HOSTS >> etc/hosts
115 lange 119 }
116     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
117 lange 661 call_debootstrap() {
118    
119 lange 674 echo "Creating nfsroot for $1 using debootstrap"
120 lange 661 [ "$verbose" ] && echo "calling debootstrap $1 $NFSROOT $2"
121 lange 888 LC_ALL=C yes '' | debootstrap $1 $NFSROOT $2
122 lange 661 }
123     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
124     create_base() {
125    
126 lange 669 if [ "$FAI_DEBOOTSTRAP" ]; then
127 lange 888 call_verbose call_debootstrap $FAI_DEBOOTSTRAP
128 lange 875 $ROOTCMD apt-get clean
129 lange 669 echo "Creating base.tgz"
130 lange 661 tar -C $NFSROOT -cf - . | gzip > $NFSROOT/../base.tgz
131     mv $NFSROOT/../base.tgz $NFSROOT/var/tmp/base.tgz
132     else
133     # old method for potato
134     get_basetgz
135     echo "Unpacking base2_2.tgz"
136     zcat /tmp/base2_2.tgz | tar -C $NFSROOT -xpf -
137     cp -p /tmp/base2_2.tgz $NFSROOT/var/tmp/base.tgz
138     fi
139     }
140     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
141 lange 119 create_nfsroot() {
142    
143 lange 581 mkdir -p $NFSROOT/fai
144 lange 217 cd $NFSROOT || die "Error: Can't cd to $NFSROOT"
145 lange 661 create_base
146 lange 501 mknod dev/boot255 c 0 255
147 lange 119
148 lange 480 if [ "$FAI_DEBMIRROR" ]; then
149 lange 361 mkdir -p $NFSROOT/$MNTPOINT
150 lange 480 mount -o ro,rsize=8192 $FAI_DEBMIRROR $NFSROOT/$MNTPOINT || die "Can't mount $FAI_DEBMIRROR"
151 lange 203 fi
152    
153 lange 119 # hoaks some packages
154 lange 683 > etc/fstab # dump and raidtool2 needs these files
155     > etc/raidtab
156 lange 217 mkdir -p lib/modules/$KERNELVERSION # dirty trick to hoax lvm
157 lange 683 > lib/modules/$KERNELVERSION/modules.dep # dirty trick to hoax lvm
158 lange 485 mkdir -p etc/ssh
159 lange 683 > etc/ssh/NOSERVER
160 lange 119
161 lange 708 if [ "$FAI_SOURCES_LIST" ]; then
162     echo "$FAI_SOURCES_LIST" > etc/apt/sources.list
163     else
164     cp /etc/apt/sources.list etc/apt/sources.list
165     fi
166 lange 888 echo "Upgrading $NFSROOT"
167     call_verbose upgrade_nfsroot
168     echo "Adding additional packages to $NFSROOT:"
169     echo "$packages"
170     call_verbose add_packages_nfsroot
171 lange 119 copy_fai_files
172    
173     # set timezone
174 lange 485 rm -f etc/localtime
175     cp -d /etc/localtime /etc/timezone etc
176 lange 119
177 lange 485 # make little changes to nfsroot, because nfsroot is
178 lange 217 # read only for the install clients
179 lange 187 rm -rf etc/mtab var/run
180 lange 485 mv etc/init.d/rcS etc/init.d/rcS.orig
181     ln -s /proc/mounts etc/mtab
182     ln -s /tmp/var/run var/run
183     ln -sf /tmp/etc/resolv.conf etc/resolv.conf
184     ln -s /sbin/rcS_fai etc/init.d/rcS
185 lange 714 # for nis
186     [ -d var/yp ] && ln -s /tmp/binding var/yp/binding
187 lange 2
188 lange 217 # turn off logging of loading kernel modules
189 lange 735 [ -d var/log/ksymoops/ ] && rmdir var/log/ksymoops/
190 lange 485 ln -s /dev/null var/log/ksymoops
191 lange 119
192 lange 217 # definition for loopback device
193 lange 485 echo "iface lo inet loopback" > etc/network/interfaces
194 lange 305
195 lange 485 echo "*.* /tmp/syslog.log" > etc/syslog.conf
196     echo ". /usr/share/fai/subroutines" >> root/.profile
197 lange 361
198 lange 425 setup_ssh
199 lange 119
200 lange 217 cat >$NFSROOT/etc/rc2.d/S01fai_abort <<-EOF
201 lange 183 #!/bin/sh
202     echo FAI: installation aborted.
203     echo reboot with: faireboot
204     echo or after a logout
205     sh
206     cd /
207     umount -ar
208     reboot -dfi
209 lange 2 EOF
210 lange 217 chmod a+rx $NFSROOT/etc/rc2.d/S01fai_abort
211 lange 2 }
212     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
213 lange 27 upgrade_nfsroot() {
214 lange 2
215 lange 242 cp /etc/resolv.conf $NFSROOT/etc
216 lange 491 $ROOTCMD apt-get update
217     $ROOTCMD apt-get check
218 lange 750 rm -rf $NFSROOT/etc/apm
219 lange 485 mount -t proc /proc $NFSROOT/proc
220 lange 750 $ROOTCMD apt-get --purge -y remove debconf+ pcmcia-cs ppp pppconfig </dev/null
221 lange 57
222 lange 217 # fake start-stop-dameon
223 lange 491 $ROOTCMD dpkg-divert --quiet --package fai --add --rename /sbin/start-stop-daemon
224 lange 217 cp $LIBFAI/sbin/start-stop-daemon $NFSROOT/sbin
225 lange 491 $ROOTCMD apt-get -y upgrade
226 lange 888 }
227     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
228     add_packages_nfsroot() {
229    
230 lange 491 $ROOTCMD apt-get -y --fix-missing install $packages </dev/null
231     $ROOTCMD apt-get clean
232 lange 2 }
233     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
234 lange 69 get_basetgz() {
235 lange 2
236 lange 661 [ -f /tmp/base2_2.tgz ] && return
237     [ "$FAI_BASETGZ" ] || die "No /tmp/base2_2.tgz found and FAI_BASETGZ not defined."
238 lange 274 case $FAI_BASETGZ in
239 lange 119 ftp:*|http:*)
240 lange 485 echo "Fetching $FAI_BASETGZ via wget. This may take some time."
241 lange 203 TMPBDIR=`mktemp /tmp/FAI-wget-XXXXXX` || exit 1
242     rm $TMPBDIR; mkdir $TMPBDIR || exit
243 lange 274 wget -P$TMPBDIR $FAI_BASETGZ
244 lange 661 mv $TMPBDIR/base2_2.tgz /tmp
245 lange 203 rm -rf $TMPBDIR
246 lange 119 ;;
247 lange 661 /*/base2_2.tgz)
248     rm -f /tmp/base2_2.tgz
249 lange 460 test -r $FAI_BASETGZ || die "Can't read $FAI_BASETGZ. Check FAI_BASETGZ in fai.conf."
250 lange 278 ln -s $FAI_BASETGZ /tmp
251 lange 119 ;;
252 lange 217 *)
253 lange 867 die "FAI_BASETGZ in fai.conf is $FAI_BASETGZ and looks very strange."
254 lange 217 ;;
255 lange 119 esac
256 lange 69 }
257     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
258 lange 581 umount_dirs() {
259    
260     cd /
261     sleep 2
262     umount $NFSROOT/proc 1>/dev/null 2>&1 || true
263     umount $NFSROOT/dev/pts 1>/dev/null 2>&1 ||true
264     if [ "$FAI_DEBMIRROR" ]; then
265     test -d $NFSROOT/$MNTPOINT && umount $NFSROOT/$MNTPOINT || true
266     fi
267     # show directories still mounted on nfsroot
268 lange 586 mount | grep " on $NFSROOT " || true
269 lange 581 }
270     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
271 lange 169 # main routine
272    
273 lange 119 if [ -d $NFSROOT/fai ]; then
274     echo $NFSROOT already exists. Removing $NFSROOT
275 lange 361 umount $NFSROOT/dev/pts 1>/dev/null 2>&1 || true
276 lange 691 rm -rf $NFSROOT/.??* $NFSROOT/*
277     # also remove files $NFSROOT/.? but not . and ..
278     find $NFSROOT ! -type d -xdev -maxdepth 1 | xargs -r rm -f
279 lange 2 fi
280    
281 lange 203 create_nfsroot
282 lange 330
283 lange 545 if [ -f $KERNELPACKAGE ]; then
284     # create tftp boot images
285     install_kernel_nfsroot
286     mknbi-linux --verbose $NFSROOT/boot/vmlinuz-$KERNELVERSION /boot/fai/installimage
287 lange 597 # imggen is free software from 3com
288     # it converts netboot image to images, that are bootable by 3com network cards
289 lange 545 imggen=`which imggen || true`
290 lange 644 if [ -x "$imggen" ]; then
291 lange 545 imggen -a /boot/fai/installimage /boot/fai/installimage_3com
292     fi
293     else
294 lange 597 echo "Kernel package $KERNELPACKAGE not found."
295     echo "No install kernel installed in /boot/fai."
296     echo "No kernel modules available in nfsroot."
297 lange 545 fi
298    
299 lange 485 echo make-fai-nfsroot finished.
300 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