8 if [ ! -e "$HELPER_PKG" ]; then
9 log_error "Helper package \`$HELPER_PKG' not found."
10 log_error "You need to provide this for the script to work"
15 This program will overwrite the following files:
22 echo -n "Do you want to continue [y/N]? "
24 [ "$(echo -n "$answer" | tr [A-Z] [a-z])" = "y" ] && break
25 if [ -z "$answer" -o "$(echo -n "$answer" | tr [A-Z] [a-z])" = "n" ]; then
31 rm -f "$HELPER_DIR/initrd" "$HELPER_DIR/kernel" "$HELPER_DIR/image"
33 echo -n "Allocating space for helper disk image..."
34 helper_img=$(mktemp "$HELPER_DIR/image.XXXXXX")
36 dd if=/dev/zero of="$helper_img" bs=1k count=400000 &> /dev/null
39 echo "Creating partitions..."
40 blockdev=$("$LOSETUP" -sf $helper_img)
41 add_cleanup "$LOSETUP" -d "$blockdev"
43 sleep 1 # sometimes losetup returns and the device is still busy..
45 format_disk0 "$blockdev" "extdump" 2>&1 | sed -e 's/^/CFDISK: /g'
47 root_dev=$(map_disk0 "$blockdev")-1
48 add_cleanup unmap_disk0 "$blockdev"
50 echo Creating and configuring filesystem...
51 mkfs.ext3 "$root_dev" 2>&1 | sed -e 's/^/MKFS.EXT3: /g'
52 # The helper vm should never do filesystem checks...
53 tune2fs -i 0 -c 0 "$root_dev" 2>&1 | sed -e 's/^/TUNE2FS: /g'
56 add_cleanup rmdir "$target"
58 mount "$root_dev" "$target"
59 add_cleanup umount "$root_dev"
61 echo -n "Checking for cached root filesystem file \`$HELPER_CACHE_FILE'..."
62 if [ -f "$HELPER_CACHE_FILE" ]; then
64 tar xf "$HELPER_CACHE_FILE" -C "$target"
67 echo "Debootstraping to create a new root filesystem:"
68 debootstrap --arch amd64 --include "$HELPER_EXTRA_PKGS" \
69 --variant=minbase squeeze "$target" 2>&1 | sed -e 's/^/DEBOOTSTRAP: /g'
71 # remove the downloaded debs, as they are no longer needed
72 find "$target/var/cache/apt/archives" -type f -name '*.deb' -print0 | \
75 tmp_cache=$(mktemp "$HELPER_CACHE_FILE.XXXXXX")
76 tar cf "$tmp_cache" -C "$target" . || { rm "$tmp_cache"; false; }
77 mv -f "$tmp_cache" "$HELPER_CACHE_FILE"
80 echo -n "Configuring the helper image..."
81 echo snf-image-helper > "$target/etc/hostname"
83 cat > "$target/etc/fstab" <<EOF
84 # /etc/fstab: static file system information.
86 # <file system> <mount point> <type> <options> <dump> <pass>
87 /dev/sda1 / ext3 defaults 0 1
88 proc /proc proc defaults 0 0
92 echo -n "Extracting kernel..."
93 if [ ! -L "$target/vmlinuz" -o ! -L "$target/vmlinuz" ]; then
94 echo -e "\033[1;31mfailed\033[0m"
95 log_error "vmlinuz or initrd.img link in root is missing."
96 log_error "I don't know how to find a usable kernel/initrd pair."
101 kernel=$(readlink -en "$target/vmlinuz")
102 initrd=$(readlink -en "$target/initrd.img")
104 echo "Moving $(basename "$kernel") and $(basename "$initrd") to \`$HELPER_DIR'"
105 mv "$kernel" "$initrd" "$HELPER_DIR"
107 kernel=$(basename "$kernel")
108 initrd=$(basename "$initrd")
110 (cd "$HELPER_DIR"; ln -fs "$kernel" kernel; ln -fs "$initrd" initrd)
112 rm "$target/vmlinuz" "$target/initrd.img"
114 echo "Installing snf-image-helper pkg in the new image..."
115 cp "$HELPER_PKG" "$target/tmp/"
116 pkg_name=$(basename "$HELPER_PKG")
117 add_cleanup rm "$target/tmp/$pkg_name"
118 chroot "$target" dpkg -i "/tmp/$pkg_name" 2>&1 | sed -e 's/^/DPKG: /g'
120 cat > "$target/etc/rc.local" <<EOF
125 # This script is executed at the end of each multiuser runlevel.
126 # Make sure that the script will "exit 0" on success or any other
129 # In order to enable or disable this script just change the execution
132 # By default this script does nothing.
134 /usr/bin/snf-image-helper
139 chmod +x "$target/etc/rc.local"
145 mv "$helper_img" "$HELPER_DIR/image"
149 echo "Files in \`$HELPER_DIR' were updated successfully"
152 # vim: set sta sts=4 shiftwidth=4 sw=4 et ai :