blob: 68cf2f792e713f0f6f586a3de3bc766bfb896867 (
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 -xe
set -o pipefail
. ./config
. ./sh-lib
sysroot=/tmp/$$.ostree_usb
version=$(date +%Y%m%d.%H%M%S)
image="./$osname-$osversion-usb-$version.img"
seek_sectors=$(( (8 *1024 *1024 *2) +33 -1 ))
# Check for dependencies:
package_deps dosfstools ostree parted udev
[ -f "$image" ] && rm "$image"
dd if=/dev/zero of="$image" seek="$seek_sectors" count=1 bs=512
loopdev=$(losetup -f --show "$image")
function cleanup(){
set +e
if [ -n "$deployroot" ]; then
for p in /proc /sys /dev /image /boot/efi /boot /sysroot; do
umount "$deployroot""$p"
done
if [ -f "$deployroot"/image ]; then
chattr -i "$deployroot"
rm -f "$deployroot"/image
chattr +i "$deployroot"
fi
fi
for p in /boot/efi /; do
umount "$sysroot""$p"
done
rmdir "$sysroot"
partx -d "$loopdev"p1
partx -d "$loopdev"p2
losetup -d "$loopdev"
}
trap cleanup EXIT
parted -a optimal -s "$loopdev" -- \
mklabel gpt unit MiB \
mkpart ESP fat32 1 17 \
mkpart root ext4 17 8192 \
set 1 boot on \
print
partx -a "$loopdev" || /bin/true
mkfs.vfat -n ESP "$loopdev"p1
mkfs.ext4 -L root "$loopdev"p2
rootuuid=$(blkid -s UUID -o value "$loopdev"p2)
mkdir -p "$sysroot"
mount "$loopdev"p2 "$sysroot"
mkdir -p "$sysroot"/boot/efi
mount "$loopdev"p1 "$sysroot"/boot/efi
ostree admin init-fs "$sysroot"
ostree admin --sysroot="$sysroot" os-init "$osname"
ostree --repo="$sysroot"/ostree/repo remote add --gpg-import=key.asc "$remote" "$remote_url" "$branch"
ostree --repo="$sysroot"/ostree/repo pull-local --remote="$remote" "$repo" "$branch"
ostree --repo="$sysroot"/ostree/repo config set sysroot.bootprefix true
ostree admin --sysroot="$sysroot" deploy --os="$osname" --karg=root=UUID="$rootuuid" --karg=rw "$remote":"$branch"
current_deployment=$(ostree admin --sysroot="$sysroot" status | awk '{print $2}' | head -1)
deployroot="$sysroot"/ostree/deploy/"$osname"/deploy/"$current_deployment"
chattr -i "$deployroot"
touch "$deployroot"/image
chattr +i "$deployroot"
mount --bind "$image" "$deployroot"/image
mount --bind "$sysroot"/boot "$deployroot"/boot
mount --bind "$sysroot"/boot/efi "$deployroot"/boot/efi
for p in /proc /sys /dev; do
mount --bind "$p" "$deployroot""$p"
done
chroot "$deployroot" /usr/sbin/grub-install --target='x86_64-efi' \
--efi-directory=/boot/efi --boot-directory=/boot \
--bootloader-id=GRUB --removable "$image"
mount --bind "$sysroot" "$deployroot"/sysroot
chroot "$deployroot" grub-mkconfig -o /boot/grub/grub.cfg
trap - EXIT
cleanup
bmaptool create "$image" > "$image".bmap
xz "$image"
sha256sum "$image".xz > "$image".sha256sum
|