-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathlb2img.sh
executable file
·76 lines (57 loc) · 1.88 KB
/
lb2img.sh
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
#!/bin/sh
# (C) 2013 Fathi Boudra <fathi.boudra@linaro.org>
# Convert live-build tarball to KVM image
PROGNAME=`basename $0`
DEVICE=
TARGZFILE=
IMGFILE=
usage() {
echo "usage: ${PROGNAME} <device> <targzfile> <imgfile>"
echo "e.g. ${PROGNAME} ${DEVICE} ${TARGZFILE} ${IMGFILE}"
exit 1
}
DEVICE=$1
TARGZFILE=$2
IMGFILE=$3
# we must provide device name
[ -n "${DEVICE}" ] || usage
[ -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.ext3" && 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; }
GRUBINSTALL=`which grub-install` || { echo "E: You must have grub-install" && exit 1; }
${QEMUIMG} create -f raw ${IMGFILE} 1G
losetup ${DEVICE} ${IMGFILE}
echo "I: Create filesystem"
${MKFS} -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 -zxf ${TARGZFILE} -C ${MOUNTDIR} --strip-components=1
echo "I: Install grub bootloader"
${GRUBINSTALL} --boot-directory=${MOUNTDIR}/boot --force ${DEVICE}
echo "I: Create grub configuration file"
VMLINUZ=`find ${MOUNTDIR}/boot -type f -name 'vmlinuz-*' |xargs basename`
INITRD=`find ${MOUNTDIR}/boot -type f -name 'initrd.img-*' |xargs basename`
UUID=`blkid ${DEVICE} |cut -d' ' -f2 |cut -d'"' -f2`
cat > ${MOUNTDIR}/boot/grub/grub.cfg << EOF
set default=0
set timeout=2
insmod part_msdos
insmod ext2
set root=(hd0)
menuentry 'linux' {
linux /boot/${VMLINUZ} root=UUID=${UUID} console=ttyS0,115200 ro quiet
initrd /boot/${INITRD}
}
EOF
umount ${MOUNTDIR}
rm -rf ${MOUNTDIR}
losetup -d ${DEVICE}
echo "I: Done"