On 10/28/2026 3:00 PM, Fabiano Rosas wrote:
> Pierrick Bouvier <[email protected]> writes:
> 
>> This script allows to easily build a qemu release container, based on
>> dockerfile introduced in previous commit.
>>
>> It names image "qemu/$version" and automatically detects which ubuntu
>> version should be used to build it.
>>
>> $ ./scripts/build_release_container.sh v3.1.0
>> $ podman run -it --rm qemu/v3.1.0 qemu-system-arm --version
>> QEMU emulator version 3.1.0 (-dirty)
>> Copyright (c) 2003-2018 Fabrice Bellard and the QEMU Project developers
>>
>> Signed-off-by: Pierrick Bouvier <[email protected]>
>> ---
>>  scripts/build_release_container.sh | 63 ++++++++++++++++++++++++++++++
>>  1 file changed, 63 insertions(+)
>>  create mode 100755 scripts/build_release_container.sh
>>
>> diff --git a/scripts/build_release_container.sh 
>> b/scripts/build_release_container.sh
>> new file mode 100755
>> index 00000000000..ae57aa21db3
>> --- /dev/null
>> +++ b/scripts/build_release_container.sh
>> @@ -0,0 +1,63 @@
>> +#!/usr/bin/env bash
>> +# SPDX-License-Identifier: GPL-2.0-or-later
>> +
>> +set -euo pipefail
>> +
>> +script_dir=$(dirname $(readlink -f $0))
>> +
>> +# The oldest buildable release we support is v3.1.0, as previous ones 
>> require
>> +# additional tweaks in Dockerfile.
>> +# For building previous releases (down to v0.12.0),
>> +# see: [email protected]
>> +oldest_release=v3.1.0
>> +
>> +if [ $# -lt 1 ] || [ $# -gt 2 ]; then
>> +    echo "usage: version [git_repo]"
>> +    echo
>> +    echo "- version: tag or sha-1 (>= v3.1.0)"
>> +    echo "- git_repo: (optional) QEMU repository URL"
>> +    exit 1
>> +fi
>> +version=$1;shift
>> +
>> +git_repo="https://gitlab.com/qemu-project/qemu.git";
>> +if [ $# -eq 1 ]; then
>> +    git_repo=$1;shift
>> +fi
>> +
>> +year=$(date +%Y)
>> +month=$(date +%m)
>> +if git rev-parse $version >& /dev/null; then
>> +    year=$(git log -1 --format='%cd' --date='format:%Y' $version)
>> +    month=$(git log -1 --format='%cd' --date='format:%m' $version)
>> +fi
>> +
>> +# Ubuntu LTS are published every (even) two years in April.
>> +ubuntu=
>> +if [ $((year % 2)) -eq 1 ]; then
>> +    # pick latest LTS from previous year
>> +    ubuntu=$((year - 1))
>> +elif [ $month -gt 6 ]; then
>> +    # LTS published this year should work
>> +    ubuntu=$year
>> +else
>> +    # pick latest LTS from two years ago
>> +    ubuntu=$((year - 2))
>> +fi
>> +if [ $ubuntu -lt 2014 ]; then
>> +    # oldest ubuntu release available with containers is 14.04
>> +    ubuntu=2014
>> +fi
>> +ubuntu=$((ubuntu - 2000))
>> +ubuntu_version=$ubuntu.04
>> +
>> +dockerfile=$script_dir/../tests/docker/dockerfiles/release.docker
>> +docker=$($script_dir/../tests/docker/docker.py probe)
> 
> For docker this gives:
> 
>  ERROR: docker: 'docker buildx build' requires 1 argument                     
>                                                                               
>                    
>  Usage:  docker buildx build [OPTIONS] PATH | URL | -
> 
> I think it expects a . or - since the dockerfile is passed with -f
> below. Going back to
> 
>   docker=$script_dir/../tests/docker/docker.py
> 
> makes it work.
>

Thanks for catching it, fixed by adding context with '.'.

I switched to direct call because our cache mechanism does not allow to
change build args for a given tag.

>> +
>> +set -x
>> +$docker build \
>> +    -f $dockerfile \
>> +    --build-arg QEMU_VERSION=$version \
>> +    --build-arg UBUNTU_VERSION=$ubuntu_version \
>> +    --build-arg QEMU_REPO="$git_repo" \
>> +    -t qemu/$version


Reply via email to