#!/bin/sh # # Copyright © 2006-2009 Jonas Smedegaard <dr@jones.dk> # Description: Create QEMU environment # # 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, or (at your option) # any later version. # # 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA # 02111-1307 USA. # # Depends: qemu, sudo set -e PRG=$(basename "$0") showhelp() { cat <<EOF Usage: $PRG POOL [ DISTRIBUTION [ OTHERMIRROR] ] Examples: $PRG sid $PRG sid+mm sid 'deb http://debian-multimedia.org/ sid main' $PRG sid-ia32 sid --arch i386 EOF } exit1() { echo "ERROR: $1" exit 1 } ask() { echo -n "$1 (y/N)? " read response case "$response" in y|Y) : ;; *) return 1 ;; esac return } if [ $# -eq 0 ]; then showhelp exit1 "not enough parameters" fi pool= distro= arch= newline=' ' while [ $# -gt 0 ]; do case $1 in -h|--help) showhelp exit 0 ;; --arch|-a) arch="$2" shift 2 || exit1 "option \"--arg\" requires an argument" ;; --) shift break ;; --*|-*) # opts="$opts $1" # shift exit1 "options (apart from --arch) are curently unsupported" ;; *) if [ -z "$pool" ]; then pool="$1" elif [ -z "$distro" ]; then distro="$1" else othermirrors="${othermirrors:+$othermirrors$newline}$1" fi shift ;; esac done if [ -z "$pool" ]; then exit1 "no pool provided" fi if [ -z "$distro" ]; then distro="$pool" fi case $arch in armel) # kernelurl="http://yoush.homelinux.org:8079/nikita/armel-qemubuilder/vmlinuz-2.6.26-versatile-qemu" # kernelref="http://yoush.homelinux.org:8079/tech/setting-up-armel-qemubuilder" kernelurl="http://people.debian.org/~aurel32/qemu/armel/vmlinuz-2.6.26-1-versatile" initrdurl="http://people.debian.org/~aurel32/qemu/armel/initrd.img-2.6.26-1-versatile" kernelref="http://people.debian.org/~aurel32/qemu/armel/" ;; mipsel) kernelurl="http://people.debian.org/~aurel32/qemu/mipsel/vmlinux-2.6.26-1-4kc-malta" kernelref="http://people.debian.org/~aurel32/qemu/mipsel/" ;; *) exit1 "unsupported architecture: \"$arch\"" ;; esac basepath="/var/cache/pbuilder/base-$pool.qemu" aptcache="" buildresult="$HOME/src/pbuild-$pool/" qemudir="/var/cache/pbuilder/qemu-$pool/" makepaths='' for path in "$buildresult" "$qemudir"; do if [ ! -d "$path" ]; then echo "W: Needed path \"$path\" does not exist" makepaths='yes' fi done if [ "$makepaths" = 'yes' ]; then [ "$force" = 'yes' ] \ || ask 'Create the missing path(s)' \ || exit1 "Cannot continue without those missing paths" mkdir -p "$buildresult" sudo mkdir -p "$qemudir" fi if [ -f "$basepath" ]; then echo "W: Needed path \"$basepath\" already exists" [ "$force" = 'yes' ] \ || ask 'Remove the path' \ || exit1 "Cannot continue with that path already there" sudo rm "$basepath" fi for url in $kernelurl $initrdurl; do file="$qemudir/$(basename $url)" if [ -f "$file" ]; then echo "W: file \"$file\" already exists" if [ "$force" = 'yes' ] || ask 'Replace old file'; then sudo rm "$file" fi fi done for url in $kernelurl $initrdurl; do file="$qemudir/$(basename $url)" if ! [ -f "$qemudir/$kernel" ]; then sudo wget -O "$file" "$kernelurl" fi done if [ -f "$qemudir/cfg" ]; then echo "W: Configfile \"$qemydir/cfg\" already exists" if [ "$force" = 'yes' ] || ask 'Overwrite old config'; then sudo rm "$qemudir/cfg" fi fi if ! [ -f "$qemudir/cfg" ]; then sudo sh -c "cat >\"$qemudir/cfg\"" <<EOF # kernel origin: $kernelurl # more info: $kernelref ARCH=$arch MEMORY_MEGS=256 ${kernelurl:+KERNEL_IMAGE=$qemudir/$(basename $kernelurl)} ${initrdurl:+INITRD=$qemudir/$(basename $initrdurl)} MIRRORSITE=http://auryn:9999/debian #ARCH_DISKDEVICE=sd EOF fi if [ -n "$othermirrors" ]; then echo "$othermirrors" | perl -e "while (<>) {/\w/ and unshift @m, '--othermirror', \$_};"\ "exec 'sudo', 'qemubuilder', '--create', '--buildresult', '$buildresult', '--distribution', '$distro', '--basepath', '$basepath', '--aptcache', '$aptcache', '--configfile', '$qemudir/cfg', @m" else perl -e "exec 'sudo', 'qemubuilder', '--create', '--buildresult', '$buildresult', '--distribution', '$distro', '--basepath', '$basepath', '--aptcache', '$aptcache', '--configfile', '$qemudir/cfg'" fi