blob: 8a5517182f227c0b5a8cd42de4435aac5cb8ab5f (
plain)
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
|
#!/bin/sh
# (C) 2013-2015 Fathi Boudra <fathi.boudra@linaro.org>
# Convert tarball (live-build or other) to raw image
set -e
PROGNAME=$(basename $0)
TARGZFILE=
IMGFILE=
usage() {
echo "usage: ${PROGNAME} <targzfile> <imgfile>"
echo "e.g. ${PROGNAME} ${TARGZFILE} ${IMGFILE}"
exit 1
}
TARGZFILE=$1
IMGFILE=$2
# we must provide parameters
[ -n "${TARGZFILE}" ] || usage
[ -n "${IMGFILE}" ] || usage
# we must be root
[ $(whoami) = "root" ] || { echo "E: You must be root" && exit 1; }
# we must have few tools
MKFS=$(which mkfs.ext4) || { echo "E: You must have mkfs.ext4" && exit 1; }
TUNE2FS=$(which tune2fs) || { echo "E: You must have tune2fs" && exit 1; }
QEMUIMG=$(which qemu-img) || { echo "E: You must have qemu-img" && exit 1; }
${QEMUIMG} create -f raw ${IMGFILE} 1G
DEVICE=$(losetup --find --show ${IMGFILE})
echo "I: Create filesystem"
${MKFS} -L cirros-rootfs -O ^has_journal ${DEVICE}
echo "I: Tune filesystem"
${TUNE2FS} -c 0 -i 0 ${DEVICE}
echo "I: Mount device on local filesystem"
MOUNTDIR=$(mktemp -d /tmp/${PROGNAME}.XXXXXX)
mount ${DEVICE} ${MOUNTDIR}
[ $(tar -tf ${TARGZFILE} | head -n 1) = "binary/" ] && TAR_EXTRA_OPTS="--strip-components=1"
tar -zxf ${TARGZFILE} -C ${MOUNTDIR} --numeric-owner ${TAR_EXTRA_OPTS}
mount -t proc proc ${MOUNTDIR}/proc
cat > ${MOUNTDIR}/runme.sh << EOF
rm -f /etc/ssh/ssh_host_*_key*
EOF
chroot ${MOUNTDIR} /bin/bash -x runme.sh
rm -f ${MOUNTDIR}/runme.sh
cp -a ${MOUNTDIR}/boot/vmlinuz* .
cp -a ${MOUNTDIR}/boot/initrd.img* .
head -n -1 ${MOUNTDIR}/etc/rc.local > rc.local.tmp
cat >> rc.local.tmp << EOF
# Generate the SSH keys if non-existent
test -f /etc/ssh/ssh_host_dsa_key || dpkg-reconfigure openssh-server
exit 0
EOF
mv rc.local.tmp ${MOUNTDIR}/etc/rc.local
umount -l ${MOUNTDIR}/proc || true
umount ${DEVICE}
rm -rf ${MOUNTDIR}
losetup --detach ${DEVICE}
gzip -9 ${IMGFILE}
echo "I: Done"
|