From 728095762a201339dcadf0cb9e6c38c4676ba091b9dd7c4cc9c1ef1bd9ae007e Mon Sep 17 00:00:00 2001 From: Lubos Kocman Date: Mon, 24 Jun 2024 13:28:57 +0200 Subject: [PATCH] add agama-live image --- agama-live/README.md | 35 ++++++ agama-live/_constraints | 7 ++ agama-live/_multibuild | 4 + agama-live/agama-live.changes | 183 ++++++++++++++++++++++++++++++++ agama-live/agama-live.kiwi | 139 ++++++++++++++++++++++++ agama-live/config-cdroot.tar.xz | Bin 0 -> 2588 bytes agama-live/config.sh | 172 ++++++++++++++++++++++++++++++ agama-live/fix_bootconfig | 89 ++++++++++++++++ agama-live/images.sh | 19 ++++ agama-live/root.tar.xz | Bin 0 -> 10212 bytes 10 files changed, 648 insertions(+) create mode 100644 agama-live/README.md create mode 100644 agama-live/_constraints create mode 100644 agama-live/_multibuild create mode 100644 agama-live/agama-live.changes create mode 100644 agama-live/agama-live.kiwi create mode 100644 agama-live/config-cdroot.tar.xz create mode 100644 agama-live/config.sh create mode 100644 agama-live/fix_bootconfig create mode 100644 agama-live/images.sh create mode 100644 agama-live/root.tar.xz diff --git a/agama-live/README.md b/agama-live/README.md new file mode 100644 index 0000000..4922bbc --- /dev/null +++ b/agama-live/README.md @@ -0,0 +1,35 @@ +# Live ISO + +This directory contains a set of files that are used to build the Agama Live ISO +image. + +## Sources + +The sources are maintained in the [Agama Git +repository](https://github.com/openSUSE/agama/tree/master/live) repository. + +## Building the ISO + +To build the ISO locally run the + +```shell +osc build -M images +``` + +command. See the [_multibuild](_multibuild) file for the list of configured +build flavors. To build for example the openSUSE flavor run this command: + +```shell +osc build -M openSUSE images +``` + +Note: For building an ISO image you need a lot of free space at the `/var` +partition. Make sure there is at least 25GiB free space otherwise the build +might fail. + +## Changes + +Please *do not* change any file in the OBS repository. The files are +automatically uploaded from the [Agama Git +repository](https://github.com/openSUSE/agama/tree/master/live), your manual +changes will be lost at the next update. diff --git a/agama-live/_constraints b/agama-live/_constraints new file mode 100644 index 0000000..7e25096 --- /dev/null +++ b/agama-live/_constraints @@ -0,0 +1,7 @@ + + + + 25 + + + diff --git a/agama-live/_multibuild b/agama-live/_multibuild new file mode 100644 index 0000000..0b3f13e --- /dev/null +++ b/agama-live/_multibuild @@ -0,0 +1,4 @@ + + openSUSE + openSUSE-Playwright + diff --git a/agama-live/agama-live.changes b/agama-live/agama-live.changes new file mode 100644 index 0000000..d971b05 --- /dev/null +++ b/agama-live/agama-live.changes @@ -0,0 +1,183 @@ +------------------------------------------------------------------- +Fri Jun 14 10:36:52 UTC 2024 - Ladislav Slezák + +- Experimental Agama self-update (gh#openSUSE/agama#1341) + +------------------------------------------------------------------- +Thu Jun 13 16:07:08 UTC 2024 - Ladislav Slezák + +- Added Tumbleweed OSS and Agama Staging repositories to the Live + system itself (gh#openSUSE/agama#1332) + +------------------------------------------------------------------- +Tue Jun 11 21:39:51 UTC 2024 - Imobach Gonzalez Sosa + +- Add the jq package to the image (gh#openSUSE/agama#1314). + +------------------------------------------------------------------- +Thu Jun 6 14:30:19 UTC 2024 - Ladislav Slezák + +- Automatically generate the root password (gh#openSUSE/agama#1292) +- Allow setting the default root password in ISO metadata + (gh#openSUSE/agama#1290) +- Alloe setting teh root password from boot command line or set + it interactively during boot (gh#openSUSE/agama#1288) + +------------------------------------------------------------------- +Wed Jun 5 15:40:43 UTC 2024 - Knut Anderssen + +- Fix the cd.ikr content for booting the s390x iso + (gh#openSUSE/agama#1289). + +------------------------------------------------------------------- +Tue May 21 10:38:39 UTC 2024 - Imobach Gonzalez Sosa + +- Add the procps4 package to the image (gh#openSUSE/agama#1245). + +------------------------------------------------------------------- +Fri May 17 09:52:27 UTC 2024 - Imobach Gonzalez Sosa + +- Version 8 + +------------------------------------------------------------------- +Fri Feb 9 16:16:29 UTC 2024 - Ladislav Slezák + +- Image size reduced: + - Removed translations and locale definitions for unsupported + languages, removed translations for unused tools + - Removed sound card and TV card drivers (not needed for the installer) + - Removed alsa packages + - Removed unused firmware files +- Require 25GB disk space for build (PXE build might fail with + just 20GB) + +------------------------------------------------------------------- +Thu Feb 1 08:27:29 UTC 2024 - Josef Reidinger + +- Improve multipath experience: preload kernel module and set probing + to smart option (bsc#1215598) + +------------------------------------------------------------------- +Thu Dec 21 15:43:06 UTC 2023 - Imobach Gonzalez Sosa + +- Version 7 + +------------------------------------------------------------------- +Mon Dec 4 16:03:08 UTC 2023 - José Iván López González + +- Remove dependencies included by Agama packages (related to + gh#openSUSE/agama#911). + +------------------------------------------------------------------- +Fri Dec 1 14:23:09 UTC 2023 - Imobach Gonzalez Sosa + +- Version 6 + +------------------------------------------------------------------- +Mon Nov 13 18:02:39 UTC 2023 - Josef Reidinger + +- Use by default zram to allow having 2GiB memory requirements + (jsc#PED-7303) + +------------------------------------------------------------------- +Mon Nov 6 08:30:01 UTC 2023 - Marcus Schäfer + +- Fix s390 PXE build by using 'custom' bootloader for s390 target + There is an error inside grub2-zipl-setup which calls zipl that + then complains with "Unable to create temporary device node: No such device or address". + We don't see this issue with zipl in the kiwi integration test from here: + https://build.opensuse.org/project/show/Virtualization:Appliances:Images:Testing_s390:tumbleweed + Thus I don't think it's an issue with kiwi but most probably a conflict + between the zipl setup and the raw btrfs filesystem usage in this case. + Long story short, the zipl issue needs extra inspection and the fix + here is simple because we actually don't need a bootloader to be installed + into the disk image because it is expected to be deployed via a remote + boot infrastructure. Therefore this change disables the bootloader + install for s390 by setting the attribute: bootloader="custom" + +------------------------------------------------------------------- +Tue Oct 24 08:04:07 UTC 2023 - Marcus Schäfer + +- Add new profile ALP-PXE which builds a variant of the agama + installer that is an oem disk image which can be remote deployed + into a ramdisk to boot into the agama installation. The size constraints + are similar to the live-iso size. For more details please refer + to README.pxe + +---------------------------------------------------------------------------- +Mon Oct 23 12:03:55 UTC 2023 - Imobach González Sosa + +- Add adobe-sourcehansans-jp-fonts +- Version 5 + +---------------------------------------------------------------------------- +Thu Oct 19 20:19:11 UTC 2023 - Imobach González Sosa + +- Add libstorage-ng translations + +---------------------------------------------------------------------------- +Wed Sep 27 08:45:26 UTC 2023 - Imobach González Sosa + +- Version 4 + +---------------------------------------------------------------------------- +Tue Sep 26 07:55:34 UTC 2023 - Imobach González Sosa + +- Clean-up zypper logs + +---------------------------------------------------------------------------- +Tue Sep 26 05:28:35 UTC 2023 - Imobach González Sosa + +- Added nvme-cli requested by https://bugzilla.suse.com/show_bug.cgi?id=1215572 + +---------------------------------------------------------------------------- +Wed Aug 30 09:44:04 UTC 2023 - Imobach González Sosa + +- Add microos-tools package and enable proxy setup services. + +---------------------------------------------------------------------------- +Tue Aug 29 09:19:26 UTC 2023 - Imobach González Sosa + +- Enable ppc64le images + +---------------------------------------------------------------------------- +Thu Aug 03 10:23:49 UTC 2023 - Imobach González Sosa + +- Disable building the ALP image for ppc64le + +---------------------------------------------------------------------------- +Wed Aug 02 10:37:21 UTC 2023 - Imobach González Sosa + +- Version 3 + +---------------------------------------------------------------------------- +Tue Aug 01 09:56:42 UTC 2023 - Imobach González Sosa + +- Replace "default" flavor with a new "openSUSE" flavor that only includes + openSUSE-based products. +- Replace ALP-build-key with suse-build-key. + +---------------------------------------------------------------------------- +Mon Jul 31 11:34:26 UTC 2023 - Imobach González Sosa + +- Replace ALP-build-key with suse-build-key + +---------------------------------------------------------------------------- +Tue Jul 25 14:43:39 UTC 2023 - José Iván López González + +- Update filtering + +---------------------------------------------------------------------------- +Wed Jul 05 08:27:33 UTC 2023 - Imobach González Sosa + +- Bump version to match Agama + +---------------------------------------------------------------------------- +Thu Jun 08 14:12:15 UTC 2023 - Josef Reidinger + +- add to live image also dbus services written in rust + +---------------------------------------------------------------------------- +Thu Jun 01 14:05:13 UTC 2023 - Ladislav Slezák + +- osc copypac from project:YaST:Head:Agama package:agama-live revision:13 diff --git a/agama-live/agama-live.kiwi b/agama-live/agama-live.kiwi new file mode 100644 index 0000000..fd295db --- /dev/null +++ b/agama-live/agama-live.kiwi @@ -0,0 +1,139 @@ + + + + + + + YaST Team + yast2-maintainers@suse.de + Agama Live ISO + + + + + + + 8.0.0 + zypper + en_US + us + Europe/Berlin + true + false + bgrt + openSUSE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/agama-live/config-cdroot.tar.xz b/agama-live/config-cdroot.tar.xz new file mode 100644 index 0000000000000000000000000000000000000000000000000000000000000000..93f851aa16d8c691b4abc6635b05d70c007a8ccbe7f91d47553d419056e1e901 GIT binary patch literal 2588 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 literal 0 HcmV?d00001 diff --git a/agama-live/config.sh b/agama-live/config.sh new file mode 100644 index 0000000..d83b48b --- /dev/null +++ b/agama-live/config.sh @@ -0,0 +1,172 @@ +#! /bin/bash + +set -ex + +# KIWI functions +test -f /.kconfig && . /.kconfig +test -f /.profile && . /.profile + +# greeting +echo "Configure image: [$kiwi_iname]..." + +# setup baseproduct link +suseSetupProduct + +# configure the repositories in the Live system +# import the OBS key for the systemsmanagement OBS project +rpm --import /tmp/systemsmanagement_key.gpg +rm /tmp/systemsmanagement_key.gpg +# import the openSUSE keys +rpm --import /usr/lib/rpm/gnupg/keys/*.asc + +# activate services +systemctl enable sshd.service +systemctl enable NetworkManager.service +systemctl enable avahi-daemon.service +systemctl enable agama.service +systemctl enable agama-web-server.service +systemctl enable agama-auto.service +systemctl enable agama-hostname.service +systemctl enable agama-proxy-setup.service +systemctl enable agama-certificate-issue.path +systemctl enable agama-certificate-wait.service +systemctl enable agama-welcome-issue.service +systemctl enable agama-avahi-issue.service +systemctl enable agama-ssh-issue.service +systemctl enable agama-self-update.service +systemctl enable live-password-cmdline.service +systemctl enable live-password-dialog.service +systemctl enable live-password-iso.service +systemctl enable live-password-random.service +systemctl enable live-password-systemd.service +systemctl enable setup-systemd-proxy-env.path +systemctl enable x11-autologin.service +systemctl enable spice-vdagentd.service +systemctl enable zramswap + +# default target +systemctl set-default graphical.target + +# disable snapshot cleanup +systemctl disable snapper-cleanup.timer +systemctl disable snapper-timeline.timer + +# disable unused services +systemctl disable YaST2-Firstboot.service +systemctl disable YaST2-Second-Stage.service + +### setup dracut for live system +label=${kiwi_install_volid:-$kiwi_iname} +arch=$(uname -m) + +echo "Setting default live root: live:LABEL=$label" +mkdir /etc/cmdline.d +echo "root=live:LABEL=$label" >/etc/cmdline.d/10-liveroot.conf +echo "root_disk=live:LABEL=$label" >>/etc/cmdline.d/10-liveroot.conf +# if there's a default network location, add it here +# echo "root_net=" >> /etc/cmdline.d/10-liveroot.conf +echo 'install_items+=" /etc/cmdline.d/10-liveroot.conf "' >/etc/dracut.conf.d/10-liveroot-file.conf +echo 'add_dracutmodules+=" dracut-menu "' >>/etc/dracut.conf.d/10-liveroot-file.conf + +if [ "${arch}" = "s390x" ];then + # workaround for custom bootloader setting + touch /config.bootoptions +fi + +# replace the @@LIVE_MEDIUM_LABEL@@ with the real Live partition label name from KIWI +sed -i -e "s/@@LIVE_MEDIUM_LABEL@@/$label/g" /usr/bin/live-password + +################################################################################ +# Reducing the used space + +# Clean-up logs +rm /var/log/zypper.log /var/log/zypp/history + +du -h -s /usr/{share,lib}/locale/ + +# Agama expects that the same locales available in the installation system can +# be also used later in the installed system and offers them in the web UI to +# select. But to make the Live ISO smaller it makes sense to delete the locales +# not supported by Agama itself. To solve this problem the list of available +# locales is saved to a file before deleting the locales not supported by Agama. +# Agama then reads this file instead of running the "localectl list-locales" +# command. +mkdir -p /etc/agama.d +# emulate "localectl list-locales" call, it cannot be used here because it +# insists on running systemd as PID 1 :-/ +ls -1 -d /usr/lib/locale/*.utf8 | sed -e "s#/usr/lib/locale/##" -e "s#utf8#UTF-8#" > /etc/agama.d/locales + +# delete translations and unusupported languages (makes ISO about 22MiB smaller) +# build list of ignore options for "ls" with supported languages like "-I cs* -I de* -I es* ..." +readarray -t IGNORE_OPTS < <(ls /usr/share/agama/web_ui/po.*.js.gz | sed -e "s#/usr/share/agama/web_ui/po\.\(.*\)\.js\.gz#-I\n\\1*#") +# additionally keep the en_US translations +ls -1 "${IGNORE_OPTS[@]}" -I en_US /usr/share/locale/ | xargs -I% sh -c "echo 'Removing translations %...' && rm -rf /usr/share/locale/%" + +# delete locale definitions for unsupported languages (explicitly keep the C and en_US locales) +ls -1 "${IGNORE_OPTS[@]}" -I "en_US*" -I "C.*" /usr/lib/locale/ | xargs -I% sh -c "echo 'Removing locale %...' && rm -rf /usr/lib/locale/%" + +# delete unused translations (MO files) +for t in zypper gettext-runtime p11-kit; do + rm /usr/share/locale/*/LC_MESSAGES/$t.mo +done +du -h -s /usr/{share,lib}/locale/ + +# remove documentation +du -h -s /usr/share/doc/packages/ +rm -rf /usr/share/doc/packages/* +# remove man pages +du -h -s /usr/share/man +rm -rf /usr/share/man/* + +## removing drivers and firmware makes the Live ISO about 370MiB smaller +# +# Agama does not use sound, added by icewm dependencies +rpm -e --nodeps alsa alsa-utils alsa-ucm-conf || true + +# driver and firmware cleanup +# Note: openSUSE Tumbleweed Live completely removes firmware for some server +# network cars, because you very likely won't run TW KDE Live on a server. +# But for Agama installer it makes more sense to run on server. So we keep it +# and remove the drivers for sound cards and TV cards instead. Those do not +# make sense on a server. +du -h -s /lib/modules /lib/firmware +# delete sound drivers +rm -rfv /lib/modules/*/kernel/sound +# delete TV cards and radio cards +rm -rfv /lib/modules/*/kernel/drivers/media/ + +# remove the unused firmware (not referenced by kernel drivers) +/tmp/fw_cleanup.rb --delete +# remove the script, not needed anymore +rm /tmp/fw_cleanup.rb +du -h -s /lib/modules /lib/firmware + +################################################################################ +# The rest of the file was copied from the openSUSE Tumbleweed Live ISO +# https://build.opensuse.org/package/view_file/openSUSE:Factory:Live/livecd-tumbleweed-kde/config.sh?expand=1 +# + +# disable the services included by dependencies +for s in purge-kernels; do + systemctl -f disable $s || true +done + +# Only used for OpenCL and X11 acceleration on vmwgfx (?), saves ~50MiB +rpm -e --nodeps Mesa-gallium || true +# Too big and will have to be dropped anyway (unmaintained, known security issues) +rm -rf /usr/lib*/libmfxhw*.so.* /usr/lib*/mfx/ + +# the new, optional nvidia gsp firmware blobs are huge - ~ 70MB +du -h -s /lib/firmware/nvidia +find /lib/firmware/nvidia -name gsp | xargs -r rm -rf +du -h -s /lib/firmware/nvidia +# The gems are unpackaged already, no need to store them twice +du -h -s /usr/lib*/ruby/gems/*/cache/ +rm -rf /usr/lib*/ruby/gems/*/cache/ + +# Not needed, boo#1166406 +rm -f /boot/vmlinux*.[gx]z +rm -f /lib/modules/*/vmlinux*.[gx]z + +# Remove generated files (boo#1098535) +rm -rf /var/cache/zypp/* /var/lib/zypp/AnonymousUniqueId /var/lib/systemd/random-seed diff --git a/agama-live/fix_bootconfig b/agama-live/fix_bootconfig new file mode 100644 index 0000000..1482824 --- /dev/null +++ b/agama-live/fix_bootconfig @@ -0,0 +1,89 @@ +#! /bin/bash + +# This script uses the KIWI 'editbootconfig' hook to modify the Live layout +# and ISO generation. +# +# Note that the 'editbootconfig' hook runs before the initrd is generated - +# this is too early for our purposes. So we have to do some gray area +# trickery: +# +# 1. Inject our modification scripts via config-cdroot.tar.xz into the Live tree. +# 2. Inject a 'xorriso' wrapper script into /usr/local/bin to hook into the ISO +# creation directly. +# This script (a) adjusts the boot config, (b) runs xorriso, and (c) makes +# it zIPL bootable on s390x. +# + +# KIWI config +test -f .profile && . .profile + +dst=${1#iso:} + +arch=`uname -m` + +# removing live root setting from command line - it's in /etc/cmdline.d instead +if [ -f $dst/boot/grub2/grub.cfg ] ; then + sed -i -E -e 's/\s+root=\S+//' -e 's/\s+rd.live\.image//' $dst/boot/grub2/grub.cfg +fi + +bootfix=$dst/fix_bootconfig.$arch +if [ -f $bootfix ] ; then + echo "bootconfig script found: \"$bootfix\"" +fi + +if [ $arch = ppc64le ] ; then + mkdir -p $dst/boot/grub2 + cp -r usr/share/grub2/powerpc-ieee1275 $dst/boot/grub2 + mv $dst/boot/grub2/powerpc-ieee1275/grub.elf $dst/boot/grub2 +fi + +cat </usr/local/bin/xorriso +#! /bin/bash + +set -x + +# get ISO file name and ISO volume id from xorriso parameters +for i in "\$@" ; do + if [ -n "\$iso_opt" ] ; then + iso_opt= + export iso="\$i" + continue + fi + if [ -n "\$volid_opt" ] ; then + volid_opt= + export volid="\$i" + continue + fi + if [ "\$i" = "-outdev" ] ; then + iso_opt=1 + continue + fi + if [ "\$i" = "-volid" ] ; then + volid_opt=1 + continue + fi +done + +volid=${kiwi_install_volid:-$kiwi_iname} + +[ -x $bootfix ] && $bootfix $dst +rm -f $dst/fix_bootconfig.* + +case $arch in + s390x) + /usr/bin/xorriso "\$@" -volid "\$volid" -boot_image any bin_path=boot/s390x/cd.ikr -boot_image any boot_info_table=off -boot_image any load_size=512 + err=\$? + [ -x /usr/bin/isozipl ] && isozipl "\$iso" + ;; + ppc64le) + /usr/bin/xorriso "\$@" -volid "\$volid" -boot_image any chrp_boot_part=on + err=\$? + ;; + *) + /usr/bin/xorriso "\$@" -volid "\$volid" +esac + +exit \$err +XXX + +chmod +x /usr/local/bin/xorriso diff --git a/agama-live/images.sh b/agama-live/images.sh new file mode 100644 index 0000000..e5c5c7c --- /dev/null +++ b/agama-live/images.sh @@ -0,0 +1,19 @@ +#! /bin/bash + +echo 'add memory size check for livenetroot installation' + +[[ -f /usr/lib/dracut/modules.d/90livenet/livenetroot.sh ]] || exit 1 + +echo 'let memsize=$(($(sed -n "s/MemTotal: *\([[:digit:]]*\).*/\1/p" /proc/meminfo) / 1024))' > /tmp/livenetroot-mod +echo 'let imgsize=$(($(curl -sI "$liveurl" | sed -n "s/Content-Length: *\([[:digit:]]*\).*/\1/p") / (1024 * 1024)))' >> /tmp/livenetroot-mod +echo '' >> /tmp/livenetroot-mod +echo 'if [ $((memsize - imgsize)) -lt 1024 ]; then' >> /tmp/livenetroot-mod +echo " sed -i 'N;/echo \"\$RDSOSREPORT\"/s/echo$/echo\\" >> /tmp/livenetroot-mod +echo ' echo Warning!!!\' >> /tmp/livenetroot-mod +echo ' echo The memory size of your system is too small for this live image.\' >> /tmp/livenetroot-mod +echo ' echo Expect killed processes due to out of memory conditions.\' >> /tmp/livenetroot-mod +echo " echo /' usr/bin/dracut-emergency" >> /tmp/livenetroot-mod +echo ' emergency_shell' >> /tmp/livenetroot-mod +echo 'fi' >> /tmp/livenetroot-mod + +sed -i '/info "fetching $liveurl"$/ r /tmp/livenetroot-mod' /usr/lib/dracut/modules.d/90livenet/livenetroot.sh diff --git a/agama-live/root.tar.xz b/agama-live/root.tar.xz new file mode 100644 index 0000000000000000000000000000000000000000000000000000000000000000..d8da63ffce647679a23fb3e1374b6081799adced021eab313408a5f496f57722 GIT binary patch literal 10212 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 ~DVg4oAa%Mg@YLJLClBY90*vuex1|Ei1 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 literal 0 HcmV?d00001