Check-in [afc876941b]
Overview
Comment:Updated to use an initramfs to allow more flexible mounting options
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | trunk
Files: files | file ages | folders
SHA1: afc876941bda07800052b59758d82b65322ed87e
User & Date: rkeene on 2020-06-29 14:58:52
Other Links: manifest | tags
Context
2020-06-29
14:58
Updated to use an initramfs to allow more flexible mounting options Leaf check-in: afc876941b user: rkeene tags: trunk
2020-06-28
20:05
Do not include root directory in the cache/data fs check-in: 2d622e681b user: rkeene tags: trunk
Changes

Modified .fossil-settings/ignore-glob from [3fdd9f1f14] to [44e2bffff6].

1
2
3
4
5
6
7
8
9
10
11
12

13
14
15
16
17
18
19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20












+







appfsd
appfsd.o
appfsd.tcl.h
sha1.o
sha1.tcl.h
pki.tcl.h
pki.tcl.new
pki.tcl
CA
build/qemu/root/lib/modules
build/qemu/appfs.img
build/qemu/boot/vmlinuz
build/qemu/boot/initrd
build/qemu/init
build/qemu/root/bin/appfs-cache
build/qemu/root/bin/appfs-mkfs
build/qemu/root/bin/appfsd
build/qemu/root/bin/init
build/qemu/root/bin/mount.appfs
build/qemu/root/bin/tclkit

Modified build/qemu/assemble from [1e459fa032] to [7557bdba83].

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

Modified build/qemu/boot/extlinux.conf from [16eb016414] to [4580fa2068].

1
2
3
4
5

6

1
2
3
4
5
6

7





+
-
+
DEFAULT appfs
SERIAL 0 9600 0x003

LABEL appfs
	KERNEL vmlinuz
	INITRD initrd
	APPEND root=/dev/vda2 console=tty0 console=ttyS0 consoleblank=0 loglevel=8
	APPEND rdinit=/bin/init console=tty0 console=ttyS0 consoleblank=0 loglevel=8

Modified build/qemu/init.c from [e11582ede8] to [c6b18551fb].

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
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113

114
115
116
117
118
119
120
121
122
123

124
125
126
127
128
129
130







+
+

+
+
+
+
+
+
+
+
+
+
+
-
+

+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+




















-










-








	execv(path, argv);

	exit(EXIT_FAILURE);
}

int main(int argc, char **argv) {
	int mount_ret;

	/*
	 * Load kernel modules (drivers)
	 */
	mkdir("/sys", 0755);
	mount("sysfs", "/sys", "sysfs", 0, NULL);

	run("/bin/init-modules", "init-modules", NULL);

	umount("/sys");
	rmdir("/sys");

	/*
	 * Remount root filesystem read-write
	 * Mount root filesystem
	 */
	mkdir("/dev", 0755);
	mount("devtmpfs", "/dev", "devtmpfs", 0, NULL);

	mkdir("/new-root", 0755);
	mount("/dev/vda2", "/", "ext4", MS_REMOUNT, NULL);
	mount_ret = mount("/dev/vda2", "/new-root", "ext4", 0, NULL);
	if (mount_ret != 0) {
		mount_ret = mount("/dev/sda2", "/new-root", "ext4", 0, NULL);
	}
	if (mount_ret != 0) {
		mount_ret = mount("/dev/hda2", "/new-root", "ext4", 0, NULL);
	}
	umount("/dev");
	rmdir("/dev");

	if (mount_ret == 0) {
		mkdir("/new-root/initramfs", 0755);
		mkdir("/new-root/bin", 0755);
		mkdir("/new-root/lib", 0755);
		symlink("../initramfs/bin/appfsd", "/new-root/bin/appfsd");
		symlink("../initramfs/bin/init", "/new-root/bin/init");
		symlink("../initramfs/bin/init-modules", "/new-root/bin/init-modules");
		symlink("../initramfs/bin/init-networking", "/new-root/bin/init-networking");
		symlink("../initramfs/bin/appfs-cache", "/new-root/bin/appfs-cache");
		symlink("../initramfs/bin/tclkit", "/new-root/bin/tclkit");
		symlink("../initramfs/lib/modules", "/new-root/lib/modules");
		chdir("/new-root");
		mount("/", "/new-root/initramfs", "bind", MS_BIND, NULL);
		chroot("/new-root");
		chdir("/");
	}

	/*
	 * Mount needed filesystems
	 */
	mkdir("/dev", 0755);
	mount("devtmpfs", "/dev", "devtmpfs", 0, NULL);

	mkdir("/tmp", 0755);
	mount("tmpfs", "/tmp", "tmpfs", 0, NULL);

	mkdir("/proc", 0755);
	mount("proc", "/proc", "proc", 0, NULL);

	mkdir("/sys", 0755);
	mount("sysfs", "/sys", "sysfs", 0, NULL);

	/*
	 * Setup networking
	 */
	run("/bin/init-networking", "init-networking", NULL);
	run("/bin/init-fuse", "init-fuse", NULL);

	mkdir("/etc", 0755);
	mkdir("/bin", 0755);
	mkdir("/lib", 0755);
	mkdir("/opt", 0755);
	mkdir("/opt/appfs", 0755);

	mkdir("/var", 0755);
	mkdir("/var/cache", 0755);
	mkdir("/var/cache/appfs", 0755);
	mount("/dev/vda3", "/var/cache/appfs", "ext4", 0, NULL);

	run("/bin/appfsd", "appfsd", "/var/cache/appfs", "/opt/appfs", NULL);

	symlink(".", "/usr");
	symlink("lib", "/lib64");

	symlink("/proc/self/mounts", "/etc/mtab");
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
138
139
140
141
142
143
144










145
146
147
148







-
-
-
-
-
-
-
-
-
-




	run("/bin/appfs-cache", "appfs-cache", "install", "-lib", "core.appfs.rkeene.org", "glibc", NULL);
	run("/bin/appfs-cache", "appfs-cache", "install", "core.appfs.rkeene.org", "coreutils", NULL);
	run("/bin/appfs-cache", "appfs-cache", "install", "core.appfs.rkeene.org", "procps-ng", NULL);
	setenv("PATH", "/bin", 1);

	run("/bin/sh", "sh", NULL);

	/*
	 * Remount root filesystem read-only
	 */
	umount("/dev");
	umount("/tmp");
	umount("/proc");
	umount("/sys");
	umount("/opt/appfs");
	umount("/var/cache/appfs");
	mount("/dev/vda2", "/", "ext4", MS_REMOUNT | MS_RDONLY, NULL);
	sync();

	return(0);
}

Deleted build/qemu/root/bin/init-fuse version [3ac2dd4f3a].

1
2
3
4
5





-
-
-
-
-
#! /bin/tclkit

package require tuapi

::tuapi::modprobe fuse

Added build/qemu/root/bin/init-modules version [a758608fd7].








1
2
3
4
5
6
7
+
+
+
+
+
+
+
#! /bin/tclkit

package require tuapi

::tuapi::scan_and_load_kernel_modules

::tuapi::modprobe fuse

Modified build/qemu/root/bin/init-networking from [be0f1f2714] to [19614066f2].

1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4


5
6
7
8
9
10
11




-
-







#! /bin/tclkit

package require tuapi

::tuapi::scan_and_load_kernel_modules

::tuapi::ifconfig eth0 address 10.0.2.15 netmask 255.255.255.0 flags {BROADCAST MULTICAST UP}
::tuapi::syscall::route add 0.0.0.0 0.0.0.0 gateway 10.0.2.2 dev eth0

file mkdir /etc   
set fd [open /etc/resolv.conf w]
puts $fd "nameserver 10.0.2.3"
close $fd

Modified build/qemu/run from [4b861ef3b6] to [a48cd7e079].

1
2
3
4
5
6
7
8

1
2
3
4
5
6
7

8







-
+
#! /usr/bin/env bash

sudo chown $(id -u) /dev/kvm
qemu-system-x86_64  \
	-display none -vga none -serial stdio \
	-m 2048 -enable-kvm -cpu host -smp 2 \
	-net nic -net user \
	-drive file=appfs.img,if=virtio,cache=unsafe
	-drive file=appfs.img,if=virtio,format=raw