finished minimal fai procedure + docu
[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 proot=""
13
14 if [ ! -d $myconf ] ; then
15         echo "no config found, aborting fai"
16         exit
17 fi
18
19 echo "debug:"
20 route
21 ifconfig
22
23 #
24 # we need writeable /tmp
25 #
26 mount -tramfs ramfs /tmp
27
28 #
29 # check if disk is ready
30 #
31 if [ ! -f $croot/$myip/disk_ready ] ; then
32         echo
33         echo "you're disk seems to not be ready. login now and use cfdisk"
34         echo "to partition your harddisk. please make sure it's compatible"
35         echo "to $croot/$myip/disk:"
36         cat $croot/$myip/disk
37         echo
38         echo "after partitioning your harddisk please touch the file"
39         echo "$croot/$myip/disk_ready"
40         echo "on your fai install server and reboot."
41         echo "... fully automated, he? :p"
42         echo
43         exit
44 fi
45
46 #
47 # disk
48 #
49 disk=0
50 disk=`grep '#\ disk' $myconf/disk | awk '{ print $3 }'`
51 if [ ! -b $disk ] ; then
52         echo "disk $disk not found, aborting fai"
53         exit
54 fi
55 swap=0
56 swap=`grep '#\ swap' $myconf/disk | awk '{ print $3 }'`
57 if [ "$swap" != "0" -a -b ${disk}${swap} ] ; then
58         echo "creating swap device ..."
59         mkswap ${disk}${swap}
60         echo "done"
61 fi
62 cat $myconf/disk | grep -v '^#' | while read nr mp fs ac; do
63         if [ -b ${disk}${nr} ] ; then
64                 action=""
65                 [ "$fs" = "ext3" ] && action="mke2fs -j"
66                 [ "$fs" = "ext2" ] && action="mke2fs"
67                 if [ "$ac" = "format" -a -n "$action" ] ; then
68                         echo "making filesystem for $mp"
69                         $action ${disk}${nr}
70                 fi
71                 if [ "$mp" = "/" ] ; then
72                         echo "mounting root partition"
73                         mount ${disk}${nr} $root
74                         mkdir -p $root/etc
75                         grep -v '/dev/root' /etc/fstab > $root/etc/fstab
76                         echo -e "${disk}${nr}\t$mp\t$fs\tdefaults 0 2" >> \
77                                 $root/etc/fstab
78                         proot=${disk}${nr}
79                 fi
80         fi
81 done
82 cat $myconf/disk | grep -v '^#' | while read nr mp fs ac; do
83         if [ "$mp" != "/" ] ; then
84                 if [ -b ${disk}${nr} ] ; then
85                         mkdir -p $root/$mp
86                         mount ${disk}${nr} $root/$mp
87                         echo -e "${disk}${nr}\t$mp\t$fs\tdefaults 0 2" >> \
88                                 $root/etc/fstab
89                 fi
90         fi
91 done
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 /fai/config/$myip/packages ] && pkglist=/fai/config/$myip/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 cat > $root/etc/lilo.conf << EOF
131 boot=$disk
132 prompt
133 lba32
134 timeout=30
135
136 default=vmlinuz_hdw
137
138 image=/boot/vmlinuz_hdw
139         label=vmlinuz_hdw
140         append="root=$proot"
141         read-only
142
143 EOF
144 # run lilo in chroot
145 cat > $root/run_lilo.sh << EOF
146 mount /dev
147 mount /sys
148 mount /proc
149 udevstart
150 mount -a
151 ln -s /proc/self/fd /dev/fd
152 ln -s /proc/self/fd/0 /dev/stdin
153 ln -s /proc/self/fd/1 /dev/stdout
154 ln -s /proc/self/fd/2 /dev/stderr
155 ln -s /proc/kcore /dev/core
156 lilo
157 EOF
158 chmod 755 $root/run_lilo.sh
159 chroot $root /usr/bin/env PATH="/bin:/usr/bin:/sbin:/usr/sbin" /bin/bash \
160         --login +h /run_lilo.sh
161
162 echo
163 echo "fai finished, good luck for reboot ... :)"
164 echo
165
166 touch /tmp/fai_finished
167
168 exit 0