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
|
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
|
+
-
-
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
-
-
-
-
-
-
-
-
-
-
+
-
+
-
+
-
+
-
+
+
+
|
#! /usr/bin/env bash
set -e
# Not included:
# 1. Downloading huge.s from Slackware64 kernels (into boot/)
# 2. Downloading kernel modules package from Slackware64 (into root/)
# 3. Running "depmod" within the chroot root/
# 3. Downloading a static Tclkit with TUAPI
# 4. Downloading a static AppFS
# 4. Downloading a static Tclkit with TUAPI
# 5. Downloading a static AppFS
image_file="$(pwd)/appfs.img"
old_loop_dev="$(losetup --noheadings --output name --associated "${image_file}")" || old_loop_dev=''
extlinux_mbr_bin='/usr/lib/EXTLINUX/mbr.bin'
make init LDFLAGS=-static
cp init root/bin
rm -f appfs.img
truncate --size 1024M appfs.img
sfdisk --no-tell-kernel --no-reread ./appfs.img <<<'label: dos
size=16M type=83 bootable
rm -f boot/initrd
(
cd root || exit 1
find . ! -name '.' -print0 | sort --zero-terminated --dictionary-order | cpio -o -0 --owner 0:0 --dot -H newc
) | gzip -1c > boot/initrd
rm -f "${image_file}"
truncate --size 1024M "${image_file}"
sfdisk --no-tell-kernel --no-reread "${image_file}" <<<'label: dos
size=128M type=83 bootable
size=239M type=83
type=83'
if [ -d 'x-boot' ]; then
sudo umount x-boot || :
sudo losetup -d /dev/loop3 || :
sudo losetup --partscan /dev/loop3 $(pwd)/appfs.img
sudo chown "$(id -u):$(id -g)" /dev/loop3 /dev/loop3p1 /dev/loop3p2
sudo umount x-boot || :
fi
if [ -n "${old_loop_dev}" ]; then
sudo losetup -d "${old_loop_dev}" || :
fi
sudo losetup --partscan --find "${image_file}"
loop_dev="$(losetup --noheadings --output name --associated "${image_file}")"
if [ -z "${loop_dev}" ]; then
echo "No loop device found" >&2
exit 1
fi
sudo chown "$(id -u):$(id -g)" "${loop_dev}" "${loop_dev}p1" "${loop_dev}p2"
sudo mke2fs \
mke2fs \
-L 'BOOT' \
-N 0 \
-O ^64bit \
-d boot \
-m 5 \
-r 1 \
-t ext4 \
/dev/loop3p1
"${loop_dev}p1"
sudo mke2fs \
-L 'ROOT' \
-N 0 \
-O ^64bit \
-d root \
-m 5 \
-r 1 \
-t ext4 \
/dev/loop3p2
sudo mke2fs \
mke2fs \
-L 'DATA' \
-N 0 \
-O ^64bit \
-m 5 \
-r 1 \
-t ext4 \
/dev/loop3p3
"${loop_dev}p2"
mkdir x-boot || :
sudo mount /dev/loop3p1 x-boot
sudo mount "${loop_dev}p1" x-boot
sudo extlinux --install $(pwd)/x-boot
sudo umount x-boot
dd if=/usr/lib/EXTLINUX/mbr.bin of=appfs.img conv=notrunc
dd if="${extlinux_mbr_bin}" of="${image_file}" conv=notrunc
rmdir x-boot
losetup -d /dev/loop3
losetup -d "${loop_dev}"
exit 0
|