/usr/sbin/qemu-make-debian-root is in qemu-utils 1:2.11+dfsg-1ubuntu7.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | #! /bin/sh -e
#
# $Id: qemu-make-debian-root 353 2008-10-16 20:28:22Z aurel32 $
#
# Script to make a debian root image.
#
set -e
which debootstrap >/dev/null || {
echo "error: missing debootstrap package" >&2
exit 1
}
KEEPFS=0
SPARSE=0
while :; do
case "$1" in
-k)
KEEPFS=1
;;
-s)
SPARSE=1
;;
-ks|-sk)
KEEPFS=1
SPARSE=1
;;
*)
break
;;
esac
shift
done
if [ $# -lt 4 ]; then
echo Usage: "$0 [-ks] size-in-MB distrib deburl image [files_to_copy_in_/root]" >&2
echo "eg $0 150 sid http://proxy:10000/debian qemu" >&2
echo "-k keep file system -s sparse image" >&2
echo "$0 is normally run as root." >&2
exit 1
fi
SIZE=$1 # In Mib
DISTRO=$2
URL=$3
IMAGE=$4
shift 4
# now files to copy are in "$@". We don't put them in a variable
# because that would coufuse spaces-in-filenames with
# whitespace-separation.
if [ $SIZE -lt 130 ]; then
echo 'Size must be at least 130 megabytes (Debian unstable takes 100)' >&2
exit 1
fi
cleanup()
{
echo Cleaning up... >&2
umount -d $TMP_DIR || true
losetup -d $LOOP || true
rm -f $IMAGE
}
trap cleanup EXIT
# Create a filesystem: one track for partition table.
if [ "$SPARSE" = "1" ]; then
truncate -s ${SIZE}M "$IMAGE"
else
dd bs=1M count=$SIZE if=/dev/zero of=$IMAGE
fi
SECT=63 # first sector of a partition
# Partition so one partition covers entire disk.
echo "$SECT," | sfdisk -uS -L $IMAGE
# Find an unused loop device and set it up.
LOOP=`losetup -f`
losetup -o $(($SECT*512)) $LOOP $IMAGE
# Create filesystem.
mke2fs -q -m1 $LOOP
TMP_DIR="$(mktemp -d /tmp/mount.XXXXXX)" || \
{ echo >&2 "Failed to create temporary directory"; exit 1; }
# Mount it.
mount $LOOP $TMP_DIR
# Do debian install on it.
debootstrap --variant=minbase $DISTRO $TMP_DIR $URL
# Final configuration.
cat > $TMP_DIR/etc/fstab <<EOF
/dev/hda1 / ext2 errors=remount-ro 0 1
proc /proc proc defaults 0 0
EOF
# Console on ttyS0, not tty1, and no other gettys.
sed 's,1:2345:respawn:/sbin/getty 38400 tty1,1:2345:respawn:/sbin/getty 38400 ttyS0,' < $TMP_DIR/etc/inittab | sed 's,^.:23:respawn.*,,' > $TMP_DIR/etc/inittab.new
mv $TMP_DIR/etc/inittab.new $TMP_DIR/etc/inittab
# Set hostname to base of image name.
basename $IMAGE > $TMP_DIR/etc/hostname
# Create /etc/shadow
chroot $TMP_DIR pwconv
# Set root password to "root"
sed 's/^root:[^:]*/root:$1$aybpiIGf$cB7iFDNZvViQtQjEZ5HFQ0/' < $TMP_DIR/etc/shadow > $TMP_DIR/etc/shadow.new
mv $TMP_DIR/etc/shadow.new $TMP_DIR/etc/shadow
# Remove packages we don't need
chroot $TMP_DIR /usr/bin/dpkg --remove console-common console-tools console-data base-config man-db manpages
# Try to remove all libraries: some won't be removable.
chroot $TMP_DIR dpkg --remove `chroot $TMP_DIR dpkg --get-selections | sed -n 's/^\(lib[^ \t]*\)[\t ]*install/\1/p'` 2>/dev/null || true
# Copy wanted files to /root if asked to
if [ $# -gt 0 ]; then
cp -a "$@" $TMP_DIR/root/
fi
umount -d $TMP_DIR
trap "" EXIT
echo Done.
|