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












>







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


#! /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. Downloading a static Tclkit with TUAPI
#  4. Downloading a static AppFS





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
size=239M type=83
type=83'


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 mke2fs \
  -L 'BOOT' \
  -N 0 \
  -O ^64bit \
  -d boot \
  -m 5 \
  -r 1 \
  -t ext4 \
  /dev/loop3p1

sudo mke2fs \
  -L 'ROOT' \
  -N 0 \
  -O ^64bit \
  -d root \
  -m 5 \
  -r 1 \
  -t ext4 \
  /dev/loop3p2

sudo mke2fs \
  -L 'DATA' \
  -N 0 \
  -O ^64bit \
  -m 5 \
  -r 1 \
  -t ext4 \
  /dev/loop3p3

mkdir x-boot || :
sudo mount /dev/loop3p1 x-boot
sudo extlinux --install $(pwd)/x-boot
sudo umount x-boot
dd if=/usr/lib/EXTLINUX/mbr.bin of=appfs.img conv=notrunc
rmdir x-boot

losetup -d /dev/loop3









>
|
|
>
>
>
>




|
>
>
>
>
>
>
|
|
|
<


>

>
>
|
>
|
>
>
>
>
>
|

|







<
|
<
<
<
<
<
<
<
<
<

|






|


|


|


|
>
>
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/
#  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 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

type=83'

if [ -d 'x-boot' ]; then
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"

mke2fs \
  -L 'BOOT' \
  -N 0 \
  -O ^64bit \
  -d boot \
  -m 5 \
  -r 1 \
  -t ext4 \

  "${loop_dev}p1"










mke2fs \
  -L 'DATA' \
  -N 0 \
  -O ^64bit \
  -m 5 \
  -r 1 \
  -t ext4 \
  "${loop_dev}p2"

mkdir x-boot || :
sudo mount "${loop_dev}p1" x-boot
sudo extlinux --install $(pwd)/x-boot
sudo umount x-boot
dd if="${extlinux_mbr_bin}" of="${image_file}" conv=notrunc
rmdir x-boot

losetup -d "${loop_dev}"

exit 0

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

1
2
3
4
5

6
DEFAULT appfs
SERIAL 0 9600 0x003

LABEL appfs
	KERNEL vmlinuz

	APPEND root=/dev/vda2 console=tty0 console=ttyS0 consoleblank=0 loglevel=8





>
|
1
2
3
4
5
6
7
DEFAULT appfs
SERIAL 0 9600 0x003

LABEL appfs
	KERNEL vmlinuz
	INITRD initrd
	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

	execv(path, argv);

	exit(EXIT_FAILURE);
}

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


	/*











	 * Remount root filesystem read-write
	 */




	mount("/dev/vda2", "/", "ext4", MS_REMOUNT, NULL);


























	/*
	 * 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");







>
>

>
>
>
>
>
>
>
>
>
>
>
|

>
>
>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>




















<










<







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

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

	mkdir("/new-root", 0755);
	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);


	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);


	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
	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);
}







<
<
<
<
<
<
<
<
<
<




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);











	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
#! /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




<
<







1
2
3
4


5
6
7
8
9
10
11
#! /bin/tclkit

package require tuapi



::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
#! /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







|
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,format=raw