diff options
| -rw-r--r-- | flake.lock | 12 | ||||
| -rw-r--r-- | flake.nix | 4 | ||||
| -rw-r--r-- | foo.pdf | bin | 0 -> 131413 bytes | |||
| -rw-r--r-- | foo.rmdoc | bin | 0 -> 452882 bytes | |||
| -rw-r--r-- | overlay.nix | 12 | ||||
| -rw-r--r-- | server.nix | 59 |
6 files changed, 65 insertions, 22 deletions
@@ -20,16 +20,16 @@ }, "nixpkgs": { "locked": { - "lastModified": 1751451772, - "narHash": "sha256-OYG84f84/XTR/aTsubgk+yJlYKVgA46q2ev7pkftK5c=", - "owner": "malte-v", + "lastModified": 1775508420, + "narHash": "sha256-e3F05O4jQBbiOtVcwFp9D7G54Y0nVyBpx5G6Pps/5Zk=", + "owner": "illustris", "repo": "nixpkgs", - "rev": "1072864e1d6b5878632d9dca84117a6dcaf52d96", + "rev": "4966c0c32b67c080214342e66ff3ea54c2a1997a", "type": "github" }, "original": { - "owner": "malte-v", - "ref": "raspi4", + "owner": "illustris", + "ref": "guestfs-tools", "repo": "nixpkgs", "type": "github" } @@ -1,6 +1,6 @@ { inputs = { - nixpkgs.url = "github:malte-v/nixpkgs/raspi4"; + nixpkgs.url = "github:illustris/nixpkgs/guestfs-tools"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = @@ -41,7 +41,7 @@ let pkgs = import nixpkgs { inherit system; - overlays = [ overlay ]; + overlays = [ (import ./overlay.nix) overlay ]; }; in pkgs.reMder; Binary files differdiff --git a/foo.rmdoc b/foo.rmdoc Binary files differnew file mode 100644 index 0000000..7a2d8f4 --- /dev/null +++ b/foo.rmdoc diff --git a/overlay.nix b/overlay.nix new file mode 100644 index 0000000..4d0b0fa --- /dev/null +++ b/overlay.nix @@ -0,0 +1,12 @@ +final: prev: { + libguestfs-appliance-nix = prev.libguestfs-appliance-nix.overrideAttrs (oldAttrs: { + installPhase = '' + mkdir -p $out + cp ${final.linuxPackages.kernel}/Image $out/kernel + cp ${oldAttrs.initrd} $out/initrd + cp ${oldAttrs.rootImage} $out/root + echo "Fixed appliance built from NixOS packages (9p-backed)" > $out/README.fixed + ''; + meta.platforms = [ "aarch64-linux" ]; + }); +} @@ -1,7 +1,7 @@ { fetchurl, writeText, - libguestfs-with-appliance, + libguestfs-with-appliance-nix, pkgsCross, qemu, runCommand, @@ -10,15 +10,16 @@ sshPassword, sshPort, httpPort, + writeScript, }: let - updateName = "remarkable-production-image-3.20.0.92-rm2-public"; + updateName = "remarkable-production-image-3.27.1.0-rm2-public"; updateArchive = fetchurl { url = # TODO: this is not an official source. might be worth authenticating the updates - "https://storage.googleapis.com/remarkable-versions/${updateName}.swu"; - hash = "sha256-GK3CX/P2MXbX4AZsu8dvu00/id8R1FB9aVvqHOjTJos="; + "https://remarkable-software.s3.us-east-2.amazonaws.com/${updateName}.swu"; + hash = "sha256-QPS2n/S1RqkXe0Tg8bAODnvcG5aUOYsAtPvKYwEYGsI="; }; xochitlConfig = writeText "xochitl.conf" '' @@ -51,14 +52,30 @@ let DHCP=yes ''; + usbWaitOnlineService = writeText "usb0-wait-online.service" '' + [Unit] + Description=Wait for usb0 to be routable + Before=network-online.target + + [Service] + Type=oneshot + ExecStart=/bin/sh -c 'until ip -4 addr show usb0 | grep -q "inet "; do sleep 1; done' + RemainAfterExit=yes + + [Install] + WantedBy=network-online.target + ''; + xochitlService = writeText "xochitl.service" '' [Unit] Description=reMarkable main application DefaultDependencies=no Conflicts=shutdown.target Before=shutdown.target - Wants=rm-sync.service - After=var-lib-uboot.mount dbus.socket + # 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] @@ -72,14 +89,18 @@ let WantedBy=multi-user.target ''; - fakefbdev = pkgsCross.armv7l-hf-multiplatform.gcc11Stdenv.mkDerivation { + fakefbdev = pkgsCross.armv7l-hf-multiplatform.stdenv.mkDerivation { name = "fakefbdev"; src = ./fakefbdev; installFlags = [ "DESTDIR=${placeholder "out"}" ]; }; - kernel = pkgsCross.armv7l-hf-multiplatform.linux_5_4; + doNothing = writeScript "do-nothing" '' + #!/bin/sh + ''; + + kernel = pkgsCross.armv7l-hf-multiplatform.linux; rootfsImage = runCommand "rm-rootfs.ext4" { nativeBuildInputs = [ cpio ]; } '' cpio -i --file ${updateArchive} @@ -91,7 +112,7 @@ let { nativeBuildInputs = [ qemu - libguestfs-with-appliance + libguestfs-with-appliance-nix ]; } '' @@ -116,22 +137,34 @@ let mount /dev/sda2 / - copy-in ${kernel}/lib/modules /usr/lib + 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 ${fakefbdev}/lib/libfakefbdev.so /usr/lib/libfakefbdev.so chmod 0755 /usr/lib/libfakefbdev.so @@ -157,13 +190,11 @@ writeShellApplication { qemu-system-aarch64 \ -machine virt \ - -enable-kvm \ - -cpu host,aarch64=off \ -m 2048 \ -kernel ${kernel}/zImage \ -drive if=none,file=./reMder.qcow2,format=qcow2,id=hd \ -device virtio-blk-device,drive=hd \ - -netdev user,hostfwd=tcp::${toString sshPort}-:22,hostfwd=tcp::${toString httpPort}-:80,id=net \ + -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} \ -append "console=ttyAMA0 rootfstype=ext4 root=/dev/vda2 rw rootwait init=/sbin/init" \ -serial mon:stdio \ |