Skip to content

Commit 590d0a0

Browse files
committed
feat(stemcell): add Ubuntu Resolute (26.04) stemcell support
Introduces Ubuntu 26.04 'Resolute Raccoon' as a supported stemcell target, adding stage configurations, package lists, spec fixtures, and build tooling to produce and validate a Resolute stemcell image. Rakefile now raises an error when operating_system_version is not specified to prevent accidental builds without an explicit OS target. Repack helper scripts and Vagrant configuration are updated to support the Resolute OS image layout. Warden stage masks systemd-udevd.service, which has no function in containerised environments. Package fixture lists are updated to reflect Resolute package names: libxmlsec1t64 is now libxmlsec1-1, linux-firmware-amd-misc is added, and libpython3.13 is removed (libpython3.14 is still present).
1 parent 7577e17 commit 590d0a0

24 files changed

Lines changed: 360 additions & 201 deletions

File tree

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@ acceptance-tests/syslog-release
1313
acceptance-tests/os-conf-release
1414

1515
ci/docker/os-image-stemcell-builder/VMware-ovftool-*.bundle
16+
ci/docker/VMware-ovftool-*.bundle
17+
ci/docker/*/VMware-ovftool-*.bundle
1618

17-
tmp/
19+
tmp/

CONTRIBUTING.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ an "Ubuntu SHORT_NAME" based stemcell will be on the branch:
1111
As of `2026-04-03` the following stemcell lines / branches are supported:
1212
- Ubuntu Jammy / `ubuntu-jammy`
1313
- Ubuntu Noble / `ubuntu-noble`
14+
- Ubuntu Resolute / `ubuntu-resolute`

README.md

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,30 @@
33
This repo contains tools for creating BOSH stemcells. A stemcell is a bootable
44
disk image that is used as a template by a BOSH Director to create VMs.
55

6+
This branch builds stemcells for **Ubuntu 26.04 LTS (Resolute)**. For other
7+
Ubuntu releases, switch to the appropriate branch (for example `ubuntu-noble`
8+
for 24.04).
9+
610
## Quick Start: Building a Stemcell Locally
711

812
```bash
9-
export short_name="noble"
13+
export short_name="resolute"
1014

1115
git clone git@github.com:cloudfoundry/bosh-linux-stemcell-builder.git
1216
cd bosh-linux-stemcell-builder
1317
git checkout ubuntu-${short_name}
1418
mkdir -p tmp
1519
docker build \
1620
--platform linux/amd64 \
17-
--build-arg SYFT_VERSION=v1.42.3 \
21+
--build-arg BASE_IMAGE="ubuntu:${short_name}" \
22+
--build-arg META4_CLI_URL="https://github.com/dpb587/metalink/releases/download/v0.5.0/meta4-0.5.0-linux-amd64" \
23+
--build-arg SYFT_CLI_URL="https://github.com/anchore/syft/releases/download/v1.42.3/syft_1.42.3_linux_amd64.tar.gz" \
24+
--build-arg YQ_CLI_URL="https://github.com/mikefarah/yq/releases/download/v4.52.5/yq_linux_amd64" \
25+
--build-arg RUBY_INSTALL_URL="https://github.com/postmodern/ruby-install/releases/download/v0.10.2/ruby-install-0.10.2.tar.gz" \
26+
--build-arg RUBY_VERSION="$(cat .ruby-version)" \
27+
--build-arg GEM_HOME="/usr/local/bundle" \
28+
--build-arg OVF_TOOL_INSTALLER="VMware-ovftool-4.4.3-18663434-lin.x86_64.bundle" \
29+
--build-arg OVF_TOOL_INSTALLER_SHA1="6c24e473be49c961cfc3bb16774b52b48e822991" \
1830
-t bosh/os-image-stemcell-builder:${short_name} \
1931
ci/docker/os-image-stemcell-builder/
2032
docker run \
@@ -56,7 +68,7 @@ installed in the operating system or when making changes to the configuration
5668
of those packages.
5769

5870
```bash
59-
export short_name="noble"
71+
export short_name="resolute"
6072

6173
bundle exec rake stemcell:build_os_image[ubuntu,${short_name},${PWD}/tmp/ubuntu_base_image.tgz]
6274
```
@@ -78,7 +90,7 @@ The arguments to the `stemcell:build_os_image` rake task follow:
7890
Rebuild the stemcell when you are making and testing BOSH-specific changes such as a new BOSH agent.
7991

8092
```bash
81-
export short_name="noble"
93+
export short_name="resolute"
8294
export build_number="0.0.8"
8395

8496
bundle exec rake stemcell:build[vsphere,esxi,ubuntu,${short_name},${PWD}/tmp/ubuntu_base_image.tgz,${build_number}]
@@ -95,6 +107,7 @@ The arguments to `stemcell:build` are:
95107
- `google``kvm`
96108
- `openstack``kvm`
97109
- `vsphere``esxi`
110+
- `warden``warden`
98111
3. `operating_system_name` (`ubuntu`): Type of OS. Same as
99112
`stemcell:build_os_image`.
100113
4. `operating_system_version` (`<short_name>`): OS release. Same as
@@ -114,7 +127,7 @@ the stemcell would be at
114127
upload the stemcell to a vSphere BOSH Director:
115128

116129
```bash
117-
export short_name="noble"
130+
export short_name="resolute"
118131

119132
bosh upload-stemcell tmp/bosh-stemcell-0.0.8-vsphere-esxi-ubuntu-${short_name}-go_agent.tgz
120133
```
@@ -135,7 +148,6 @@ the OS image** at the `tmp/ubuntu_base_image.tgz` and you're within the Docker
135148
container):
136149

137150
```shell
138-
export short_name="noble"
139151
cd /opt/bosh/bosh-stemcell
140152
bundle install
141153
OS_IMAGE=/opt/bosh/tmp/ubuntu_base_image.tgz bundle exec rspec -fd spec/os_image/ubuntu_spec.rb
@@ -208,7 +220,7 @@ If you find yourself debugging any of the above processes, here is what you need
208220
Example usage:
209221

210222
```shell
211-
export short_name="noble"
223+
export short_name="resolute"
212224

213225
bundle exec rake stemcell:build_os_image[ubuntu,${short_name},${PWD}/tmp/ubuntu_base_image.tgz] resume_from=rsyslog_config
214226
```
@@ -219,8 +231,8 @@ If you find yourself debugging any of the above processes, here is what you need
219231
modifications you can rerun the tests (without rebuilding OS image). Details
220232
in section `How to run tests for OS Images`
221233
* If the Stemcell has been built, and you are only updating tests, you do not
222-
need to re-build the stemcell. You can simply rerun the tests - without
223-
rebuilding Stemcell. Details in section `How to run tests for Stemcell`
234+
need to re-build the stemcell. You can simply rerun the tests (without
235+
rebuilding Stemcell). Details in section `How to run tests for Stemcell`
224236
* It's possible to verify OS/Stemcell changes without making a deployment using
225237
the stemcell. For a vSphere-specific Ubuntu stemcell, the filesystem is
226238
available at `/mnt/stemcells/vsphere/esxi/ubuntu/work/work/chroot`
@@ -249,7 +261,7 @@ You will need the ovftool installer present in
249261
Rebuild the container with:
250262

251263
```shell
252-
export short_name="noble"
264+
export short_name="resolute"
253265

254266
docker build \
255267
--platform linux/amd64 \
@@ -280,7 +292,7 @@ gsutil cp MY_OVFTOOL_FILE gs://bosh-vmware-ovftool/MY_OS/
280292
Example:
281293

282294
```shell
283-
export short_name="noble"
295+
export short_name="resolute"
284296

285297
gsutil cp VMware-ovftool-4.4.3-18663434-lin.x86_64.bundle gs://bosh-vmware-ovftool/${short_name}/
286298
```
@@ -387,4 +399,3 @@ When switching from the old pipeline to the new one, don't forget to:
387399
whatever the public bucket should be
388400
* update the tasks YAML to point to tasks in the `os-images` directory
389401
* rename this directory from `new`
390-

Rakefile

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,18 @@ namespace :stemcell do
1111
require "bosh/stemcell/stage_collection"
1212
require "bosh/stemcell/stage_runner"
1313

14+
os_image_path = File.expand_path(args.os_image_path)
15+
if args.operating_system_version.to_s.strip.empty?
16+
raise "stemcell:build_os_image: operating_system_version (2nd argument) is empty. " \
17+
"Set it to the Ubuntu release codename (for example export short_name=resolute per README), " \
18+
"or pass it literally: rake stemcell:build_os_image[ubuntu,resolute,tmp/os.tgz]"
19+
end
1420
definition = Bosh::Stemcell::Definition.for("null", "null", args.operating_system_name, args.operating_system_version)
1521
environment = Bosh::Stemcell::BuildEnvironment.new(
1622
ENV.to_hash,
1723
definition,
1824
"",
19-
args.os_image_path
25+
os_image_path
2026
)
2127
collection = Bosh::Stemcell::StageCollection.new(definition)
2228
runner = Bosh::Stemcell::StageRunner.new(
@@ -33,7 +39,7 @@ namespace :stemcell do
3339
runner: runner,
3440
archive_handler: archive_handler
3541
)
36-
builder.build(args.os_image_path)
42+
builder.build(os_image_path)
3743

3844
sh(environment.os_image_rspec_command)
3945
rescue RuntimeError => e
@@ -52,12 +58,13 @@ namespace :stemcell do
5258

5359
args.with_defaults(build_number: "0000")
5460

61+
os_image_path = File.expand_path(args.os_image_path)
5562
definition = Bosh::Stemcell::Definition.for(args.infrastructure_name, args.hypervisor_name, args.operating_system_name, args.operating_system_version)
5663
environment = Bosh::Stemcell::BuildEnvironment.new(
5764
ENV.to_hash,
5865
definition,
5966
args.build_number,
60-
args.os_image_path
67+
os_image_path
6168
)
6269

6370
sh(environment.os_image_rspec_command)
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<metalink xmlns="urn:ietf:params:xml:ns:metalink">
2+
<file name="ubuntu-resolute.tgz">
3+
<hash type="sha-512">placeholder-update-when-resolute-os-image-is-published</hash>
4+
<hash type="sha-256">placeholder</hash>
5+
<hash type="sha-1">placeholder</hash>
6+
<size>0</size>
7+
<url>https://storage.googleapis.com/bosh-os-images/ubuntu-resolute/ubuntu-resolute.tgz</url>
8+
<version>0.0.0</version>
9+
</file>
10+
<file name="usn-log.json">
11+
<hash type="sha-512">placeholder</hash>
12+
<hash type="sha-256">placeholder</hash>
13+
<size>1</size>
14+
<url>https://storage.googleapis.com/bosh-os-images/ubuntu-resolute/usn-log.json</url>
15+
<version>0.0.0</version>
16+
</file>
17+
<generator>metalink-repository-resource/0.0.0</generator>
18+
<published>1970-01-01T00:00:00Z</published>
19+
</metalink>
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
linux-generic
2-
linux-headers-6.8
3-
linux-headers-6.8-generic
2+
linux-headers-7.0
3+
linux-headers-7.0-generic
44
linux-headers-generic
5-
linux-image-6.8-generic
5+
linux-image-7.0-generic
66
linux-image-generic
7-
linux-modules-6.8-generic
8-
linux-modules-extra-6.8-generic
7+
linux-main-modules-zfs-7.0-generic
8+
linux-modules-7.0-generic

bosh-stemcell/spec/assets/dpkg-list-ubuntu-vsphere-additions.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ libdrm-common
22
libdrm2:amd64
33
libmspack0t64:amd64
44
libpci3:amd64
5-
libxmlsec1t64:amd64
6-
libxmlsec1t64-openssl:amd64
5+
libxmlsec1-1:amd64
6+
libxmlsec1-openssl1:amd64
77
open-vm-tools
88
pciutils
99
pci.ids

0 commit comments

Comments
 (0)