diff options
Diffstat (limited to 'src/parted-usb.sh')
-rwxr-xr-x | src/parted-usb.sh | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/src/parted-usb.sh b/src/parted-usb.sh index b19389d..cfd2ad1 100755 --- a/src/parted-usb.sh +++ b/src/parted-usb.sh | |||
@@ -14,6 +14,8 @@ MiB() | |||
14 | } | 14 | } |
15 | 15 | ||
16 | . samizdat-paths.sh || die 'samizdat-paths.sh not found' | 16 | . samizdat-paths.sh || die 'samizdat-paths.sh not found' |
17 | |||
18 | samizdat_linux_dir=/boot | ||
17 | : ${GPG_INPUT_DIR:=/cdrom/gnupghome} | 19 | : ${GPG_INPUT_DIR:=/cdrom/gnupghome} |
18 | 20 | ||
19 | if [[ $UID != 0 ]] | 21 | if [[ $UID != 0 ]] |
@@ -29,6 +31,7 @@ do | |||
29 | fi | 31 | fi |
30 | done | 32 | done |
31 | 33 | ||
34 | start_keys=64 # megs | ||
32 | end_keys=256 # megs | 35 | end_keys=256 # megs |
33 | 36 | ||
34 | target=fallacy.img.tmp | 37 | target=fallacy.img.tmp |
@@ -46,11 +49,12 @@ partition_target() | |||
46 | mklabel gpt \ | 49 | mklabel gpt \ |
47 | mkpart samizdat-grub 1MiB 8MiB \ | 50 | mkpart samizdat-grub 1MiB 8MiB \ |
48 | set 1 bios_grub on \ | 51 | set 1 bios_grub on \ |
49 | mkpart samizdat-keys btrfs 64MiB ${end_keys}MiB | 52 | mkpart samizdat-plaintext btrfs ${start_keys}MiB ${end_keys}MiB |
50 | } | 53 | } |
51 | 54 | ||
52 | make_target_bootable() | 55 | make_target_bootable() |
53 | { | 56 | { |
57 | version=${1:+-$1} | ||
54 | losetup -f "$target" | 58 | losetup -f "$target" |
55 | dev=$(losetup -j "$target" -O NAME --noheadings) | 59 | dev=$(losetup -j "$target" -O NAME --noheadings) |
56 | 60 | ||
@@ -62,15 +66,15 @@ make_target_bootable() | |||
62 | mkfs.btrfs --mixed "$kdev"p2 | 66 | mkfs.btrfs --mixed "$kdev"p2 |
63 | mkdir -p "$mnt" | 67 | mkdir -p "$mnt" |
64 | mount "$kdev"p2 "$mnt" | 68 | mount "$kdev"p2 "$mnt" |
65 | rsync -a --info=STATS "$GPG_INPUT_DIR"/ "$mnt"/gnupghome/ | 69 | rsync -aL --info=STATS "$samizdat_linux_dir"/vmlinuz${version} "$samizdat_linux_dir"/initrd.img${version} "$mnt"/linux/ |
66 | rsync -a --info=STATS "$samizdat_linux_dir"/ "$mnt"/linux/ | ||
67 | 70 | ||
68 | boot_dir=$mnt/boot | 71 | boot_dir=$mnt/boot |
69 | mkdir -p "$boot_dir"/grub | 72 | mkdir -p "$boot_dir"/grub |
70 | cp -a grub.cfg "$boot_dir"/grub | 73 | cp -a grub.cfg "$boot_dir"/grub |
71 | 74 | ||
72 | # grub-install -v -d "$samizdat_grub_efi_dir"/grub/i386-pc --boot-directory "$mnt"/boot "$dev" | 75 | # grub-install -v -d "$samizdat_grub_efi_dir"/grub/i386-pc --boot-directory "$mnt"/boot "$dev" |
73 | grub-install -v --boot-directory "$boot_dir" "$dev" | 76 | eatmydata -- grub-install -v --boot-directory "$boot_dir" "$dev" |
77 | sync | ||
74 | } | 78 | } |
75 | 79 | ||
76 | release_target() | 80 | release_target() |
@@ -80,17 +84,33 @@ release_target() | |||
80 | losetup -d "$dev" | 84 | losetup -d "$dev" |
81 | } | 85 | } |
82 | 86 | ||
87 | add_keys() | ||
88 | { | ||
89 | local mnt dev target="$1" | ||
90 | mnt=$target.mnt | ||
91 | mkdir -p "$mnt" | ||
92 | losetup -f "$target" -o $(MiB $start_keys) | ||
93 | dev=$(losetup -j "$target" -O NAME --noheadings) | ||
94 | mount "$dev" "$mnt" | ||
95 | rsync -a --info=STATS "$GPG_INPUT_DIR"/ "$mnt"/gnupghome/ | ||
96 | umount "$mnt" | ||
97 | losetup -d "$dev" | ||
98 | } | ||
99 | |||
83 | set -e | 100 | set -e |
84 | 101 | ||
85 | if [ ! -e "$target" ] | 102 | if [ ! -e "$target" ] |
86 | then | 103 | then |
87 | initialize_target | 104 | initialize_target |
88 | partition_target | 105 | partition_target |
89 | make_target_bootable | 106 | make_target_bootable ${1:4.9.0-0.bpo.2-amd64} |
90 | release_target | 107 | release_target |
91 | fi | 108 | fi |
92 | 109 | ||
93 | qemu-system-x86_64 -enable-kvm -drive file="$target",format=raw | 110 | cp --reflink=always "$target" "$target".keyed |
111 | add_keys "$target".keyed | ||
112 | |||
113 | qemu-system-x86_64 -enable-kvm -smp 2 -m 512 -k en-us -vga qxl -drive file="$target".keyed,format=raw | ||
94 | 114 | ||
95 | # rm -f "$target" | 115 | # rm -f "$target" |
96 | 116 | ||