mirror of
https://github.com/xcat2/xcat-core.git
synced 2026-10-21 15:18:19 +00:00
f8469e2074
Nodes could not know whether an image turned the root image checksum on. An initial ramdisk built before the check booted the image unchecked, and nothing reported it. An archive packed before the check had no checksum for a new initial ramdisk to find. When the image or the site turns the checksum on, nodeset adds rootimgchecksum=yes to the kernel command line of the node. This applies to stateless and statelite ramdisk nodes. genimage writes <initrd>.rootimgcheck next to an initial ramdisk that can check. The marker holds the SHA-256 checksum of the initial ramdisk, so a replaced ramdisk does not match it. imgexport and imgimport carry the marker with the ramdisk. When the checksum is on, nodeset warns once for each image whose initial ramdisk has no matching marker. Its nodes may boot the image unchecked. nodeset judges the initial ramdisk in TFTP after it copies the boot files, because nodes boot that copy, also with --noupdateinitrd. A copy that fails is now an error for the node, instead of a boot entry for the previous boot files. genimage and nodeset write a checksum for each archive of the image directory that has none, also when the check is off. Nodes with older boot entries still check. genimage does it before it copies a new initial ramdisk to TFTP, and nodeset before it copies the boot files of a node. Both hold the publication lock while they write. When they cannot write the checksum, they keep the boot files that nodes use now and report how to recover. With the check off, nodeset reports it as a warning instead, and still sets up the node. nodeset marks the boot files of an image as copied only after this step succeeds. When the first node of an image fails it, the next node copies them. The change covers the Red Hat, SUSE and Ubuntu nodeset plugins, which share one helper in xCAT::SvrUtils.