Fix minor typos in update-helper script
[snf-image] / snf-image-host / snf-image-update-helper.in
1 #!/bin/bash
2
3 set -e
4
5 . @osdir@/common.sh
6
7 CACHE_FILE="$HELPER_DIR/cache.tar"
8 ARCH=amd64
9 EXTRA_PKGS="linux-image-amd64,e2fsprogs,ntfs-3g,ntfsprogs,xmlstarlet,python"
10
11 if [ ! -e "$HELPER_PKG" ]; then
12     log_error "Helper package \`$HELPER_PKG' not found."
13     log_error "You need to provide this for the script to work"
14     exit 1
15 fi
16 cat >&1 <<EOF
17 This program will overwrite the following files:
18   \`$HELPER_DIR/initrd'
19   \`$HELPER_DIR/kernel'
20   \`$HELPER_DIR/image'
21 EOF
22
23 while [[ 1 ]]; do
24     echo -n "Do you want to continue [y/N]? "
25     read answer
26     [ "$(echo -n "$answer" | tr [A-Z] [a-z])" = "y" ] && break
27     if [ -z "$answer" -o "$(echo -n "$answer" | tr [A-Z] [a-z])" = "n" ]; then
28         log_error "Abort."
29         exit 1
30     fi
31 done
32
33 rm -f "$HELPER_DIR/initrd" "$HELPER_DIR/kernel" "$HELPER_DIR/image"
34
35 echo -n "Allocating space for helper disk image..."
36 helper_img=$(mktemp $HELPER_DIR/image.XXXXXXXX)
37
38 dd if=/dev/zero of=$helper_img bs=1k count=400000 &> /dev/null
39 echo "done"
40
41 blockdev=$(losetup -sf $helper_img)
42 CLEANUP+=("losetup -d $blockdev")
43
44 sleep 1 # sometimes losetup returns and the device is still busy..
45
46 echo "Creating partitions..."
47 format_disk0 $blockdev "extdump"  2>&1 | sed -e 's/^/CFDISK: /g'
48
49 root_dev=$(map_disk0 $blockdev)-1
50 CLEANUP+=("unmap_disk0 $blockdev")
51
52 echo Creating and configuring filesystem...
53 mkfs.ext3 $root_dev 2>&1 | sed -e 's/^/MKFS.EXT3: /g'
54 # The helper vm should never do filesystem checks...
55 tune2fs -i 0 -c 0 $root_dev 2>&1 | sed -e 's/^/TUNE2FS: /g'
56
57 TMPDIR=$(mktemp -d)
58 CLEANUP+=("rmdir $TMPDIR")
59
60 mount $root_dev $TMPDIR
61 CLEANUP+=("umount $root_dev")
62
63 echo -n "Checking for cached root filesystem file \`$CACHE_FILE'..." 
64 if [  -f "$CACHE_FILE" ]; then
65     echo "found"
66     tar xf "$CACHE_FILE" -C $TMPDIR
67 else
68     echo "not found"
69     echo "Debootstraping to create a new root filesystem:"
70     debootstrap --arch "$ARCH" --include $EXTRA_PKGS --variant=minbase \
71             squeeze $TMPDIR 2>&1 | sed -e 's/^/DEBOOTSTRAP: /g'
72
73     # remove the downloaded debs, as they are no longer needed
74     find "$TMPDIR/var/cache/apt/archives" -type f -name '*.deb' -print0 | \
75         xargs -r0 rm -f
76
77     TMP_CACHE=$(mktemp "${CACHE_FILE}.XXXXXX")
78     tar cf "$TMP_CACHE" -C $TMPDIR .
79     mv -f "$TMP_CACHE" "$CACHE_FILE"
80 fi
81
82 echo -n "Configuring the helper image..."
83 echo snf-image-helper > $TMPDIR/etc/hostname
84
85 cat > $TMPDIR/etc/fstab <<EOF
86 # /etc/fstab: static file system information.
87 #
88 # <file system>   <mount point>   <type>  <options>       <dump>  <pass>
89 /dev/sda1         /               ext3    defaults        0       1
90 proc              /proc           proc    defaults        0       0
91 EOF
92 echo "done"
93
94 echo -n "Extracting kernel..."
95 if [ ! -L "$TMPDIR/vmlinuz" -o ! -L "$TMPDIR/vmlinuz" ]; then
96
97         log_error "vmlinuz or initrd.img link in root is missing."
98         log_error "I don't know how to find a usable kernel/initrd pair."
99         exit 1
100 fi
101 echo "done"
102
103 kernel=$(readlink -en $TMPDIR/vmlinuz)
104 initrd=$(readlink -en $TMPDIR/initrd.img)
105
106 echo "Moving $(basename $kernel) and $(basename $initrd) to $HELPER_DIR"
107 mv $kernel $initrd $HELPER_DIR
108
109 kernel=$(basename $kernel)
110 initrd=$(basename $initrd)
111
112 (cd $HELPER_DIR; ln -fs $kernel kernel; ln -fs $initrd initrd)
113
114 rm $TMPDIR/vmlinuz $TMPDIR/initrd.img
115
116 echo "Installing snf-image-helper pkg in the new image..."
117 cp $HELPER_PKG $TMPDIR/tmp/
118 pkg_name=$(basename "$HELPER_PKG")  
119 CLEANUP+=("rm $TMPDIR/tmp/$pkg_name")
120 chroot ${TMPDIR} dpkg -i /tmp/$pkg_name 2>&1 | sed -e 's/^/DPKG: /g'
121
122 cat > ${TMPDIR}/etc/rc.local <<EOF
123 #!/bin/sh -e
124 #
125 # rc.local
126 #
127 # This script is executed at the end of each multiuser runlevel.
128 # Make sure that the script will "exit 0" on success or any other
129 # value on error.
130 #
131 # In order to enable or disable this script just change the execution
132 # bits.
133 #
134 # By default this script does nothing.
135
136 /usr/bin/snf-image-helper
137
138 exit 0
139 EOF
140
141 chmod +x ${TMPDIR}/etc/rc.local
142
143 echo "done"
144
145 cleanup
146
147 mv $helper_img $HELPER_DIR/image
148
149 trap - EXIT
150
151 echo "Files in \`$HELPER_DIR' were updated successfully"
152 exit 0
153
154 # vim: set sta sts=4 shiftwidth=4 sw=4 et ai :