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