453
userdocs/release/v4.6.0.rst
Normal file
453
userdocs/release/v4.6.0.rst
Normal file
@@ -0,0 +1,453 @@
|
||||
====================
|
||||
v4.6.0 Release Notes
|
||||
====================
|
||||
|
||||
v4.6.0 is a significant upgrade, with many changes relative to the v4.5.x
|
||||
series.
|
||||
|
||||
Particularly significant changes, especially those affecting the user interface,
|
||||
are described below. Additional changes not impacting the user interface are
|
||||
listed in the `CHANGELOG`_.
|
||||
|
||||
.. _CHANGELOG: https://github.com/warewulf/warewulf/blob/main/CHANGELOG.md
|
||||
|
||||
Documentation
|
||||
=============
|
||||
|
||||
The `user documentation`_ has been significantly refactored and re-written. The
|
||||
majority of changes mentioned here should be documented in more detail there, as
|
||||
well, and the reorganization and deduplication supports better documentation
|
||||
maintenance in the future.
|
||||
|
||||
The documentation also now includes complete and automatically-generated
|
||||
references for all ``wwctl`` commands, sub-comands, and options.
|
||||
|
||||
.. _user documentation: https://warewulf.org/docs/
|
||||
|
||||
Upgrade
|
||||
=======
|
||||
|
||||
Warewulf v4.6.0 adds the ``wwctl upgrade`` command to assist with upgrading from
|
||||
previous versions of Warewulf v4. This command updates existing configuration
|
||||
files for use with the current version.
|
||||
|
||||
There are two subcommands:
|
||||
|
||||
- ``wwctl upgrade config`` updates ``warewulf.conf``.
|
||||
- ``wwctl upgrade nodes`` updates ``nodes.conf``.
|
||||
|
||||
Both of these will attempt to update their respective configuration file
|
||||
in-place, retaining a copy of the previous version with a ``.bak`` suffix.
|
||||
Alternatively, you can see what each command will do by specifying an
|
||||
``--output-file=-`` option, to direct the output of the command to "standard
|
||||
out."
|
||||
|
||||
``wwctl upgrade nodes`` additionally requires two options to be specified:
|
||||
|
||||
- ``--add-defaults`` adds default settings to the default profile when those
|
||||
settings are absent. If you *do not* wish to add defaults, specify
|
||||
``--add-defaults=false``.
|
||||
|
||||
For more information, see the section on the default profile, below.
|
||||
|
||||
- ``--replace-overlays`` replaces any reference to the "generic" or "wwinit"
|
||||
overlays with a new set of overlays that replace their behavior. Because an
|
||||
overlay named "wwinit" is present in both the legacy and the upgraded state,
|
||||
``--replace-overlays`` is **not** idempotent, and should only be used once. If
|
||||
you *do not* wish to replace overlays, specify ``--replace-overlays=false``.
|
||||
|
||||
For more information, see the section on overlays, below.
|
||||
|
||||
The default profile
|
||||
===================
|
||||
|
||||
At various points Warewulf v4 has had a number of built-in default settings.
|
||||
These settings were once "compiled in," and more recently were moved to a
|
||||
dedicated ``defaults.conf`` file. In v4.6.0 these defaults have been moved to
|
||||
the default profile, and are included in ``nodes.conf`` for new installations.
|
||||
|
||||
A legacy configuration from a previous Warewulf installation can be updated to
|
||||
include recommended defaults using ``wwctl upgrade nodes --add-defaults``. (For
|
||||
more information, refer to the section on upgrades, above.)
|
||||
|
||||
If the default overlay exists, it will be automatically (and explicitly)
|
||||
included by new nodes created with ``wwctl node add``. It is otherwise not
|
||||
"special," and may be removed if a different organization is preferred.
|
||||
|
||||
A few ``wwctl`` commands have previously had ``--setdefault`` options to
|
||||
automatically update the default profile: these options have been removed in
|
||||
v4.6.0.
|
||||
|
||||
Images
|
||||
======
|
||||
|
||||
One of the more visible changes to Warewulf in v4.6.0: "containers" have been
|
||||
renamed to "images" (more specifically, "node images") throughout the interface,
|
||||
documentation, and even code. This decision (requested by the user community) is
|
||||
meant to alleviate confusion regarding whether Warewulf "containers" are "real"
|
||||
containers running on a container runtime with potential performance and
|
||||
operational consequences.
|
||||
|
||||
Warewulf "containers" have never been "virtualized" or executed with a container
|
||||
runtime. Rather, the name "container" was selected to imply the integration in
|
||||
v4 with the container ecosystem of tooling for defining, building, storing, and
|
||||
testing node images. But this terminology ended up causing persistent confusion,
|
||||
so a more industry-standard "node image" terminology has been adopted in stead.
|
||||
|
||||
The ``wwctl container`` command is retained as an alias for the new ``wwctl
|
||||
image`` command. The variables ``.Container`` and ``.ContainerName`` are also
|
||||
retained as overlay template variables. These backwards-compatibility retentions
|
||||
will continue to work through the v4.6.x series.
|
||||
|
||||
There are smaller changes to the image system, as well:
|
||||
|
||||
- ``wwctl image shell`` now supports a ``WW_HISTFILE`` environment variable to
|
||||
save shell history _inside_ the image.
|
||||
- ``wwctl image shell`` now supports a ``WW_PS1`` environment variable to
|
||||
specify the prompt for the interactive shell. The default prompt has also been
|
||||
updated to indicate the current directory.
|
||||
- ``wwctl image import`` now supports ``--username`` and ``--password``
|
||||
parameters for authenticating to a secure OCI registry.
|
||||
- ``wwctl image import`` now supports a ``--nohttps`` parameter to use HTTP,
|
||||
rather than HTTPS, when importing an image from an OCI registry.
|
||||
- ``wwctl image import`` now supports a ``--platform`` parameter to specify a
|
||||
different target architecture (e.g.., for importing an aarch64 image into an
|
||||
x86_64 Warewulf server). This simplifies importing images in a
|
||||
multi-architecture environment.
|
||||
- ``wwctl image <exec|shell|copy>`` all now support a ``--build`` flag to
|
||||
control whether the image should be automatically rebuilt after the operation.
|
||||
(For ``exec`` and ``shell`` the default value is "true", and may be disabled
|
||||
with ``--build=false``. For ``copy`` the default value is "false", and may be
|
||||
enabled with ``--build`` or ``--build=true``.)
|
||||
- Warewulf v4.5 used the permissions on an image's ``rootfs/`` directory to
|
||||
determine a "read-only" state of the image. This behavior is now replaced with
|
||||
a sentinel ``readonly`` file stored alongside ``rootfs/`` in the image
|
||||
"chroot" directory. (For more information, see the "known issues" section in
|
||||
the Warewulf documentation.)
|
||||
|
||||
Kernels
|
||||
=======
|
||||
|
||||
Warewulf v4.6.0 removes the ``wwctl kernel`` command, and all its subcommands,
|
||||
along with the ``wwctl <node|profile> <add|set> --kerneloverride`` parameter.
|
||||
All kernels are now provisioned from an associated node image. If more than one
|
||||
kernel is present in the image, Warewulf uses the highest-version, non-debug
|
||||
kernel; but an explicit kernel version or kernel path can be specified with
|
||||
``wwctl <node|profile> <add|set> --kernelversion``.
|
||||
|
||||
``wwctl image kernels`` provides a new interface to show what kernels are
|
||||
available in each image, along with information regarding the detected version,
|
||||
whether the kernel is the "default" for the image, and how many nodes are
|
||||
configured to use it. (If no version is specified, the detected kernel version
|
||||
is provided to overlay templates as ``.Kernel.Version``).
|
||||
|
||||
Kernel arguments are also now represented as a list, rather than as a flat
|
||||
string. This allows kernel arguments to be combined from various levels (e.g.,
|
||||
profiles and the node) without having to re-specify the full argument list.
|
||||
However, this also means that kernel arguments must be explicitly *negated* to
|
||||
remove them from prior specification. (For example, you might need to specify
|
||||
both ``~crashkernel=no`` and ``crashkernel=512MB``.) List arguments to ``wwctl
|
||||
<node|profile> <add|set>`` may be comma-separated; so arguments that *contain* a
|
||||
comma must now be quoted on the command-line. (e.g., ``wwctl profile set default
|
||||
--cluster oso --kernelargs 'console=tty0,"console=ttyS0,115200"'``)
|
||||
|
||||
Overlays
|
||||
========
|
||||
|
||||
``wwctl overlay build`` has been enhanced to build overlays in parallel, and has
|
||||
also been made significantly more efficient. As a result, building overlay
|
||||
images for large clusters now takes significantly less time. By default, the
|
||||
number of parallel workers is equal to the number of CPUs on the Warewulf
|
||||
server; this can be adjusted with a new ``wwctl overlay <import|build>
|
||||
--workers=0`` parameter.
|
||||
|
||||
The "wwinit" and "generic" overlays have been split into multiple overlays based
|
||||
on discrete functionality. Their equivalents may be substituted using ``wwctl
|
||||
upgrade nodes --replace-overlays``. (See the section on upgrading above.) This
|
||||
supports more precise removal of default overlay functionality from a given node
|
||||
or profile by removing only a subset of the default overlays. (For example, you
|
||||
may wish to include only one of the network management overlays,
|
||||
``NetworkManager``, ``ifcfg``, ``wicked``, or ``debian.interfaces``.)
|
||||
|
||||
Overlays have been further separated into "distribution" and "site" overlays.
|
||||
All overlays provided with Warewulf are "distribution" overlays, and should not
|
||||
be modified. New overlays, and modifications to distribution overlays, are
|
||||
stored as "site" overlays. Site overlays are retained between Warewulf upgrades,
|
||||
and take precedence over a distribution overlay of the same name.
|
||||
|
||||
``wwctl overlay build --host`` and ``--nodes`` have been removed to clarify that
|
||||
the host overlay is not "built." To support development and debugging of the
|
||||
host overlay, ``wwctl overlay show --render=host`` now renders overlay templates
|
||||
as they would be applied to the Warewulf server. #623
|
||||
|
||||
There are smaller changes to the overlay system, as well:
|
||||
|
||||
- ``wwctl <node|profile> <add|set> [--system-overlays|--runtime-overlays]``
|
||||
replaces ``--wwinit`` and ``--runtime``, respectively. (The original flags are
|
||||
retained, but deprecated.)
|
||||
- ``wwctl overlay show --render`` can now accept the path to a template without
|
||||
its ``.ww`` suffix.
|
||||
|
||||
Templates
|
||||
=========
|
||||
|
||||
Overlay templates now have access to the full suite of `Sprig template
|
||||
functions. <https://github.com/Masterminds/sprig>`_ Use of the local ``tr`` and
|
||||
``slice`` template functions in the distribution overlays has been replaced with
|
||||
their Sprig equivalents (``replace`` and ``substr``, respectively).
|
||||
|
||||
An additional template function, :ref:`UniqueField`, was added to facilitate
|
||||
removing duplicate ``passwd`` and ``group`` entries in the ``syncuser`` overlay.
|
||||
(For more information, see the section on syncuser, below.)
|
||||
|
||||
A set of new template functions, :ref:`importLink`, :ref:`softlink`, and
|
||||
:ref:`readlink`, add support for creating symbolic links from overlay templates.
|
||||
|
||||
The new :ref:`localtime` overlay configures the timezone of a cluster node.
|
||||
|
||||
Network Overlays
|
||||
================
|
||||
|
||||
The network overlays now support :ref:`VLAN tagging <vlan>`, and :ref:`static
|
||||
routes <static_routes>`, and have improved support for configuring a
|
||||
:ref:`network bond. <bonding>` They also now support specifying a :ref:`DNS
|
||||
search path. <dns>`
|
||||
|
||||
.. note::
|
||||
|
||||
Not all functionality is supported by all network overlays.
|
||||
|
||||
There are smaller changes to the network overlays, as well:
|
||||
|
||||
- The NetworkManager overlay now prevents interfaces without a specified
|
||||
``Ipaddr`` from activating DHCP.
|
||||
- The NetworkManager overlay now only marks interfaces "unmanaged" if they have
|
||||
neither a ``Device`` name nor an ``Hwaddr`` specified.
|
||||
|
||||
Profiles
|
||||
========
|
||||
|
||||
Node profiles now support profiles themselves, allowing for complex nested
|
||||
hierarchies of nested profiles.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
nodeprofiles:
|
||||
default:
|
||||
profiles:
|
||||
- rocky
|
||||
- net
|
||||
rocky:
|
||||
image name: rockylinux-9
|
||||
net:
|
||||
network devices:
|
||||
default:
|
||||
netmask: 255.255.255.0
|
||||
gateway: 192.168.1.1
|
||||
nodes:
|
||||
n1:
|
||||
profiles:
|
||||
- default
|
||||
network devices:
|
||||
default:
|
||||
ipaddr: 192.168.1.101
|
||||
|
||||
Resources and NFS
|
||||
=================
|
||||
|
||||
Resources are similar to tags except that their value is an arbitrary data
|
||||
structure rather than just a string. This data is represented as YAML data in
|
||||
``nodes.conf``, and these data structures may then be referenced by overlay
|
||||
templates to implement more expressive cluster behavior.
|
||||
|
||||
Resources can currently only be defined with ``wwctl <node|profile> edit``, or
|
||||
by editing ``nodes.conf`` directly.
|
||||
|
||||
.. note::
|
||||
|
||||
Resources are defined only at the root of nodes (and profiles), not on
|
||||
network interfaces and IPMI interfaces.
|
||||
|
||||
The premiere use of resources is in the refactoring of NFS client configuration.
|
||||
|
||||
NFS
|
||||
===
|
||||
|
||||
Cluster node NFS mounts are no longer configured in ``warewulf.conf``. In stead,
|
||||
a new ``fstab`` overlay configures NFS (or any other) mounts on cluster nodes
|
||||
based on an ``fstab`` resource definition.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
nodeprofiles:
|
||||
default:
|
||||
resources:
|
||||
fstab:
|
||||
- spec: warewulf:/home
|
||||
file: /home
|
||||
vfstype: nfs
|
||||
mntops: defaults,nofail
|
||||
- spec: warewulf:/opt
|
||||
file: /opt
|
||||
vfstype: nfs
|
||||
mntops: defaults,noauto,nofail,ro
|
||||
|
||||
Syncuser
|
||||
========
|
||||
|
||||
"Syncuser" has always been optional, but the output of certain commands has been
|
||||
updated to no longer imply that not running syncuser is an error condition. The
|
||||
``wwctl image build --syncuser`` now explicitly opts-in to automatic syncuser
|
||||
during image build, and the ``wwctl image syncuser --write`` parameter is now
|
||||
automatically enabled. (Specify ``--write=false`` to disable.)
|
||||
|
||||
Some syncuser functionality is now implemented in a new ``syncuser`` overlay.
|
||||
While this overlay *is* supplied by ``wwctl upgrade nodes --replace-overlays``,
|
||||
it is not included by default in the initial ``nodes.conf`` in new deployments.
|
||||
|
||||
There are smaller changes to the syncuser, as well:
|
||||
|
||||
- The ``syncuser`` overlay now looks for the ``passwd`` and ``group`` databases
|
||||
in ``sysconfdir``, rather than explicitly in ``/etc/``. This change is
|
||||
primarily to support testing; but it does mean that if ``sysconfdir`` is a
|
||||
path other than ``/etc/`` then these databases must be provided explicitly
|
||||
(e.g., by copying them or symlinking them into ``sysconfdir``).
|
||||
- The ``syncuser`` overlay now skips duplicate users and groups when generating
|
||||
synchronized ``passwd`` and ``group`` databases.
|
||||
|
||||
Network Boot and wwinit
|
||||
=======================
|
||||
|
||||
The network boot and wwinit process have been made more consistent and verbose
|
||||
for both iPXE and GRUB methods. Additional output and logging provides more
|
||||
information about each step of the process as it happens to aid in
|
||||
troubleshooting. And available network boot options are now presented using an
|
||||
iPXE menu, allowing a specific method to be selected without using a custom iPXE
|
||||
script.
|
||||
|
||||
Utilizing the new iPXE menu, specifying an ``IPXEMenuEntry`` tag on a cluster
|
||||
node now selects the boot method to use, similar to the previously-existing
|
||||
``GRUBMenuEntry``. The ``dracut.ipxe`` script has now been merged into the
|
||||
default iPXE script, and specifying ``IPXEMenuEntry=dracut`` now replaces
|
||||
specifying a discrete ``dracut`` iPXE template.
|
||||
|
||||
An issue that prevented nodes from booting in some circumstances with the
|
||||
Warewulf server configured in "secure" mode have also been resolved: now, if the
|
||||
runtime overlay cannot be downloaded during boot, boot proceeds regardless, and
|
||||
``wwclient`` applies the runtime overlay after boot when it is able to control
|
||||
its source port.
|
||||
|
||||
IPMI
|
||||
====
|
||||
|
||||
The IPMI system has been refactored to use templates to define the required IPMI
|
||||
template from the cluster node configuration. This is expected to support
|
||||
additional BMC implementation in the future.
|
||||
|
||||
CLI
|
||||
===
|
||||
|
||||
There have been many enhancements to the ``wwctl`` command:
|
||||
|
||||
``wwctl`` has been updated to use a different table-formatting library that
|
||||
produces more natural output without extraneous whitespace padding.
|
||||
|
||||
``wwctl`` has been updated to add hostlist support to ``wwctl node`` and ``wwctl
|
||||
overlay build``. Hostlists have also been enhanced to support comma-separated
|
||||
hostlist patterns. (e.g., ``n[1-2],n5,n[8-9]``) Other pattern formats (regular
|
||||
expressions and globs) are no longer supported.
|
||||
|
||||
``wwctl`` has been updated to add "tab completions" for additional parameters.
|
||||
|
||||
``wwctl <node|profile> list [--yaml|--json]`` generates machine-readable output
|
||||
in YAML and JSON format, and ``wwctl node export`` has been updated to match,
|
||||
including indicating node IDs.
|
||||
|
||||
``wwctl`` now return a non-zero exit code on error.
|
||||
|
||||
There are smaller changes to the syncuser, as well:
|
||||
|
||||
- ``wwctl <node|profile> list --fullall`` has been removed.
|
||||
- ``wwctl clean`` removes the OCI cache and vestigial overlay images from
|
||||
deleted nodes.
|
||||
- ``wwctl container exec`` no longer requires a double hyphen (``-- --``) before
|
||||
flags.
|
||||
|
||||
Debian/Ubuntu
|
||||
=============
|
||||
|
||||
Warewulf v4.6.0 does not yet fully support Debian or Ubuntu; but there have been
|
||||
multiple improvements towards future support:
|
||||
|
||||
- ``warewulfd`` can now detect Ubuntu-style Dracut initrd images.
|
||||
- A new ``netplan`` overlay adds support for modern Debian/Ubuntu network
|
||||
configuration.
|
||||
- Multiple internal shell scripts have been updated for POSIX compatibility to
|
||||
support internal use of shells other than Bash.
|
||||
|
||||
Server
|
||||
======
|
||||
|
||||
The Warewulf server daemon (``warewulfd``) has been refactored to more closely
|
||||
behave like a `12-factor app <https://12factor.net/>`_. As such, the ability to
|
||||
daemonize has been removed (as have the daemon management commands, ``wwctl
|
||||
server <start,stop,status,restart,reload>``). The server now always runs in the
|
||||
foreground and logs to stdout rather than to ``/var/log/warewulfd.log`` or
|
||||
syslog.
|
||||
|
||||
The ``warewulfd.service`` systemd unit has been updated to read environment
|
||||
variables from ``/etc/default/warewulfd``, and now references an ``OPTIONS``
|
||||
environment variable to supply additional arguments to the ``wwctl server``
|
||||
command. (e.g., ``OPTIONS=--debug``)
|
||||
|
||||
``wwctl`` auto-detects some network settings if they are not specified in
|
||||
``warewulf.conf``. These settings are now written back to ``warewulf.conf``
|
||||
after auto-detection. The ``ipaddr`` field of ``warewulf.conf`` can now also
|
||||
handle a CIDR-formatted address, which internally populates the ``netmask`` and
|
||||
``network`` fields. These network fields are also provided to overlay templates
|
||||
in CIDR format as ``IpCIDR`` and ``NetworkCIDR`` fields.
|
||||
|
||||
A new ``warewulfd`` API endpoint at
|
||||
``/overlay-file/{overlay}/{path...}?render={id}`` supports fetching (and
|
||||
rendering) arbitrary overlay files.
|
||||
|
||||
There are smaller changes to the server, as well:
|
||||
|
||||
- ``wwctl configure ssh`` now generates ed25519 keys by default.
|
||||
|
||||
DHCP Server
|
||||
===========
|
||||
|
||||
The Warewulf server's external DHCP service now more flexibly accounts for the
|
||||
presence or absence of an address range. ``wwctl configure dhcp`` now generates
|
||||
a DHCP configuration without a defined range, generating as much of the subnet
|
||||
and range definition as possible, for either a "default" configuration or a
|
||||
"static" configuration.
|
||||
|
||||
For Warewulf Developers
|
||||
=======================
|
||||
|
||||
Finally, there are a number of changes that really only matter to Warewulf
|
||||
developers:
|
||||
|
||||
The minimum Go version is now ``1.22.9``, as required by updated dependencies.
|
||||
|
||||
Warewulf v4.6.0 includes a significant refactor of the internal datastructures
|
||||
that represent cluster nodes. The NodeInfo structure (in-memory-only) has been
|
||||
merged with NodeConf, the YAML-backed data structure. In its place, a new Field
|
||||
system supports tracks the source of node fields while values are merged from
|
||||
profiles for use explicitly during ``wwctl node list --all``.
|
||||
|
||||
The primary Warewulf ``Makefile`` has been enhanced with target help: just run
|
||||
``make`` to see a list and descriptions of notable targets.
|
||||
|
||||
The official Warewulf RPM spec file has been updated to recommend the
|
||||
installation of ``ipmitool``. It also simplifies the permissions of installed
|
||||
files, and omits the gRPC API by default.
|
||||
|
||||
The GitHub CI process now runs "staticcheck," and problems highlighted by it
|
||||
have been resolved. Recent problems in the nightly build workflow have also been
|
||||
resolved.
|
||||
|
||||
A Visual Studio Code "development container" definition is now included in the
|
||||
repository.
|
||||
Reference in New Issue
Block a user