aboutsummaryrefslogtreecommitdiff
path: root/src/property/installer.lisp
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2021-09-16 18:23:55 -0700
committerSean Whitton <spwhitton@spwhitton.name>2021-10-23 10:51:30 -0700
commit446b8f4a8ef78cb4605cfb551255bb455be411f0 (patch)
tree0baa5401d38cc7144a750852bb7ba7aebe3d0670 /src/property/installer.lisp
parentd8f12a2c350ad788e1c9ce532f42460273990424 (diff)
downloadconsfigurator-446b8f4a8ef78cb4605cfb551255bb455be411f0.tar.gz
install system deps by searching for package managers on PATH
With this change we handle the situation in which we don't know the OS of a host on which we need to install system packages more cleanly than before. Also rely on the new PACKAGE:INSTALLED to install the OS bootstrapper in INSTALLER:CLEANLY-INSTALLED-ONCE. This allows us to simplify usage of the property by replacing the ORIGINAL-OS argument with ORIGINAL-OS-ARCHITECTURE. Making this change does mean that we now have two ways to specify the different names a package has on different OSs: (i) something like OS:ETYPECASE where each branch applies a property which invokes an OS-specific package manager; and (ii) the plists supplied to PACKAGE:INSTALLED. Signed-off-by: Sean Whitton <spwhitton@spwhitton.name>
Diffstat (limited to 'src/property/installer.lisp')
-rw-r--r--src/property/installer.lisp40
1 files changed, 20 insertions, 20 deletions
diff --git a/src/property/installer.lisp b/src/property/installer.lisp
index 38b5ce9..5e68e4f 100644
--- a/src/property/installer.lisp
+++ b/src/property/installer.lisp
@@ -286,17 +286,18 @@ using a combinator like ON-CHANGE, or applied manually with DEPLOY-THESE."
(apply #'mrun "mount" efi-system-partition-mount-args))))))
(defproplist cleanly-installed-once :lisp
- (&optional options (original-os '(os:linux :amd64))
- &aux (minimal-new-host
- (make-host :hostattrs (list :os (get-hostattrs :os))))
- (original-host
- (make-host
- :propspec
- (make-propspec
- :propspec
- `(eseqprops ,original-os
- (chroot:os-bootstrapped-for
- ,options "/new-os" ,minimal-new-host))))))
+ (original-os-architecture
+ &optional options
+ &aux (minimal-new-host
+ (make-host :hostattrs (list :os (get-hostattrs :os))))
+ (original-host
+ (make-host
+ :propspec
+ (make-propspec
+ :propspec
+ `(eseqprops
+ (os:linux ,original-os-architecture)
+ (chroot:os-bootstrapped-for ,options "/new-os" ,minimal-new-host))))))
"Replaces whatever operating system the host has with a clean installation of
the OS that the host is meant to have, and reboot, once. This is intended for
freshly launched machines in faraway datacentres, where your provider has
@@ -308,19 +309,18 @@ but not captured by your consfig. This property's approach can fail and leave
the system unbootable, but it's an time-efficient way to ensure that you're
starting from a truly clean slate for those cases in which it works.
-ORIGINAL-OS is a propapp specifying the old OS, as you would apply to a host
-with that OS. It will be used when trying to install the OS bootstrapper.
-For example, if you're trying to switch a host from a provider's Debian
-\"buster\" image to upstream Debian \"bullseye\", passing '(OS:DEBIAN-STABLE
-\"buster\" :AMD64) would cause Consfigurator to use apt to install
-debootstrap(8). Alternatively, you can pass '(OS:LINUX :AMD64) and install
-the bootstrapper manually; this is useful for OSs whose package managers
+ORIGINAL-OS-ARCHITECTURE is the architecture of the original OS as would be
+supplied to the OS:LINUX property, e.g. :AMD64. OPTIONS will be passed on to
+CHROOT:OS-BOOTSTRAPPED-FOR, which see.
+
+The internal property CHROOT::%OS-BOOTSTRAPPER-INSTALLED will attempt to use
+PACKAGE:INSTALLED to install the OS bootstrapper (e.g. debootstrap(8) for
+Debian). Alternatively, you can install the bootstrapper manually before
+running Consfigurator; this is useful for original OSs whose package managers
Consfigurator doesn't yet know how to drive. You might apply an OS-agnostic
property before this one which manually downloads the bootstrapper and puts it
on PATH.
-OPTIONS will be passed on to CHROOT:OS-BOOTSTRAPPED-FOR, which see.
-
The files from the old OS will be left in '/old-os'. Typically you will need
to perform some additional configuration before rebooting to increase the
likelihood that the system boots and is network-accessible. This might