minimal fixes ;) - should work now - semi automatic :))
[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 # packages might install new fstab file, stored.
91 cp $root/etc/fstab $root/etc/fstab~
92
93 #
94 # install packages
95 #
96 cd /tmp # we need to wget stuff!
97 pkglist=""
98 [ -f $myconf/packages ] && pkglist=$myconf/packages
99 if [ -z "$pkglist" ] ; then
100         echo "cant find package list for $myip, aborting"
101         exit
102 fi
103 hdw-get dist-install $root $pkglist
104
105 #
106 # config / files
107 #
108 cp $root/etc/fstab~ $root/etc/fstab
109 cp /etc/hdw-get.conf $root/etc
110 # files
111 cd /fai/files
112 for file in `find -type f | grep -v CVS`; do
113         srcf=`basename $file`
114         trgf=`dirname $file`
115         [ "$srcf" = "DEFAULT" -o "$srcf" = "$myip" ] && cp -v $file $root/$trgf
116 done
117
118 #
119 # essential device file
120 #
121 [ ! -c $root/dev/null ] && mknod -m 0666 $root/dev/null c 1 3
122 [ ! -c $root/dev/console ] && mknod -m 0600 $root/dev/console c 5 1
123
124
125 #
126 # lilo
127 #
128 proot=${disk}`grep /[^a-z,^A-Z] $myconf/disk | awk '{ print $1 }'`
129 echo "running lilo -> root device = $proot"
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 mkdir -p /dev/shm && mount /dev/shm
150 mkdir -p /dev/pts && mount /dev/pts
151 udevstart
152 ln -s /proc/self/fd /dev/fd
153 ln -s /proc/self/fd/0 /dev/stdin
154 ln -s /proc/self/fd/1 /dev/stdout
155 ln -s /proc/self/fd/2 /dev/stderr
156 ln -s /proc/kcore /dev/core
157 lilo
158 EOF
159 chmod 755 $root/run_lilo.sh
160 chroot $root /usr/bin/env PATH="/bin:/usr/bin:/sbin:/usr/sbin" /bin/bash \
161         --login +h /run_lilo.sh
162
163 echo
164 echo "fai finished, good luck for reboot ... :)"
165 echo
166
167 touch /tmp/fai_finished
168
169 exit 0