Skip to content

Commit

Permalink
Merge pull request #5802 from jkonecny12/master-enhance-rebuild-scripts
Browse files Browse the repository at this point in the history
Enhance rebuild_boot_iso script
  • Loading branch information
jkonecny12 authored Aug 6, 2024
2 parents afb4fac + b1ee89f commit 5aa7f3d
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 31 deletions.
14 changes: 8 additions & 6 deletions CONTRIBUTING.rst
Original file line number Diff line number Diff line change
Expand Up @@ -150,12 +150,12 @@ Local development workflow
^^^^^^^^^^^^^^^^^^^^^^^^^^

This workflow makes it possible to test changes to the Anaconda source code locally on your machine without any dependencies
on external infrastructure. It uses two scripts, one called ``scripts/rebuild_boot_iso`` to build a fresh bootable installation image (boot.iso)
from Anaconda source code on the given branch and corresponding Fedora/CentOS Stream packages. The second script, called ``scripts/update_boot_iso``
on external infrastructure. It uses two scripts, one called ``scripts/testing/rebuild_iso`` to build a fresh bootable installation image
from Anaconda source code on the given branch and corresponding Fedora/CentOS Stream packages. The second script, called ``scripts/testing/update_iso``
uses the Anaconda updates image mechanism together with the ``mkksiso`` command provided by the Lorax project to very quickly
create an updated version of the boot.iso when Anaconda code is changed. The updated boot.iso can then be booted on a VM or bare metal.

The ``rebuild_boot_iso`` script
The ``rebuild_iso`` script
"""""""""""""""""""""""""""""""

This is just a simple script that rebuilds the boot.iso from Anaconda source code on the current branch & corresponding Fedora
Expand All @@ -164,17 +164,19 @@ and also records Anaconda Git revision that was used to build the image.

This should take about 15 minutes on modern hardware.

The ``update_boot_iso`` script
See --help for further information.

The ``update_iso`` script
""""""""""""""""""""""""""""""

This is the main script that enables local development by quickly updating a boot iso with local changes.
This should take a couple seconds on modern hardware.

For the most common use case ("I have changed the Anaconda source and want to see what it does.") just do this:

1. run ``scripts/rebuild_boot_iso`` first, this creates ``result/iso/boot.iso``
1. run ``scripts/testing/rebuild_iso`` first, this creates ``result/iso/boot.iso``
2. change the Anaconda source code
3. run ``scripts/update_boot_iso`` which creates the ``result/iso/updated_boot.iso``
3. run ``scripts/testing/update_iso`` which creates the ``result/iso/updated_boot.iso``
4. start the ``result/iso/updated_boot.iso`` in a VM or on bare metal

The script also has a few command line options that might come handy:
Expand Down
24 changes: 0 additions & 24 deletions scripts/rebuild_boot_iso

This file was deleted.

80 changes: 80 additions & 0 deletions scripts/testing/rebuild_iso
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
#!/bin/bash
#
# rebuild_boot_iso
#
# This script is used to cleanly rebuild boot.iso from the current
# checked out branch.
#
# ask for sudo now, so we have it when we get to the image build
set -eu

help() {
cat <<EOF
This script will build the anaconda RPMs and then build boot.iso
or Live ISO from these.
Before starting the build it will remove all the previous build
artifacts.
Usage:
Start the build process:
$0 [options]
Options:
-h, --help Print this help
-a, --add-rpms Add additional RPMs (for example anaconda-webui package)
these packages have to be already requested to be in ISO
-l, --live Build Live ISO instead of boot.iso
EOF
}

BOOT_ISO="result/iso/boot.iso"
PACKAGES_DIR="result/build/01-rpm-build/"
UPDATED_BOOT_ISO="result/iso/boot.iso.git_rev"
BOOT_ISO_GIT_REVISION="result/iso/boot.iso.git_rev"

BUILD_TARGET="boot.iso"

COPY_RPMS=""

# parse arguments
eval set -- "$(getopt -o ha:l --long help,add-rpms:,live -- "$@")"

while true; do
case "${1:-}" in
-h|--help) help; exit 0 ;;
-a|--add-rpms) shift; COPY_RPMS="$COPY_RPMS $1" ;;
-l|--live) BUILD_TARGET="live" ;;
--) shift; break ;;
esac
shift
done

echo "warming up sudo!"
sudo true
# remove any previous package and relevant iso artifacts
rm -rf result/build/
rm -f ${BOOT_ISO}
rm -f ${UPDATED_BOOT_ISO}
rm -f ${BOOT_ISO_GIT_REVISION}
# make sure the iso folder actually exists
mkdir -p result/iso/
# note the Git revision from which we build the boot.iso
git rev-parse HEAD > result/iso/boot.iso.git_rev

# build the anaconda rpms
make -f ./Makefile.am container-rpms-scratch

# copy additional web UI packages
for i in $COPY_RPMS; do
cp "$i" "$PACKAGES_DIR"
done

# build the ISO
if [ "$BUILD_TARGET" = "boot.iso" ]; then
make -f ./Makefile.am anaconda-iso-creator-build
make -f ./Makefile.am container-iso-build
elif [ "$BUILD_TARGET" = "live" ]; then
make -f ./Makefile.am anaconda-live-iso-creator-build
make -f ./Makefile.am container-live-iso-build
fi
6 changes: 5 additions & 1 deletion scripts/update_boot_iso → scripts/testing/update_iso
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,11 @@ import sys
import subprocess

# Absolute path to the main project directory
PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJECT_DIR = os.path.dirname(
os.path.dirname(
os.path.dirname(os.path.abspath(__file__))
)
)

# Relative path to the ISO folder within the project
ISO_FOLDER = os.path.join(PROJECT_DIR, "result", "iso")
Expand Down

0 comments on commit 5aa7f3d

Please sign in to comment.