[pve-devel] [PATCH v1 installer/docs 00/18] add automated/unattended installation

Christoph Heiss c.heiss at proxmox.com
Thu Feb 8 11:26:01 CET 2024


Did some testing, doing various installs using
* different filesystems
* pre/post hooks
* simple udev matching for disks and network interfaces

I did not exercise the udev-matching exhaustively, but as it is pretty
generic, that should cover it.

The `proxmox-installer-filter` is a nice tooling addition as well!
Maybe we could also provide some tool in the future which would do some
(basic) sanity checking/validating on the `answer.toml`, to avoid people
having to do test cycles on a real machine.

As for the global `{pre,post}_commands` hooks - ,

So please consider this:

Tested-by: Christoph Heiss <c.heiss at proxmox.com>

Also, already left some review comments on the individual patches, but
nothing too major.

On Tue, Jan 23, 2024 at 06:00:35PM +0100, Aaron Lauterer wrote:
> This patch series adds the possibility to do an automated / unattended
> installation of Proxmox VE.
>
> It assumes that the patch series to use JSON output on the
> low-level-installer is already applied [1].
>
> The overall idea is that we will have a dedicated ISO for the unattended
> installation. It should be configured in such a way that it will start
> the installation without any user interaction.
> Though the integration in the installation environmend isn't part of
> this patch series.
>
> The information for the installer that is usually gathered interactively
> from the user is provided via an `answer.toml` file.
>
> The answer file allows to select disks and the network card via filters.
>
> The installer also allows to run custom commands pre and post
> installation. This should give users plenty of possibilities to either
> further customize/prepare the installation or integrate it into a larger
> automated installation setup.
> For example, one could issue HTTP requests to signal the status and
> progress of the installation.
>
>
> The install environment needs to call the 'proxmox-fetch-answer' binary.
> It tries to find the answer file and once found, will start the
> 'proxmox-auto-installer' binary and pass the contents to it via stdin.
>
> The auto-installer then parses the answer file and determines what
> parameters need to be passed to the low-level installer. For example,
> which disks and NIC to use, network IP settings and so forth.
>
> The current status reporting of the actual installation is kept rather
> simple.
>
> Both binaries log into the /tmp/ directory.
>
> There is a third binary, the 'proxmox-installer-filter'. It is meant as
> a pure utility for users to make it easier to see what properties they
> can write filters against and to test the filters.
>
>
> The fetch-answer binary is currently searching for a
> partition/file-system labeled 'proxmoxinst' in lower or uppercase. It
> can be located on an additioan USB flash drive, or maybe on the install
> medium itself if it is possible to write to it.
>
>
> We do have some ideas for additional steps to fetch an answer file. The
> main one is that we could download the answer file from a URL. Ideally
> we would send unique properties along with the request (MAC addresses,
> serial numbers, ...) so that it is possible to have a script on the
> receiving side that can then generate the answer file dynamically.
>
> The big question is, where the URL comes from, for which we have also
> some ideas:
> * custom DHCP options
> * kernel cmdline (might be an option with PXE boot)
> * TXT DNS record in a predefined subdomain of the search domain received
>   via DHCP, basically a 'dig TXT proxmoxinst.{search domain}'.
> * We should also make it possible to provide an SSL fingerprint in a
>   similar manner in case the listening server is not trusted out of the
>   box.
>
> Other plans / ideas for the future:
>
> * add option to define remote SSH access (password and,or public key).
>   This could make remote debugging in case of problems easier
>
>
> Regarding the patch series itself:
> The first patches are needed to move some code into the common crate and
> make structs/functions already in the common crate accessible.
>
> I did split up the individual parts of the auto installer into their own
> patches as much as possible, and (hopefully) in the order they depend on
> each other.
>
> Areas that can be improved/extended:
> * Testing possibility integrated in the Makefile
> * Documentation: explain process, additional examples for answer.toml
>
> [0] https://lists.proxmox.com/pipermail/pve-devel/2023-September/059020.html
> [1] https://lists.proxmox.com/pipermail/pve-devel/2023-December/060961.html
>
> installer: Aaron Lauterer (17):
>   tui: common: move InstallConfig struct to common crate
>   common: make InstallZfsOption members public
>   common: tui: use BTreeMap for predictable ordering
>   Makefile: fix handling of multiple usr_bin files
>   low-level: add dump-udev command
>   add auto-installer crate
>   auto-installer: add dependencies
>   auto-installer: add answer file definition
>   auto-installer: add struct to hold udev info
>   auto-installer: add utils
>   auto-installer: add simple logging
>   auto-installer: add tests for answer file parsing
>   auto-installer: add auto-installer binary
>   auto-installer: add fetch answer binary
>   auto-installer: use glob crate for pattern matching
>   auto-installer: utils: make get_udev_index functions public
>   auto-installer: add proxmox-installer-filter helper tool
>
>
> docs: Aaron Lauterer (1):
>   installation: add unattended documentation
>
>  pve-installation.adoc | 267 ++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 267 insertions(+)
>
>  Cargo.toml                                    |   1 +
>  Makefile                                      |   9 +-
>  Proxmox/Makefile                              |   1 +
>  Proxmox/Sys/Udev.pm                           |  54 ++
>  proxmox-auto-installer/Cargo.toml             |  19 +
>  proxmox-auto-installer/src/answer.rs          | 148 ++++++
>  .../src/bin/proxmox-auto-installer.rs         | 192 ++++++++
>  .../src/bin/proxmox-fetch-answer.rs           |  73 +++
>  .../src/bin/proxmox-installer-filter.rs       | 298 +++++++++++
>  .../src/fetch_plugins/mod.rs                  |   1 +
>  .../src/fetch_plugins/partition.rs            | 102 ++++
>  proxmox-auto-installer/src/lib.rs             |   5 +
>  proxmox-auto-installer/src/log.rs             |  38 ++
>  proxmox-auto-installer/src/udevinfo.rs        |   9 +
>  proxmox-auto-installer/src/utils.rs           | 461 ++++++++++++++++++
>  proxmox-auto-installer/tests/parse-answer.rs  | 102 ++++
>  .../tests/resources/iso-info.json             |   1 +
>  .../tests/resources/locales.json              |   1 +
>  .../resources/parse_answer/disk_match.json    |  29 ++
>  .../resources/parse_answer/disk_match.toml    |  14 +
>  .../parse_answer/disk_match_all.json          |  26 +
>  .../parse_answer/disk_match_all.toml          |  16 +
>  .../parse_answer/disk_match_any.json          |  33 ++
>  .../parse_answer/disk_match_any.toml          |  16 +
>  .../tests/resources/parse_answer/minimal.json |  17 +
>  .../tests/resources/parse_answer/minimal.toml |  14 +
>  .../resources/parse_answer/nic_matching.json  |  17 +
>  .../resources/parse_answer/nic_matching.toml  |  19 +
>  .../tests/resources/parse_answer/readme       |   4 +
>  .../resources/parse_answer/specific_nic.json  |  17 +
>  .../resources/parse_answer/specific_nic.toml  |  19 +
>  .../tests/resources/parse_answer/zfs.json     |  27 +
>  .../tests/resources/parse_answer/zfs.toml     |  19 +
>  .../tests/resources/run-env-info.json         |   1 +
>  .../tests/resources/run-env-udev.json         |   1 +
>  proxmox-installer-common/src/setup.rs         | 100 +++-
>  proxmox-low-level-installer                   |  13 +
>  proxmox-tui-installer/src/options.rs          |   4 +-
>  proxmox-tui-installer/src/setup.rs            | 100 +---
>  .../src/views/install_progress.rs             |   4 +-
>  40 files changed, 1915 insertions(+), 110 deletions(-)
>  create mode 100644 Proxmox/Sys/Udev.pm
>  create mode 100644 proxmox-auto-installer/Cargo.toml
>  create mode 100644 proxmox-auto-installer/src/answer.rs
>  create mode 100644 proxmox-auto-installer/src/bin/proxmox-auto-installer.rs
>  create mode 100644 proxmox-auto-installer/src/bin/proxmox-fetch-answer.rs
>  create mode 100644 proxmox-auto-installer/src/bin/proxmox-installer-filter.rs
>  create mode 100644 proxmox-auto-installer/src/fetch_plugins/mod.rs
>  create mode 100644 proxmox-auto-installer/src/fetch_plugins/partition.rs
>  create mode 100644 proxmox-auto-installer/src/lib.rs
>  create mode 100644 proxmox-auto-installer/src/log.rs
>  create mode 100644 proxmox-auto-installer/src/udevinfo.rs
>  create mode 100644 proxmox-auto-installer/src/utils.rs
>  create mode 100644 proxmox-auto-installer/tests/parse-answer.rs
>  create mode 100644 proxmox-auto-installer/tests/resources/iso-info.json
>  create mode 100644 proxmox-auto-installer/tests/resources/locales.json
>  create mode 100644 proxmox-auto-installer/tests/resources/parse_answer/disk_match.json
>  create mode 100644 proxmox-auto-installer/tests/resources/parse_answer/disk_match.toml
>  create mode 100644 proxmox-auto-installer/tests/resources/parse_answer/disk_match_all.json
>  create mode 100644 proxmox-auto-installer/tests/resources/parse_answer/disk_match_all.toml
>  create mode 100644 proxmox-auto-installer/tests/resources/parse_answer/disk_match_any.json
>  create mode 100644 proxmox-auto-installer/tests/resources/parse_answer/disk_match_any.toml
>  create mode 100644 proxmox-auto-installer/tests/resources/parse_answer/minimal.json
>  create mode 100644 proxmox-auto-installer/tests/resources/parse_answer/minimal.toml
>  create mode 100644 proxmox-auto-installer/tests/resources/parse_answer/nic_matching.json
>  create mode 100644 proxmox-auto-installer/tests/resources/parse_answer/nic_matching.toml
>  create mode 100644 proxmox-auto-installer/tests/resources/parse_answer/readme
>  create mode 100644 proxmox-auto-installer/tests/resources/parse_answer/specific_nic.json
>  create mode 100644 proxmox-auto-installer/tests/resources/parse_answer/specific_nic.toml
>  create mode 100644 proxmox-auto-installer/tests/resources/parse_answer/zfs.json
>  create mode 100644 proxmox-auto-installer/tests/resources/parse_answer/zfs.toml
>  create mode 100644 proxmox-auto-installer/tests/resources/run-env-info.json
>  create mode 100644 proxmox-auto-installer/tests/resources/run-env-udev.json
>
> --
> 2.39.2
>
>
>
> _______________________________________________
> pve-devel mailing list
> pve-devel at lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
>





More information about the pve-devel mailing list