fixed fai file copying
[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         trgdir=`dirname $trgf`
118         if [ "$srcf" = "DEFAULT" -o "$srcf" = "$myip" ] ; then
119                 mkdir -p $root/$trgdir
120                 cp -v $file $root/$trgf
121         fi
122 done
123
124 #
125 # essential device file
126 #
127 [ ! -c $root/dev/null ] && mknod -m 0666 $root/dev/null c 1 3
128 [ ! -c $root/dev/console ] && mknod -m 0600 $root/dev/console c 5 1
129
130
131 #
132 # lilo
133 #
134 proot=${disk}`grep /[^a-z,^A-Z] $myconf/disk | awk '{ print $1 }'`
135 echo "running lilo -> root device = $proot"
136 cat > $root/etc/lilo.conf << EOF
137 boot=$disk
138 prompt
139 lba32
140 timeout=30
141
142 default=vmlinuz_hdw
143
144 image=/boot/vmlinuz_hdw
145         label=vmlinuz_hdw
146         append="root=$proot"
147         read-only
148
149 EOF
150 # run lilo in chroot
151 cat > $root/run_lilo.sh << EOF
152 mount /dev
153 mount /sys
154 mount /proc
155 mkdir -p /dev/shm && mount /dev/shm
156 mkdir -p /dev/pts && mount /dev/pts
157 udevstart
158 ln -s /proc/self/fd /dev/fd
159 ln -s /proc/self/fd/0 /dev/stdin
160 ln -s /proc/self/fd/1 /dev/stdout
161 ln -s /proc/self/fd/2 /dev/stderr
162 ln -s /proc/kcore /dev/core
163 lilo
164 EOF
165 chmod 755 $root/run_lilo.sh
166 chroot $root /usr/bin/env PATH="/bin:/usr/bin:/sbin:/usr/sbin" /bin/bash \
167         --login +h /run_lilo.sh
168
169 echo
170 echo "fai finished, good luck for reboot ... :)"
171 echo
172
173 touch /tmp/fai_finished
174
175 exit 0