summaryrefslogtreecommitdiff
path: root/localqemubuilder-create
diff options
context:
space:
mode:
Diffstat (limited to 'localqemubuilder-create')
-rwxr-xr-xlocalqemubuilder-create192
1 files changed, 192 insertions, 0 deletions
diff --git a/localqemubuilder-create b/localqemubuilder-create
new file mode 100755
index 0000000..4ed389b
--- /dev/null
+++ b/localqemubuilder-create
@@ -0,0 +1,192 @@
+#!/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