aboutsummaryrefslogtreecommitdiff
path: root/server.nix
diff options
context:
space:
mode:
authorMalte Voos <git@mal.tc>2026-05-27 17:30:32 +0900
committerMalte Voos <git@mal.tc>2026-05-28 13:08:20 +0900
commit64c1fd77c5d8d99607a00b151a71a1fee2d1b0c3 (patch)
treed30559370b64753b101f052f56f360b162b0642b /server.nix
parenta5b1a5a6a22ddd4b30de59cfcb965cc918a6485a (diff)
downloadreMder-64c1fd77c5d8d99607a00b151a71a1fee2d1b0c3.tar.gz
reMder-64c1fd77c5d8d99607a00b151a71a1fee2d1b0c3.zip
custom minimal initHEADmain
Diffstat (limited to 'server.nix')
-rw-r--r--server.nix138
1 files changed, 44 insertions, 94 deletions
diff --git a/server.nix b/server.nix
index fc52410..78f9e29 100644
--- a/server.nix
+++ b/server.nix
@@ -7,7 +7,6 @@
runCommand,
cpio,
writeShellApplication,
- sshPassword,
sshPort,
httpPort,
writeScript,
@@ -24,89 +23,60 @@ let
xochitlConfig = writeText "xochitl.conf" ''
[General]
- DeveloperPassword=${sshPassword}
AirplaneMode=true
WebInterfaceEnabled=true
IdleSuspendDelay=0
SuspendPowerOffDelay=0
'';
- usbMacAddr = "52:54:00:12:34:56";
+ fakefbdev = pkgsCross.armv7l-hf-multiplatform.stdenv.mkDerivation {
+ name = "fakefbdev";
+ src = ./fakefbdev;
- ifnameUdevRule = writeText "70-persistent-net.rules" ''
- SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", \
- ATTR{address}=="${usbMacAddr}", \
- ATTR{type}=="1", KERNEL=="eth*", NAME="usb0"
- '';
+ installFlags = [ "DESTDIR=${placeholder "out"}" ];
+ };
+
+ kernel = pkgsCross.armv7l-hf-multiplatform.linux;
- mmcSymlinkUdevRule = writeText "" ''
- ACTION=="add", KERNEL=="vda", SYMLINK+="mmcblk2"
- ACTION=="add", KERNEL=="vda[0-9]", SYMLINK+="mmcblk2p%n"
+ rootfsImage = runCommand "rm-rootfs.ext4" { nativeBuildInputs = [ cpio ]; } ''
+ cpio -i --file ${updateArchive}
+ gzip -dc ${updateName}.ext4.gz > $out
'';
- usbNetworkConfig = writeText "10-usb.network" ''
- [Match]
- Name=usb*
+ initScript = writeScript "init" ''
+ #!/bin/sh
+ set -e
- [Network]
- DHCP=yes
- '';
+ mount -t proc proc /proc
+ mount -t sysfs sysfs /sys
+ mkdir -p /dev/pts && mount -t devpts devpts /dev/pts
+ mkdir -p /dev/shm && mount -t tmpfs shm /dev/shm -o mode=1777
+ mkdir -p /run && mount -t tmpfs tmpfs /run -o mode=0755
+ mkdir -p /tmp && mount -t tmpfs tmpfs /tmp -o mode=1777
- usbWaitOnlineService = writeText "usb0-wait-online.service" ''
- [Unit]
- Description=Wait for usb0 to be routable
- Before=network-online.target
+ for i in 1 2 3 4; do
+ ln -s /dev/vda$i /dev/mmcblk2p$i
+ done
- [Service]
- Type=oneshot
- ExecStart=/bin/sh -c 'until ip -4 addr show usb0 | grep -q "inet "; do sleep 1; done'
- RemainAfterExit=yes
+ [ ! -s /etc/machine-id ] && dbus-uuidgen > /etc/machine-id
+ mkdir -p /run/dbus
+ dbus-daemon --system --fork
- [Install]
- WantedBy=network-online.target
- '';
+ ip link set lo up
+ ip link set eth0 name usb0
+ ip link set usb0 up
+ udhcpc -i usb0
- xochitlService = writeText "xochitl.service" ''
- [Unit]
- Description=reMarkable main application
- DefaultDependencies=no
- Conflicts=shutdown.target
- Before=shutdown.target
- # add network-online.target to the original dependencies so that xochitl
- # can bind to the usb0 interface when it starts
- Wants=rm-sync.service network-online.target
- After=var-lib-uboot.mount dbus.socket network-online.target
- Requires=dbus.socket
-
- [Service]
- ExecStart=/usr/bin/xochitl --system
- Restart=on-failure
- NotifyAccess=all
- # required to make xochitl run
- Environment=LD_PRELOAD=/usr/lib/libfakefbdev.so
-
- [Install]
- WantedBy=multi-user.target
- '';
-
- fakefbdev = pkgsCross.armv7l-hf-multiplatform.stdenv.mkDerivation {
- name = "fakefbdev";
- src = ./fakefbdev;
+ dropbear -REB
- installFlags = [ "DESTDIR=${placeholder "out"}" ];
- };
+ export PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
+ LD_PRELOAD=/usr/lib/libfakefbdev.so exec xochitl --system
+ '';
doNothing = writeScript "do-nothing" ''
#!/bin/sh
'';
- kernel = pkgsCross.armv7l-hf-multiplatform.linux;
-
- rootfsImage = runCommand "rm-rootfs.ext4" { nativeBuildInputs = [ cpio ]; } ''
- cpio -i --file ${updateArchive}
- gzip -dc ${updateName}.ext4.gz > $out
- '';
-
diskImage =
runCommand "rm-disk.qcow2"
{
@@ -131,43 +101,22 @@ let
mkfs vfat /dev/sda1
upload ${rootfsImage} /dev/sda2
resize2fs /dev/sda2
- # we disable the orphan_file feature to avoid the error
- # 'unsupported feature(s): FEATURE_C12' when e2fsck runs at boot
- mkfs ext4 /dev/sda4 features:^orphan_file
+ mkfs ext4 /dev/sda4
mount /dev/sda2 /
- download /etc/fstab fstab
- ! sed -i /unknown/d fstab
- upload fstab /etc/fstab
-
copy-in ${kernel.modules}/lib/modules /usr/lib
- upload ${ifnameUdevRule} /etc/udev/rules.d/70-persistent-net.rules
- upload ${mmcSymlinkUdevRule} /etc/udev/rules.d/70-mmc-symlinks.rules
- upload ${usbNetworkConfig} /etc/systemd/network/10-usb.network
- upload ${xochitlService} /usr/lib/systemd/system/xochitl.service
-
- upload ${usbWaitOnlineService} /etc/systemd/system/usb0-wait-online.service
- mkdir-p /etc/systemd/system/network-online.target.wants
- ln-s /etc/systemd/system/usb0-wait-online.service /etc/systemd/system/network-online.target.wants/usb0-wait-online.service
-
- # delete any systemd units that hinder or delay startup
- rm /usr/lib/systemd/system/wacom_flash.service
- rm /usr/lib/systemd/system/memfaultd.service
- rm /usr/lib/systemd/system/memfault-attributes.service
- rm /usr/lib/systemd/system/swupdate.service
- rm /usr/lib/systemd/system/swupdate.socket
- rm /usr/lib/systemd/system/system-hardening.service
- rm /usr/lib/systemd/system/wpa_supplicant.service
-
- # stub the usb-ether-once script
- upload ${doNothing} /usr/sbin/usb-ether-once
- chmod 0755 /usr/sbin/usb-ether-once
+ upload ${initScript} /sbin/init
+ chmod 0755 /sbin/init
upload ${fakefbdev}/lib/libfakefbdev.so /usr/lib/libfakefbdev.so
chmod 0755 /usr/lib/libfakefbdev.so
+ # prevent xochitl from changing root password
+ upload ${doNothing} /usr/sbin/usermod
+ chmod 0755 /usr/sbin/usermod
+
mount /dev/sda4 /home
cp-a /etc/skel /home/root
@@ -188,14 +137,15 @@ writeShellApplication {
rm -f ./reMder.qcow2
qemu-img create -b ${diskImage} -F qcow2 -f qcow2 ./reMder.qcow2
- qemu-system-aarch64 \
+ qemu-system-arm \
-machine virt \
-m 2048 \
-kernel ${kernel}/zImage \
- -drive if=none,file=./reMder.qcow2,format=qcow2,id=hd \
+ -snapshot \
+ -drive if=none,file=${diskImage},format=qcow2,id=hd \
-device virtio-blk-device,drive=hd \
-netdev user,net=10.11.99.0/27,host=10.11.99.2,dhcpstart=10.11.99.1,hostfwd=tcp::${toString sshPort}-:22,hostfwd=tcp::${toString httpPort}-:80,id=net \
- -device virtio-net-device,netdev=net,mac=${usbMacAddr} \
+ -device virtio-net-device,netdev=net \
-append "console=ttyAMA0 rootfstype=ext4 root=/dev/vda2 rw rootwait init=/sbin/init" \
-serial mon:stdio \
-nographic