diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/parted-usb.sh | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/src/parted-usb.sh b/src/parted-usb.sh new file mode 100755 index 0000000..b19389d --- /dev/null +++ b/src/parted-usb.sh | |||
@@ -0,0 +1,96 @@ | |||
1 | #!/bin/bash | ||
2 | die() | ||
3 | { | ||
4 | printf 'Error: %s\n' "$*" >&2 | ||
5 | exit 1 | ||
6 | } | ||
7 | KiB() | ||
8 | { | ||
9 | printf %s $(("$1" * 1024)) | ||
10 | } | ||
11 | MiB() | ||
12 | { | ||
13 | KiB $(KiB "$1") | ||
14 | } | ||
15 | |||
16 | . samizdat-paths.sh || die 'samizdat-paths.sh not found' | ||
17 | : ${GPG_INPUT_DIR:=/cdrom/gnupghome} | ||
18 | |||
19 | if [[ $UID != 0 ]] | ||
20 | then | ||
21 | exit 1 | ||
22 | fi | ||
23 | |||
24 | for d in "$samizdat_linux_dir" "$GPG_INPUT_DIR" | ||
25 | do | ||
26 | if ! test -d "$d" | ||
27 | then | ||
28 | exit 1 | ||
29 | fi | ||
30 | done | ||
31 | |||
32 | end_keys=256 # megs | ||
33 | |||
34 | target=fallacy.img.tmp | ||
35 | |||
36 | initialize_target() | ||
37 | { | ||
38 | rm -f "$target" | ||
39 | fallocate -l $(($(KiB 17) + $(MiB $end_keys))) "$target" | ||
40 | } | ||
41 | |||
42 | partition_target() | ||
43 | { | ||
44 | parted "$target" -sm -a optimal \ | ||
45 | unit B \ | ||
46 | mklabel gpt \ | ||
47 | mkpart samizdat-grub 1MiB 8MiB \ | ||
48 | set 1 bios_grub on \ | ||
49 | mkpart samizdat-keys btrfs 64MiB ${end_keys}MiB | ||
50 | } | ||
51 | |||
52 | make_target_bootable() | ||
53 | { | ||
54 | losetup -f "$target" | ||
55 | dev=$(losetup -j "$target" -O NAME --noheadings) | ||
56 | |||
57 | kpartx -vasas "$dev" | ||
58 | kdev=/dev/mapper/${dev##*/} | ||
59 | |||
60 | mnt=$target.mnt | ||
61 | |||
62 | mkfs.btrfs --mixed "$kdev"p2 | ||
63 | mkdir -p "$mnt" | ||
64 | mount "$kdev"p2 "$mnt" | ||
65 | rsync -a --info=STATS "$GPG_INPUT_DIR"/ "$mnt"/gnupghome/ | ||
66 | rsync -a --info=STATS "$samizdat_linux_dir"/ "$mnt"/linux/ | ||
67 | |||
68 | boot_dir=$mnt/boot | ||
69 | mkdir -p "$boot_dir"/grub | ||
70 | cp -a grub.cfg "$boot_dir"/grub | ||
71 | |||
72 | # 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" | ||
74 | } | ||
75 | |||
76 | release_target() | ||
77 | { | ||
78 | umount "$mnt" | ||
79 | kpartx -d "$dev" | ||
80 | losetup -d "$dev" | ||
81 | } | ||
82 | |||
83 | set -e | ||
84 | |||
85 | if [ ! -e "$target" ] | ||
86 | then | ||
87 | initialize_target | ||
88 | partition_target | ||
89 | make_target_bootable | ||
90 | release_target | ||
91 | fi | ||
92 | |||
93 | qemu-system-x86_64 -enable-kvm -drive file="$target",format=raw | ||
94 | |||
95 | # rm -f "$target" | ||
96 | |||