]> hackdaworld.org Git - hdw-linux/hdw-linux.git/blob - fai/scripts/rc_fai.sh
nfs-utils fixed, cvs download compression changed
[hdw-linux/hdw-linux.git] / fai / scripts / rc_fai.sh
1 #!/bin/bash
2 #
3 # author: hackbard@hackdaworld.dyndns.org
4 #
5 # automated install rc_fai.sh script
6 #
7
8 root=/trg
9 croot=/fai/config
10 myip="`ifconfig eth0 | grep inet\ addr | awk '{ print $2 }' | awk -F: '{ print $2 }'`"
11 myconf=$croot/$myip
12
13 if [ ! -d $myconf ] ; then
14         echo "no config found, aborting fai"
15         exit
16 fi
17
18 echo "debug:"
19 route
20 ifconfig
21
22 #
23 # we need writeable /tmp
24 #
25 mount -tramfs ramfs /tmp
26
27 #
28 # check if disk is ready
29 #
30 if [ ! -f $myconf/disk_ready ] ; then
31         echo
32         echo "you're disk seems to not be ready. login now and use cfdisk"
33         echo "to partition your harddisk. please make sure it's compatible"
34         echo "to $myconf/disk:"
35         cat $myconf/disk
36         echo
37         echo "after partitioning your harddisk please touch the file"
38         echo "$myconf/disk_ready"
39         echo "on your fai install server and reboot."
40         echo "... fully automated, he? :p"
41         echo
42         exit
43 fi
44
45 #
46 # disk
47 #
48 disk=0
49 disk=`grep '#\ disk' $myconf/disk | awk '{ print $3 }'`
50 if [ ! -b $disk ] ; then
51         echo "disk $disk not found, aborting fai"
52         exit
53 fi
54 swap=0
55 swap=`grep '#\ swap' $myconf/disk | awk '{ print $3 }'`
56 if [ "$swap" != "0" -a -b ${disk}${swap} ] ; then
57         echo "creating swap device ..."
58         mkswap ${disk}${swap}
59         echo "done"
60 fi
61 cat $myconf/disk | grep -v '^#' | while read nr mp fs ac; do
62         if [ -b ${disk}${nr} ] ; then
63                 action=""
64                 [ "$fs" = "ext3" ] && action="mke2fs -j"
65                 [ "$fs" = "ext2" ] && action="mke2fs"
66                 if [ "$ac" = "format" -a -n "$action" ] ; then
67                         echo "making filesystem for $mp"
68                         $action ${disk}${nr}
69                 fi
70                 if [ "$mp" = "/" ] ; then
71                         echo "mounting root partition"
72                         mount ${disk}${nr} $root
73                         mkdir -p $root/etc
74                         grep -v '/dev/root' /etc/fstab > $root/etc/fstab
75                         echo -e "${disk}${nr}\t$mp\t$fs\tdefaults 0 2" >> \
76                                 $root/etc/fstab
77                 fi
78         fi
79 done
80 cat $myconf/disk | grep -v '^#' | while read nr mp fs ac; do
81         if [ "$mp" != "/" ] ; then
82                 if [ -b ${disk}${nr} ] ; then
83                         mkdir -p $root/$mp
84                         mount ${disk}${nr} $root/$mp
85                         echo -e "${disk}${nr}\t$mp\t$fs\tdefaults 0 2" >> \
86                                 $root/etc/fstab
87                 fi
88         fi
89 done
90 [ "$swap" != "0" -a -b ${disk}${swap} ] && \
91         echo -e "${disk}${swap}\tswap\tswap\tdefaults 0 0" >> $root/etc/fstab
92 # packages might install new fstab file, stored.
93 cp $root/etc/fstab $root/etc/fstab~
94
95 #
96 # install packages
97 #
98 cd /tmp # we need to wget stuff!
99 pkglist=""
100 [ -f $myconf/packages ] && pkglist=$myconf/packages
101 if [ -z "$pkglist" ] ; then
102         echo "cant find package list for $myip, aborting"
103         exit
104 fi
105 hdw-get dist-install $root $pkglist
106
107 #
108 # config / files
109 #
110 cp $root/etc/fstab~ $root/etc/fstab
111 cp /etc/hdw-get.conf $root/etc
112 # files
113 cd /fai/files
114 for file in `find -type f | grep -v CVS`; do
115         srcf=`basename $file`
116         trgf=`dirname $file`
117         [ "$srcf" = "DEFAULT" -o "$srcf" = "$myip" ] && cp -v $file $root/$trgf
118 done
119
120 #
121 # essential device file
122 #
123 [ ! -c $root/dev/null ] && mknod -m 0666 $root/dev/null c 1 3
124 [ ! -c $root/dev/console ] && mknod -m 0600 $root/dev/console c 5 1
125
126
127 #
128 # lilo
129 #
130 proot=${disk}`grep /[^a-z,^A-Z] $myconf/disk | awk '{ print $1 }'`
131 echo "running lilo -> root device = $proot"
132 cat > $root/etc/lilo.conf << EOF
133 boot=$disk
134 prompt
135 lba32
136 timeout=30
137
138 default=vmlinuz_hdw
139
140 image=/boot/vmlinuz_hdw
141         label=vmlinuz_hdw
142         append="root=$proot"
143         read-only
144
145 EOF
146 # run lilo in chroot
147 cat > $root/run_lilo.sh << EOF
148 mount /dev
149 mount /sys
150 mount /proc
151 mkdir -p /dev/shm && mount /dev/shm
152 mkdir -p /dev/pts && mount /dev/pts
153 udevstart
154 ln -s /proc/self/fd /dev/fd
155 ln -s /proc/self/fd/0 /dev/stdin
156 ln -s /proc/self/fd/1 /dev/stdout
157 ln -s /proc/self/fd/2 /dev/stderr
158 ln -s /proc/kcore /dev/core
159 lilo
160 EOF
161 chmod 755 $root/run_lilo.sh
162 chroot $root /usr/bin/env PATH="/bin:/usr/bin:/sbin:/usr/sbin" /bin/bash \
163         --login +h /run_lilo.sh
164
165 echo
166 echo "fai finished, good luck for reboot ... :)"
167 echo
168
169 touch /tmp/fai_finished
170
171 exit 0