aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalte Voos <git@mal.tc>2025-02-19 21:16:51 +0100
committerMalte Voos <git@mal.tc>2025-02-19 21:16:51 +0100
commit0b2391075932d3b78a4e700cd464f068874b6127 (patch)
tree9f1770c2ce739473af400f4229aa68675a7236d3
parente1bbd03df6324936fb63e676f562e47e51b0a837 (diff)
downloadreMder-0b2391075932d3b78a4e700cd464f068874b6127.tar.gz
reMder-0b2391075932d3b78a4e700cd464f068874b6127.zip
update to firmware version v3.14.1.9
-rw-r--r--client.nix56
-rw-r--r--flake.nix52
-rw-r--r--server.nix155
3 files changed, 143 insertions, 120 deletions
diff --git a/client.nix b/client.nix
index 67c083c..ad58693 100644
--- a/client.nix
+++ b/client.nix
@@ -1,33 +1,43 @@
-{ writeShellApplication, curl, openssh, sshpass, rsync, sshPassword, sshPort
-, httpPort }:
+{
+ writeShellApplication,
+ curl,
+ openssh,
+ sshpass,
+ rsync,
+ sshPassword,
+ sshPort,
+ httpPort,
+}:
writeShellApplication {
name = "reMder-client";
- runtimeInputs = [ curl openssh sshpass rsync ];
+ runtimeInputs = [
+ curl
+ openssh
+ sshpass
+ rsync
+ ];
- text = let
- ssh =
- "sshpass -p ${sshPassword} ssh -q -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${
- toString sshPort
- }";
- guest = "root@127.0.0.1";
- documentDir = "/home/root/.local/share/remarkable/xochitl";
- in ''
- in="$1"
- out="$2"
+ text =
+ let
+ ssh = "sshpass -p ${sshPassword} ssh -q -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${toString sshPort}";
+ guest = "root@127.0.0.1";
+ documentDir = "/home/root/.local/share/remarkable/xochitl";
+ in
+ ''
+ in="$1"
+ out="$2"
- in_basename="$(basename "$in")"
+ in_basename="$(basename "$in")"
- ${ssh} ${guest} rm -rf ${documentDir}
- ${ssh} ${guest} mkdir ${documentDir}
+ ${ssh} ${guest} rm -rf ${documentDir}
+ ${ssh} ${guest} mkdir ${documentDir}
- rsync --rsh="${ssh}" "$in" ${guest}:${documentDir}
- ${ssh} ${guest} "unzip '${documentDir}/$in_basename' -d ${documentDir}"
- doc_id="$(${ssh} ${guest} find ${documentDir} -name '\*.metadata' -exec basename {} .metadata '\;')"
+ rsync --rsh="${ssh}" "$in" ${guest}:${documentDir}
+ ${ssh} ${guest} "unzip '${documentDir}/$in_basename' -d ${documentDir}"
+ doc_id="$(${ssh} ${guest} find ${documentDir} -name '\*.metadata' -exec basename {} .metadata '\;')"
- curl -f -o "$out" "http://127.0.0.1:${
- toString httpPort
- }/download/$doc_id/placeholder"
- '';
+ curl -f -o "$out" "http://127.0.0.1:${toString httpPort}/download/$doc_id/placeholder"
+ '';
}
diff --git a/flake.nix b/flake.nix
index ef3a18c..889e68e 100644
--- a/flake.nix
+++ b/flake.nix
@@ -1,31 +1,31 @@
{
- inputs = {
- nixpkgs.url = "github:malte-v/nixpkgs/raspi3";
- flake-utils.url = "github:numtide/flake-utils";
- };
- outputs = { self, nixpkgs, flake-utils }:
- flake-utils.lib.eachDefaultSystem (system:
- let
- pkgs = import nixpkgs { inherit system; };
+ outputs =
+ { self }:
+ {
+ overlays.default =
+ final: prev:
+ let
+ sshPassword = "1234";
+ sshPort = 43922;
+ httpPort = 43980;
- sshPassword = "1234";
- sshPort = 43922;
- httpPort = 43980;
+ server = final.callPackage ./server.nix {
+ inherit sshPassword sshPort httpPort;
+ };
+ client = final.callPackage ./client.nix {
+ inherit sshPassword sshPort httpPort;
+ };
- server = pkgs.callPackage ./server.nix {
- inherit sshPassword sshPort httpPort;
+ reMder = final.symlinkJoin {
+ name = "reMder";
+ paths = [
+ client
+ server
+ ];
+ };
+ in
+ {
+ inherit reMder;
};
- client = pkgs.callPackage ./client.nix {
- inherit sshPassword sshPort httpPort;
- };
-
- reMder = pkgs.symlinkJoin {
- name = "reMder";
- paths = [ client server ];
- };
- in {
- packages = { inherit reMder; };
-
- defaultPackage = reMder;
- });
+ };
}
diff --git a/server.nix b/server.nix
index b0d4e61..b301821 100644
--- a/server.nix
+++ b/server.nix
@@ -1,5 +1,16 @@
-{ fetchurl, writeText, libguestfs-with-appliance, pkgsCross, qemu
-, runCommand, cpio, writeShellApplication, sshPassword, sshPort, httpPort }:
+{
+ fetchurl,
+ writeText,
+ libguestfs-with-appliance,
+ pkgsCross,
+ qemu,
+ runCommand,
+ cpio,
+ writeShellApplication,
+ sshPassword,
+ sshPort,
+ httpPort,
+}:
let
updateName = "remarkable-production-memfault-image-3.14.1.9-rm2-public";
@@ -27,6 +38,14 @@ let
ATTR{type}=="1", KERNEL=="eth*", NAME="usb0"
'';
+ usbNetworkConfig = writeText "10-usb.network" ''
+ [Match]
+ Name=usb*
+
+ [Network]
+ DHCP=yes
+ '';
+
xochitlService = writeText "xochitl.service" ''
[Unit]
Description=reMarkable main application
@@ -53,75 +72,71 @@ let
rootfsImage = runCommand "rm-rootfs.ext4" { nativeBuildInputs = [ cpio ]; } ''
cpio -i --file ${updateArchive}
- gzip -dc ${updateName}.ext4.gz > $out
+ gzip -dc ${updateName}.ext4.gz > $out
'';
- diskImage = runCommand "rm-disk.qcow2" {
- nativeBuildInputs = [ qemu libguestfs-with-appliance ];
- } ''
- qemu-img create -f qcow2 $out 8G
-
- guestfish --rw --blocksize=512 --add $out <<EOF
- run
-
- # not the original partition table of the RM2
- part-init /dev/sda gpt
- part-add /dev/sda p 2048 2099199
- part-add /dev/sda p 2099200 10487807
- part-add /dev/sda p 10487808 12584959
- part-add /dev/sda p 12584960 16775167
-
- mkfs vfat /dev/sda1
- upload ${rootfsImage} /dev/sda2
- resize2fs /dev/sda2
- mkfs ext4 /dev/sda4
-
- mount /dev/sda2 /
-
- copy-in ${kernel}/lib/modules /lib
-
- download /etc/fstab fstab
- ! sed -i 's#mmcblk2#vda#' fstab
- upload fstab /etc/fstab
-
- upload ${ifnameUdevRule} /etc/udev/rules.d/70-persistent-net.rules
-
- # download /lib/systemd/system/dhcpcd.service dhcpcd.service
- # ! sed -i 's/wlan/usb/' dhcpcd.service
- # upload dhcpcd.service /lib/systemd/system/dhcpcd.service TODO
-
- upload ${xochitlService} /lib/systemd/system/xochitl.service
-
- # delete stuff which hinders boot
- # rm /lib/systemd/system/rm-sync.service
- rm /lib/systemd/system/xochitl.service.d/xochitl-service-override.conf
- # rm /lib/systemd/system/wpa_supplicant.service
- # rm /lib/systemd/system/dropbear-wlan.socket
- # rm /lib/systemd/system/keystore.service
- # rm /lib/systemd/system/swapcryptor.service
- # rm /lib/systemd/system/homecryptor.service
- # rm /lib/systemd/system/growpart-home.service
- # rm /lib/systemd/system/memfault-attributes.service
- # rm /lib/systemd/system/swupdate.service
- # rm /lib/systemd/system/swupdate.socket
- # rm /lib/systemd/system/usb-ether-once.service
- # rm /lib/systemd/system/marker-manager.service
- # rm /lib/systemd/system/rm-sanity.timer
-
- upload ${fakefbdev}/lib/libfakefbdev.so /usr/lib/libfakefbdev.so
- chmod 0755 /usr/lib/libfakefbdev.so
-
- mount /dev/sda4 /home
- cp-a /etc/skel /home/root
-
- mkdir-p /home/root/.local/share/remarkable/xochitl
- mkdir-p /home/root/.config/remarkable
- upload ${xochitlConfig} /home/root/.config/remarkable/xochitl.conf
-
- EOF
- '';
+ diskImage =
+ runCommand "rm-disk.qcow2"
+ {
+ nativeBuildInputs = [
+ qemu
+ libguestfs-with-appliance
+ ];
+ }
+ ''
+ qemu-img create -f qcow2 $out 8G
+
+ guestfish --rw --blocksize=512 --add $out <<EOF
+ run
+
+ # not the original partition table of the RM2
+ part-init /dev/sda gpt
+ part-add /dev/sda p 2048 2099199
+ part-add /dev/sda p 2099200 10487807
+ part-add /dev/sda p 10487808 12584959
+ part-add /dev/sda p 12584960 16775167
+
+ mkfs vfat /dev/sda1
+ upload ${rootfsImage} /dev/sda2
+ resize2fs /dev/sda2
+ mkfs ext4 /dev/sda4
+
+ mount /dev/sda2 /
+
+ copy-in ${kernel}/lib/modules /lib
+
+ download /etc/fstab fstab
+ ! sed -i 's/mmcblk2p/vda/' fstab
+ upload fstab /etc/fstab
+
+ upload ${ifnameUdevRule} /etc/udev/rules.d/70-persistent-net.rules
+ upload ${usbNetworkConfig} /etc/systemd/network/10-usb.network
+
+ upload ${xochitlService} /lib/systemd/system/xochitl.service
+
+ # delete any systemd units that hinder or delay startup
+ rm /lib/systemd/system/kdump.service
+ rm /lib/systemd/system/wacom_flash.service
+ rm /lib/systemd/system/memfaultd.service
+ rm /lib/systemd/system/swupdate.service
+ rm /lib/systemd/system/swupdate.socket
+ rm /etc/systemd/system/multi-user.target.wants/busybox-ifplugd@usb1.service
+
+ upload ${fakefbdev}/lib/libfakefbdev.so /usr/lib/libfakefbdev.so
+ chmod 0755 /usr/lib/libfakefbdev.so
+
+ mount /dev/sda4 /home
+ cp-a /etc/skel /home/root
+
+ mkdir-p /home/root/.local/share/remarkable/xochitl
+ mkdir-p /home/root/.config/remarkable
+ upload ${xochitlConfig} /home/root/.config/remarkable/xochitl.conf
+
+ EOF
+ '';
-in writeShellApplication {
+in
+writeShellApplication {
name = "reMder-server";
runtimeInputs = [ qemu ];
@@ -135,9 +150,7 @@ in writeShellApplication {
-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,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 \