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"
|