• Building VM-IMAGE(s) from Source

    From vermaden@vermaden@interia.pl to muc.lists.freebsd.stable on Thu Apr 9 00:34:51 2026
    From Newsgroup: muc.lists.freebsd.stable

    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
    --
    Posted automagically by a mail2news gateway at muc.de e.V.
    Please direct questions, flames, donations, etc. to news-admin@muc.de
    --- Synchronet 3.21f-Linux NewsLink 1.2
  • From Colin Percival@cperciva@tarsnap.com to muc.lists.freebsd.stable on Wed Apr 8 22:46:20 2026
    From Newsgroup: muc.lists.freebsd.stable

    On 4/8/26 15:34, vermaden wrote:
    host # make -j 24 release.conf=custom.conf release

    You want WITH_VMIMAGES=YES.
    --
    Colin Percival
    FreeBSD Release Engineering Lead & EC2 platform maintainer
    Founder, Tarsnap | www.tarsnap.com | Online backups for the truly paranoid



    --
    Posted automagically by a mail2news gateway at muc.de e.V.
    Please direct questions, flames, donations, etc. to news-admin@muc.de
    --- Synchronet 3.21f-Linux NewsLink 1.2