mirror of
				https://github.com/linuxkit/linuxkit.git
				synced 2025-10-31 01:37:42 +00:00 
			
		
		
		
	miragesdk: fork pkg/init to experiment with removal of dhcpcd
Signed-off-by: Thomas Gazagnaire <thomas@gazagnaire.org>
This commit is contained in:
		
							
								
								
									
										2
									
								
								projects/miragesdk/init/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								projects/miragesdk/init/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| sbin/ | ||||
| usr/ | ||||
							
								
								
									
										10
									
								
								projects/miragesdk/init/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								projects/miragesdk/init/Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| FROM alpine:3.5 | ||||
|  | ||||
| RUN \ | ||||
|   apk --no-cache update && \ | ||||
|   apk --no-cache upgrade -a && \ | ||||
|   apk --no-cache add \ | ||||
|   dhcpcd \ | ||||
|   && rm -rf /var/cache/apk/* | ||||
|  | ||||
| COPY . ./ | ||||
							
								
								
									
										52
									
								
								projects/miragesdk/init/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								projects/miragesdk/init/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| CONTAINERD_IMAGE=mobylinux/containerd:a688df6aee1e3700eb8d54dbc81070361df397a2@sha256:59ee3da05fe4dad4fbecff582c86fc30ce75e19a225eeeb07e203c9cc36fe34f | ||||
| CONTAINERD_BINARIES=usr/bin/containerd usr/bin/containerd-shim usr/bin/ctr usr/bin/dist | ||||
|  | ||||
| RUNC_IMAGE=mobylinux/runc:94c54debf9a3ebb6d31311bdddb881ea07486dcd@sha256:13cabc1017c6448498e74bae9892ebc9dbad9e5d68f7df6b3855a15522e3a86b | ||||
| RUNC_BINARY=usr/bin/runc | ||||
|  | ||||
| C_COMPILE=mobylinux/c-compile:81a6bd8ff45d769b60a2ee1acdaccda11ab835c8@sha256:eac250997a3b9784d3285a03c0c8311d4ca6fb63dc75164c987411ba93006487 | ||||
| START_STOP_DAEMON=sbin/start-stop-daemon | ||||
|  | ||||
| default: push | ||||
|  | ||||
| $(RUNC_BINARY): | ||||
| 	mkdir -p $(dir $@) | ||||
| 	docker run --rm --net=none $(RUNC_IMAGE) tar cf - $@ | tar xf - | ||||
|  | ||||
| $(CONTAINERD_BINARIES): | ||||
| 	mkdir -p $(dir $@) | ||||
| 	docker run --rm --net=none $(CONTAINERD_IMAGE) tar cf - $@ | tar xf - | ||||
|  | ||||
| $(START_STOP_DAEMON): start-stop-daemon.c | ||||
| 	mkdir -p $(dir $@) | ||||
| 	tar cf - $^ | docker run --rm --net=none --log-driver=none -i $(C_COMPILE) -o $@ | tar xf - | ||||
|  | ||||
| .PHONY: tag push | ||||
|  | ||||
| BASE=alpine:3.5 | ||||
| IMAGE=init | ||||
|  | ||||
| ETC=$(shell find etc -type f) | ||||
|  | ||||
| hash: Dockerfile $(ETC) init $(RUNC_BINARY) $(CONTAINERD_BINARIES) $(START_STOP_DAEMON) | ||||
| 	DOCKER_CONTENT_TRUST=1 docker pull $(BASE) | ||||
| 	tar cf - $^ | docker build --no-cache -t $(IMAGE):build - | ||||
| 	docker run --rm $(IMAGE):build sh -c 'cat $^ /lib/apk/db/installed | sha1sum' | sed 's/ .*//' > $@ | ||||
|  | ||||
| push: hash | ||||
| 	docker pull mobylinux/$(IMAGE):$(shell cat hash) || \ | ||||
| 		(docker tag $(IMAGE):build mobylinux/$(IMAGE):$(shell cat hash) && \ | ||||
| 		 docker push mobylinux/$(IMAGE):$(shell cat hash)) | ||||
| 	docker rmi $(IMAGE):build | ||||
| 	rm -f hash | ||||
|  | ||||
| tag: hash | ||||
| 	docker pull mobylinux/$(IMAGE):$(shell cat hash) || \ | ||||
| 		docker tag $(IMAGE):build mobylinux/$(IMAGE):$(shell cat hash) | ||||
| 	docker rmi $(IMAGE):build | ||||
| 	rm -f hash | ||||
|  | ||||
| clean: | ||||
| 	rm -rf hash sbin usr | ||||
|  | ||||
| .DELETE_ON_ERROR: | ||||
							
								
								
									
										9
									
								
								projects/miragesdk/init/etc/init.d/containerd
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										9
									
								
								projects/miragesdk/init/etc/init.d/containerd
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| # bring up containerd | ||||
| ulimit -n 1048576 | ||||
| ulimit -p unlimited | ||||
|  | ||||
| printf "\nStarting containerd\n" | ||||
| mkdir -p /var/log | ||||
| /sbin/start-stop-daemon --start --exec /usr/bin/containerd | ||||
							
								
								
									
										31
									
								
								projects/miragesdk/init/etc/init.d/containers
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										31
									
								
								projects/miragesdk/init/etc/init.d/containers
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| # TODO more robust | ||||
| # while [ ! -S /run/containerd/containerd.sock ]; do sleep 1; done | ||||
| # while ! ctr list 2> /dev/null; do sleep 1; done | ||||
|  | ||||
| # start system containers | ||||
| # temporarily using runc not containerd | ||||
|  | ||||
| if [ -d /containers/system ] | ||||
| then | ||||
| 	for f in $(find /containers/system -mindepth 1 -maxdepth 1 | sort) | ||||
| 	do | ||||
| 		base="$(basename $f)" | ||||
| 		/usr/bin/runc run --bundle "$f" "$(basename $f)" | ||||
| 		printf " - $base\n" | ||||
| 	done | ||||
| fi | ||||
|  | ||||
| if [ -d /containers/daemon ] | ||||
| then | ||||
| 	for f in $(find /containers/daemon -mindepth 1 -maxdepth 1 | sort) | ||||
| 	do | ||||
| 		base="$(basename $f)" | ||||
| 		log="/var/log/$base.log" | ||||
| 		/sbin/start-stop-daemon --start --pidfile /run/$base.pid --exec /usr/bin/runc -- run --bundle "$f" --pid-file /run/$base.pid "$(basename $f)" </dev/null 2>$log >$log & | ||||
| 		printf " - $base\n" | ||||
| 	done | ||||
| fi | ||||
|  | ||||
| wait | ||||
							
								
								
									
										106
									
								
								projects/miragesdk/init/etc/init.d/rcS
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										106
									
								
								projects/miragesdk/init/etc/init.d/rcS
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,106 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| # mount filesystems | ||||
| mkdir -p -m 0755 /proc /run /tmp /sys /dev | ||||
|  | ||||
| mount -n -t proc proc /proc -o ndodev,nosuid,noexec,relatime | ||||
|  | ||||
| mount -n -t tmpfs tmpfs /run -o nodev,nosuid,noexec,relatime,size=10%,mode=755 | ||||
| mount -n -t tmpfs tmpfs /tmp -o nodev,nosuid,noexec,relatime,size=10%,mode=1777 | ||||
|  | ||||
| # mount devfs | ||||
| mount -n -t devtmpfs dev /dev -o nosuid,noexec,relatime,size=10m,nr_inodes=248418,mode=755 | ||||
| # devices | ||||
| [ -c /dev/console ] || mknod -m 600 /dev/console c 5 1 | ||||
| [ -c /dev/tty1 ] || mknod -m 620 /dev/tty1 c 4 1 | ||||
| [ -c /dev/tty ] || mknod -m 666 /dev/tty c 5 0 | ||||
|  | ||||
| [ -c /dev/null ] || mknod -m 666 /dev/null c 1 3 | ||||
| [ -c /dev/kmsg ] || mknod -m 660 /dev/kmsg c 1 11 | ||||
|  | ||||
| # extra symbolic links not provided by default | ||||
| [ -e /dev/fd ] || ln -snf /proc/self/fd /dev/fd | ||||
| [ -e /dev/stdin ] || ln -snf /proc/self/fd/0 /dev/stdin | ||||
| [ -e /dev/stdout ] || ln -snf /proc/self/fd/1 /dev/stdout | ||||
| [ -e /dev/stderr ] || ln -snf /proc/self/fd/2 /dev/stderr | ||||
| [ -e /proc/kcore ] && ln -snf /proc/kcore /dev/core | ||||
|  | ||||
| # devfs filesystems | ||||
| mkdir -p -m 1777 /dev/mqueue | ||||
| mkdir -p -m 1777 /dev/shm | ||||
| mkdir -p -m 0755 /dev/pts | ||||
| mount -n -t mqueue -o noexec,nosuid,nodev mqueue /dev/mqueue | ||||
| mount -n -t tmpfs -o noexec,nosuid,nodev,mode=1777 shm /dev/shm | ||||
| mount -n -t devpts -o noexec,nosuid,gid=5,mode=0620 devpts /dev/pts | ||||
|  | ||||
| # mount sysfs | ||||
| sysfs_opts=nodev,noexec,nosuid | ||||
| mount -n -t sysfs -o ${sysfs_opts} sysfs /sys | ||||
| [ -d /sys/kernel/security ] && mount -n -t securityfs -o ${sysfs_opts} securityfs /sys/kernel/security | ||||
| [ -d /sys/kernel/debug ] && mount -n -t debugfs -o ${sysfs_opts} debugfs /sys/kernel/debug | ||||
| [ -d /sys/kernel/config ] && mount -n -t configfs -o ${sysfs_opts} configfs /sys/kernel/config | ||||
| [ -d /sys/fs/fuse/connections ] && mount -n -t fusectl -o ${sysfs_opts} fusectl /sys/fs/fuse/connections | ||||
| [ -d /sys/fs/selinux ] && mount -n -t selinuxfs -o nosuid,noexec selinuxfs /sys/fs/selinux | ||||
| [ -d /sys/fs/pstore ] && mount -n -t pstore pstore -o ${sysfs_opts} /sys/fs/pstore | ||||
| [ -d /sys/firmware/efi/efivars ] && mount -n -t efivarfs -o ro,${sysfs_opts} efivarfs /sys/firmware/efi/efivars | ||||
|  | ||||
| # misc /proc mounted fs | ||||
| [ -d /proc/sys/fs/binfmt_misc ] && mount -t binfmt_misc -o nodev,noexec,nosuid binfmt_misc /proc/sys/fs/binfmt_misc | ||||
|  | ||||
| # mount cgroups | ||||
| mount -n -t tmpfs -o nodev,noexec,nosuid,mode=755,size=10m cgroup_root /sys/fs/cgroup | ||||
|  | ||||
| while read name hier groups enabled rest | ||||
| do | ||||
| 	case "${enabled}" in | ||||
| 	1)	mkdir -p /sys/fs/cgroup/${name} | ||||
| 		mount -n -t cgroup -o ${sysfs_opts},${name} ${name} /sys/fs/cgroup/${name} | ||||
| 	;; | ||||
| 	esac | ||||
| done < /proc/cgroups | ||||
|  | ||||
| # for compatibility | ||||
| mkdir -p /sys/fs/cgroup/systemd | ||||
| mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd | ||||
|  | ||||
| # set SELinux contexts | ||||
| if [ -x /sbin/restorecon ] | ||||
| then | ||||
| 	restorecon -F /sys/devices/system/cpu/online >/dev/null 2>&1 | ||||
| 	restorecon -rF /sys/fs/cgroup >/dev/null 2>&1 | ||||
| 	restorecon -rF /dev >/dev/null 2>&1 | ||||
| fi | ||||
|  | ||||
| # start mdev for hotplug | ||||
| echo "/sbin/mdev" > /proc/sys/kernel/hotplug | ||||
|  | ||||
| # mdev -s will not create /dev/usb[1-9] devices with recent kernels | ||||
| # so we trigger hotplug events for usb for now | ||||
| for i in $(find /sys/devices -name 'usb[0-9]*'); do | ||||
| 	[ -e $i/uevent ] && echo add > $i/uevent | ||||
| done | ||||
|  | ||||
| mdev -s | ||||
|  | ||||
| # set hostname | ||||
| if [ -s /etc/hostname ] | ||||
| then | ||||
| 	hostname -F /etc/hostname | ||||
| fi | ||||
|  | ||||
| if [ $(hostname) = "moby" -a -f /sys/class/net/eth0/address ] | ||||
| then | ||||
| 	mac=$(cat /sys/class/net/eth0/address) | ||||
| 	hostname moby-$(echo $mac | sed 's/://g') | ||||
| fi | ||||
|  | ||||
| # set system clock from hwclock | ||||
| hwclock --hctosys --utc | ||||
|  | ||||
| # bring up loopback interface | ||||
| ip addr add 127.0.0.1/8 dev lo brd + scope host | ||||
| ip route add 127.0.0.0/8 dev lo scope host | ||||
| ip link set lo up | ||||
|  | ||||
| # will be containerised | ||||
| /sbin/dhcpcd | ||||
							
								
								
									
										15
									
								
								projects/miragesdk/init/etc/inittab
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								projects/miragesdk/init/etc/inittab
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| # /etc/inittab | ||||
|  | ||||
| ::sysinit:/etc/init.d/rcS | ||||
| ::once:/etc/init.d/containerd | ||||
| ::once:/etc/init.d/containers | ||||
|  | ||||
| # Stuff to do for the 3-finger salute | ||||
| ::ctrlaltdel:/sbin/reboot | ||||
|  | ||||
| # Stuff to do before rebooting | ||||
| ::shutdown:/usr/sbin/killall5 -15 | ||||
| ::shutdown:/bin/sleep 5 | ||||
| ::shutdown:/usr/sbin/killall5 -9 | ||||
| ::shutdown:/bin/echo "Unmounting filesystems" | ||||
| ::shutdown:/bin/umount -a -r | ||||
							
								
								
									
										12
									
								
								projects/miragesdk/init/etc/issue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								projects/miragesdk/init/etc/issue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
|  | ||||
| Welcome to Moby | ||||
|  | ||||
|                         ##         . | ||||
|                   ## ## ##        == | ||||
|                ## ## ## ## ##    === | ||||
|            /"""""""""""""""""\___/ === | ||||
|       ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~ | ||||
|            \______ o           __/ | ||||
|              \    \         __/ | ||||
|               \____\_______/ | ||||
|  | ||||
							
								
								
									
										44
									
								
								projects/miragesdk/init/init
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										44
									
								
								projects/miragesdk/init/init
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,44 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| setup_console() { | ||||
| 	tty=${1%,*} | ||||
| 	speed=${1#*,} | ||||
| 	inittab="$2" | ||||
| 	securetty="$3" | ||||
| 	line= | ||||
| 	term="linux" | ||||
| 	[ "$speed" = "$1" ] && speed=115200 | ||||
|  | ||||
| 	case "$tty" in | ||||
| 	ttyS*|ttyAMA*|ttyUSB*|ttyMFD*) | ||||
| 		line="-L" | ||||
| 		term="vt100" | ||||
| 		;; | ||||
| 	tty0) | ||||
| 		# skip current console | ||||
| 		return 0 | ||||
| 		;; | ||||
| 	esac | ||||
| 	# skip consoles already in inittab | ||||
| 	grep -q "^$tty:" "$inittab" && return | ||||
|  | ||||
| 	echo "$tty::once:cat /etc/issue" >> "$inittab" | ||||
| 	echo "$tty::respawn:/sbin/getty -n -l /bin/sh $line $speed $tty $term" >> "$inittab" | ||||
| 	if ! grep -q -w "$tty" "$securetty"; then | ||||
| 		echo "$tty" >> "$securetty" | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| /bin/mount -t tmpfs tmpfs /mnt | ||||
|  | ||||
| /bin/cp -a / /mnt 2>/dev/null | ||||
|  | ||||
| /bin/mount -t proc -o noexec,nosuid,nodev proc /proc | ||||
| for opt in $(cat /proc/cmdline); do | ||||
| 	case "$opt" in | ||||
| 	console=*) | ||||
| 		setup_console ${opt#console=} /mnt/etc/inittab /mnt/etc/securetty;; | ||||
| 	esac | ||||
| done | ||||
|  | ||||
| exec /bin/busybox switch_root /mnt /sbin/init | ||||
							
								
								
									
										1054
									
								
								projects/miragesdk/init/start-stop-daemon.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1054
									
								
								projects/miragesdk/init/start-stop-daemon.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user