summaryrefslogtreecommitdiff
path: root/src/parted-usb.sh
blob: b19389dd3ce15f53aa5a9d5b10e9fe91057af004 (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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#!/bin/bash
die()
{
    printf 'Error: %s\n' "$*" >&2
    exit 1
}
KiB()
{
    printf %s $(("$1" * 1024))
}
MiB()
{
    KiB $(KiB "$1")
}

. samizdat-paths.sh || die 'samizdat-paths.sh not found'
: ${GPG_INPUT_DIR:=/cdrom/gnupghome}

if [[ $UID != 0 ]]
then
    exit 1
fi

for d in "$samizdat_linux_dir" "$GPG_INPUT_DIR"
do
    if ! test -d "$d"
    then
        exit 1
    fi
done

end_keys=256 # megs

target=fallacy.img.tmp

initialize_target()
{
    rm -f "$target"
    fallocate -l $(($(KiB 17) + $(MiB $end_keys))) "$target"
}

partition_target()
{
    parted "$target" -sm -a optimal                                          \
           unit B                                                            \
           mklabel gpt                                                       \
           mkpart samizdat-grub 1MiB 8MiB                                    \
           set 1 bios_grub on                                                \
           mkpart samizdat-keys btrfs 64MiB ${end_keys}MiB
}

make_target_bootable()
{
    losetup -f "$target"
    dev=$(losetup -j "$target" -O NAME --noheadings)

    kpartx -vasas "$dev"
    kdev=/dev/mapper/${dev##*/}

    mnt=$target.mnt

    mkfs.btrfs --mixed "$kdev"p2
    mkdir -p "$mnt"
    mount "$kdev"p2 "$mnt"
    rsync  -a  --info=STATS  "$GPG_INPUT_DIR"/          "$mnt"/gnupghome/
    rsync  -a  --info=STATS  "$samizdat_linux_dir"/     "$mnt"/linux/

    boot_dir=$mnt/boot
    mkdir -p "$boot_dir"/grub
    cp -a grub.cfg "$boot_dir"/grub

    # grub-install -v -d "$samizdat_grub_efi_dir"/grub/i386-pc --boot-directory "$mnt"/boot "$dev"
    grub-install -v --boot-directory "$boot_dir" "$dev"
}

release_target()
{
    umount "$mnt"
    kpartx -d "$dev"
    losetup -d "$dev"
}

set -e

if [ ! -e "$target" ]
then
    initialize_target
    partition_target
    make_target_bootable
    release_target
fi

qemu-system-x86_64 -enable-kvm -drive file="$target",format=raw

# rm -f "$target"