nuageinit: implement bootcmd support

Add support for the 'bootcmd' cloud-config directive, which allows
running commands very early in the boot process, before the hostname
is set and before the network is configured.

- nuageinit: bootcmd() function follows the same pattern as runcmd(),
  writing commands to /var/cache/nuageinit/bootcmds instead of runcmds.
  It is the first entry in the pre_network_calls table.

- rc.d/nuageinit: execute /var/cache/nuageinit/bootcmds immediately
  after /usr/libexec/nuageinit completes, before unmounting the config
  drive. This ensures bootcmd runs before NETWORKING per cloud-init spec.
This commit is contained in:
Baptiste Daroussin
2026-06-05 07:00:00 +02:00
parent ab478de1f9
commit b9be7608cd
3 changed files with 27 additions and 0 deletions
+18
View File
@@ -524,6 +524,23 @@ local function disable_root(obj)
end
end
local function bootcmd(obj)
if obj.bootcmd == nil then return end
local f = nil
for _, c in ipairs(obj.bootcmd) do
if f == nil then
nuage.mkdir_p(root .. "/var/cache/nuageinit")
f = assert(io.open(root .. "/var/cache/nuageinit/bootcmds", "w"))
f:write("#!/bin/sh\n")
end
f:write(c .. "\n")
end
if f ~= nil then
f:close()
nuage.chmod(root .. "/var/cache/nuageinit/bootcmds", "0755")
end
end
local function runcmd(obj)
if obj.runcmd == nil then return end
local f = nil
@@ -794,6 +811,7 @@ if line == nil then
-- YAML user-data
elseif line == "#cloud-config" then
local pre_network_calls = {
bootcmd,
sethostname,
settimezone,
groups,
+5
View File
@@ -362,6 +362,9 @@ does not automatically install them.
Ensure the relevant command is listed in your
.Nm packages
section.
.It Ic bootcmd
An array of commands to be run early in the boot process,
before the hostname is set and before the network is configured.
.It Ic chpasswd
Change the passwords for users, it accepts the following keys:
.Bl -tag -width "expire"
@@ -424,6 +427,8 @@ Here is an example of a YAML configuration for
.Nm :
.Bd -literal
#cloud-config
bootcmd:
- kldload if_bridge
fqdn: myhost.mynetwork.tld
users:
- default
+4
View File
@@ -89,6 +89,10 @@ nuageinit_start()
/usr/libexec/nuageinit /media/nuageinit $citype 2>&1 | tee -a /var/log/nuageinit.log
;;
esac
if [ -x /var/cache/nuageinit/bootcmds ]; then
echo "Executing 'bootcmd'" | tee -a /var/log/nuageinit.log
/var/cache/nuageinit/bootcmds 2>&1 | tee -a /var/log/nuageinit.log
fi
if [ -n "$drive" ]; then
umount /media/nuageinit
rmdir /media/nuageinit