From df12290b78aba39dffe4a581790ecc174d299959 Mon Sep 17 00:00:00 2001 From: nemunaire Date: Mon, 5 Mar 2018 18:01:34 +0100 Subject: [PATCH] Add tuto2 image --- .gitignore | 5 ++ Makefile | 19 ++++ pkg/debian-tuto2/build.yml | 2 +- tuto2.yml | 175 +++++++++++++++++++++++++++++++++++++ 4 files changed, 200 insertions(+), 1 deletion(-) create mode 100644 tuto2.yml diff --git a/.gitignore b/.gitignore index 8b1818b..9a680b3 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,9 @@ login-kernel server-cmdline server-initrd.img server-kernel +tuto2-cmdline +tuto2-initrd.img +tuto2.iso +tuto2-kernel +tuto2-state/ fonts/ diff --git a/Makefile b/Makefile index 0e9e607..096d493 100644 --- a/Makefile +++ b/Makefile @@ -12,3 +12,22 @@ fonts/Inconsolata-32r.psf: login-app/login-app: login-app/*.go GOOS=linux GOARCH=amd64 go build -tags netgo -ldflags '-w -extldflags "-static -lncurses"' -o $@ ./login-app + +tuto2-kernel: tuto2.yml + linuxkit build $< +tuto2-initrd.img: tuto2.yml + linuxkit build $< +tuto2-cmdline: tuto2.yml + linuxkit build $< + +tuto2.iso: pkg/debian-tuto2/isolinux.cfg tuto2-kernel tuto2-initrd.img tuto2-cmdline + $(eval TDIR := $(shell mktemp -d)) + mkdir $(TDIR)/boot/ $(TDIR)/isolinux/ + cp tuto2-kernel $(TDIR)/boot/kernel + cp tuto2-initrd.img $(TDIR)/boot/tuto2-initrd.img + cp pkg/debian-tuto2/isolinux.cfg /usr/share/syslinux/isolinux.bin /usr/share/syslinux/ldlinux.c32 /usr/share/syslinux/vesamenu.c32 /usr/share/syslinux/menu.c32 /usr/share/syslinux/libcom32.c32 /usr/share/syslinux/libutil.c32 /usr/share/syslinux/poweroff.c32 /usr/share/syslinux/poweroff.c32 $(TDIR)/isolinux/ + $(eval CMDLINE := $(shell cat tuto2-cmdline)) + sed -i 's##$(CMDLINE)#' $(TDIR)/isolinux/isolinux.cfg + mkisofs -o $@ -l -J -R -c isolinux/boot.cat -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -joliet-long -input-charset utf8 -V AdLin2 $(TDIR) + rm -rf $(TDIR) + isohybrid $@ diff --git a/pkg/debian-tuto2/build.yml b/pkg/debian-tuto2/build.yml index 5f1f82b..a3072ca 100644 --- a/pkg/debian-tuto2/build.yml +++ b/pkg/debian-tuto2/build.yml @@ -1 +1 @@ -image: base2 +image: adlin-tuto2 diff --git a/tuto2.yml b/tuto2.yml new file mode 100644 index 0000000..8917c3c --- /dev/null +++ b/tuto2.yml @@ -0,0 +1,175 @@ +kernel: + image: linuxkit/kernel:4.9.85 +# cmdline: "console=ttyS0 console=tty0 root=/dev/sda1" + cmdline: "console=tty0 console=ttyS0 root=/dev/sda1" + +init: + - nemunaire/adlin-tuto2:77195c07e73d9d21820e2da37e0cf5ab28a67331-dirty + +files: + - path: etc/hostname + contents: | + adlin2 + mode: "0644" + + - path: etc/resolv.conf + contents: | + nameserver 9.9.9.9 + mode: "0644" + + - path: etc/systemd/network/49-main.link + contents: | + [Match] + OriginalName=eth0 + [Link] + Name=eth0 + mode: "0644" + + - path: etc/systemd/network/50-dhcp.network + contents: | + [Match] + Name=eth0 + [Network] + DHCP=yes + mode: "0644" + + - path: init + contents: | + #!/bin/sh + + # /proc/cmdline parser (from Gentoo Wiki) + cmdline() { + local value + value=" $(cat /proc/cmdline) " + value="${value#* $1=}" + value="${value%% *}" + [ "$value" != "" ] && echo "$value" + } + + # Hide us! + /bin/rm -f /init /linuxrc + + mount -n -t devtmpfs devtmpfs /dev + mount -n -t proc proc /proc + #mount -n -t tmpfs run /run + #mount -m -t sysfs sys /sys + + INITP=$(cmdline init) + [ -z "$INITP" ] && INITP=/lib/systemd/systemd + + + + ROOTFS=$(cmdline root) + echo "rootfs=$ROOTFS" + [ -z "$ROOTFS" ] && { echo "No root= provided, continuing on initramfs only."; exec "${INITP}"; } + [ "$ROOTFS" = "/dev/sr0" ] && { echo "No root= provided, continuing on initramfs only."; exec "${INITP}"; } + [ -b "$ROOTFS" ] || { + FORMATDD=$(cmdline adlin.format) + [ -b "$FORMATDD" ] && { echo "o\nn\np\n1\n\n\np\nw\nq\n" | fdisk "${FORMATDD}" && mkfs.ext4 "$FORMATDD"1; } + [ -b "$ROOTFS" ] || { echo "Invalid provided rootfs: not a valid block device."; exit 1; } + } + + mkdir -p /overlay + /bin/mount -n -t tmpfs none /overlay + /bin/mkdir -p /overlay/rwdata + /bin/mkdir -p /overlay/robase + /bin/mkdir -p /overlay/combined + /bin/mount --bind / /overlay/robase + + ovr_rwdata=/overlay/rwdata + ovr_robase=/overlay/robase + ovr_combined=/overlay/combined + + # Prepare filesystem for local data storage... + /bin/mkdir -p ${ovr_rwdata} + /bin/mount -n "${ROOTFS}" ${ovr_rwdata} || { echo "Unable to mount rootfs."; exit 2; } + + mkdir -p ${ovr_rwdata}/data + mkdir -p ${ovr_rwdata}/work + /bin/mount -n -t overlay -o upperdir=${ovr_rwdata}/data,workdir=${ovr_rwdata}/work,lowerdir=${ovr_robase} overlay ${ovr_combined} || { echo "Unable to create overlayfs."; exit 3; } + + /bin/umount -n /proc + /bin/umount -n /dev + + /bin/mkdir -p ${ovr_combined}/overlay/rwdata + /bin/mount -n --move ${ovr_rwdata} ${ovr_combined}/overlay/rwdata + /bin/mkdir -p ${ovr_combined}/overlay/robase + /bin/mount -n --move ${ovr_robase} ${ovr_combined}/overlay/robase + /bin/mkdir -p ${ovr_combined}/overlay/pivot + + cd ${ovr_combined} + + mount --move . / + /bin/umount -n /overlay + exec /usr/sbin/chroot . "${INITP}" + mode: "0755" + +# - path: etc/systemd/system/systemd-networkd.service.d/10-debug.conf +# contents: | +# [Service] +# Environment=SYSTEMD_LOG_LEVEL=debug +# mode: "0644" + + - path: etc/passwd + contents: | + root:x:0:0:root:/root:/bin/bash + daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin + bin:x:2:2:bin:/bin:/usr/sbin/nologin + sys:x:3:3:sys:/dev:/usr/sbin/nologin + sync:x:4:65534:sync:/bin:/bin/sync + games:x:5:60:games:/usr/games:/usr/sbin/nologin + man:x:6:12:man:/var/cache/man:/usr/sbin/nologin + lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin + mail:x:8:8:mail:/var/mail:/usr/sbin/nologin + news:x:9:9:news:/var/spool/news:/usr/sbin/nologin + uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin + proxy:x:13:13:proxy:/bin:/usr/sbin/nologin + www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin + backup:x:34:34:backup:/var/backups:/usr/sbin/nologin + list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin + irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin + gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin + nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin + _apt:x:100:65534::/nonexistent:/bin/false + messagebus:x:101:102::/var/run/dbus:/bin/false + sshd:x:102:65534::/run/sshd:/usr/sbin/nologin + systemd-timesync:x:103:105:systemd Time Synchronization,,,:/run/systemd:/bin/false + systemd-network:x:104:106:systemd Network Management,,,:/run/systemd/netif:/bin/false + systemd-resolve:x:105:107:systemd Resolver,,,:/run/systemd/resolve:/bin/false + systemd-bus-proxy:x:106:108:systemd Bus Proxy,,,:/run/systemd:/bin/false + mode: "0644" + + + - path: etc/shadow + contents: | + root:$6$fCh6fLfB$wTiBuIJB2/QLl37VlJ16MsqGmfSDct8ALRpY8kemFC2T4N4eZgdlTnEqTuYn5i4FMc5GoDBx1nfENHQqm0Zgm.:17594:0:99999:7::: + daemon:*:17575:0:99999:7::: + bin:*:17575:0:99999:7::: + sys:*:17575:0:99999:7::: + sync:*:17575:0:99999:7::: + games:*:17575:0:99999:7::: + man:*:17575:0:99999:7::: + lp:*:17575:0:99999:7::: + mail:*:17575:0:99999:7::: + news:*:17575:0:99999:7::: + uucp:*:17575:0:99999:7::: + proxy:*:17575:0:99999:7::: + www-data:*:17575:0:99999:7::: + backup:*:17575:0:99999:7::: + list:*:17575:0:99999:7::: + irc:*:17575:0:99999:7::: + gnats:*:17575:0:99999:7::: + nobody:*:17575:0:99999:7::: + _apt:*:17575:0:99999:7::: + messagebus:*:17594:0:99999:7::: + sshd:*:17594:0:99999:7::: + systemd-timesync:*:17594:0:99999:7::: + systemd-network:*:17594:0:99999:7::: + systemd-resolve:*:17594:0:99999:7::: + systemd-bus-proxy:*:17594:0:99999:7::: + mode: "0640" + +trust: + org: + - linuxkit + - library