diff options
author | Laurent Bercot <ska-skaware@skarnet.org> | 2017-05-22 21:56:04 +0000 |
---|---|---|
committer | Laurent Bercot <ska-skaware@skarnet.org> | 2017-05-22 21:56:04 +0000 |
commit | 82d0f92ab8b84466ae20ab919c1f9c3577b5cecb (patch) | |
tree | 776015ae6c6a386125b2d39e13b62f91b99548f8 /sub/disk-image | |
download | lh-bootstrap-82d0f92ab8b84466ae20ab919c1f9c3577b5cecb.tar.xz |
Initial commit
Diffstat (limited to 'sub/disk-image')
-rwxr-xr-x | sub/disk-image/make-disk-image | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/sub/disk-image/make-disk-image b/sub/disk-image/make-disk-image new file mode 100755 index 0000000..64d2c40 --- /dev/null +++ b/sub/disk-image/make-disk-image @@ -0,0 +1,107 @@ +#!/bin/sh -e + +# umount is given with -l because some operating systems have triggers that will launch processes keep file descriptors open to the mount, preventing unmounting + +output="$1" +rootfs_size="$2" +swap_size="$3" +rwfs_size="$4" +userfs_size="$5" +extra_size="$6" + +totalsize=$(s6-expr ${rootfs_size} + ${swap_size} + ${rwfs_size} + ${userfs_size} + ${extra_size} + 4) + +# prepare extlinux.conf + +if s6-test ${KERNEL_GENERIC_ARCH} = x86 ; then + consolearg="console=ttyS0,115200n8" + if ${USE_GRAPHIC} ; then + consolearg= + fi + if s6-test ${KERNEL_ARCH} = x86_64 ; then + bootpartition=/dev/sda1 + else + bootpartition=/dev/hda1 + fi + s6-cat > ${output}/rootfs/boot/extlinux.conf <<EOF +serial 0 115200 +console 0 +prompt 0 +default linux +totaltimeout 1200 +say extlinux booting +label linux + linux /boot/vmlinuz + initrd /boot/initramfs.gz + append ro root=$bootpartition rootfstype=ext4 loglevel=4 initrd=/boot/initramfs.gz $consolearg +EOF +fi + +s6-rmrf "$output/disk-image.raw" +setuidgid ${NORMALUSER} dd if=/dev/zero of=$output/disk-image.raw bs=1 count=0 seek=${totalsize}M + +fdisk $output/disk-image.raw <<EOF +n + + + ++${rootfs_size}M +n + + + ++${swap_size}M +t +2 +82 +n + + + ++${rwfs_size}M +n + + + +n + ++${userfs_size}M +n + + +a +1 +w +EOF + +loop=$(losetup -f) +losetup -P "$loop" "$output/disk-image.raw" + +{ + mkfs.ext4 -O ^huge_file ${loop}p1 + mkswap ${loop}p2 + mkfs.ext4 -O ^huge_file ${loop}p3 + mkfs.ext4 -O ^huge_file ${loop}p5 + mkfs.ext4 -O ^huge_file ${loop}p6 + + + s6-mkdir -p "$output/tmp/rootfs" "$output/tmp/rwfs" "$output/tmp/userfs" "$output/tmp/stagingfs" + mount -t ext4 ${loop}p1 "$output/tmp/rootfs" + s6-hiercopy "$output/rootfs" "$output/tmp/rootfs" + if s6-test ${KERNEL_GENERIC_ARCH} = x86 ; then + dd if=${output}/build-build/opt/syslinux/usr/share/syslinux/mbr.bin of=${loop} + extlinux -i "$output/tmp/rootfs/boot" + fi + umount -l "$output/tmp/rootfs" + mount -t ext4 ${loop}p3 "$output/tmp/rwfs" + s6-hiercopy "$output/rwfs" "$output/tmp/rwfs" + umount -l "$output/tmp/rwfs" + mount -t ext4 ${loop}p5 "$output/tmp/userfs" + s6-hiercopy "$output/userfs" "$output/tmp/userfs" + umount -l "$output/tmp/userfs" + mount -t ext4 ${loop}p6 "$output/tmp/stagingfs" + s6-hiercopy "$output/stagingfs" "$output/tmp/stagingfs" + umount -l "$output/tmp/stagingfs" +} || { losetup -d "$loop" ; exit 1 ; } + +losetup -d "$loop" |