commit da1245432e157d8a16915c1f9b71e873f97e3ad8
parent 541b1c61c259c483fbfad66c831bbaed479abaff
Author: Daniel Barlow <dan@telent.net>
Date: Wed, 9 Oct 2024 19:34:55 +0100
no more iminix-rebuild
Diffstat:
4 files changed, 45 insertions(+), 9 deletions(-)
diff --git a/NEWS b/NEWS
@@ -115,3 +115,21 @@ the value of profile.gateway.wan. For the pppoe case this is now only
very slightly more verbose, and it allows using the gateway profile
with other kinds of upstream.
+2024-8-16
+
+As part of implementing log shipping, the default directory for system
+logs has beenchanged from /run/uncaught-logs to /run/log
+
+2024-10-09
+
+liminix-rebuild is being deprecated. From hereon in, the preferred way
+to do an incremental update on an installed device with a writable
+filesystem is to build the systemConfiguration output
+
+ nix-build -I liminix-config=hosts/myhost.nix --argstr deviceName turris-omnia -A outputs.systemConfiguration
+
+and then run the generated `install.sh` script
+
+ result/install.sh root@192.168.8.1
+
+
diff --git a/doc/admin.rst b/doc/admin.rst
@@ -161,17 +161,32 @@ any profile to add it to ``$PATH``
Rebuilding the system
=====================
-:command:`liminix-rebuild` is the Liminix analogue of :command:`nixos-rebuild`, although its operation is a bit different because it expects to run on a build machine and then copy to the host device. Run it with the same ``liminix-config`` and ``device`` parameters as you would run :command:`nix-build`, and it will build any new/changed packages and then copy them to the device using SSH. For example:
+Liminix has a mechanism for in-place updates of a running system which
+is analogous to :command:`nixos-rebuild`, but its operation is a
+bit different because it expects to run on a build machine and then
+copy to the host device. To use this, build the `outputs.systemConfiguration`
+target and then run the :command:`result/install.sh` script it generates.
.. code-block:: console
- liminix-rebuild root@the-device -I liminix-config=./examples/rotuer.nix --arg device "import ./devices/gl-ar750"
+ nix-build -I liminix-config=./my-configuration.nix \
+ --arg device "import ./devices/mydevice" \
+ -A outputs.systemConfiguration
+ ./result/install.sh root@the-device
+
+The install script uses min-copy-closure to copy new or changed
+packages to the device, then (perhaps) reboots it. The reboot
+behaviour can be affected by flags:
+
+* `--no-reboot` will cause it not to reboot at all, if you would
+ rather do that yourself. Note that none of the newly-installed or
+ updated services will be running until you do.
-This will
+* `--fast` causes it tn not do a full reboot, but instead to restart
+ only the services that have been changed. This will restart all of
+ the services that have updated store paths (and anything that
+ depends on them), but will not affect services that haven't changed.
-* build anything that needs building
-* copy new or changed packages to the device
-* reboot the device
It doesn't delete old packages automatically: to do that run
:command:`min-collect-garbage`, which will delete any packages not in
diff --git a/doc/installation.rst b/doc/installation.rst
@@ -15,7 +15,7 @@ Liminix uses the Nix language to provide congruent configuration
management. This means that to change anything about the way in
which a Liminix system works, you make that change in
your :file:`configuration.nix` (or one of the other files it references),
-and rerun :command:`nix-build` or :command:`liminix-rebuild` to action
+and rerun :command:`nix-build` to action
the change. It is not possible (at least, without shenanigans) to make
changes by logging into the device and running imperative commands
whose effects may later be overridden: :file:`configuration.nix`
diff --git a/doc/tutorial.rst b/doc/tutorial.rst
@@ -293,14 +293,17 @@ the hostname) and then run
.. code-block:: console
- nix-shell --run "liminix-rebuild root@address-of-the-device -I liminix-config=./my-router.nix --arg device "import ./devices/gl-ar750""
+ nix-build -I liminix-config=./my-router.nix \
+ --arg device "import ./devices/gl-ar750" \
+ -A outputs.systemConfiguration && \
+ result/install.sh root@address-of-the-device
(This requires the device to be network-accessible from your build
machine, which for a test/demo system might involve a second network
device in your build system - USB ethernet adapters are cheap - or
a bit of messing around unplugging cables.)
-For more information about :code:`liminix-rebuild`, see the manual section :ref:`Rebuilding the system`.
+For more information about in-place-updates, see the manual section :ref:`Rebuilding the system`.
Final thoughts