git: 3b108068121b - main - release: remove Oracle Cloud Infrastructure build targets

From: Dave Cottlehuber <dch_at_FreeBSD.org>
Date: Mon, 13 Apr 2026 15:35:24 UTC
The branch main has been updated by dch:

URL: https://cgit.FreeBSD.org/src/commit/?id=3b108068121ba30fb3dbed569d6757da2ab529a4

commit 3b108068121ba30fb3dbed569d6757da2ab529a4
Author:     Dave Cottlehuber <dch@FreeBSD.org>
AuthorDate: 2026-04-12 22:29:44 +0000
Commit:     Dave Cottlehuber <dch@FreeBSD.org>
CommitDate: 2026-04-13 15:34:17 +0000

    release: remove Oracle Cloud Infrastructure build targets
    
    Oracle's previous support is no longer available to the project.
    Repeated attempts to find a sponsor within Oracle's cloud business
    have not been successful.
    
    The last published official images are from 15.0-RELEASE.
    
    https://marketplace.oracle.com/app/freebsd-release
    
    Relnotes:       yes
    Sponsored by:   SkunkWerks, GmbH
    Differential Revision:  https://reviews.freebsd.org/D56360
    MFC after:      3 days
---
 release/Makefile.oracle                            | 108 ---------------------
 release/Makefile.vm                                |   5 -
 release/release.conf.sample                        |   2 +-
 .../oracle/arm64_shape_compatibilities.json        |  24 -----
 .../oracle/default_shape_compatibilities.json      |   1 -
 release/scripts/oracle/generate_metadata.lua       |  74 --------------
 release/scripts/oracle/image_capability_data.json  |  96 ------------------
 release/scripts/oracle/image_metadata.json         |  21 ----
 release/tools/oracle.conf                          | 105 --------------------
 9 files changed, 1 insertion(+), 435 deletions(-)

diff --git a/release/Makefile.oracle b/release/Makefile.oracle
deleted file mode 100644
index 6d792cc9fd30..000000000000
--- a/release/Makefile.oracle
+++ /dev/null
@@ -1,108 +0,0 @@
-#
-# Makefile for preparing & uploading Oracle Cloud images from existing
-# .raw files created by cloudware-release.
-#
-# Overview:
-#
-# The base image is already created by cloudware-release.
-#
-# Construct the custom OCI metadata, derived from exported official OCI images.
-# It is architecture-specific but appears mostly stable over time.
-# Compress the raw image and place it in the same directory as the metadata.
-# Make a GNU format tarball of these files.
-# Upload the tarball to Oracle Cloud via a pre-approved curl URI, into
-# the FreeBSD Foundation's Oracle Cloud account.
-#
-# These images go into the "re" bucket in us-ashburn-1 region, which
-# is mounted into the FreeBSD Foundation Oracle Marketplace account.
-# Once uploaded, a manual step is needed to import the images as local
-# custom images. These can then be tested within the us-ashburn-1 region.
-# Once tested, follow the manual Oracle Marketplace import process to
-# create a new FreeBSD version, attach the images, and initiate validation
-# by Oracle. This can take up to 5 working days. Once complete, a final
-# manual step is needed to mark the currently private images, public.
-# Syncing to all sites should take 2-3 hours after this final step.
-
-ORACLE_BASENAME=	${OSRELEASE}-${BUILDDATE}${GITREV:C/^(.+)/-\1/}
-CLEANFILES+=	cw-oracle-portinstall
-
-cw-oracle-portinstall: .PHONY
-.if (!exists(/usr/local/bin/curl) || !exists(/usr/local/bin/qemu-img)) && !exists(${PORTSDIR}/Makefile)
-. if !exists(/usr/local/sbin/pkg-static)
-	env ASSUME_ALWAYS_YES=yes pkg bootstrap -yf
-. endif
-.endif
-.if !exists(/usr/local/bin/curl)
-. if !exists(${PORTSDIR}/Makefile)
-	env ASSUME_ALWAYS_YES=yes pkg install -y ftp/curl
-. else
-	env UNAME_r=${UNAME_r} make -C \
-		${PORTSDIR}/ftp/curl \
-		BATCH=1 WRKDIRPREFIX=/tmp/ports DISTDIR=/tmp/distfiles \
-		all install clean
-. endif
-.endif
-.if !exists(/usr/local/bin/qemu-img)
-. if !exists(${PORTSDIR}/Makefile)
-	env ASSUME_ALWAYS_YES=yes pkg install -y emulators/qemu@tools
-. else
-	env UNAME_r=${UNAME_r} FLAVOR=tools make -C \
-		${PORTSDIR}/emulators/qemu \
-		BATCH=1 WRKDIRPREFIX=/tmp/ports DISTDIR=/tmp/distfiles \
-		all install clean
-. endif
-.endif
-
-.for _FS in ${ORACLE_FSLIST}
-ORACLE_OCI_LIST+=	cw-oracle-${_FS}.oci
-ORACLE_UPLOAD_LIST+=	cw-oracle-upload-${_FS}
-CLEANFILES+=		cw-oracle-${_FS}.oci
-ORACLE_TMP_${_FS}=		cw-oracle-${_FS}.oci.tmpdir
-CLEANDIRS+=		${ORACLE_TMP_${_FS}}
-ORACLE_METADATA=	${.CURDIR}/scripts/oracle
-ORACLE_CAPABILITY=	${.CURDIR}/scripts/oracle/image_capability_data.json
-ORACLE_TEMPLATE=	${.CURDIR}/scripts/oracle/image_metadata.json
-ORACLE_OUTPUT_${_FS}=	${ORACLE_TMP_${_FS}}/image_metadata.json
-.if ${TARGET} == "arm64"
-ORACLE_SHAPES=		${ORACLE_METADATA}/arm64_shape_compatibilities.json
-.else
-ORACLE_SHAPES=		${ORACLE_METADATA}/default_shape_compatibilities.json
-.endif
-
-cw-oracle-${_FS}.oci: cw-oracle-portinstall cw-oracle-${_FS}-raw
-	mkdir -p ${ORACLE_TMP_${_FS}}
-	# create architecture-specific JSON metadata
-	env TYPE="${TYPE}" \
-		OSRELEASE="${OSRELEASE}" \
-		ORACLE_CAPABILITY="${ORACLE_CAPABILITY}" \
-		ORACLE_SHAPES="${ORACLE_SHAPES}" \
-		ORACLE_TEMPLATE="${ORACLE_TEMPLATE}" \
-		ORACLE_OUTPUT="${ORACLE_OUTPUT_${_FS}}" \
-		${ORACLE_METADATA}/generate_metadata.lua
-
-	# convert raw to native qcow2 for zstd compression, saves ~ 8GiB
-	qemu-img convert -S 512b -p -O qcow2 -c -o compression_type=zstd \
-		${.OBJDIR}/${ORACLE${_FS:tu}RAWIMAGE} \
-		${ORACLE_TMP_${_FS}}/output.QCOW2
-
-	# Create GNU-compatible tarball using BSD tar
-	tar --format=gnutar -cf ${.TARGET} -C ${ORACLE_TMP_${_FS}} \
-		image_metadata.json output.QCOW2
-
-	echo "Oracle image ${.TARGET} is ready for upload."
-
-cw-oracle-upload-${_FS}: cw-oracle-${_FS}.oci
-.if !defined(ORACLE_PAR_URL) || empty(ORACLE_PAR_URL)
-	@echo "--------------------------------------------------------------"
-	@echo ">>> ORACLE_PAR_URL must be set for Oracle image upload"
-	@echo ">>> for testing, use a file:/// URL to a local directory"
-	@echo "--------------------------------------------------------------"
-	@false
-.endif
-	echo "Please wait ... uploading cw-oracle-${_FS}.oci to ${ORACLE_BASENAME}-${_FS}.oci"
-	curl -s ${ORACLE_PAR_URL}/${ORACLE_BASENAME}-${_FS}.oci --upload-file cw-oracle-${_FS}.oci
-	echo "Uploaded cw-oracle-${_FS}.oci as ${ORACLE_BASENAME}-${_FS}.oci"
-	touch ${.TARGET}
-.endfor
-
-cw-oracle-upload: cw-oracle-portinstall ${ORACLE_UPLOAD_LIST}
diff --git a/release/Makefile.vm b/release/Makefile.vm
index abbfcb341afc..d937783f02fe 100644
--- a/release/Makefile.vm
+++ b/release/Makefile.vm
@@ -24,7 +24,6 @@ CLOUDWARE_TYPES?= AZURE \
 		BASIC-CLOUDINIT \
 		EC2 \
 		GCE \
-		ORACLE \
 		VAGRANT
 AZURE_FORMAT=	vhdf
 AZURE_FSLIST?=	ufs zfs
@@ -45,9 +44,6 @@ EC2-SMALL_DESC=	Amazon EC2 small image
 GCE_FORMAT=	raw
 GCE_FSLIST?=	ufs zfs
 GCE_DESC=	Google Compute Engine image
-ORACLE_FORMAT=	raw
-ORACLE_FSLIST?=	ufs zfs
-ORACLE_DESC=	Oracle Cloud Infrastructure image
 OPENSTACK_FORMAT=qcow2
 OPENSTACK_FSLIST?=	ufs
 OPENSTACK_DESC=	OpenStack platform image
@@ -315,6 +311,5 @@ cloudware-release:
 .include "${.CURDIR}/Makefile.ec2"
 .include "${.CURDIR}/Makefile.firecracker"
 .include "${.CURDIR}/Makefile.gce"
-.include "${.CURDIR}/Makefile.oracle"
 .include "${.CURDIR}/Makefile.vagrant"
 .include "${.CURDIR}/Makefile.inc1"
diff --git a/release/release.conf.sample b/release/release.conf.sample
index e583e49828d4..72faef150f88 100644
--- a/release/release.conf.sample
+++ b/release/release.conf.sample
@@ -113,7 +113,7 @@ PORTBRANCH="main"
 
 ## If WITH_CLOUDWARE is set to a non-empty value, this is a list of providers
 ## to create disk images.
-#CLOUDWARE="EC2 GCE ORACLE VAGRANT-VIRTUALBOX VAGRANT-VMWARE"
+#CLOUDWARE="EC2 GCE VAGRANT-VIRTUALBOX VAGRANT-VMWARE"
 
 ## If WITH_OCIIMAGES is set to a non-empty value, build Open Container
 ## Initiative (OCI) base images as part of the release.
diff --git a/release/scripts/oracle/arm64_shape_compatibilities.json b/release/scripts/oracle/arm64_shape_compatibilities.json
deleted file mode 100644
index dfd066b5474f..000000000000
--- a/release/scripts/oracle/arm64_shape_compatibilities.json
+++ /dev/null
@@ -1,24 +0,0 @@
-[
-  {
-    "internalShapeName": "VM.Standard.A1.Flex",
-    "ocpuConstraints": {
-      "min": 1,
-      "max": 80
-    },
-    "memoryConstraints": {
-      "minInGBs": 1,
-      "maxInGBs": 512
-    }
-  },
-  {
-    "internalShapeName": "VM.Standard.A2.Flex",
-    "ocpuConstraints": {
-      "min": 1,
-      "max": 78
-    },
-    "memoryConstraints": {
-      "minInGBs": 1,
-      "maxInGBs": 946
-    }
-  }
-]
diff --git a/release/scripts/oracle/default_shape_compatibilities.json b/release/scripts/oracle/default_shape_compatibilities.json
deleted file mode 100644
index fe51488c7066..000000000000
--- a/release/scripts/oracle/default_shape_compatibilities.json
+++ /dev/null
@@ -1 +0,0 @@
-[]
diff --git a/release/scripts/oracle/generate_metadata.lua b/release/scripts/oracle/generate_metadata.lua
deleted file mode 100755
index 751b9680cc29..000000000000
--- a/release/scripts/oracle/generate_metadata.lua
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/libexec/flua
-
-local ucl = require("ucl")
-
--- read from environment variables
-local os_type = os.getenv("TYPE")
-local os_version = os.getenv("OSRELEASE")
--- the raw file
-local capability_file = os.getenv("ORACLE_CAPABILITY")
--- the platform-specific file
-local shapes_file = os.getenv("ORACLE_SHAPES")
--- base template
-local template_file = os.getenv("ORACLE_TEMPLATE")
-local output_file = os.getenv("ORACLE_OUTPUT")
-
-if not os_type or not os_version or not capability_file or
-   not shapes_file or not template_file or not output_file then
-    io.stderr:write("Error: Oracle metadata script is missing required environment variables:\n")
-    io.stderr:write("TYPE, OSRELEASE, ORACLE_CAPABILITY, ORACLE_SHAPES, ORACLE_TEMPLATE, ORACLE_OUTPUT\n")
-    os.exit(1)
-end
-
--- read files
-local function read_file(path)
-    local f = io.open(path, "r")
-    if not f then
-        io.stderr:write("Error: Oracle metadata script cannot open file: " .. path .. "\n")
-        os.exit(1)
-    end
-    local content = f:read("*a")
-    f:close()
-    return content
-end
-
--- parse the template
-local template = read_file(template_file)
-local metadata = ucl.parser()
-metadata:parse_string(template)
-local data = metadata:get_object()
-
--- update the simple fields
-data.operatingSystem = os_type
-data.operatingSystemVersion = os_version
-
--- capability data is actually JSON, but needs to be inserted as a raw blob
-local caps = read_file(capability_file)
--- remove all newlines and preceding spaces to match Oracle's format
-caps = caps:gsub("\n", "")
-caps = caps:gsub("%s+", "")
--- is it still valid JSON?
-local caps_parser = ucl.parser()
-if not caps_parser:parse_string(caps) then
-    io.stderr:write("Error: Oracle metadata script found invalid JSON in capability file\n")
-    os.exit(1)
-end
--- insert as a raw blob
-data.imageCapabilityData = caps
-
--- parse and insert architecture-dependent shape compatibilities data
-local shapes_data = read_file(shapes_file)
-local shapes = ucl.parser()
-shapes:parse_string(shapes_data)
-data.additionalMetadata.shapeCompatibilities = shapes:get_object()
-
--- save the metadata file
-local dir = os.getenv("PWD")
-local out = io.open(output_file, "w")
-if not out then
-    io.stderr:write("Error: Oracle metadata script cannot create output file: "
-        .. dir .. "/" .. output_file .. "\n")
-    os.exit(1)
-end
-out:write(ucl.to_format(data, "json", {pretty = true}))
-out:close()
diff --git a/release/scripts/oracle/image_capability_data.json b/release/scripts/oracle/image_capability_data.json
deleted file mode 100644
index 01af71f73031..000000000000
--- a/release/scripts/oracle/image_capability_data.json
+++ /dev/null
@@ -1,96 +0,0 @@
-{
-  "capabilities": {
-    "Compute.AMD_SecureEncryptedVirtualization": {
-      "descriptorType": "boolean",
-      "defaultValue": false
-    },
-    "Storage.BootVolumeType": {
-      "descriptorType": "enumstring",
-      "values": [
-        "ISCSI",
-        "PARAVIRTUALIZED",
-        "SCSI",
-        "IDE",
-        "NVME"
-      ],
-      "defaultValue": "PARAVIRTUALIZED"
-    },
-    "Storage.Iscsi.MultipathDeviceSupported": {
-      "descriptorType": "boolean",
-      "defaultValue": false
-    },
-    "Storage.ParaVirtualization.EncryptionInTransit": {
-      "descriptorType": "boolean",
-      "defaultValue": true
-    },
-    "Storage.ConsistentVolumeNaming": {
-      "descriptorType": "boolean",
-      "defaultValue": true
-    },
-    "Compute.SecureBoot": {
-      "descriptorType": "boolean",
-      "defaultValue": false
-    },
-    "Storage.ParaVirtualization.AttachmentVersion": {
-      "descriptorType": "enuminteger",
-      "values": [
-        1,
-        2
-      ],
-      "defaultValue": 2
-    },
-    "Storage.LocalDataVolumeType": {
-      "descriptorType": "enumstring",
-      "values": [
-        "ISCSI",
-        "PARAVIRTUALIZED",
-        "SCSI",
-        "IDE",
-        "NVME"
-      ],
-      "defaultValue": "PARAVIRTUALIZED"
-    },
-    "Network.AttachmentType": {
-      "descriptorType": "enumstring",
-      "values": [
-        "PARAVIRTUALIZED",
-        "VDPA"
-      ],
-      "defaultValue": "PARAVIRTUALIZED"
-    },
-    "Storage.RemoteDataVolumeType": {
-      "descriptorType": "enumstring",
-      "values": [
-        "ISCSI",
-        "PARAVIRTUALIZED",
-        "SCSI",
-        "IDE",
-        "NVME"
-      ],
-      "defaultValue": "PARAVIRTUALIZED"
-    },
-    "Compute.LaunchMode": {
-      "descriptorType": "enumstring",
-      "values": [
-        "NATIVE",
-        "EMULATED",
-        "VDPA",
-        "PARAVIRTUALIZED",
-        "CUSTOM"
-      ],
-      "defaultValue": "PARAVIRTUALIZED"
-    },
-    "Network.IPv6Only": {
-      "descriptorType": "boolean",
-      "defaultValue": false
-    },
-    "Compute.Firmware": {
-      "descriptorType": "enumstring",
-      "values": [
-        "BIOS",
-        "UEFI_64"
-      ],
-      "defaultValue": "UEFI_64"
-    }
-  }
-}
diff --git a/release/scripts/oracle/image_metadata.json b/release/scripts/oracle/image_metadata.json
deleted file mode 100644
index eaea3dd1cad2..000000000000
--- a/release/scripts/oracle/image_metadata.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-  "version": 2,
-  "externalLaunchOptions": {
-    "firmware": "UEFI_64",
-    "networkType": "PARAVIRTUALIZED",
-    "bootVolumeType": "PARAVIRTUALIZED",
-    "remoteDataVolumeType": "PARAVIRTUALIZED",
-    "localDataVolumeType": "PARAVIRTUALIZED",
-    "launchOptionsSource": "PARAVIRTUALIZED",
-    "pvAttachmentVersion": 2,
-    "pvEncryptionInTransitEnabled": false,
-    "consistentVolumeNamingEnabled": false
-  },
-  "imageCapabilityData": "REPLACE",
-  "imageCapsFormatVersion": "23cfd738-ad9c-4f56-9281-67be6c8cd14c",
-  "operatingSystem": "REPLACE",
-  "operatingSystemVersion": "REPLACE",
-  "additionalMetadata": {
-    "shapeCompatibilities": "REPLACE"
-  }
-}
diff --git a/release/tools/oracle.conf b/release/tools/oracle.conf
deleted file mode 100644
index b289f4e4e7e7..000000000000
--- a/release/tools/oracle.conf
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/bin/sh
-# Set to a list of packages to install.
-export VM_EXTRA_PACKAGES="
-    comms/py-pyserial
-    converters/base64
-    devel/oci-cli
-    devel/py-babel
-    devel/py-iso8601
-    devel/py-pbr
-    devel/py-six
-    ftp/curl
-    lang/python
-    lang/python3
-    net/cloud-init
-    net/py-eventlet
-    net/py-netaddr
-    net/py-netifaces
-    net/py-oauth
-    net/rsync
-    security/ca_root_nss
-    security/sudo@default
-    sysutils/firstboot-freebsd-update
-    sysutils/firstboot-pkgs
-    sysutils/panicmail
-    textproc/jq
-    "
-
-# Should be enough for base image, image can be resized in needed
-export VMSIZE=8g
-
-# Set to a list of third-party software to enable in rc.conf(5).
-export VM_RC_LIST="
-    cloudinit
-    firstboot_pkgs
-    firstboot_freebsd_update
-    growfs
-    ntpd
-    ntpd_sync_on_start
-    sshd
-    zfs"
-
-# Hack for FreeBSD 15.0; should go away before 15.1.
-MISSING_METALOGS="
-./usr/local/etc/cloud/cloud.cfg
-./usr/local/etc/cloud/cloud.cfg.d/05_logging.cfg
-./usr/local/etc/cloud/cloud.cfg.d/99_freebsd.cfg
-./usr/local/etc/pam.d/sudo
-./usr/local/etc/rsync/rsyncd.conf
-./usr/local/etc/ssl/cert.pem
-./usr/local/etc/sudo.conf
-./usr/local/etc/sudo_logsrvd.conf
-./usr/local/etc/sudoers
-"
-
-vm_extra_pre_umount() {
-	cat <<-'EOF' >> ${DESTDIR}/etc/rc.conf
-		dumpdev=AUTO
-EOF
-
-	cat <<-'EOF' >> ${DESTDIR}/boot/loader.conf
-		autoboot_delay="5"
-		beastie_disable="YES"
-		boot_serial="YES"
-		loader_logo="none"
-		cryptodev_load="YES"
-		opensolaris_load="YES"
-		xz_load="YES"
-		zfs_load="YES"
-EOF
-	metalog_add_data ./boot/loader.conf
-
-	cat <<-'EOF' >> ${DESTDIR}/etc/ssh/sshd_config
-		# S11 Configure the SSH service to prevent password-based login
-		PermitRootLogin prohibit-password
-		PasswordAuthentication no
-		KbdInteractiveAuthentication no
-		PermitEmptyPasswords no
-		UseDNS no
-EOF
-
-	 # S14 Root user login must be disabled on serial-over-ssh console
-	 pw -R ${DESTDIR} usermod root -w no
-	 # Oracle requirements override the default FreeBSD cloud-init settings
-	 cat <<-'EOF' >> ${DESTDIR}/usr/local/etc/cloud/cloud.cfg.d/98_oracle.cfg
-		disable_root: true
-		system_info:
-		   distro: freebsd
-		   default_user:
-		     name: freebsd
-		     lock_passwd: True
-		     gecos: "Oracle Cloud Default User"
-		     groups: [wheel]
-		     sudo: ["ALL=(ALL) NOPASSWD:ALL"]
-		     shell: /bin/sh
-		   network:
-		      renderers: ['freebsd']
-EOF
-	metalog_add_data ./usr/local/etc/cloud/cloud.cfg.d/98_oracle.cfg
-
-	# Use Oracle Cloud Infrastructure NTP server
-	sed -i '' -E -e 's/^pool.*iburst/server 169.254.169.254 iburst/' \
-            ${DESTDIR}/etc/ntp.conf
-
-	return 0
-}