From: Marc Fiuczynski Date: Wed, 2 Mar 2005 14:14:53 +0000 (+0000) Subject: Beginning of a setup filesystem preparation script that can be used to run X-Git-Tag: planetlab-3_1-branch-point~26 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=0fb98362efdaebbb9ef6858fef4d5dc4ae7e95f2;p=build.git Beginning of a setup filesystem preparation script that can be used to run and test a freshly built copy of the DevBox PlanetLab software in user-mode using either qemu (preferred) or uml. --- diff --git a/emsetup.sh b/emsetup.sh new file mode 100755 index 00000000..d7235a55 --- /dev/null +++ b/emsetup.sh @@ -0,0 +1,376 @@ +#!/bin/bash +# +# Copyright (c) 2005 The Trustees of Princeton University (Trustees). +# All Rights Reserved. +# +# Original from Mark Huang to setup uml +# Adapted by Marc Fiucznski to support qemu +# +# umsetup is used to create a filesystem image, kernel, and related +# files needed to run either UML or qemu. It is intended to be used +# either by individuals for their own testing purposes, or as a +# nightly script on an build/qa system for automated testing. +# +# $Id:$ + +STEPS="Mkfs Install InstallKernel InstallVRef Config" + +usage () +{ + echo "usage: $0 [-s $STEPS] [-t uml|qemu] [-y yum.conf] [kernelbuilddir] [installroot] [package ...]" + exit 1 +} + +# default filesystem setup for uml +TYPE="qemu" + +# defaults +YUMCONF= +UTS_RELEASE= + +# Must be root for some tasks +if [ $UID -ne 0 ] ; then + echo "Must be root to run $0" + exit 1 +fi + +# Get options +while getopts 's:i:t:y:h' OPT ; do + case "$OPT" in + s) + STEPS=$OPTARG + ;; + + t) + case "$OPTARG" in + uml) + TYPE="uml" + ;; + qemu) + TYPE="qemu" + ;; + *) + echo "expecting 'uml' or 'qemu', got $OPTARG" + usage + ;; + esac + ;; + + y) + YUMCONF=$OPTARG + if [ ! -f "$YUMCONF" ]; then + echo "yum configuration file $YUMCONF not found" + usage + fi + ;; + + h) + usage + ;; + esac +done + +# Get arguments +shift $(($OPTIND - 1)) +KERNEL=$1 +shift +INSTALLROOT=$1 +PACKAGE="$@" + + +# setup the UTS_RELEASE +if [ -d "$KERNEL" -a -f "$KERNEL/include/linux/version.h" ] ; then + eval UTS_RELEASE=$(echo "#include " | cpp -I "$KERNEL/include" -dM - | awk '/UTS_RELEASE/ { print $3 }') +else + echo "$KERNEL is not a valid linux kernel directory" + exit 0 +fi + +# set installation mount point +if [ -z "$INSTALLROOT" ] ; then + INSTALLROOT=$(mktemp -d "/tmp/mountpoint.XXXXXX") +fi +# Convert to absolute path +INSTALLROOT=$(cd $INSTALLROOT && pwd) + +# set packages +if [ -z "$PACKAGE" ] ; then + PACKAGE=PlanetLab +fi + +# Bail on any simple error +set -e + +# Be verbose +set -x + +Unmount () +{ + # Unmount / image + if grep -q $INSTALLROOT /etc/mtab ; then + umount $INSTALLROOT + rmdir $INSTALLROOT + fi +} + +Mount () +{ + # Mount / image + if ! grep -q $INSTALLROOT /etc/mtab ; then + mkdir -p $INSTALLROOT + modprobe loop + mount -o loop fs.img $INSTALLROOT + fi +} + +Mkfs () +{ + # Make / image + if [ ! -f fs.img ] ; then + dd bs=1M count=2048 < /dev/zero > fs.img + fi + /sbin/mkfs.ext2 -F -j fs.img +} + +MakeDevs () +{ + FAKEROOT=$1 + if [ ! -z "$FAKEROOT" -a "$FAKEROOT" != "/" ] ; then + rm -rf $FAKEROOT/dev + mkdir -p $FAKEROOT/dev + mknod -m 666 $FAKEROOT/dev/null c 1 3 + mknod -m 666 $FAKEROOT/dev/zero c 1 5 + mknod -m 666 $FAKEROOT/dev/full c 1 7 + mknod -m 644 $FAKEROOT/dev/random c 1 8 + mknod -m 644 $FAKEROOT/dev/urandom c 1 9 + mknod -m 666 $FAKEROOT/dev/tty c 5 0 + mknod -m 666 $FAKEROOT/dev/ptmx c 5 2 + mkdir -p $FAKEROOT/dev/pts + # well, /proc really is not in /dev + mkdir -p $FAKEROOT/proc + fi +} + +Install () +{ + Mount + + # Bootstrap RPM + mkdir -p $INSTALLROOT/var/lib/rpm + mkdir -p $INSTALLROOT/etc/rpm + + # Only install English language locale files + cat > $INSTALLROOT/etc/rpm/macros < $INSTALLROOT/etc/fstab < $INSTALLROOT/etc/fstab <> $INSTALLROOT/etc/fstab < $VROOT/etc/fstab < $VROOT/etc/rpm/macros < $INSTALLROOT/etc/hosts <