Hi,
I want to build VM images from source, the same ones that are here:
- https://download.freebsd.org/releases/VM-IMAGES/15.0-RELEASE/amd64/Latest/
What I did:
host # pkg install gitup
host # vi /usr/local/etc/gitup.conf
host # grep -A 7 release /usr/local/etc/gitup.conf
"release" : {
"repository_path" : "/src.git",
"branch" : "releng/15.0",
"target_directory" : "/usr/src",
"ignores" : [
"sys/[^\/]+/conf",
],
},
host # gitup release
# Host: git.freebsd.org
# Port: 443
# Repository Path: /src.git
# Target Directory: /usr/src
# Want: 0730d5233286ff35e9fa83309faa1b2d52fe9a65
# Branch: releng/15.0
# Action: clone
+ /usr/src/.arcconfig
+ /usr/src/.arclint
+ /usr/src/.cirrus-ci/pkg-install.sh
(...)
+ /usr/src/usr.sbin/zzz/Makefile.depend
+ /usr/src/usr.sbin/zzz/zzz.8
+ /usr/src/usr.sbin/zzz/zzz.sh
#
# Please review the following file(s) for important changes.
# /usr/src/UPDATING
#
# Done.
host # gitup ports
# Host: git.freebsd.org
# Port: 443
# Repository Path: /ports.git
# Target Directory: /usr/ports
# Want: 799ba8473b623f60d69693f6338fdefdb7d9b298
# Branch: main
# Host: git.freebsd.org/s now
# Port: 443
# Repository Path: /src.git
# Target Directory: /usr/src
# Want: 0730d5233286ff35e9fa83309faa1b2d52fe9a65
# Branch: releng/15.0
(...)
# Done.
host # cd /usr/src
host # make -j 24 buildworld buildkernel
(...)
--------------------------------------------------------------
>>> Kernel build for GENERIC completed on Wed Apr 8 01:15:27 CEST
2026
--------------------------------------------------------------
>>> Kernel(s) GENERIC built in 147 seconds, ncpu: 72, make -j24
--------------------------------------------------------------
host # cd /usr/src
host # make update-packages
host # cd /usr/src/release
host # cp release.conf.sample custom.conf
host #:/usr/src/release # cat custom.conf
#!/bin/sh
# DIRECTORY WITHIN WHICH RELEASE WILL BE BUILT
CHROOTDIR="/scratch"
# VERSION CONTROL SYSTEM
GITROOT="https://git.freebsd.org/";
GITSRC="src.git"
GITPORTS="ports.git"
# SET src/ports/doc BRANCHES
SRCBRANCH="release/15"
PORTBRANCH="main"
# TARGET ARCHITECTURE
TARGET="amd64"
TARGET_ARCH="amd64"
KERNEL="GENERIC"
# SPECIFY CUSTOM make.conf AND/OR src.conf
# MAKE_CONF="/etc/local/make.conf"
# SRC_CONF="/etc/local/src.conf"
# USE make(1) FLAGS
# MAKE_FLAGS="-s"
# WORLD_FLAGS="-j $(nproc)"
# KERNEL_FLAGS="-j $(nproc)"
# MISCELLANEOUS 'make release' SETTINGS
# NOPORTS=
# NOSRC=
# WITH_DVD=
# WITH_COMPRESSED_IMAGES=
# SET '1' TO DISABLE MULTI THREADED xz(1) COMPRESSION
# XZ_THREADS=0
# SET TO NON-EMPTY VALUE TO SKIP CHECKOUT /usr/src IN chroot(8)
# INTENDED FOR USE WHEN /usr/src ALREADY EXISTS
SRC_UPDATE_SKIP=skip
# SET TO NON-EMPTY VALUE TO SKIP CHECKOUT /usr/ports in chroot(8)
# INTENDED FOR USE WHEN /usr/ports ALREADY EXISTS
PORTS_UPDATE_SKIP=skip
# SET TO NON-EMPTY VALUE TO BUILD VM IMAGES
WITH_VMIMAGES=yes
# SET TO NON-EMPTY VALUE TO COMPRESS VM IMAGES WITH xz(1)
# WITH_COMPRESSED_VMIMAGES=
# IF 'WITH_VMIMAGES' SET - USE FOR NAME OF VM FILE
VMBASE="custom-vm"
# IF 'WITH_VMIMAGES' SET - SET SIZE OF VM FILE
VMSIZE="10g"
# IF 'WITH_VMIMAGES' SET - SET NEEDED FORMATS
VMFORMATS="vhdf vmdk qcow2 raw"
# SET TO NON-EMPTY VALUE TO BUILD CLOUD VMS
# WITH_CLOUDWARE=yes
# IF 'WITH_CLOUDWARE' set - SPECIFY CLOUD PROVIDERS
# CLOUDWARE="EC2 GCE ORACLE VAGRANT-VIRTUALBOX VAGRANT-VMWARE"
# IF 'WITH_OCIIMAGES' SET BUILD 'Open Container
Initiative' (OCI) IMAGES
# WITH_OCIIMAGES=
# USE pkgbase(7) OR NOT
WITH_PKGBASE=yes
host # pkg install pkg-provides
host # cat << EOF >> /usr/local/etc/pkg.conf
PKG_PLUGINS_DIR = "/usr/local/lib/pkg/";
PKG_ENABLE_PLUGINS = true;
PLUGINS [ provides ];
EOF
host # pkg plugins
NAME DESC VERSION
provides A plugin for querying which package provides a particular file
0.7.4
host # pkg update -f
Now ...
This command exists with (0) exit status w/o doing anything:
host # make release.conf=custom.conf vm-release
Same for these:
host # make release.conf=custom.conf vm-image
host # make release.conf=custom.conf vm-images
I even traced with truss(1) what binaries are missing and found them and
installed them:
host # truss make release.conf=custom.conf vm-release 2>&1 | grep 'No such' |
grep bin/ | awk -F '"' '{print $2}' | while read I; do pkg provides "${I}$";
done
Name : git-tiny-2.53.0
Comment : Distributed source code management tool (tiny flavor)
Repo : FreeBSD-ports
Filename: usr/local/bin/git
Name : git-lite-2.53.0
Comment : Distributed source code management tool (lite flavor)
Repo : FreeBSD-ports
Filename: usr/local/bin/git
Name : git-2.53.0
Comment : Distributed source code management tool
Repo : FreeBSD-ports
Filename: usr/local/bin/git
Name : py311-azure-cli-2.55.0_6
Comment : Microsoft Azure Command-Line Tools
Repo : FreeBSD-ports
Filename: usr/local/bin/az
Name : bsdec2-image-upload-1.4.10
Comment : Tool for creating Amazon EC2 AMIs
Repo : FreeBSD-ports
Filename: usr/local/bin/bsdec2-image-upload
Name : bsdec2-image-upload-1.4.10
Comment : Tool for creating Amazon EC2 AMIs
Repo : FreeBSD-ports
Filename: usr/local/bin/bsdec2-image-upload
Name : google-cloud-sdk-563.0.0
Comment : Google Cloud SDK for Google Cloud Platform
Repo : FreeBSD-ports
Filename: usr/local/bin/gcloud
Name : qemu-tools-10.2.2
Comment : QEMU CPU Emulator (tools only)
Repo : FreeBSD-ports
Filename: usr/local/bin/qemu-img
Name : qemu-nox11-10.2.2
Comment : QEMU CPU Emulator (without X11)
Repo : FreeBSD-ports
Filename: usr/local/bin/qemu-img
Name : qemu-devel-10.1.20251130_1
Comment : QEMU CPU Emulator - development version
Repo : FreeBSD-ports
Filename: usr/local/bin/qemu-img
Name : qemu-10.2.2
Comment : QEMU CPU Emulator
Repo : FreeBSD-ports
Filename: usr/local/bin/qemu-img
Name : qemu-tools-10.2.2
Comment : QEMU CPU Emulator (tools only)
Repo : FreeBSD-ports
Filename: usr/local/bin/qemu-img
Name : qemu-nox11-10.2.2
Comment : QEMU CPU Emulator (without X11)
Repo : FreeBSD-ports
Filename: usr/local/bin/qemu-img
Name : qemu-devel-10.1.20251130_1
Comment : QEMU CPU Emulator - development version
Repo : FreeBSD-ports
Filename: usr/local/bin/qemu-img
Name : qemu-10.2.2
Comment : QEMU CPU Emulator
Repo : FreeBSD-ports
Filename: usr/local/bin/qemu-img
Name : git-tiny-2.53.0
Comment : Distributed source code management tool (tiny flavor)
Repo : FreeBSD-ports
Filename: usr/local/bin/git
Name : git-lite-2.53.0
Comment : Distributed source code management tool (lite flavor)
Repo : FreeBSD-ports
Filename: usr/local/bin/git
Name : git-2.53.0
Comment : Distributed source code management tool
Repo : FreeBSD-ports
Filename: usr/local/bin/git
host # pkg install git py311-azure-cli bsdec2-image-upload google-cloud-sdk
qemu-nox11
The 'make release' works:
host # make -j 24 release.conf=custom.conf release
(...)
--- memstick.img ---
192, 1760768
Populating `../memstick.img.part'
Image `../memstick.img.part' complete
Creating `/tmp/efiboot.bfoUNW'
/tmp/efiboot.bfoUNW: 65528 sectors in 65528 FAT32 clusters (512
bytes/cluster)
BytesPerSec=512 SecPerClust=1 ResSectors=32 FATs=2 Media=0xf0
SecPerTrack=63 Heads=255 HiddenSecs=0 HugeSectors=66584 FATsecs=512
RootCluster=2 FSInfo=1 Backup=2
Populating `/tmp/efiboot.bfoUNW'
Image `/tmp/efiboot.bfoUNW' complete
--- disc1.iso ---
1+0 records in
1+0 records out
32768 bytes transferred in 0.000102 secs (321466061 bytes/sec)
--- release ---
make -C /usr/src/release -j 24 -J 15,16 release-done
--- release-done ---
touch release
true
... but the VMIMAGES are not built ... or maybe I am doing something wrong.
The contents in /usr/src/release/Makefile and release(7) are alsoe different.
Please advice.
Thanks,
vermaden