mirror of
https://github.com/opnsense/src.git
synced 2026-02-18 18:20:26 -05:00
- requires base tar & flua, qemu-tools & curl from ports - set ORACLE_PAR_URL to upload to local file:/// dir or cloud buckets Reviewed by: emaste Approved by: cperciva Differential Revision: https://reviews.freebsd.org/D48382 Sponsored by: SkunkWerks, GmbH (cherry picked from commit 0ce9a414adc33af29607adbd81e0760e014fcd76)
101 lines
4.1 KiB
Makefile
101 lines
4.1 KiB
Makefile
#D48382
|
|
# 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/}
|
|
ORACLE_PORTS_LIST= ftp/curl emulators/qemu@tools
|
|
CLEANFILES+= cw-oracle-portinstall
|
|
|
|
cw-oracle-portinstall: .PHONY
|
|
.if !exists(/usr/local/bin/curl) || !exists(/usr/local/bin/qemu-img)
|
|
. if !exists(${PORTSDIR}/Makefile)
|
|
. if !exists(/usr/local/sbin/pkg-static)
|
|
env ASSUME_ALWAYS_YES=yes pkg bootstrap -yf
|
|
. endif
|
|
env ASSUME_ALWAYS_YES=yes pkg install -y ${ORACLE_PORTS_LIST}
|
|
. else
|
|
env UNAME_r=${UNAME_r} make -C \
|
|
${PORTSDIR}/ftp/curl \
|
|
BATCH=1 WRKDIRPREFIX=/tmp/ports DISTDIR=/tmp/distfiles \
|
|
all install clean
|
|
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}
|