diff --git a/NEWS b/NEWS index d07f0fc..9766bd8 100644 --- 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 index bdffd6a..69d2872 100644 --- 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 -This will +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. + +* `--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 index 85d74e7..ba06f8f 100644 --- 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 index 291dae2..b8a02a3 100644 --- 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