Factor out building of strongswan into own Makefile
[strongswan.git] / testing / scripts / build-umlrootfs
1 #!/bin/bash
2 # Create UML root filesystem
3 #
4 # Copyright (C) 2004  Eric Marchionni, Patrik Rayo
5 # Zuercher Hochschule Winterthur
6 #
7 # This program is free software; you can redistribute it and/or modify it
8 # under the terms of the GNU General Public License as published by the
9 # Free Software Foundation; either version 2 of the License, or (at your
10 # option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
11 #
12 # This program is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 # for more details.
16
17 DIR=`dirname $0`
18
19 source $DIR/function.sh
20
21 [ -f $DIR/../testing.conf ] || die "!! Configuration file 'testing.conf' not found"
22
23 source $DIR/../testing.conf
24
25 cecho-n " * Looking for root image at '$ROOTFS'.."
26 if [ -f "$ROOTFS" ]
27 then
28     cgecho "found it"
29 else
30     cecho "none"
31     exit
32 fi
33
34 [ -d $BUILDDIR ] || die "!! Directory '$BUILDDIR' does not exist"
35
36 ROOTFSDIR=$BUILDDIR/root-fs
37
38 if [ ! -d $ROOTFSDIR ]
39 then
40     cecho-n " * Root file system directory '$ROOTFSDIR' does not exist..creating.."
41     mkdir $ROOTFSDIR
42     cgecho "done"
43 fi
44
45 cd $ROOTFSDIR
46
47 if [ ! -d $LOOPDIR ]
48 then
49     mkdir $LOOPDIR
50 fi
51
52 ######################################################
53 # mount root image
54 #
55 BASE=$BUILDDIR/base.img
56 cecho-n " * Mounting base image $BASE.."
57 cp $ROOTFS $BASE
58 mount -o loop $BASE $LOOPDIR >> $LOGFILE 2>&1
59 mount -t proc none $LOOPDIR/proc >> $LOGFILE 2>&1
60 cgecho "done"
61
62 ######################################################
63 # setting up mountpoint for shared source tree
64 #
65 if [ "${SHAREDTREE+set}" = "set" ]; then
66     cecho " * setting up shared strongswan tree at '$SHAREDTREE'"
67     mkdir $LOOPDIR/root/strongswan-shared
68     echo "" >> $LOOPDIR/etc/fstab
69     echo "none /root/strongswan-shared hostfs $SHAREDTREE" >> $LOOPDIR/etc/fstab
70 fi
71
72 ######################################################
73 # install software from source using 'recipes'
74 #
75 mkdir -p $ROOTFSCOMPILEDIR
76 cecho " * Mounting $ROOTFSCOMPILEDIR as /root/compile.."
77 mkdir -p $LOOPDIR/root/compile
78 mount -o bind $ROOTFSCOMPILEDIR $LOOPDIR/root/compile >> $LOGFILE 2>&1
79
80 cecho " * Installing software from source.."
81 RECPDIR=$UMLTESTDIR/testing/scripts/recipes
82 RECIPES=`ls $RECPDIR/*.mk | xargs -n1 basename`
83 for r in $RECIPES
84 do
85         cecho-n "   - $r.."
86         cp $RECPDIR/$r ${LOOPDIR}/root/compile
87         chroot ${LOOPDIR} make -C /root/compile -f $r >>$LOGFILE 2>&1
88         if [ $? != 0 ]; then
89                 cecho "failed"
90         else
91                 cgecho "done"
92         fi
93 done
94
95 umount $LOOPDIR/root/compile
96
97 ######################################################
98 # remove /etc/resolv.conf
99 #
100 cecho " * Removing /etc/resolv.conf"
101 rm -f $LOOPDIR/etc/resolv.conf
102
103 #####################################
104 # preparing ssh for PK authentication
105 #
106 if [ ! -d ~/.ssh ]
107 then
108         cecho-n " * Creating directory '~/.ssh'.."
109         mkdir ~/.ssh
110         cgecho "done"
111 fi
112
113 cecho-n " * Checking for ssh rsa key '~/.ssh/id_rsa.pub'.."
114 if [ -f ~/.ssh/id_rsa.pub ]
115 then
116         cecho "already exists"
117 else
118         cecho "not found"
119         cecho-n " * Generating ssh rsa key pair.."
120         echo "" | ssh-keygen -N "" -t rsa -f ~/.ssh/id_rsa >> $LOGFILE 2>&1
121         cgecho "done"
122 fi
123
124 if [ -f ~/.ssh/known_hosts ]
125 then
126         cecho-n " * Backing up ~/.ssh/known_hosts to '~/.ssh/known_hosts.before_uml'.."
127         cp -fp ~/.ssh/known_hosts ~/.ssh/known_hosts.before_uml
128         cgecho "done"
129 fi
130 rm ~/.ssh/known_hosts
131 cecho-n " * Creating new '~/.ssh/known_hosts'.."
132 touch ~/.ssh/known_hosts
133 cgecho "done"
134
135 for host in $HOSTNAMEIPV4
136 do
137         HOSTNAME=`echo $host | awk -F, '{ print $1 }'`
138         IP=`echo $host | awk -F, '{ print $2 }'`
139         cecho-n " * Adding uml host $HOSTNAME ($IP) to '~/.ssh/known_hosts'.."
140         echo "$HOSTNAME,$IP `cat $LOOPDIR/etc/ssh/ssh_host_rsa_key.pub`" >> ~/.ssh/known_hosts
141         cgecho "done"
142 done
143
144 ######################################################
145 # copying the host's ssh public key
146 #
147 if [ ! -d $LOOPDIR/root/.ssh ]
148 then
149     mkdir $LOOPDIR/root/.ssh
150 fi
151 cp ~/.ssh/id_rsa.pub $LOOPDIR/root/.ssh/authorized_keys
152
153 ######################################################
154 # setup public key based login among all hosts
155 #
156 cp $LOOPDIR/etc/ssh/ssh_host_rsa_key $LOOPDIR/root/.ssh/id_rsa
157
158 for host in $STRONGSWANHOSTS
159 do
160     eval ip="`echo $HOSTNAMEIPV4 | sed -n -e "s/^.*${host},//gp" | awk -F- '{ print $1 }' | awk '{ print $1 }'`"
161     echo "$host,$ip `cat $LOOPDIR/etc/ssh/ssh_host_rsa_key.pub`" >> $LOOPDIR/root/.ssh/known_hosts
162     echo "`cat $LOOPDIR/etc/ssh/ssh_host_rsa_key.pub` root@$host" >> $LOOPDIR/root/.ssh/authorized_keys
163 done
164
165 umount $LOOPDIR/proc
166 umount $LOOPDIR