#!/bin/bash # Create UML root filesystem # # Copyright (C) 2004 Eric Marchionni, Patrik Rayo # Zuercher Hochschule Winterthur # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2 of the License, or (at your # option) any later version. See . # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # for more details. DIR=`dirname $0` source $DIR/function.sh [ -f $DIR/../testing.conf ] || die "!! Configuration file 'testing.conf' not found" source $DIR/../testing.conf cecho-n " * Looking for root image at '$ROOTFS'.." if [ -f "$ROOTFS" ] then cgecho "found it" else cecho "none" exit fi [ -d $BUILDDIR ] || die "!! Directory '$BUILDDIR' does not exist" ROOTFSDIR=$BUILDDIR/root-fs if [ ! -d $ROOTFSDIR ] then cecho-n " * Root file system directory '$ROOTFSDIR' does not exist..creating.." mkdir $ROOTFSDIR cgecho "done" fi cd $ROOTFSDIR if [ ! -d $LOOPDIR ] then mkdir $LOOPDIR fi ###################################################### # mount root image # BASE=$BUILDDIR/base.img cecho-n " * Mounting base image $BASE.." cp $ROOTFS $BASE mount -o loop $BASE $LOOPDIR >> $LOGFILE 2>&1 mount -t proc none $LOOPDIR/proc >> $LOGFILE 2>&1 cgecho "done" ###################################################### # setting up mountpoint for shared source tree # if [ "${SHAREDTREE+set}" = "set" ]; then cecho " * setting up shared strongswan tree at '$SHAREDTREE'" mkdir $LOOPDIR/root/strongswan-shared echo "" >> $LOOPDIR/etc/fstab echo "none /root/strongswan-shared hostfs $SHAREDTREE" >> $LOOPDIR/etc/fstab fi ###################################################### # install software from source using 'recipes' # mkdir -p $ROOTFSCOMPILEDIR cecho " * Mounting $ROOTFSCOMPILEDIR as /root/compile.." mkdir -p $LOOPDIR/root/compile mount -o bind $ROOTFSCOMPILEDIR $LOOPDIR/root/compile >> $LOGFILE 2>&1 cecho " * Installing software from source.." RECPDIR=$UMLTESTDIR/testing/scripts/recipes RECIPES=`ls $RECPDIR/*.mk | xargs -n1 basename` for r in $RECIPES do cecho-n " - $r.." cp $RECPDIR/$r ${LOOPDIR}/root/compile chroot ${LOOPDIR} make -C /root/compile -f $r >>$LOGFILE 2>&1 if [ $? != 0 ]; then cecho "failed" else cgecho "done" fi done umount $LOOPDIR/root/compile ###################################################### # remove /etc/resolv.conf # cecho " * Removing /etc/resolv.conf" rm -f $LOOPDIR/etc/resolv.conf ##################################### # preparing ssh for PK authentication # if [ ! -d ~/.ssh ] then cecho-n " * Creating directory '~/.ssh'.." mkdir ~/.ssh cgecho "done" fi cecho-n " * Checking for ssh rsa key '~/.ssh/id_rsa.pub'.." if [ -f ~/.ssh/id_rsa.pub ] then cecho "already exists" else cecho "not found" cecho-n " * Generating ssh rsa key pair.." echo "" | ssh-keygen -N "" -t rsa -f ~/.ssh/id_rsa >> $LOGFILE 2>&1 cgecho "done" fi if [ -f ~/.ssh/known_hosts ] then cecho-n " * Backing up ~/.ssh/known_hosts to '~/.ssh/known_hosts.before_uml'.." cp -fp ~/.ssh/known_hosts ~/.ssh/known_hosts.before_uml cgecho "done" fi rm ~/.ssh/known_hosts cecho-n " * Creating new '~/.ssh/known_hosts'.." touch ~/.ssh/known_hosts cgecho "done" for host in $HOSTNAMEIPV4 do HOSTNAME=`echo $host | awk -F, '{ print $1 }'` IP=`echo $host | awk -F, '{ print $2 }'` cecho-n " * Adding uml host $HOSTNAME ($IP) to '~/.ssh/known_hosts'.." echo "$HOSTNAME,$IP `cat $LOOPDIR/etc/ssh/ssh_host_rsa_key.pub`" >> ~/.ssh/known_hosts cgecho "done" done ###################################################### # copying the host's ssh public key # if [ ! -d $LOOPDIR/root/.ssh ] then mkdir $LOOPDIR/root/.ssh fi cp ~/.ssh/id_rsa.pub $LOOPDIR/root/.ssh/authorized_keys ###################################################### # setup public key based login among all hosts # cp $LOOPDIR/etc/ssh/ssh_host_rsa_key $LOOPDIR/root/.ssh/id_rsa for host in $STRONGSWANHOSTS do eval ip="`echo $HOSTNAMEIPV4 | sed -n -e "s/^.*${host},//gp" | awk -F- '{ print $1 }' | awk '{ print $1 }'`" echo "$host,$ip `cat $LOOPDIR/etc/ssh/ssh_host_rsa_key.pub`" >> $LOOPDIR/root/.ssh/known_hosts echo "`cat $LOOPDIR/etc/ssh/ssh_host_rsa_key.pub` root@$host" >> $LOOPDIR/root/.ssh/authorized_keys done umount $LOOPDIR/proc umount $LOOPDIR