Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package agama-installer for openSUSE:Factory checked in at 2025-07-23 16:35:55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/agama-installer (Old) and /work/SRC/openSUSE:Factory/.agama-installer.new.8875 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "agama-installer" Wed Jul 23 16:35:55 2025 rev:17 rq:1294905 version:17.0.0 Changes: -------- --- /work/SRC/openSUSE:Factory/agama-installer/agama-installer.changes 2025-07-01 11:36:15.998573997 +0200 +++ /work/SRC/openSUSE:Factory/.agama-installer.new.8875/agama-installer.changes 2025-07-23 16:39:27.370230623 +0200 @@ -1,0 +2,66 @@ +Mon Jul 21 15:07:42 UTC 2025 - Imobach Gonzalez Sosa <igonzalezs...@suse.com> + +- Version 17 + +------------------------------------------------------------------- +Mon Jul 21 14:12:22 UTC 2025 - Ancor Gonzalez Sosa <an...@suse.com> + +- Disabled udev rules that interfere with the activation process of + libstorage-ng (bsc#1246133 and bsc#1245159). + +------------------------------------------------------------------- +Thu Jul 17 21:51:19 UTC 2025 - Ancor Gonzalez Sosa <an...@suse.com> + +- Masked some systemd services that interfere with the activation + process of libstorage-ng (bsc#1246133). + +------------------------------------------------------------------- +Thu Jul 17 08:08:40 UTC 2025 - Ladislav Slezák <lsle...@suse.com> + +- Added "inst.dud_insecure" boot option for ignoring SSL + certificate problems when downloading DUD from an HTTPS server + (related to bsc#1245393) +- Skip updating kernel module dependencies if the DUD image does + not provide any kernel module + +------------------------------------------------------------------- +Tue Jul 15 16:19:21 UTC 2025 - Ladislav Slezák <lsle...@suse.com> + +- Fixed downloading DUD files from HTTPS URL + (link the SSL certificates and config from the root image) + (bsc#1245393) + +------------------------------------------------------------------- +Mon Jul 14 11:25:22 UTC 2025 - Ladislav Slezák <lsle...@suse.com> + +- Use "plaindir" repository type for the DUD package repository, + we do not need to create any repository index + (gh#agama-project/agama#2543) +- Automatically configure network when a remote DUD is used, + the "rd.neednet=1" boot option is not required anymore + (by default uses the DHCP configuration, can be changed via the + "ip=" boot option) + +------------------------------------------------------------------- +Thu Jul 10 13:09:26 UTC 2025 - Imobach Gonzalez Sosa <igonzalezs...@suse.com> + +- Add support to update kernel modules from a Driver Update Disk + (jsc#AGM-158, jsc#PED-3670, gh#agama-project/agama#2548). + +------------------------------------------------------------------- +Wed Jul 9 12:07:21 UTC 2025 - Imobach Gonzalez Sosa <igonzalezs...@suse.com> + +- Add the tpm2.0-tools package (jsc#PED-13114). + +------------------------------------------------------------------- +Wed Jul 2 13:28:46 UTC 2025 - Eugenio Paolantonio <eugenio.paolanto...@suse.com> + +- live: fix_bootconfig.s390x: strip CDLABEL from the kiwi-generated + grub config (bsc#1245453) + +------------------------------------------------------------------- +Tue Jul 1 15:29:36 UTC 2025 - Bernhard Wiedemann <bwiedem...@suse.com> + +- Make agama-installer build more reproducible (boo#1245501) + +------------------------------------------------------------------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ agama-installer.kiwi ++++++ --- /var/tmp/diff_new_pack.WJxb8s/_old 2025-07-23 16:39:28.118261515 +0200 +++ /var/tmp/diff_new_pack.WJxb8s/_new 2025-07-23 16:39:28.122261680 +0200 @@ -21,7 +21,7 @@ <profile name="Leap_16.0_PXE" description="openSUSE Leap OEM image for remote installation" import="true" /> </profiles> <preferences> - <version>16.0.0</version> + <version>17.0.0</version> <packagemanager>zypper</packagemanager> <locale>en_US</locale> <keytable>us</keytable> @@ -145,7 +145,7 @@ <package name="agama-web-ui"/> <package name="agama-cli"/> <package name="agama-cli-bash-completion"/> - <package name="agama-auto"/> + <package name="agama-autoinstall"/> <package name="rubygem(agama-yast)"/> <package name="rubygem(byebug)"/> <package name="psmisc"/> @@ -157,12 +157,13 @@ <package name="qrencode"/> <package name="qemu-guest-agent" /> <package name="aaa_base-extras"/> - <package name="createrepo_c" /> <!-- it can be used by users in AutoYaST pre-scripts --> <package name="perl-XML-Simple"/> <archive name="live-root.tar.xz"/> <!-- IPMI support --> <package name="ipmitool" /> + <!-- jsc#PED-13114 --> + <package name="tpm2.0-tools" /> </packages> <!-- packages for local installation (desktop, browser, etc.) --> ++++++ config-cdroot.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fix_bootconfig.s390x new/fix_bootconfig.s390x --- old/fix_bootconfig.s390x 2025-06-30 18:04:50.000000000 +0200 +++ new/fix_bootconfig.s390x 2025-07-21 17:15:39.000000000 +0200 @@ -62,6 +62,7 @@ # boot_dir=$dst/boot/s390x +grub_dir=$dst/boot/grub2 # if files are in a 'loader' subdir, move them out if [ -d $boot_dir/loader ] ; then @@ -150,6 +151,12 @@ 'IPL 00C' XXX +# Strip CDLABEL from the kiwi-generated grub configuration +# We are specifying the correct one in /etc/cmdline.d (see config.sh) +# and having it here might be confusing to repackers such as +# mksusecd (bsc#1245453) +sed -i -E 's|root=live:CDLABEL=[^ ]+||g' $grub_dir/grub.cfg + # Note: # # SUSE installer media also have boot/s390x/zpxe.rexx - a rexx script ++++++ config.sh ++++++ --- /var/tmp/diff_new_pack.WJxb8s/_old 2025-07-23 16:39:28.258267297 +0200 +++ /var/tmp/diff_new_pack.WJxb8s/_new 2025-07-23 16:39:28.262267462 +0200 @@ -16,7 +16,7 @@ # kiwi_metainfo_helper service before starting the build mkdir -p /var/log/build cat << EOF > /var/log/build/info -Build date: $(LC_ALL=C date -u "+%F %T %Z") +Build date: $(LC_ALL=C date -u -d "@${SOURCE_DATE_EPOCH:-$(date +%s)}" "+%F %T %Z") Build number: Build%RELEASE% Image profile: $kiwi_profiles Image version: $kiwi_iversion @@ -24,6 +24,11 @@ Source URL: %SOURCEURL% EOF +# for reproducible builds: +echo -n > /var/log/alternatives.log +sed -i 's/# AutoInstalled generated.*/# AutoInstalled generated in kiwi reproducible build/' /var/lib/zypp/AutoInstalled # drop timestamp +rm /var/tmp/rpm-tmp.* + # enable the corresponding repository DISTRO=$(grep "^NAME" /etc/os-release | cut -f2 -d\= | tr -d '"' | tr " " "_") REPO="/etc/zypp/repos.d/agama-${DISTRO}.repo" @@ -54,7 +59,7 @@ systemctl enable agama.service systemctl enable agama-web-server.service systemctl enable agama-dbus-monitor.service -systemctl enable agama-auto.service +systemctl enable agama-autoinstall.service systemctl enable agama-hostname.service systemctl enable agama-proxy-setup.service systemctl enable agama-certificate-issue.path @@ -91,6 +96,13 @@ systemctl disable YaST2-Firstboot.service systemctl disable YaST2-Second-Stage.service +# Prevent premature activation of LVM (bsc#1246133) +systemctl mask lvm2-monitor.service +sed -i 's:# event_activation = 1:event_activation = 0:' /etc/lvm/lvm.conf + +# Prevent premature assembly of MD RAIDs (bsc#1245159) +touch /etc/udev/rules.d/64-md-raid-assembly.rules + # the "eurlatgr" is the default font for the English locale echo -e "\nFONT=eurlatgr.psfu" >> /etc/vconsole.conf ++++++ live-root-PXE.tar.xz ++++++ ++++++ live-root.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usr/bin/agama-dud new/usr/bin/agama-dud --- old/usr/bin/agama-dud 2025-06-30 18:04:50.000000000 +0200 +++ new/usr/bin/agama-dud 1970-01-01 01:00:00.000000000 +0100 @@ -1,27 +0,0 @@ -#!/bin/sh - -# Experimental DUD funtionality for Agama -# -# Usage: inst.dud=URI [inst.dud=URI] -# -# This is a very simple version of the DUD functionality -# - There can be multiple inst.dud=URI entries, but... -# - All of them are considered to be RPMs -# - The script does not check if downloading succeeded -# - Or for any deps of the package -# - Of whether installation/upgrade succeeded -# - Does not restart itself if the script is updated - -# check if there is any DUD -if ! grep -q "\b\(inst\|agama\)\.dud=.\+\b" /run/agama/cmdline.d/agama.conf; then - echo "No DUD present" - exit 0 -fi - -for URI in `sed -n 's/\(.*[[:space:]]\|^\)\(inst\|agama\)\.dud=\([^[:space:]]\+\).*/\3/p' /run/agama/cmdline.d/agama.conf`; do - echo "Downloading DUD from" $URI - TMPDUD=`mktemp /tmp/agama-XXXXXXXXXX.rpm` - agama download $URI $TMPDUD; - rpm --upgrade --force --verbose --hash --noverify --nodeps --excludedocs $TMPDUD - rm $TMPDUD -done diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usr/lib/dracut/modules.d/99agama-dud/agama-dud-apply.sh new/usr/lib/dracut/modules.d/99agama-dud/agama-dud-apply.sh --- old/usr/lib/dracut/modules.d/99agama-dud/agama-dud-apply.sh 2025-06-30 18:04:50.000000000 +0200 +++ new/usr/lib/dracut/modules.d/99agama-dud/agama-dud-apply.sh 2025-07-21 17:15:39.000000000 +0200 @@ -2,7 +2,11 @@ [ -e /dracut-state.sh ] && . /dracut-state.sh +# see /usr/lib/dracut/modules.d/99base/dracut-lib.sh +# or https://github.com/dracut-ng/dracut-ng/blob/main/modules.d/80base/dracut-lib.sh . /lib/dracut-lib.sh +# see /usr/lib/dracut/modules.d/99img-lib/img-lib.sh +# or https://github.com/dracut-ng/dracut-ng/blob/main/modules.d/70img-lib/img-lib.sh . /lib/img-lib.sh DUD_DIR="$NEWROOT/run/agama/dud" @@ -12,22 +16,32 @@ shopt -s nullglob -# Apply all the updates. +# Applies all the updates # -# Read the URL of the updates from $AGAMA_DUD_INFO and process each one. +# Reads the URL of the updates from $AGAMA_DUD_INFO and process each one. apply_updates() { local file local dud_url local dud_root + local options index=0 + # make sure the HTTPS downloads work correctly + configure_ssl + + # ignore SSL problems when the "inst.dud_insecure" or "inst.dud_insecure=1" boot options are present + if getargbool 0 inst.dud_insecure; then + echo "WARNING: Disabling SSL checks in DUD downloads" + options="--insecure" + fi + while read -r dud_url; do mkdir -p "$DUD_DIR" filename=${dud_url##*/} file="${DUD_DIR}/${filename}" # FIXME: use an index because two updates, coming from different places, can have the same name. echo "Fetching a Driver Update Disk from $dud_url to ${file}" - if ! $AGAMA_CLI download "$dud_url" "${file}"; then + if ! $AGAMA_CLI download $options "$dud_url" "${file}"; then warn "Failed to fetch the Driver Update Disk" continue fi @@ -49,8 +63,6 @@ ((index++)) done <$AGAMA_DUD_INFO - - create_repo "$DUD_RPM_REPOSITORY" } # Applies an update from an RPM package @@ -81,6 +93,7 @@ dud_root=$(echo "${dir}/linux/suse/${arch}"-*) install_update "${dud_root}/inst-sys" copy_packages "$dud_root" "$DUD_RPM_REPOSITORY" + update_kernel_modules "$dud_root" } # Extracts an RPM file @@ -98,7 +111,7 @@ popd || exit 1 } -# Applies an update to the installation system. +# Applies an update to the installation system # # Updates are applied by copying files instead of installing packages. For that # reason, it might be needed to do some adjustments "manually", like settings @@ -114,7 +127,7 @@ set_alternative "$dud_dir" "agama-proxy-setup" } -# Sets the alternative links. +# Sets the alternative links set_alternative() { dud_instsys=$1 name=$2 @@ -123,7 +136,7 @@ executables=("$dud_instsys/usr/bin/${name}.ruby"*-*) executable=${executables[0]} - if [ ! -z "$executable" ]; then + if [ -n "$executable" ]; then "$NEWROOT/usr/bin/chroot" "$NEWROOT" /usr/sbin/update-alternatives \ --install "/usr/bin/$name" "$name" "${executable##"$dud_instsys"}" "$priority" "$NEWROOT/usr/bin/chroot" "$NEWROOT" /usr/sbin/update-alternatives \ @@ -136,7 +149,7 @@ # This function is mainly a PoC. # # This is a simplistic version that just copies all the RPMs to the new repository. -# In the future, it might need to put each package under a different respository depending +# In the future, it might need to put each package under a different repository depending # on the distribution (e.g., "/run/agama/dud/repo/tw" for "x86_64-tw"). copy_packages() { dud_dir=$1 @@ -149,11 +162,110 @@ done } -# Creates the repository metadata. -create_repo() { - repo_dir=$1 +# Finds the kernel modules to update +# +# It searches for the modules in the modules/ directory of the update. +find_kernel_modules() { + local directory=$1 + local -n modules=$2 + local module_name + local files + + modules=() + files=("${directory}"/*.ko*) + for module in "${files[@]}"; do + module_name=${module#"${directory}/"} + module_name=${module_name%.ko*} + + if [[ ! " ${modules[*]} " =~ " ${module_name} " ]]; then + modules+=("$module_name") + fi + done + + echo "Found ${#files[@]} kernel modules" +} + +# Copies a kernel module +# +# It searches for a module with the same name. If found, it replaces it. +# Otherwise, it copies the module to the top-level modules directory. +copy_kernel_module() { + local source_dir=$1 + local module=$2 + local target_dir=$3 + local source_file + + echo "Copying ${module}..." + + # expect a single file with $module.ko* name + source_file=("${source_dir}/${module}".ko*) + + old_module=("${target_dir}"/**/*/"${module}".ko*) + if [ "${#old_module[@]}" -eq "1" ]; then + info " Replacing the module ${old_module[0]}" + cp "${source_file[0]}" "${old_module[0]}" + elif [ "${#old_module[@]}" -eq "0" ]; then + info " Not found the module to replace, so copying to kernel/ directory." + cp "${source_file[0]}" "${target_dir}" + else + info " Skipping the module because several modules with the same name were found." + fi +} + +# Updates kernel modules +# +# It copies the kernel modules from the Driver Update Disk to the system under +# /sysroot. If it finds a `module.order` file, it unloads the modules included +# in the list and add them to /etc/modules-load.d/99-agama.conf file so they +# will be loaded by systemd after pivoting. +update_kernel_modules() { + local dud_dir=$1 + local kernel_modules_dir + kernel_modules_dir="${NEWROOT}/lib/modules/$(uname -r)" + local dud_modules_dir="${dud_dir}/modules" + + # find and copy kernel modules + local dud_modules + find_kernel_modules "$dud_modules_dir" dud_modules + + # finish if no kernel module is included in DUD + if (( ${#dud_modules[@]} == 0 )); then + echo "Skipping kernel modules update" + return + fi + + for module in "${dud_modules[@]}"; do + echo "Processing ${module} module" + copy_kernel_module "$dud_modules_dir" "$module" "${kernel_modules_dir}/kernel" + rmmod "${module}" 2>&1 + done + + # unload modules in the module.order file and make sure they will be loaded + if [ -f "${dud_modules_dir}/module.order" ]; then + module_order=$(<"${dud_modules_dir}/module.order") + # unload the modules in reverse order + local idx + idx=("${!module_order[@]}") + for ((i = ${#idx[@]} - 1; i >= 0; i--)); do + rmmod "${module_order[$i]}" 2>&1 + done + + cp "${dud_modules_dir}/module.order" "${NEWROOT}/etc/modules-load.d/99-agama.conf" + fi + + # update modules dependencies on the live medium + info "Updating modules dependencies..." + depmod -a -b "$NEWROOT" +} + +# link the SSL certificates and related configuration from the root image so "agama download" +# works correctly with the HTTPS resources (expects using correct and well-known certificates) +configure_ssl() { + # link the SSL certificates + ! [ -d /etc/ssl ] && ln -s "$NEWROOT/etc/ssl" /etc - "$NEWROOT/usr/bin/chroot" "$NEWROOT" createrepo_c "${repo_dir##"$NEWROOT"}" + # link crypto configuration (which ciphers are allowed, etc) + ! [ -d /etc/crypto-policies ] && ln -s "$NEWROOT/etc/crypto-policies" /etc } if [ -f "$AGAMA_DUD_INFO" ]; then diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usr/lib/dracut/modules.d/99agama-dud/agama-dud-parser.sh new/usr/lib/dracut/modules.d/99agama-dud/agama-dud-parser.sh --- old/usr/lib/dracut/modules.d/99agama-dud/agama-dud-parser.sh 2025-06-30 18:04:50.000000000 +0200 +++ new/usr/lib/dracut/modules.d/99agama-dud/agama-dud-parser.sh 2025-07-21 17:15:39.000000000 +0200 @@ -10,6 +10,18 @@ updates=$(getargs inst.dud=) if [ -n "$updates" ]; then echo "$updates" >/tmp/agamadud.info + + # automatically configure network when a remote DUD is used, + # check for all remote URL scheme supported by the "agama download" + # (anything supported by the curl backend https://everything.curl.dev/protocols/curl.html), + # because it can match everywhere in the text it also matches the tftp:// and sftp:// + if grep -q -s -E -e "https?://" -e "ftps?://" -e "smbs?://" -e "scp://" /tmp/agamadud.info; then + echo "rd.neednet=1" > /etc/cmdline.d/agama-generated.conf + # use DHCP if there is no network configuration provided by user + if ! getarg "ip="; then + echo "ip=dhcp" >> /etc/cmdline.d/agama-generated.conf + fi + fi fi }