126 files changed, 5671 insertions, 8 deletions
diff --git a/.fmf/version b/.fmf/version new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/.fmf/version @@ -0,0 +1 @@ +1 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c96fb51 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +outdir-build/ +outdir/ diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..e46f080 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,20 @@ +[submodule "root/tmp/harrisonvanderbyl/surface-pro-12-inch-linux"] + path = root/tmp/harrisonvanderbyl/surface-pro-12-inch-linux + url = https://github.com/harrisonvanderbyl/surface-pro-12-inch-linux.git + branch = main +[submodule "root/tmp/harrisonvanderbyl/hexagonrpc"] + path = root/tmp/harrisonvanderbyl/hexagonrpc + url = https://github.com/harrisonvanderbyl/hexagonrpc + branch = main +[submodule "root/tmp/DylanVanAssche/libssc"] + path = root/tmp/DylanVanAssche/libssc + url = https://codeberg.org/DylanVanAssche/libssc + branch = main +[submodule "root/tmp/harrisonvanderbyl/iio-sensor-proxy"] + path = root/tmp/harrisonvanderbyl/iio-sensor-proxy + url = https://github.com/harrisonvanderbyl/iio-sensor-proxy + branch = master +[submodule "root/tmp/linux-msm/audioreach-topology"] + path = root/tmp/linux-msm/audioreach-topology + url = https://github.com/linux-msm/audioreach-topology + branch = main @@ -1,7 +1,7 @@ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 - Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -645,7 +645,7 @@ the "copyright" line and a pointer to where the full notice is found. GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. + along with this program. If not, see <https://www.gnu.org/licenses/>. Also add information on how to contact you by electronic and paper mail. @@ -664,11 +664,11 @@ might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see -<http://www.gnu.org/licenses/>. +<https://www.gnu.org/licenses/>. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read -<http://www.gnu.org/philosophy/why-not-lgpl.html>. +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/Fedora-ELN.kiwi b/Fedora-ELN.kiwi new file mode 100644 index 0000000..a0b6549 --- /dev/null +++ b/Fedora-ELN.kiwi @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> + +<image schemaversion="7.4" name="Fedora-ELN"> + <description type="system"> + <author>Fedora Project Contributors</author> + <contact>devel@lists.fedoraproject.org</contact> + <specification>Fedora ELN</specification> + </description> + <preferences> + <version>0</version> + <packagemanager>dnf5</packagemanager> + <locale>en_US</locale> + <keytable>us</keytable> + <timezone>UTC</timezone> + <release-version>eln</release-version> + </preferences> + <include from="this://./components/boot-eln.xml"/> + <include from="this://./components/liveinstall-eln.xml"/> + <include from="this://./repositories/core-eln.xml"/> + <include from="this://./teams/eln/cloud.xml"/> + <include from="this://./teams/eln/container.xml"/> + <include from="this://./teams/eln/desktop-environments.xml"/> + <include from="this://./teams/eln/liveprofiles.xml"/> + <include from="this://./teams/eln/wsl.xml"/> + <packages type="bootstrap"> + <package name="filesystem"/> + </packages> +</image> diff --git a/Fedora.kiwi b/Fedora.kiwi new file mode 100644 index 0000000..6ac2adb --- /dev/null +++ b/Fedora.kiwi @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="utf-8"?> + +<image schemaversion="7.4" name="Fedora"> + <description type="system"> + <author>Fedora Project Contributors</author> + <contact>devel@lists.fedoraproject.org</contact> + <specification>Fedora Linux</specification> + </description> + <preferences> + <version>45</version> + <packagemanager>dnf5</packagemanager> + <locale>en_US</locale> + <keytable>us</keytable> + <timezone>UTC</timezone> + <release-version>45</release-version> + </preferences> + <include from="this://./repositories/core.xml"/> + <include from="this://./repositories/kernel-sp12in.xml"/> + <include from="this://./components/common.xml"/> + <include from="this://./components/boot.xml"/> + <include from="this://./components/desktops/common.xml"/> + <include from="this://./components/desktops/gnome.xml"/> + <include from="this://./components/desktops/kde.xml"/> + <include from="this://./components/desktops/xfce.xml"/> + <include from="this://./components/desktops/cinnamon.xml"/> + <include from="this://./components/desktops/mate.xml"/> + <include from="this://./components/desktops/i3.xml"/> + <include from="this://./components/desktops/lxqt.xml"/> + <include from="this://./components/desktops/lxde.xml"/> + <include from="this://./components/desktops/soas.xml"/> + <include from="this://./components/desktops/phosh.xml"/> + <include from="this://./components/desktops/sway.xml"/> + <include from="this://./components/desktops/budgie.xml"/> + <include from="this://./components/desktops/miraclewm.xml"/> + <include from="this://./components/desktops/cosmic.xml"/> + <include from="this://./components/liveinstall.xml"/> + <include from="this://./components/users.xml"/> + <include from="this://./teams/base.xml"/> + <include from="this://./teams/cloud/cloud.xml"/> + <include from="this://./teams/cloud/container.xml"/> + <include from="this://./teams/cloud/vagrant.xml"/> + <include from="this://./teams/cloud/wsl.xml"/> + <include from="this://./teams/server.xml"/> + <include from="this://./teams/workstation.xml"/> + <include from="this://./teams/kde.xml"/> + <include from="this://./teams/xfce.xml"/> + <include from="this://./teams/cinnamon.xml"/> + <include from="this://./teams/mate.xml"/> + <include from="this://./teams/i3.xml"/> + <include from="this://./teams/lxqt.xml"/> + <include from="this://./teams/lxde.xml"/> + <include from="this://./teams/soas.xml"/> + <include from="this://./teams/sway.xml"/> + <include from="this://./teams/budgie.xml"/> + <include from="this://./teams/miraclewm.xml"/> + <include from="this://./teams/cosmic.xml"/> + <include from="this://./teams/asahi.xml"/> + <include from="this://./teams/python.xml"/> + <include from="this://./teams/scitech.xml"/> + <include from="this://./teams/phosh.xml"/> + <include from="this://./teams/astronomy.xml"/> + <include from="this://./teams/designsuite.xml"/> + <include from="this://./teams/games.xml"/> + <include from="this://./teams/security.xml"/> + <include from="this://./teams/jam.xml"/> + <packages type="bootstrap"> + <package name="filesystem"/> + </packages> +</image> diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..1732307 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,163 @@ +pipeline { + agent none + + options { + timestamps() + } + + environment { + KIWI_FILE = 'Fedora.kiwi' + IMAGE_TYPE = 'iso' + IMAGE_PROFILE = 'Workstation-Live' + IMAGE_VERSION = '45' + OUTPUT_DIR = 'outdir' + + B2_ENDPOINT = 'https://s3.eu-central-003.backblazeb2.com' + AWS_DEFAULT_REGION = 'eu-central-003' + ISO_BUCKET = 'dist-sayagit-fedora-iso' + + // Must match the <source path="..."/> in + // repositories/kernel-sp12in.xml. + KERNEL_SURFACE_REPO_URL = 'https://rpm.sayag.it/kernel-sp12in/fedora/45/aarch64' + + // awscli2 sends CRC32 checksums by default, which B2 rejects. Ask for + // them only where the S3 API requires them. + AWS_REQUEST_CHECKSUM_CALCULATION = 'when_required' + AWS_RESPONSE_CHECKSUM_VALIDATION = 'when_required' + } + + stages { + stage('Build Fedora Workstation Live ISO (ARM64)') { + agent { + kubernetes { + defaultContainer 'kiwi' + yaml """ +apiVersion: v1 +kind: Pod +metadata: + namespace: jenkins +spec: + nodeSelector: + kubernetes.io/arch: arm64 + containers: + - name: kiwi + image: fedora:44 + imagePullPolicy: Always + command: [ 'sleep' ] + args: [ 'infinity' ] + tty: true + securityContext: + privileged: true + resources: + requests: + cpu: "2" + memory: 4Gi + ephemeral-storage: 20Gi + limits: + memory: 12Gi + ephemeral-storage: 50Gi +""" + } + } + steps { + checkout scm + container('kiwi') { + script { + try { + // The kernel-surface RPM is a build input, not + // something this repository can produce: the image + // installs kernel-surface by name and <ignore>s + // Fedora's kernel packages. Its pipeline publishes + // it to rpm.sayag.it, which repositories/kernel-sp12in.xml + // points at directly, so there is nothing to stage + // here. Fail now rather than several minutes into + // kiwi on an unresolvable package name. + sh ''' + set -eux + + dnf --assumeyes install curl + + repomd="${KERNEL_SURFACE_REPO_URL}/repodata/repomd.xml" + if ! curl -fsS --retry 3 -o /dev/null "${repomd}"; then + echo "No kernel-surface repository at ${repomd}." >&2 + echo "Run the kernel-surface pipeline for Fedora ${IMAGE_VERSION} first." >&2 + exit 1 + fi + ''' + + sh ''' + dnf --assumeyes install git kiwi kiwi-systemdeps distribution-gpg-keys + git config --global --add safe.directory . + git submodule update --init --recursive + + ./kiwi-build \\ + --kiwi-file="${KIWI_FILE}" \\ + --image-type="${IMAGE_TYPE}" \\ + --image-profile="${IMAGE_PROFILE}" \\ + --output-dir "${OUTPUT_DIR}" + + ls -lh "${OUTPUT_DIR}-build" + ''' + } catch (Exception e) { + echo "Caught exception: ${e.getMessage()}" + currentBuild.result = 'FAILURE' + throw e + } + } + stash name: "fedora-workstation-live-iso-stash", includes: "${OUTPUT_DIR}-build/Fedora.aarch64-${IMAGE_VERSION}.iso" + } + } + } + + stage('Push Fedora Workstation Live ISO (ARM64)') { + agent { + kubernetes { + defaultContainer 's5cmd' + yaml """ +apiVersion: v1 +kind: Pod +metadata: + namespace: jenkins +spec: + containers: + - name: s5cmd + image: peakcom/s5cmd:v2.3.0 + imagePullPolicy: IfNotPresent + command: [ 'sleep' ] + args: [ 'infinity' ] + tty: true + resources: + requests: + cpu: "0.5" + memory: 4Gi +""" + } + } + steps { + container('s5cmd') { + unstash "fedora-workstation-live-iso-stash" + withCredentials([usernamePassword( + credentialsId: 'backblaze-b2-dist-iso', + usernameVariable: 'AWS_ACCESS_KEY_ID', + passwordVariable: 'AWS_SECRET_ACCESS_KEY')]) { + sh ''' + set -eux + + cd "${OUTPUT_DIR}-build" + src="Fedora.aarch64-${IMAGE_VERSION}.iso" + moddate=$(date -r "${src}" -u +"%Y%m%d-%H%M%S") + dst="Fedora.Surface-Pro-12in.${IMAGE_PROFILE}.${IMAGE_VERSION}.${moddate}.aarch64.iso" + mv "${src}" "${dst}" + ls -lh + + /s5cmd --endpoint-url "${B2_ENDPOINT}" cp \\ + --content-type "application/x-iso9660-image" \\ + "${dst}" \\ + "s3://${ISO_BUCKET}/fedora/${IMAGE_VERSION}/aarch64/${dst}" + ''' + } + } + } + } + } +} @@ -1,10 +1,57 @@ -# fedora-kiwi-descriptions -This project is used to manage the Fedora KIWI image descriptions used in composing Fedora release images. +# Fedora KIWI image descriptions, modified to build & launch for Surface Pro 12" Gen 1 -The `rawhide` branch is used for Fedora Rawhide images and each release branch is used by that release. + -All changes should be made via the PR workflow. +It is the fork of the original [KIWI image descriptions](https://forge.fedoraproject.org/releng/kiwi-descriptions), modified for launching Fedora Linux Rawhide Live ISO on Surface Pro 12" Gen 1 (and further installing it on the device). + +I bought this device as I viewed it as a great Linux GNOME tablet, but after several days, many hours of work of trying to do so, I must say that installing a distribution here (and then having it work fine) is a huge pain in the ass. + +> Special thanks to [harrisonvanderbyl](https://github.com/harrisonvanderbyl), this project wouldn't be possible without his huge contribution to this whole Linux on Surface ARM business! + +## How to run + +**The compiled ISOs can be downloaded [here](https://dist.sayag.it/surface-pro-12in-ports/fedora/rawhide).** + +This KIWI project is built mainly on the base of Fedora Workstation Rawhide LiveCD ISO. Trying a stable version (the latest is Fedora 44 at the time of writing this) is possible, but not tested for now. + +If you want to compile this image manually, **the build arch must be `aarch64`**. It means that if you are on an `amd64` machine, you would have to use aarch64 instructions emulation tools like `binfmt`. Unfortunately, such a tool will drastically increase the compilation time. + +To build this on Fedora Linux: + +```bash +# Fetch submodules (if you haven't yet) +[]$ git submodule update --init --recursive +# Install kiwi +[]$ sudo dnf --assumeyes install kiwi kiwi-systemdeps distribution-gpg-keys +# Run the image build +[]$ sudo ./kiwi-build --kiwi-file=Fedora.kiwi --image-type=<image_type> --image-profile=<image_profile> --output-dir ./outdir +# An example for Workstation Live CD ISO, takes around 16 minutes +[]$ sudo ./kiwi-build --kiwi-file=Fedora.kiwi --image-type=iso --image-profile=Workstation-Live --output-dir ./outdir +``` + +## What is left out (for now) + +* Live CD has to run in RAM, so `rd.live.ram=1` is set for cmdline. Otherwise, at least on my ancient flash drive, it fails to load multiple necessary services, including `polkit`. So, ~5 minutes of loading on USB 2 drive, while screen is not backlit, is to be expected. +* No rescue vmlinuz. +* No secure boot possible for this ISO for now, as the platform used is `efi` and not `uefi`. +* No GRUB auto hidden menu. Trying to have the menu hidden results in system restarting after trying to boot it. +* Hardware video encoding/decoding needs a firmware blob the image is not allowed to ship. The `qcom/vpu/vpu30_p1_s7.mbn` that `linux-firmware` provides is the same codec signed with Qualcomm's SecTools *test* key chain, which a retail Surface's TrustZone rejects -- `qcom_scm_pas_init_image()` fails and the kernel logs `qcom-iris aa00000.video-codec: error -22 initializing firmware`. The production-signed build exists only inside Microsoft's Surface driver package, which grants no redistribution right, so what ships here is the means and not the blob: + * If you kept the Windows ARM64 partition, `surface-video-firmware.service` finds it on the first boot after install and copies `qcvss8380_pa.mbn` out of its DriverStore. Nothing to do. + * If Windows is gone, download the [Surface Pro 12-inch driver pack](https://www.microsoft.com/en-us/download/details.aspx?id=108199) (~500 MB MSI) and run `sudo surface-video-firmware.sh -m /path/to/SurfacePro_12in_*.msi`. There is no automatic download: the Download Center hands out per-session links. + + The kernel's device tree already points `iris` at `/lib/firmware/qcom/x1p42100/Microsoft/Surface12/qcvss8380_pa.mbn`, so the driver picks it up as soon as it is there. +* Suspend on Snapdragon X is still very unstable. No deep sleep is available, so `mem_sleep_default=s2idle` was set. Even that leads to compromises as suspending via GNOME results in hard freeze, so the default power button behavior was changed to `interactive` and should not be changed back to `suspend`. + +## Image variants + +Please look at [`VARIANTS`](VARIANTS.md) for details on the available configurations that can be built. + +## CI information + +This project is yet to adapt CI, but it is coming. + +For now the images are being built and tested manually on my personal Surface Pro 12" Gen 1 (16 GB RAM, 512 GB storage). ## Licensing diff --git a/VARIANTS.md b/VARIANTS.md new file mode 100644 index 0000000..5056dbe --- /dev/null +++ b/VARIANTS.md @@ -0,0 +1,41 @@ +## Image variants + +### For the `Fedora.kiwi` kiwi file + +| Name | Image type | Image profiles | +|--------------------------------|------------|---------------------------------------| +| Base Cloud Edition for clouds | `oem` | `Cloud-Base-Generic` | +| | | `Cloud-Base-AmazonEC2` | +| | | `Cloud-Base-Azure` | +| | | `Cloud-Base-GCE` | +| Base Cloud Edition for Vagrant | `oem` | `Cloud-Base-Vagrant-libvirt` | +| | | `Cloud-Base-Vagrant-VirtualBox` | +| Server Edition as a VM guest | `oem` | `Server-Guest-Generic` | +| Server Edition as a hypervisor | `oem` | `Server-Host-Generic` | +| Base Container | `oci` | `Container-Base-Generic-Init` | +| | | `Container-Base-Generic-Minimal` | +| | | `Container-Base-Generic` | +| Toolbox Container | `oci` | `Container-Toolbox` | +| RootFS for FEX | `erofs` | `FEX-RootFS` | +| KDE Plasma Desktop Edition | `iso` | `KDE-Desktop-Live` | +| | `oem` | `KDE-Desktop-Disk` | +| KDE Plasma Mobile Spin | `iso` | `KDE-Mobile-Live` | +| | `oem` | `KDE-Mobile-Disk` | +| Workstation Edition | `iso` | `Workstation-Live` | +| | `oem` | `Workstation-Disk` | +| LXQt Spin | `iso` | `LXQt-Live` | +| | `oem` | `LXQt-Disk` | +| Xfce Spin | `iso` | `Xfce-Live` | +| | `oem` | `Xfce-Disk` | +| Budgie Spin | `iso` | `Budgie-Live` | +| | `oem` | `Budgie-Disk` | +| MiracleWM Spin | `iso` | `MiracleWM-Live` | +| | `oem` | `MiracleWM-Disk` | +| COSMIC Spin | `iso` | `COSMIC-Live` | +| | `oem` | `COSMIC-Disk` | +| Python Classroom Lab | `iso` | `Python-Classroom-Live` | +| | `oem` | `Python-Classroom-Disk` | +| | `oem` | `Python-Classroom-Vagrant-libvirt` | +| | `oem` | `Python-Classroom-Vagrant-VirtualBox` | +| Phosh Spin | `iso` | `Phosh-Desktop-Live` | +| | `oem` | `Phosh-Desktop-Disk` | diff --git a/components/boot-eln.xml b/components/boot-eln.xml new file mode 100644 index 0000000..ee380b6 --- /dev/null +++ b/components/boot-eln.xml @@ -0,0 +1,85 @@ +<image> + <profiles> + <profile name="BootCore" description="Boot core packages"/> + <profile name="BootCoreUKI" description="Boot core packages for UKI"/> + <profile name="BootDiskCore" description="Boot disk core configuration"> + <requires profile="BootCore"/> + </profile> + </profiles> + <preferences profiles="BootDiskCore" arch="x86_64,aarch64"> + <type image="oem" + filesystem="xfs" + kernelcmdline="rhgb quiet" devicepersistency="by-uuid" target_blocksize="4096" + bootpartition="true" bootpartsize="2000" bootfilesystem="xfs" efipartsize="500" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" console="console" timeout="1" timeout_style="hidden"/> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="BootDiskCore" arch="ppc64le"> + <type image="oem" + filesystem="xfs" + kernelcmdline="rhgb quiet" devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="xfs" firmware="ofw" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" console="console" timeout="1" timeout_style="hidden"/> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="BootDiskCore" arch="s390x"> + <type image="oem" + filesystem="xfs" + kernelcmdline="no_timer_check console=tty1 console=ttyS0,115200n8" + devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="xfs" + rootfs_label="fedora" + > + <bootloader name="zipl" timeout="1"/> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <packages type="bootstrap" patternType="plusRecommended" profiles="BootCore,BootCoreUKI"> + <package name="grubby"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="BootCore"> + <package name="grub2-efi-aa64" arch="aarch64"/> + <package name="grub2-efi-aa64-modules" arch="aarch64"/> + <package name="grub2-efi-x64" arch="x86_64"/> + <package name="grub2-efi-x64-modules" arch="x86_64"/> + <package name="grub2-pc" arch="x86_64"/> + <package name="grub2-pc-modules" arch="x86_64"/> + <package name="grub2-ppc64le" arch="ppc64le"/> + <package name="s390utils-base" arch="s390x"/> + <package name="shim-signed-aa64" arch="aarch64"/> + <package name="shim-signed-x64" arch="x86_64"/> + <package name="kernel-core"/> + <package name="systemd-resolved"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="BootCoreUKI"> + <package name="shim-signed-aa64" arch="aarch64"/> + <package name="shim-signed-x64" arch="x86_64"/> + <package name="systemd-oomd-defaults"/> + <package name="systemd-resolved"/> + <package name="kernel-uki-virt"/> + <package name="python3-virt-firmware"/> + <package name="uki-direct"/> + </packages> + <packages type="iso" patternType="plusRecommended" profiles="BootCore"> + <package name="grub2-efi-aa64-cdboot" arch="aarch64"/> + <package name="grub2-efi-x64-cdboot" arch="x86_64"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="BootDiskCore"> + <package name="glibc-all-langpacks"/> + <package name="kernel"/> + <package name="kernel-modules"/> + <package name="kernel-modules-extra"/> + </packages> +</image> diff --git a/components/boot.xml b/components/boot.xml new file mode 100644 index 0000000..11b48a5 --- /dev/null +++ b/components/boot.xml @@ -0,0 +1,105 @@ +<image> + <profiles> + <profile name="BootCore" description="Boot core packages"/> + <profile name="BootCoreUKI" description="Boot core packages for UKI"/> + <profile name="BootCoreLive" description="Boot core packages for Live DVDs"/> + <profile name="BootDiskCore" description="Boot disk core configuration"> + <requires profile="BaseCommon"/> + <requires profile="HardwareCommon"/> + <requires profile="BootCore"/> + </profile> + </profiles> + <!-- Surface Pro 12" (Snapdragon X1P-42-100) is a standard UEFI/GPT aarch64 + device, no force_mbr/disk_start_sector/editbootinstall RPi-legacy + quirks needed, those are for boards whose own firmware boot stage + requires an MBR + specific boot sector offset before handing off to + grub. --> + <preferences profiles="BootDiskCore" arch="aarch64"> + <type image="oem" + filesystem="btrfs" btrfs_root_is_subvolume="true" btrfs_set_default_volume="false" fsmountoptions="x-systemd.growfs,compress=zstd:1" + kernelcmdline="rhgb quiet" devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="ext4" efipartsize="500" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" console="console" timeout="5"/> + <systemdisk name="fedora"> + <volume name="@root=root"/> + <volume name="home" parent="/"/> + <volume name="var" parent="/"/> + </systemdisk> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <packages type="bootstrap" patternType="plusRecommended" profiles="BootCore,BootCoreUKI,BootCoreLive"> + <package name="grubby"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="BootCore,BootCoreLive"> + <package name="grub2-efi-aa64"/> + <package name="grub2-efi-aa64-modules"/> + <package name="shim-signed-aa64"/> + <package name="systemd-oomd-defaults"/> + <package name="systemd-resolved"/> + </packages> + <!-- Surface Pro 12" (Snapdragon X1P-42-100) kernel selection. One block for + every profile that needs a kernel: BootCore, BootCoreLive, and + BootDiskCore through its <requires profile="BootCore"/> above. + + kernel-surface is vanilla upstream plus the miasvanklei overlay's patch + set for this board (device tree, SAM RTC, SAM suspend workaround, + CAMSS/CSI-2, remoteproc attach, clk/PCI/irqchip fixes). It is built from + the sibling ../kernel-surface checkout and comes from the repository + repositories/kernel-sp12in.xml adds. + + It is a single package (kernel image, every module, device trees) and + Provides kernel, kernel-core, kernel-modules, kernel-modules-core and + kernel-modules-extra, so anything with a plain Requires on one of those + resolves against it. That is why no -modules/-modules-extra entry is + needed in any profile any more. + + Fedora's split kernel packages are ignored by name instead, so dnf can + never drag one in as a dependency. kernel-uki-dtbloader is ignored as + well: kernel-surface Conflicts it, so without the exclusion any package + pulling it in would fail the depsolve instead of just losing it. It + bakes in ~3000 boards' dtbs (.dtbauto sections), does not carry this + board, and is a hard Requires of the plain "kernel" metapackage on + aarch64, which makes that metapackage uninstallable here too, since it + is also the only thing that could satisfy kernel-core by name. + + Consequence for the profiles this fork does not target: the ones that + still ask for a Fedora kernel by name through BootCore, namely + Server-Host-Generic (kernel) and Cloud-Base-Azure (kernel-modules), + cannot depsolve. Everything this device builds (Live via BootCoreLive, + disk via BootDiskCore) takes its kernel from here. --> + <packages type="image" patternType="plusRecommended" profiles="BootCore,BootCoreLive"> + <ignore name="kernel-*debug*"/> + <ignore name="kernel-core"/> + <ignore name="kernel-modules"/> + <ignore name="kernel-modules-core"/> + <ignore name="kernel-modules-extra"/> + <ignore name="kernel-uki-dtbloader"/> + <package name="kernel-surface"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="BootCoreUKI"> + <package name="shim-signed-aa64"/> + <package name="systemd-oomd-defaults"/> + <package name="systemd-resolved"/> + <package name="kernel-uki-virt"/> + <package name="python3-virt-firmware"/> + <package name="uki-direct"/> + </packages> + <packages type="iso" patternType="plusRecommended" profiles="BootCore,BootCoreLive"> + <package name="grub2-efi-aa64-cdboot"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="BootDiskCore"> + <package name="glibc-all-langpacks"/> + <!-- Surface Pro 12": the kernel comes from the shared BootCore block + above, which this profile requires. arm-image-installer and + uboot-images-armv8 dropped, they exist for flashing/booting other + ARM SBCs (device-tree selection, U-Boot), not relevant to this + single UEFI/GPT device. --> + <package name="btrfs-progs"/> + <package name="udisks2-btrfs"/> + </packages> +</image> diff --git a/components/common.xml b/components/common.xml new file mode 100644 index 0000000..506cf73 --- /dev/null +++ b/components/common.xml @@ -0,0 +1,13 @@ +<image> + <profiles> + <profile name="BaseCommon" description="Base common packages"/> + <profile name="HardwareCommon" description="Base common packages for hardware support"/> + </profiles> + <packages type="image" patternType="plusRecommended" profiles="BaseCommon"> + <namedCollection name="standard"/> + <ignore name="qemu-user-static"/> <!-- Saves ~100MB --> + </packages> + <packages type="image" patternType="plusRecommended" profiles="HardwareCommon"> + <namedCollection name="hardware-support"/> + </packages> +</image> diff --git a/components/desktops/budgie.xml b/components/desktops/budgie.xml new file mode 100644 index 0000000..36ae5cf --- /dev/null +++ b/components/desktops/budgie.xml @@ -0,0 +1,16 @@ +<image> + <profiles> + <profile name="Budgie-Desktop" description="Budgie Desktop"> + <requires profile="DesktopCommon"/> + </profile> + </profiles> + <packages type="image" patternType="plusRecommended" profiles="Budgie-Desktop"> + <!-- install env-group to resolve RhBug:1891500 --> + <namedCollection name="budgie-desktop-environment"/> + <namedCollection name="budgie-desktop-apps"/> + <namedCollection name="libreoffice"/> + <package name="libreoffice-draw"/> + <package name="libreoffice-math"/> + <package name="thunderbird"/> + </packages> +</image> diff --git a/components/desktops/cinnamon.xml b/components/desktops/cinnamon.xml new file mode 100644 index 0000000..3bd5a4e --- /dev/null +++ b/components/desktops/cinnamon.xml @@ -0,0 +1,13 @@ +<image> + <profiles> + <profile name="Cinnamon-Desktop" description="Cinnamon Desktop"> + <requires profile="DesktopCommon"/> + </profile> + </profiles> + <packages type="image" patternType="plusRecommended" profiles="Cinnamon-Desktop"> + <!-- install env-group to resolve RhBug:1891500 --> + <namedCollection name="cinnamon-desktop-environment"/> + <namedCollection name="libreoffice"/> + <package name="exaile"/> + </packages> +</image> diff --git a/components/desktops/common.xml b/components/desktops/common.xml new file mode 100644 index 0000000..fed17c4 --- /dev/null +++ b/components/desktops/common.xml @@ -0,0 +1,18 @@ +<image> + <profiles> + <profile name="DesktopCommon" description="Common desktop packages"> + <requires profile="BaseCommon"/> + <requires profile="HardwareCommon"/> + </profile> + </profiles> + <packages type="image" patternType="plusRecommended" profiles="DesktopCommon"> + <namedCollection name="fonts"/> + <namedCollection name="multimedia"/> + <namedCollection name="networkmanager-submodules"/> + <namedCollection name="printing"/> + <namedCollection name="guest-desktop-agents"/> + <package name="mediawriter"/> + <ignore name="gfs2-utils"/> + <ignore name="reiserfs-utils"/> + </packages> +</image> diff --git a/components/desktops/cosmic.xml b/components/desktops/cosmic.xml new file mode 100644 index 0000000..4d010a7 --- /dev/null +++ b/components/desktops/cosmic.xml @@ -0,0 +1,11 @@ +<image> + <profiles> + <profile name="COSMIC-Desktop" description="COSMIC Desktop"> + <requires profile="DesktopCommon"/> + </profile> + </profiles> + <packages type="image" patternType="plusRecommended" profiles="COSMIC-Desktop"> + <!-- install env-group to resolve RhBug:1891500 --> + <namedCollection name="cosmic-desktop-environment"/> + </packages> +</image> diff --git a/components/desktops/gnome.xml b/components/desktops/gnome.xml new file mode 100644 index 0000000..17ffc36 --- /dev/null +++ b/components/desktops/gnome.xml @@ -0,0 +1,13 @@ +<image> + <profiles> + <profile name="GNOME-Desktop" description="GNOME Desktop"> + <requires profile="DesktopCommon"/> + </profile> + </profiles> + <packages type="image" patternType="plusRecommended" profiles="GNOME-Desktop"> + <!-- install env-group to resolve RhBug:1891500 --> + <namedCollection name="workstation-product-environment"/> + <!-- space saving, see https://bugzilla.redhat.com/show_bug.cgi?id=2360056#c45 --> + <ignore name="python3-boto3"/> + </packages> +</image> diff --git a/components/desktops/i3.xml b/components/desktops/i3.xml new file mode 100644 index 0000000..26e73d2 --- /dev/null +++ b/components/desktops/i3.xml @@ -0,0 +1,19 @@ +<image> + <profiles> + <profile name="i3-Desktop" description="i3 Desktop"> + <requires profile="DesktopCommon"/> + </profile> + </profiles> + <packages type="image" patternType="plusRecommended" profiles="i3-Desktop"> + <!-- install env-group to resolve RhBug:1891500 --> + <namedCollection name="i3-desktop-environment"/> + <package name="dex-autostart"/> + <package name="fedora-release-i3"/> + <package name="feh"/> + <package name="gnome-keyring-pam"/> <!-- unlock default keyring, FIXME: put in comps --> + <package name="system-config-printer"/> <!-- FIXME: put in comps --> + <package name="thunar"/> <!-- FIXME: put in comps --> + <package name="xfce-polkit"/> <!-- FIXME: put in comps --> + <package name="wget"/> <!-- FIXME: put in comps --> + </packages> +</image> diff --git a/components/desktops/kde.xml b/components/desktops/kde.xml new file mode 100644 index 0000000..4c20ea5 --- /dev/null +++ b/components/desktops/kde.xml @@ -0,0 +1,51 @@ +<image> + <profiles> + <profile name="KDE-Desktop" description="KDE Plasma Desktop"> + <requires profile="DesktopCommon"/> + </profile> + <profile name="KDE-Mobile" description="KDE Plasma Mobile"> + <requires profile="DesktopCommon"/> + </profile> + </profiles> + <!-- Common exclusions for KDE variants --> + <packages type="image" patternType="plusRecommended" profiles="KDE-Desktop,KDE-Mobile"> + <ignore name="gnome-disk-utility"/> <!-- redundant with kde partitionmanager --> + <ignore name="mariadb-server-utils"/> <!-- Not needed on desktops (pagure.io:fedora-kde/SIG#566) --> + <ignore name="system-config-language"/> <!-- redundant with kcms --> + <ignore name="system-config-printer"/> <!-- redundant with kcms --> + <!-- drop tracker stuff pulled in by gtk3 (pagureio:fedora-kde/SIG#124) --> + <ignore name="tracker"/> + <ignore name="tracker-miners"/> + <!-- space issues --> + <ignore name="digikam"/> <!-- digikam has duplicate functionality with gwenview (~28 megs) --> + <ignore name="k3b"/> <!-- ~15 megs --> + <ignore name="kipi-plugins"/> <!-- ~8 megs + drags in marble --> + <ignore name="krusader"/> <!-- ~4 megs --> + <ignore name="ktorrent"/> <!-- ~15 megs --> + <ignore name="initial-setup"/> <!-- redundant with plasma-setup --> + </packages> + <packages type="image" patternType="plusRecommended" profiles="KDE-Desktop"> + <!-- install env-group to resolve RhBug:1891500 --> + <namedCollection name="kde-desktop-environment"/> + <namedCollection name="kde-apps"/> + <namedCollection name="kde-media"/> + <namedCollection name="kde-pim" arch="aarch64,ppc64le,x86_64"/> + <namedCollection name="firefox"/> + <namedCollection name="libreoffice"/> + <namedCollection name="x86-emulation" arch="aarch64"/> + <package name="libreoffice-draw"/> + <package name="libreoffice-math"/> + <package name="fuse"/> + <package name="kde-l10n"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="KDE-Mobile"> + <!-- install env-group to resolve RhBug:1891500 --> + <namedCollection name="kde-mobile-environment"/> + <namedCollection name="firefox"/> + <namedCollection name="x86-emulation" arch="aarch64"/> + <package name="fuse"/> + <package name="kde-l10n"/> + <ignore name="plasma-welcome"/> + <ignore name="plasma-welcome-fedora"/> + </packages> +</image> diff --git a/components/desktops/lxde.xml b/components/desktops/lxde.xml new file mode 100644 index 0000000..b14e097 --- /dev/null +++ b/components/desktops/lxde.xml @@ -0,0 +1,18 @@ +<image> + <profiles> + <profile name="LXDE-Desktop" description="LXDE Desktop"> + <requires profile="DesktopCommon"/> + </profile> + </profiles> + <packages type="image" patternType="plusRecommended" profiles="LXDE-Desktop"> + <!-- install env-group to resolve RhBug:1891500 --> + <namedCollection name="lxde-desktop-environment"/> + <namedCollection name="lxde-apps"/> + <namedCollection name="lxde-media"/> + <namedCollection name="lxde-office"/> + <package name="lxpolkit"/> <!-- Ensure LXDE polkit agent is used --> + <package name="notification-daemon"/> <!-- Ensure correct notification daemon is used --> + <ignore name="PackageKit*"/> <!-- we use dnfdragora instead --> + <ignore name="fprintd-pam"/> <!-- pam-fprint causes segfaults in LXDM --> + </packages> +</image> diff --git a/components/desktops/lxqt.xml b/components/desktops/lxqt.xml new file mode 100644 index 0000000..af700f2 --- /dev/null +++ b/components/desktops/lxqt.xml @@ -0,0 +1,29 @@ +<image> + <profiles> + <profile name="LXQt-Desktop" description="LXQt Desktop"> + <requires profile="DesktopCommon"/> + </profile> + </profiles> + <packages type="image" patternType="plusRecommended" profiles="LXQt-Desktop"> + <!-- install env-group to resolve RhBug:1891500 --> + <namedCollection name="lxqt-desktop-environment"/> + <namedCollection name="lxqt-apps"/> + <namedCollection name="lxqt-media"/> + <namedCollection name="lxqt-l10n"/> + <!-- remove unneeded stuff for a lightweight system --> + <package name="wqy-microhei-fonts"/> <!-- compact CJK font --> + <ignore name="naver-nanum-gothic-fonts"/> <!-- Korean: replaced by above --> + <ignore name="vlgothic-fonts"/> <!-- Japanese: replaced by above --> + <ignore name="adobe-source-han-sans-cn-fonts"/> <!-- Simplified Chinese: replaced by above --> + <ignore name="adobe-source-han-sans-tw-fonts"/> <!-- Traditional Chinese: replaced by above --> + <ignore name="pt-sans-fonts"/> <!-- Cyrillic (already supported by DejaVu) --> + <!-- these do not currently work: https://pagure.io/fedora-kiwi-descriptions/issue/112 + <ignore name="@input-methods"/> + --> + <!-- because the input-methods group exclusion doesn't work, these aren't safe + <ignore name="scim*"/> + <ignore name="m17n*"/> + <ignore name="iok"/> + --> + </packages> +</image> diff --git a/components/desktops/mate.xml b/components/desktops/mate.xml new file mode 100644 index 0000000..bcc577d --- /dev/null +++ b/components/desktops/mate.xml @@ -0,0 +1,26 @@ +<image> + <profiles> + <profile name="MATE-Desktop" description="MATE Desktop"> + <requires profile="DesktopCommon"/> + </profile> + </profiles> + <packages type="image" patternType="plusRecommended" profiles="MATE-Desktop"> + <!-- install env-group to resolve RhBug:1891500 --> + <namedCollection name="mate-desktop-environment"/> + <namedCollection name="compiz"/> + <namedCollection name="libreoffice"/> + <ignore name="audacious"/> <!-- breaks the desktop --> + <!-- drop things for size --> + <ignore name="@3d-printing"/> + <ignore name="@mate-applications"/> + <ignore name="brasero"/> + <ignore name="fedora-icon-theme"/> + <ignore name="gnome-icon-theme"/> + <ignore name="gnome-icon-theme-symbolic"/> + <ignore name="gnome-logs"/> + <ignore name="gnome-software"/> + <ignore name="gnome-user-docs"/> + <ignore name="evolution-help"/> + <ignore name="telnet"/> <!-- Legacy cmdline thing we don't want --> + </packages> +</image> diff --git a/components/desktops/miraclewm.xml b/components/desktops/miraclewm.xml new file mode 100644 index 0000000..f986915 --- /dev/null +++ b/components/desktops/miraclewm.xml @@ -0,0 +1,14 @@ +<image> + <profiles> + <profile name="MiracleWM-Desktop" description="MiracleWM Desktop"> + <requires profile="DesktopCommon"/> + </profile> + </profiles> + <packages type="image" patternType="plusRecommended" profiles="MiracleWM-Desktop"> + <!-- install env-group to resolve RhBug:1891500 --> + <namedCollection name="miraclewm-desktop-environment"/> + <namedCollection name="firefox"/> + <package name="initial-setup-gui"/> + <package name="initial-setup-gui-wayland-miraclewm"/> + </packages> +</image> diff --git a/components/desktops/phosh.xml b/components/desktops/phosh.xml new file mode 100644 index 0000000..7362244 --- /dev/null +++ b/components/desktops/phosh.xml @@ -0,0 +1,15 @@ +<image> + <profiles> + <profile name="Phosh-Desktop" description="Phosh Desktop"> + <requires profile="DesktopCommon"/> + </profile> + </profiles> + <packages type="bootstrap" patternType="plusRecommended" profiles="Phosh-Desktop"> + <package name="fedora-release-mobility"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="Phosh-Desktop"> + <!-- install env-group to resolve RhBug:1891500 --> + <namedCollection name="phosh-desktop-environment"/> + <package name="initial-setup-gui-wayland-generic"/> + </packages> +</image> diff --git a/components/desktops/soas.xml b/components/desktops/soas.xml new file mode 100644 index 0000000..f91802a --- /dev/null +++ b/components/desktops/soas.xml @@ -0,0 +1,29 @@ +<image> + <profiles> + <profile name="SoaS-Desktop" description="SoaS Desktop"> + <requires profile="DesktopCommon"/> + </profile> + </profiles> + <packages type="image" patternType="plusRecommended" profiles="SoaS-Desktop"> + <!-- install env-group to resolve RhBug:1891500 --> + <namedCollection name="sugar-desktop-environment"/> + <package name="dejavu-sans-fonts"/> + <package name="dejavu-sans-mono-fonts"/> + <package name="madan-fonts"/> + <package name="aajohan-comfortaa-fonts"/> + <package name="sil-abyssinica-fonts"/> + <package name="vlgothic-fonts"/> + <package name="rp-pppoe"/> <!-- See http://bugs.sugarlabs.org/ticket/1951 --> + <package name="livecd-iso-to-mediums" arch="x86_64"/> <!-- See http://bugs.sugarlabs.org/ticket/74 --> + <package name="xfce-polkit"/> + <package name="initial-setup-gui-wayland-generic"/> + <ignore name="@gnome-desktop"/> + <ignore name="firefox"/> + <ignore name="ibus*"/> + <ignore name="openbox"/> + <ignore name="PackageKit"/> + <!-- Drop these to allow the Sugar boot screen --> + <ignore name="plymouth-system-theme"/> + <ignore name="plymouth-theme-charge"/> + </packages> +</image> diff --git a/components/desktops/sway.xml b/components/desktops/sway.xml new file mode 100644 index 0000000..e6777f2 --- /dev/null +++ b/components/desktops/sway.xml @@ -0,0 +1,13 @@ +<image> + <profiles> + <profile name="Sway-Desktop" description="Sway Desktop"> + <requires profile="DesktopCommon"/> + </profile> + </profiles> + <packages type="image" patternType="plusRecommended" profiles="Sway-Desktop"> + <!-- install env-group to resolve RhBug:1891500 --> + <namedCollection name="sway-desktop-environment"/> + <namedCollection name="firefox"/> + <namedCollection name="swaywm-extended"/> + </packages> +</image> diff --git a/components/desktops/xfce.xml b/components/desktops/xfce.xml new file mode 100644 index 0000000..141d52e --- /dev/null +++ b/components/desktops/xfce.xml @@ -0,0 +1,25 @@ +<image> + <profiles> + <profile name="Xfce-Desktop" description="Xfce Desktop"> + <requires profile="DesktopCommon"/> + </profile> + </profiles> + <packages type="image" patternType="plusRecommended" profiles="Xfce-Desktop"> + <!-- install env-group to resolve RhBug:1891500 --> + <namedCollection name="xfce-desktop-environment"/> + <namedCollection name="xfce-apps"/> + <namedCollection name="xfce-extra-plugins"/> + <namedCollection name="xfce-media"/> + <namedCollection name="xfce-office"/> + <package name="wget"/> + <package name="system-config-printer"/> + <!-- Save some space --> + <ignore name="autofs"/> + <ignore name="acpid"/> + <ignore name="gimp-help"/> + <ignore name="desktop-backgrounds-basic"/> + <ignore name="aspell-*"/> <!-- dictionaries are big --> + <ignore name="xfce4-sensors-plugin"/> + <ignore name="xfce4-eyes-plugin"/> + </packages> +</image> diff --git a/components/liveinstall-eln.xml b/components/liveinstall-eln.xml new file mode 100644 index 0000000..20f3c40 --- /dev/null +++ b/components/liveinstall-eln.xml @@ -0,0 +1,65 @@ +<image> + <profiles> + <profile name="LiveInstall" description="Live Install ISO"> + <requires profile="BootCore"/> + </profile> + </profiles> + <preferences profiles="LiveInstall" arch="x86_64"> + <type image="iso" + publisher="Fedora Project" volid="Fedora_Linux_ELN" application_id="Fedora_Linux_ELN" + primary="true" flags="dmsquash" filesystem="erofs" erofscompression="lzma,level=6" mediacheck="true" + firmware="uefi" efiparttable="gpt" efifatimagesize="30" kernelcmdline="quiet rhgb" + fscreateoptions="-Efragments -C 1048576" + > + <bootloader name="grub2" grub_template="grub-x86.cfg.iso-template" console="console" timeout="10"/> + </type> + </preferences> + <preferences profiles="LiveInstall" arch="aarch64"> + <type image="iso" + publisher="Fedora Project" volid="Fedora_Linux_ELN" application_id="Fedora_Linux_ELN" + primary="true" flags="dmsquash" filesystem="erofs" erofscompression="lzma,level=6" mediacheck="true" + firmware="uefi" efiparttable="gpt" efifatimagesize="30" kernelcmdline="quiet rhgb" + fscreateoptions="-Efragments -C 1048576" + > + <bootloader name="grub2" grub_template="grub-arm.cfg.iso-template" console="console" timeout="10"/> + </type> + </preferences> + <preferences profiles="LiveInstall" arch="riscv64"> + <type image="iso" + publisher="Fedora Project" volid="Fedora_Linux_ELN" application_id="Fedora_Linux_ELN" + primary="true" flags="dmsquash" filesystem="erofs" erofscompression="lzma,level=6" mediacheck="true" + firmware="uefi" efiparttable="gpt" efifatimagesize="30" kernelcmdline="quiet rhgb" + fscreateoptions="-Efragments -C 1048576" + > + <bootloader name="grub2" grub_template="grub-riscv64.cfg.iso-template" console="console" timeout="10"/> + </type> + </preferences> + <preferences profiles="LiveInstall" arch="ppc64le"> + <type image="iso" + publisher="Fedora Project" volid="Fedora_Linux_ELN" application_id="Fedora_Linux_ELN" + primary="true" flags="dmsquash" filesystem="erofs" erofscompression="lzma,level=6" mediacheck="true" + firmware="ofw" kernelcmdline="quiet rhgb" + fscreateoptions="-Efragments -C 1048576" + > + <bootloader name="grub2" grub_template="grub-ppc.cfg.iso-template" console="console" timeout="10"/> + </type> + </preferences> + <packages type="iso" patternType="plusRecommended" profiles="LiveInstall"> + <!-- Filter out unwanted EFI files from the embedded ESP, see rhbz#2358785 --> + <file name="iso-esp-excludes.yaml" target="image/exclude_files_efifatimage.yaml"/> + <!-- The point of a live image is to install --> + <namedCollection name="anaconda-tools"/> + <package name="anaconda-install-env-deps"/> + <package name="anaconda-live"/> + <package name="dracut-live"/> + <package name="glibc-all-langpacks"/> + <package name="isomd5sum"/> + <package name="kernel"/> + <package name="kernel-modules"/> + <package name="kernel-modules-extra"/> + <package name="livesys-scripts"/> + <ignore name="device-mapper-multipath"/> + <ignore name="fcoe-utils"/> + <ignore name="gfs2-utils"/> + </packages> +</image> diff --git a/components/liveinstall.xml b/components/liveinstall.xml new file mode 100644 index 0000000..6b683b2 --- /dev/null +++ b/components/liveinstall.xml @@ -0,0 +1,43 @@ +<image> + <profiles> + <profile name="LiveInstall" description="Live Install ISO"> + <requires profile="BaseCommon"/> + <requires profile="BootCoreLive"/> + </profile> + </profiles> + <preferences profiles="LiveInstall" arch="aarch64"> + <type image="iso" + publisher="Fedora Project" volid="Fedora_Linux" application_id="Fedora_Linux" + primary="true" flags="dmsquash" filesystem="erofs" erofscompression="lzma,level=6" mediacheck="true" + firmware="efi" efiparttable="gpt" efifatimagesize="30" + kernelcmdline="quiet rhgb mem_sleep_default=s2idle clk_ignore_unused pd_ignore_unused systemd.tpm2_wait=0 rd.live.ram=1" + fscreateoptions="-Efragments -C 1048576" + editbootconfig="surface-editbootconfig.sh" + > + <bootloader name="grub2" grub_template="grub-arm.cfg.iso-template" console="console" timeout="10"/> + </type> + </preferences> + <packages type="iso" patternType="plusRecommended" profiles="LiveInstall"> + <!-- Filter out unwanted EFI files from the embedded ESP, see rhbz#2358785 --> + <file name="iso-esp-excludes.yaml" target="image/exclude_files_efifatimage.yaml"/> + <!-- The point of a live image is to install --> + <namedCollection name="anaconda-tools"/> + <package name="anaconda-install-env-deps"/> + <package name="anaconda-live"/> + <!-- Need this for SVG release note images --> + <package name="aajohan-comfortaa-fonts"/> + <package name="dracut-live"/> + <package name="glibc-all-langpacks"/> + <package name="isomd5sum"/> + <!-- Surface Pro 12": no kernel package here at all. BootCoreLive's + kernel-surface already carries every module, and its %posttrans + kernel-install leaves the /boot vmlinuz that grub2's ISO kernel + lookup needs. See the kernel block in components/boot.xml. --> + <package name="livesys-scripts"/> + <package name="btrfs-progs"/> + <package name="udisks2-btrfs"/> + <ignore name="device-mapper-multipath"/> + <ignore name="fcoe-utils"/> + <ignore name="gfs2-utils"/> + </packages> +</image> diff --git a/components/users.xml b/components/users.xml new file mode 100644 index 0000000..ab9dcb7 --- /dev/null +++ b/components/users.xml @@ -0,0 +1,6 @@ +<image> + <users profiles="BootCore"> + <!-- The password here does not matter, it will be erased in config.sh --> + <user name="root" groups="root" password="linux" home="/root" pwdformat="plain" /> + </users> +</image> diff --git a/config.sh b/config.sh new file mode 100755 index 0000000..be5a142 --- /dev/null +++ b/config.sh @@ -0,0 +1,807 @@ +#!/bin/bash + +set -euxo pipefail + +installarch=$(uname -m) +kver=$(basename "$(ls -d /usr/lib/modules/*/)") + +if [[ $installarch != "aarch64" ]]; then + printf 'Error: this specific config is only meant for Surface Pro 12", and it is built on ARM64 chip (you have "%s" as build arch).' "$installarch" + exit 1 +fi + +#====================================== +# Functions... +#-------------------------------------- +test -f /.kconfig && . /.kconfig +test -f /.profile && . /.profile + +#====================================== +# Greeting... +#-------------------------------------- +echo "Configure image: [$kiwi_iname]-[$kiwi_profiles]..." + +#====================================== +# Set SELinux booleans +#-------------------------------------- +if [[ "$kiwi_profiles" != *"Container"* ]] && [[ "$kiwi_profiles" != *"FEX"* ]] && [[ "$kiwi_profiles" != *"WSL"* ]]; then + ## Fixes KDE Plasma, see rhbz#2058657 + setsebool -P selinuxuser_execmod 1 +fi + +#====================================== +# Clear machine specific configuration +#-------------------------------------- +## Clear machine-id on pre generated images +rm -f /etc/machine-id +echo 'uninitialized' > /etc/machine-id +## remove random seed, the newly installed instance should make its own +rm -f /var/lib/systemd/random-seed + +#====================================== +# Configure grub correctly +#-------------------------------------- +if [[ "$kiwi_profiles" != *"Container"* ]] && [[ "$kiwi_profiles" != *"FEX"* ]] && [[ "$kiwi_profiles" != *"WSL"* ]]; then + ## Works around issues with grub-bls + ## See: https://github.com/OSInside/kiwi/issues/2198 + echo "GRUB_DEFAULT=saved" >> /etc/default/grub + ## Disable submenus to match Fedora + echo "GRUB_DISABLE_SUBMENU=true" >> /etc/default/grub + ## Disable recovery entries to match Fedora + echo "GRUB_DISABLE_RECOVERY=true" >> /etc/default/grub + ## Surface Pro 12" (Snapdragon X1P-42-100): grub's gfxterm/GOP video probing + ## crashes on this GPU. Force plain text console, skip framebuffer handoff. + echo "GRUB_TERMINAL_OUTPUT=console" >> /etc/default/grub + echo "GRUB_GFXPAYLOAD_LINUX=text" >> /etc/default/grub + ## Surface Pro 12": GRUB_DEVICETREE is the only mechanism Fedora honours for + ## putting a devicetree line in a BLS entry -- 20-grub.install's mkbls emits + ## "devicetree /dtb-$kver/$GRUB_DEVICETREE". /etc/kernel/devicetree does + ## nothing here: /boot/<machine-id> does not exist, so kernel-install runs + ## with layout=other and 90-loaderentry.install (which would read it) bails. + echo "GRUB_DEVICETREE=qcom/x1p42100-microsoft-sp12in.dtb" >> /etc/default/grub + ## Upstream sets menu_auto_hide=1 + boot_indeterminate=1 here for Disk images + ## to match anaconda's behaviour. Deliberately not done for Surface Pro 12": + ## with the menu hidden, GRUB counts down GRUB_TIMEOUT against a blank screen + ## and then crashes during the hand-off on this firmware, so the first boot + ## always fails and only the second succeeds. The equivalent for the + ## anaconda-installed system is the /etc/anaconda/conf.d drop-in below. +fi + +#====================================== +# Resize root partition on first boot +#-------------------------------------- + +if [[ "$kiwi_profiles" == *"Disk"* ]]; then + mkdir -p /etc/repart.d/ + cat > /etc/repart.d/50-root.conf << EOF +[Partition] +Type=root +EOF +fi + +#====================================== +# Delete & lock the root user password +#-------------------------------------- +if [[ "$kiwi_profiles" == *"Cloud"* ]] || [[ "$kiwi_profiles" == *"Disk"* ]] || [[ "$kiwi_profiles" == *"Live"* ]] || [[ "$kiwi_profiles" == *"WSL"* ]]; then + passwd -d root + passwd -l root +fi + +#====================================== +# Setup default services +#-------------------------------------- + +if [[ "$kiwi_profiles" == *"Live"* ]]; then + ## Configure livesys session + if [[ "$kiwi_profiles" == *"GNOME"* ]]; then + echo 'livesys_session="gnome"' > /etc/sysconfig/livesys + fi + if [[ "$kiwi_profiles" == *"KDE"* ]]; then + echo 'livesys_session="kde"' > /etc/sysconfig/livesys + fi + if [[ "$kiwi_profiles" == *"Budgie"* ]]; then + echo 'livesys_session="budgie"' > /etc/sysconfig/livesys + fi + if [[ "$kiwi_profiles" == *"Cinnamon"* ]]; then + echo 'livesys_session="cinnamon"' > /etc/sysconfig/livesys + fi + if [[ "$kiwi_profiles" == *"COSMIC"* ]]; then + echo 'livesys_session="cosmic"' > /etc/sysconfig/livesys + fi + if [[ "$kiwi_profiles" == *"i3"* ]]; then + echo 'livesys_session="i3"' > /etc/sysconfig/livesys + fi + if [[ "$kiwi_profiles" == *"LXDE"* ]]; then + echo 'livesys_session="lxde"' > /etc/sysconfig/livesys + fi + if [[ "$kiwi_profiles" == *"LXQt"* ]]; then + echo 'livesys_session="lxqt"' > /etc/sysconfig/livesys + fi + if [[ "$kiwi_profiles" == *"MATE_Compiz"* ]]; then + echo 'livesys_session="mate"' > /etc/sysconfig/livesys + fi + if [[ "$kiwi_profiles" == *"MiracleWM"* ]]; then + echo 'livesys_session="miraclewm"' > /etc/sysconfig/livesys + fi + if [[ "$kiwi_profiles" == *"Sway"* ]]; then + echo 'livesys_session="sway"' > /etc/sysconfig/livesys + fi + if [[ "$kiwi_profiles" == *"SoaS"* ]]; then + echo 'livesys_session="soas"' > /etc/sysconfig/livesys + fi + if [[ "$kiwi_profiles" == *"Xfce"* ]]; then + echo 'livesys_session="xfce"' > /etc/sysconfig/livesys + fi +fi + +#====================================== +# Setup firstboot initial setup +#-------------------------------------- + +if [[ "$kiwi_profiles" == *"Disk"* ]]; then + if [[ "$kiwi_profiles" != *"GNOME"* ]] && [[ "$kiwi_profiles" != *"KDE"* ]] && [[ "$kiwi_profiles" != *"COSMIC"* ]]; then + ## Enable initial-setup + systemctl enable initial-setup.service + ## Enable reconfig mode + touch /etc/reconfigSys + fi +fi + +#====================================== +# Setup default target +#-------------------------------------- +if [[ "$kiwi_profiles" != *"Container"* ]] && [[ "$kiwi_profiles" != *"FEX"* ]]; then + if [[ "$kiwi_profiles" == *"Desktop"* ]]; then + systemctl set-default graphical.target + else + systemctl set-default multi-user.target + fi +fi + +#====================================== +# Setup default customizations +#-------------------------------------- + +if [[ "$kiwi_profiles" == *"Server"* ]]; then + # Trigger lvm-devices-import.path and .service to create + # a new /etc/lvm/devices/system.devices for the root VG. + rm -f /etc/lvm/devices/system.devices + touch /etc/lvm/devices/auto-import-rootvg +fi + +if [[ "$kiwi_profiles" == *"Azure"* ]]; then +cat > /etc/ssh/sshd_config.d/50-client-alive-interval.conf << EOF +ClientAliveInterval 120 +EOF + +cat >> /etc/chrony.conf << EOF +# Azure's virtual time source: +# https://docs.microsoft.com/en-us/azure/virtual-machines/linux/time-sync#check-for-ptp-clock-source +refclock PHC /dev/ptp_hyperv poll 3 dpoll -2 offset 0 +EOF + +# Support Azure's accelerated networking feature; without this the network fails +# to come up. It may need adjustments for additional drivers in the future. +cat > /etc/NetworkManager/conf.d/99-azure-unmanaged-devices.conf << EOF +# Ignore SR-IOV interface on Azure, since it's transparently bonded +# to the synthetic interface +[keyfile] +unmanaged-devices=driver:mlx4_core;driver:mlx5_core +EOF + +# Configure DHCP timeout for Azure to retry indefinitely during VM provisioning +cat > /etc/NetworkManager/conf.d/99-azure-dhcp-timeout.conf << EOF +# Azure requires VMs to attempt DHCP for at least 300 seconds during provisioning, +# as that's the upper bound of how long Azure waits to make networking available. +# NetworkManager's ipv4.dhcp-timeout setting accepts 2147483647 as a special value +# representing infinity, which ensures DHCP keeps retrying indefinitely. This is +# more robust than a fixed timeout and matches systemd-networkd's default behavior. +# Both IPv4 and IPv6 are configured to prepare for IPv6-only scenarios. +# Reference: https://networkmanager.dev/docs/api/latest/nm-settings-nmcli.html +[connection] +ipv4.dhcp-timeout=2147483647 +ipv6.dhcp-timeout=2147483647 +EOF +fi + +if [[ "$kiwi_profiles" == *"GCE"* ]]; then +cat <<EOF > /etc/NetworkManager/conf.d/gcp-mtu.conf +# In GCP it is recommended to use 1460 as the MTU. +# Set it to 1460 for all connections. +# https://cloud.google.com/network-connectivity/docs/vpn/concepts/mtu-considerations +[connection] +ethernet.mtu = 1460 +EOF +fi + +if [[ "$kiwi_profiles" == *"Vagrant"* ]]; then +sed -e 's/.*UseDNS.*/UseDNS no/' -i /etc/ssh/sshd_config +mkdir -m 0700 -p ~vagrant/.ssh +cat > ~vagrant/.ssh/authorized_keys << EOKEYS +ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key +EOKEYS +chmod 600 ~vagrant/.ssh/authorized_keys +chown -R vagrant:vagrant ~vagrant/.ssh/ + +cat > /etc/sudoers.d/vagrant << EOSUDOER +## Ensure the vagrant user always can use sudo +Defaults:vagrant !requiretty +vagrant ALL=(ALL) NOPASSWD: ALL +EOSUDOER +chmod 600 /etc/sudoers.d/vagrant + +cat > /etc/ssh/sshd_config.d/10-vagrant-insecure-rsa-key.conf <<EOF +# For now the vagrant insecure key is an rsa key +# https://github.com/hashicorp/vagrant/issues/11783 +PubkeyAcceptedKeyTypes=+ssh-rsa +EOF + +# Further suggestion from @purpleidea (James Shubin) - extend key to root users as well +mkdir -m 0700 -p /root/.ssh +cp /home/vagrant/.ssh/authorized_keys /root/.ssh/authorized_keys +chmod 600 /root/.ssh/authorized_keys +chown -R root:root /root/.ssh +fi + +# https://bugzilla.redhat.com/show_bug.cgi?id=2356069 +if [[ "$kiwi_profiles" == *"Container"* ]] && [[ "$kiwi_profiles" != *"Init"* ]]; then + if [[ -f /usr/lib/tmpfiles.d/rootfiles.conf ]]; then + systemd-tmpfiles --create /usr/lib/tmpfiles.d/rootfiles.conf + fi +fi + +if [[ "$kiwi_profiles" == *"Container"* ]] || [[ "$kiwi_profiles" == *"FEX"* ]]; then + # Set install langs macro so that new rpms that get installed will + # only install langs that we limit it to. + LANG="en_US" + echo "%_install_langs $LANG" > /etc/rpm/macros.image-language-conf + + # https://bugzilla.redhat.com/show_bug.cgi?id=1727489 + echo 'LANG="C.UTF-8"' > /etc/locale.conf + + # https://bugzilla.redhat.com/show_bug.cgi?id=1400682 + echo "Import RPM GPG key" + releasever=$(rpm --eval '%{?fedora}') + + # When building ELN containers, we don't have the %{fedora} macro + if [ -z $releasever ]; then + releasever=eln + fi + + rpm --import /usr/share/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-primary + + echo "# fstab intentionally empty for containers" > /etc/fstab + + # Remove machine-id on pre generated images + rm -f /etc/machine-id + touch /etc/machine-id + + echo "# resolv placeholder" > /etc/resolv.conf + chmod 644 /etc/resolv.conf + + # Remove extraneous files + rm -rf /tmp/* + + # https://pagure.io/atomic-wg/issue/308 + printf "tsflags=nodocs\n" >>/etc/dnf/dnf.conf + + if [[ "$kiwi_profiles" == *"Base-Generic-Minimal"* ]]; then + # remove some random help txt files + rm -fv /usr/share/gnupg/help*.txt + + # Pruning random things + rm /usr/lib/rpm/rpm.daily + rm -rfv /usr/lib64/nss/unsupported-tools/ # unsupported + + # Statically linked crap + rm -fv /usr/sbin/{glibc_post_upgrade.x86_64,sln} + ln /usr/bin/ln usr/sbin/sln + + # Remove some dnf info + rm -rfv /var/lib/dnf + + # don't need icons + rm -rfv /usr/share/icons/* + + #some random not-that-useful binaries + rm -fv /usr/bin/pinky + + # we lose presets by removing /usr/lib/systemd but we do not care + rm -rfv /usr/lib/systemd + fi + if [[ "$kiwi_profiles" == *"Toolbox"* ]]; then + # Remove macros.image-language-conf file + rm -f /etc/rpm/macros.image-language-conf + + # Remove 'tsflags=nodocs' line from dnf.conf + sed -i '/tsflags=nodocs/d' /etc/dnf/dnf.conf + fi +fi + +if [[ "$kiwi_profiles" == *"Jam"* ]]; then +# Override boot configuration in Anaconda to enable threaded IRQs +cat > /usr/share/anaconda/post-scripts/85-jam-threadirqs.ks << THREADIRQS_EOF +%post + +echo "Enable threaded IRQs" +grubby --update-kernel=ALL --args="threadirqs" +%end +THREADIRQS_EOF + +# Override new user configuration to add audio groups +sed -e "s/UserGroups=.*/UserGroups=wheel,jackuser,audio/" -i /etc/xdg/plasmasetuprc + +# Override livesys-kde settings +cat >> /var/lib/livesys/livesys-session-extra << EOF + +#setup kickoff favorites +/bin/mkdir -p /etc/skel/.config + +JAMFAVORITES=/usr/share/applications/firefox.desktop,/usr/share/applications/mozilla-thunderbird.desktop,/usr/share/applications/studio-controls.desktop,/usr/share/applications/ardour6.desktop,/usr/share/applications/carla.desktop,/usr/share/applications/org.kde.konsole.desktop,/usr/share/applications/org.kde.dolphin.desktop,/usr/share/applications/systemsettings.desktop +JAMFAVORITESLIVE=/usr/share/applications/liveinst.desktop,\$JAMFAVORITES + +cat <<FOE >> /etc/skel/.config/kickoffrc +[Favorites] +FavoriteURLs=\$JAMFAVORITES +FOE + +/usr/sbin/usermod -a -G jackuser,audio liveuser +EOF +fi + +if [[ "$kiwi_profiles" == *"Design_suite"* ]]; then +# Add link to lists of tutorials +cat >> /usr/share/applications/list-design-tutorials.desktop << FOE +[Desktop Entry] +Name=List of design tutorials +GenericName=List of Tutorials for Designers +Comment=Reference of Design Related Tutorials +Exec=xdg-open https://fedoraproject.org/wiki/Design_Suite/Tutorials +Type=Application +Icon=applications-graphics +Categories=Graphics;Documentation; +FOE +chmod a+x /usr/share/applications/list-design-tutorials.desktop + +# Add information about Fedora Design Suite +cat >> /usr/share/applications/fedora-design-suite.desktop << FOE +[Desktop Entry] +Name=Design Suite Info +GenericName=About Design Suite +Comment=Wiki page of Design Suite +Exec=xdg-open https://fedoraproject.org/wiki/Design_Suite +Type=Application +Icon=applications-internet +Categories=Documentation; +FOE +chmod a+x /usr/share/applications/fedora-design-suite.desktop + +# Add information about Fedora Design Team +cat >> /usr/share/applications/fedora-design-team.desktop << FOE +[Desktop Entry] +Name=Design Team Info +GenericName=About Design Team +Comment=Documentation about Design Team +Exec=xdg-open https://docs.fedoraproject.org/en-US/design/ +Type=Application +Icon=applications-internet +Categories=Documentation; +FOE +chmod a+x /usr/share/applications/fedora-design-team.desktop + +# Use Powerline in bash +cat >> /etc/profile.d/powerline-shell.sh << FOE +# Enable powerline daemon +if [ -f `which powerline-daemon` ]; then + powerline-daemon -q + POWERLINE_BASH_CONTINUATION=1 + POWERLINE_BASH_SELECT=1 + . /usr/share/powerline/bash/powerline.sh +fi +FOE +chmod 644 /etc/profile.d/powerline-shell.sh +# End powerline override + +# Override the favorite desktop application in Dash +cat >> /usr/share/glib-2.0/schemas/org.gnome.shell.gschema.override << FOE +[org.gnome.shell] +favorite-apps=['org.mozilla.firefox.desktop', 'shotwell.desktop', 'gimp.desktop', 'darktable.desktop', 'krita.desktop', 'inkscape.desktop', 'blender.desktop', 'libreoffice-writer.desktop', 'scribus.desktop', 'kdenlive.desktop', 'nautilus.desktop', 'anaconda.desktop', 'list-design-tutorials.desktop'] +FOE + +# Rebuild schema cache with any overrides we installed +glib-compile-schemas /usr/share/glib-2.0/schemas +fi + +if [[ "$kiwi_profiles" == *"SoaS"* ]]; then +# Get proper release naming in the control panel +cat >> /boot/olpc_build << EOF +Sugar on a Stick +EOF +cat /etc/fedora-release >> /boot/olpc_build + +# Set the default Plymouth theme to the Sugar Desktop one +/usr/sbin/plymouth-set-default-theme sugar + +# Fix https://bugzilla.redhat.com/show_bug.cgi?id=2239137 +cat > /etc/xdg/autostart/xfce-polkit.desktop <<EOF +[Desktop Entry] +Type=Application +Name=xfce-polkit +Exec=/usr/libexec/xfce-polkit +EOF + +fi + +#====================================== +# Surface Pro 12" customizations +#-------------------------------------- + +install -Dm644 /tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/yum.repos.d/kernel-sp12in.repo \ + /etc/yum.repos.d/kernel-sp12in.repo + +# Device tree. kernel-surface compiles the patched dts in-tree and installs the +# result twice: into its own module tree (dtb/qcom, from dtbs_install) and into +# /usr/lib/surface-dtb/<kver>/. The latter is the master copy +# 60-surface-dtb.install re-stages into a kernel that shipped without one, +# which is the only reason the image no longer carries a prebuilt blob of its +# own -- the description installs kernel-surface by name and <ignore>s Fedora's +# kernel packages, so the package is always there. +# +# One name throughout, upstream's: this block, GRUB_DEVICETREE above, both +# kernel-install plugins, /etc/kernel/devicetree, and the ISO grub template. +# +# The module-tree and /boot copies plus the /boot/dtb symlink are what that hook +# and grubby's 10-devicetree.install would normally produce, done up front here +# because kernel-install does not run again during this build -- without the +# module-tree copy, anything keyed off /usr/lib/modules/$kver/dtb (including the +# anaconda post-script) finds nothing and silently does nothing. +dtb_name=x1p42100-microsoft-sp12in.dtb +# One directory per kernel version under /usr/lib/surface-dtb: kernel-surface is +# installonly, so nothing it owns can be version-unqualified. Only one release is +# ever installed at this point in the build, but glob anyway rather than assume. +dtb_src=$(ls -1 /usr/lib/surface-dtb/*/"$dtb_name" 2>/dev/null | sort -V | tail -n1) +if [[ -z "$dtb_src" ]]; then + printf 'Error: no %s under /usr/lib/surface-dtb/, so kernel-surface (built from ../kernel-surface) is not installed.\n' "$dtb_name" >&2 + exit 1 +fi +install -Dm644 "$dtb_src" "/usr/lib/modules/$kver/dtb/qcom/$dtb_name" +install -Dm644 "$dtb_src" "/boot/dtb-$kver/qcom/$dtb_name" +# dtbs_install ships every arm64 device tree, ~1000 boards, and the module tree +# goes straight into the image filesystem. This image targets exactly one board, +# so drop the rest -- the same objection that rules out kernel-uki-dtbloader in +# components/boot.xml. Only affects the image; a later kernel-surface update on +# the installed system restores the full tree. +find "/usr/lib/modules/$kver/dtb" -mindepth 1 \ + \! -path "/usr/lib/modules/$kver/dtb/qcom" \ + \! -name "$dtb_name" \ + -delete +# /boot/dtb -> dtb-$kver is what grubby's 10-devicetree.install maintains, and +# what the boot loader entry's devicetree path resolves through +ln -sfn "dtb-$kver" /boot/dtb +# Defer qcom_q6v5_pas past switch-root so the DSPs' auto_boot can actually find +# their firmware; see the comments in the file for the full failure mode. +install -Dm644 /tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/dracut.conf.d/surface-pro-12-inch.conf \ + /etc/dracut.conf.d/surface-pro-12-inch.conf +install -Dm644 /tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/kernel/cmdline \ + /etc/kernel/cmdline +install -Dm644 /tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/kernel/devicetree \ + /etc/kernel/devicetree +install -Dm644 /tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/kernel/install.conf \ + /etc/kernel/install.conf +install -Dm755 /tmp/SayaAndy/surface-pro-12-inch-linux-fedora/usr/lib/kernel/install.d/60-surface-dtb.install \ + /usr/lib/kernel/install.d/60-surface-dtb.install +# Puts the "devicetree" line into the BLS entry. This is the only mechanism that +# survives an anaconda install: /etc/kernel/devicetree is never read (layout is +# always "other" on Fedora, so 90-loaderentry.install bails) and GRUB_DEVICETREE +# is dropped when anaconda rewrites /etc/default/grub from its own key list. +# kernel-install plugins do run in the target during installation, and sorting +# after 20-grub.install means the entry it generates is already there to patch. +install -Dm755 /tmp/SayaAndy/surface-pro-12-inch-linux-fedora/usr/lib/kernel/install.d/95-surface-dtb-patch.install \ + /usr/lib/kernel/install.d/95-surface-dtb-patch.install +install -Dm644 /tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/udev/rules.d/61-sensors-surface-pro-12-inch.rules \ + /etc/udev/rules.d/61-sensors-surface-pro-12-inch.rules + +if [[ "$kiwi_profiles" == *"Live"* ]]; then + # Stop anaconda hiding the GRUB menu on the installed system's first boot. + # Only meaningful in the installer environment, hence Live-only; see the + # comments in the file for why a hidden menu breaks this device. + install -Dm644 /tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/anaconda/conf.d/90-surface-pro-12-inch.conf \ + /etc/anaconda/conf.d/90-surface-pro-12-inch.conf + + # Ship the CD-boot grub on the ISO, not the disk-boot one. + # + # kiwi picks the ISO's EFI loader by globbing the image root (see + # Defaults.get_unsigned_grub_loader, target_type='iso'). That pattern list + # has a CD-boot entry for x86_64 (gcdx64.efi) but none for aarch64, so here + # it falls through to grubaa64.efi -- the *disk* image, whose baked-in grub + # prefix is /EFI/fedora. Meanwhile kiwi writes its earlyboot config to + # /EFI/BOOT/grub.cfg, and iso-esp-excludes.yaml deletes "fedora" from the + # embedded ESP outright (rhbz#2358785). Net result on aarch64: the loader + # looks for its config in a directory that was deliberately removed, fails + # to load normal.mod, and dies before drawing anything -- black screen. + # + # gcdaa64.efi is byte-for-byte the same grub except its prefix is /EFI/BOOT, + # which is exactly where kiwi puts the config. Overwrite the path kiwi globs + # so it picks that one up instead. + # + # Only affects direct UEFI boot. Ventoy never executes this binary -- it + # loopback-mounts the ISO and runs /boot/grub2/grub.cfg under its own grub. + cp -a /boot/efi/EFI/fedora/gcdaa64.efi /boot/efi/EFI/fedora/grubaa64.efi +fi + +# 51-dracut-rescue.install isn't UKI-aware -- it unconditionally sed's a BLS +# loader entry that layout=uki never creates. Mask it (kernel-install(8)'s +# documented way to disable a plugin: a /dev/null symlink of the same name). +mkdir -p /etc/kernel/install.d +ln -sf /dev/null /etc/kernel/install.d/51-dracut-rescue.install +# kernel-surface's %posttrans scriptlet already ran kernel-install once, before +# this mask existed (root overlay lands after package install), leaving a +# stale rescue image behind. Remove it now so kiwi's systemd_boot EFI-FAT-image +# step doesn't try to cram it in too. +rm -f /boot/initramfs-0-rescue-*.img /boot/loader/entries/*-0-rescue.conf + +# GPU/ADSP/CDSP firmware + qcom DSP/sensor share config from the device tree repo +# (readme.md: "recursively copy the files in ./lib/ to /lib/", same for ./usr/) +cp -a /tmp/harrisonvanderbyl/surface-pro-12-inch-linux/lib/. /lib/ +cp -a /tmp/harrisonvanderbyl/surface-pro-12-inch-linux/usr/. /usr/ + +build_tmp=$(mktemp -d) + +# Snapshot what's installed before pulling in build-only tooling, so we can +# remove exactly what this block adds afterward -- and nothing Kiwi's own +# package lists (other team/desktop profiles) already wanted installed. +pkgs_before=$(mktemp) +rpm -qa --qf '%{NAME}\n' | sort > "$pkgs_before" + +# Wi-Fi (ath12k) board file fixup, adapted from dwhinham/linux-surface-pro-11 +dnf install -y python3 curl zstd +( + cd "$build_tmp" + cp /lib/firmware/ath12k/WCN7850/hw2.0/board-2.bin* . + if [ -f board-2.bin.zst ]; then + zstd -d board-2.bin.zst + elif [ -f board-2.bin.xz ]; then + xz -d board-2.bin.xz + fi + curl --output bdencoder.py -sL \ + https://raw.githubusercontent.com/qca/qca-swiss-army-knife/refs/heads/master/tools/scripts/ath12k/ath12k-bdencoder + python3 bdencoder.py --extract board-2.bin + rm -f bdencoder.py + mv "bus=pci,vendor=17cb,device=1107,subsystem-vendor=17cb,subsystem-device=3378,qmi-chip-id=2,qmi-board-id=255.bin" \ + /lib/firmware/ath12k/WCN7850/hw2.0/board.bin +) + +# AudioReach topology; alsatplg (the topology *compiler*) is build-only, the +# compiled blob is what ships. alsa-ucm-utils' UCM profiles are read at runtime +# by the audio stack, so that one's installed separately, alongside v4l-utils below. +dnf install -y git cmake gcc gcc-c++ make pkgconf-pkg-config alsa-topology-utils m4 +( + cd /tmp/linux-msm/audioreach-topology + git clone https://github.com/linux-msm/audioreach-topology + cd audioreach-topology + export FW_LOCATION=/lib/firmware + cmake . + make + make install +) + +# hexagonrpc + libssc + iio-sensor-proxy (fastrpc/sensor stack); not packaged in Fedora +dnf install -y \ + systemd-devel libgudev-devel polkit-devel gtk3-devel python3-devel \ + meson ninja-build gcc gcc-c++ git pkgconf-pkg-config \ + libqmi-devel glib2-devel protobuf3-c-devel gobject-introspection-devel +# meson's default prefix is /usr/local, and Fedora's dynamic linker does not +# search there -- /etc/ld.so.conf.d ships only iscsi and pipewire entries. Without +# this, libhexagonrpc.so installs fine but ld.so can't find it, and hexagonrpcd +# dies at startup with "no libhexagonrpc.so" (which then takes iio-sensor-proxy +# down with it via Requires=). Cover both libdir spellings. +printf '/usr/local/lib\n/usr/local/lib64\n' > /etc/ld.so.conf.d/surface-pro-12-inch.conf +( + cd /tmp/harrisonvanderbyl/hexagonrpc + meson setup build + ninja -C build + ninja -C build install + ldconfig +) +( + cd /tmp/DylanVanAssche/libssc + meson setup _build + meson compile -C _build + meson install -C _build + ldconfig +) +( + cd /tmp/harrisonvanderbyl/iio-sensor-proxy + meson _build -Dssc-support=enabled -Dprefix=/usr + ninja -v -C _build install +) + +# Remove exactly what got newly installed since the snapshot above (compilers, +# -devel headers, alsatplg, and whatever they pulled in transitively). Anything +# that was already installed before -- because some other team/desktop profile +# in this same build wanted it, or it's part of the base image -- is left alone. +pkgs_new=$(comm -13 "$pkgs_before" <(rpm -qa --qf '%{NAME}\n' | sort)) +if [ -n "$pkgs_new" ]; then + dnf remove -y $pkgs_new +fi +rm -f "$pkgs_before" + +# UCM profiles read at runtime by the audio stack +dnf install -y alsa-ucm-utils + +install -Dm644 /tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/systemd/system/hexagonrpc.service \ + /etc/systemd/system/hexagonrpc.service + +# iio-sensor-proxy keeps the unit its own build installed, and gets only the +# ordering against hexagonrpcd added on top. The drop-in is dead weight if that +# unit is not there, so check rather than let it pass silently. +test -f /usr/lib/systemd/system/iio-sensor-proxy.service +install -Dm644 /tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/systemd/system/iio-sensor-proxy.service.d/60-surface-pro-12-inch.conf \ + /etc/systemd/system/iio-sensor-proxy.service.d/60-surface-pro-12-inch.conf + +# Only hexagonrpcd is enabled statically. iio-sensor-proxy is started through +# its D-Bus name by whatever asks for net.hadess.SensorProxy, which then pulls +# hexagonrpc.service in through the drop-in above. +systemctl enable hexagonrpc.service + +# Cameras (msm/camss). Nothing has to be wired up at boot. libcamera's "simple" +# pipeline handler claims qcom-camss and builds the media graph itself in +# configure(), including flipping the csiphy -> msm_csid0 link between the rear +# ov13858 and the front ov02c10, so a media-ctl unit only fights it: pinning +# csid0 to the rear sensor at boot leaves the front camera disconnected until +# something re-links it, and the formats such a unit has to guess are what made +# the old wireupcameras.service die with "Unable to setup formats: Invalid +# argument (22)" on every boot. +# +# v4l-utils stays, for inspecting the graph by hand -- media-ctl -p, and +# v4l2-ctl --stream-mmap on the RDI node to check the sensor below libcamera. +dnf install -y v4l-utils + +# The front ov02c10 needs a libcamera that knows its analogue gain model and +# black level; upstream libcamera has neither, and there is no plugin mechanism +# for them, but kernel-sp12in repo offers libcamera with supported models. +# Pulled in by name because it would otherwise only arrive as a dependency, +# which makes it easy to lose without noticing. +dnf install -y libcamera libcamera-ipa + +libcamera_nevra=$(rpm -q libcamera) +case "${libcamera_nevra}" in + *.sp12in*) printf 'Using %s\n' "${libcamera_nevra}" ;; + *) + printf 'Error: %s is Fedora'"'"'s libcamera, not the sp12in rebuild.\n' \ + "${libcamera_nevra}" >&2 + printf 'Fedora has probably bumped the release past the rebuild; rebase\n' >&2 + printf 'patches/ in ../libcamera and tag a new release suffix.\n' >&2 + exit 1 + ;; +esac + +# Hardware video decode needs firmware this image is not allowed to carry. The +# qcom/vpu/vpu30_p1_s7.mbn in linux-firmware is the same codec signed with +# Qualcomm's SecTools test keys, which a retail Surface's TrustZone rejects, and +# the production-signed build exists only inside Microsoft's Surface driver +# package, under terms that grant no redistribution right. +# +# So the image ships the means rather than the blob: a script that copies it out +# of a Windows install the owner already has a licence for, and a unit that runs +# that once on a dual-boot machine. Where Windows is gone, the script says which +# driver pack to download and how to point it at one. +dnf install -y msitools +install -Dm755 /tmp/SayaAndy/surface-pro-12-inch-linux-fedora/usr/local/bin/surface-video-firmware.sh \ + /usr/local/bin/surface-video-firmware.sh +install -Dm644 /tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/systemd/system/surface-video-firmware.service \ + /etc/systemd/system/surface-video-firmware.service +systemctl enable surface-video-firmware.service + +# Suspend on Snapdragon is still very unstable. This is the reason why +# 'mem_sleep_default=s2idle' is set explicitly in the cmdline as 'deep' mode +# does not function at all. +# Even then, suspending via gnome settings daemon results in hard freeze. +# This is why: +# logind behavior is kept intact with suspend behavior. +# gnome default power button behavior was replaced with 'interactive'. +install -Dm644 /tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/systemd/logind.conf.d/60-surface-power-key.conf \ + /etc/systemd/logind.conf.d/60-surface-power-key.conf +install -Dm644 /tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/dconf/db/local.d/00-power-button \ + /etc/dconf/db/local.d/00-power-button +install -Dm644 /tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/dconf/profile/user \ + /etc/dconf/profile/user + +dconf update + +restorecon -Rv /usr /lib /etc/systemd /etc/dconf /etc/udev/rules.d /etc/yum.repos.d + +#====================================== +# Set the WSL name for ELN +#-------------------------------------- +if [[ "$kiwi_profiles" == *"WSL"* ]] && [[ "$kiwi_iname" == *"ELN"* ]]; then +wsl-setup --name Fedora-ELN +fi + +#====================================== +# Finalization steps +#-------------------------------------- +# Inhibit the ldconfig cache generation unit, see rhbz2348669 +touch -r "/usr" "/etc/.updated" "/var/.updated" + +if [[ "$kiwi_profiles" == *"FEX"* ]]; then + # Remove most things except libraries used by FEX and wine stuff. + # Most binaries that are present in non-x86 architectures should be removed, + # so they do not run under emulation. + + # rm mingw static libs and headers + rm -rf /usr/{x86_64,i686}-w64-mingw32/sys-root/mingw/{lib,include} + + # rm everything in libexec + rm -rf /usr/libexec + + # rm everything in /usr/share except wine and mesa related stuff + find /usr/share -mindepth 1 -maxdepth 1 \ + \! -name wine -a \ + \! -name mesa-demos -a \ + \! -name drirc.d -a \ + \! -name vulkan \ + \! -name licenses \ + -exec rm -rf {} \; + + # rm everything in /etc except /etc/alternatives and ld stuff + find /etc -mindepth 1 -maxdepth 1 \ + \! -name alternatives -a \ + \! -name 'ld.so*' -a \ + \! -name '*.kiwi' \ + -exec rm -rf {} \; + + # rm non-libs in lib/lib64 + rm -rf /usr/{lib,lib64}/{locale,tmpfiles.d,systemd,modprobe.d,kbd,cmake} + rm -rf /usr/{lib,lib64}/python* + + # lib/clc and lib64/clc are identical, replace with a symlink + rm -rf /usr/lib/clc + ln -s ../lib64/clc /usr/lib/clc + + # rm sbin except for ldconfig, we don't even have root in some setups + find /usr/sbin -mindepth 1 -maxdepth 1 \ + \! -name 'ldconfig' \ + -exec rm -rf {} \; + + # rm misc stuff + rm -rf /usr/{include,games,local,src,tmp} + + # Finally, remove most binaries except Wine stuff, Mesa stuff, the shell, + # path-related stuff, and system info tools. + find /usr/bin -mindepth 1 -maxdepth 1 \ + \! -name 'wine*' -a \ + \! -name 'mango*' -a \ + \! -name notepad -a \ + \! -name 'msi*' -a \ + \! -name regedit -a \ + \! -name regsvr32 -a \ + \! -name 'vulkan*' -a \ + \! -name 'vk*' -a \ + \! -name clinfo -a \ + \! -name eglinfo -a \ + \! -name glxinfo -a \ + \! -name ulimit -a \ + \! -name ldd -a \ + \! -name env -a \ + \! -name sh -a \ + \! -name bash -a \ + \! -name ls -a \ + \! -name stat -a \ + \! -name dirname -a \ + \! -name realpath -a \ + \! -name readlink -a \ + \! -name basename -a \ + \! -name nproc -a \ + \! -name uname -a \ + \! -name arch -a \ + \! -name rm \ + -exec rm -rf {} \; + + # Do this last for obvious reasons. + rm /usr/bin/rm +fi + +rm -rf /tmp/* + +exit 0 diff --git a/docs/FedoraOnSurface.jpg b/docs/FedoraOnSurface.jpg Binary files differnew file mode 100644 index 0000000..6b37f3c --- /dev/null +++ b/docs/FedoraOnSurface.jpg diff --git a/editbootinstall_rpilegacy.sh b/editbootinstall_rpilegacy.sh new file mode 100755 index 0000000..dfa178f --- /dev/null +++ b/editbootinstall_rpilegacy.sh @@ -0,0 +1,17 @@ +#!/bin/bash +set -euxo pipefail + +diskname=$1 +devname="$2" +loopname="${devname%*p?}" +loopdev=/dev/${loopname#/dev/*} + +#========================================== +# Force the ESP to use legacy MBR identifier +#------------------------------------------ +# +# Raspberry Pi 3 and older systems don't handle +# the 0xef partition type for the ESP, so switch +# to the legacy one. +# +sfdisk --change-id ${loopdev} 1 6 diff --git a/fex-excludes.yaml b/fex-excludes.yaml new file mode 100644 index 0000000..b82a4c7 --- /dev/null +++ b/fex-excludes.yaml @@ -0,0 +1,17 @@ +exclude: +- /afs +- /boot +- /dev +- /home +- /media +- /mnt +- /opt +- /proc +- /root +- /run +- /srv +- /sys +- /tmp +- /usr/lib/locale +- /usr/share/locale +- /var diff --git a/grub-arm.cfg.iso-template b/grub-arm.cfg.iso-template new file mode 100644 index 0000000..447a1f3 --- /dev/null +++ b/grub-arm.cfg.iso-template @@ -0,0 +1,50 @@ +# Inspired by the config used for lorax-built live media + +set default="1" + +function load_video { + insmod efi_gop + insmod efi_uga + insmod video_bochs + insmod video_cirrus + insmod all_video +} +set basicgfx="nomodeset" + +load_video +set gfxpayload=keep +insmod gzio +insmod part_gpt +insmod ext2 +insmod zstd + +terminal_input console +terminal_output ${terminal_output} + +set timeout=${boot_timeout} +set timeout_style=${boot_timeout_style} + +search ${search_params} + +# Surface Pro 12" (Snapdragon X1P-42-100): the dtb the entries below load is a +# plain file in this same loader directory on the ISO9660 filesystem. GRUB +# cannot read the erofs root image, and kiwi has no device tree support, so +# surface-editbootconfig.sh copies it there out of the kernel-surface RPM in the +# image root. See that script for why editbootconfig is the hook that can. +menuentry "Start ${title}" --class fedora --class gnu-linux --class gnu --class os { + devicetree ($$root)${bootpath}/x1p42100-microsoft-sp12in.dtb + linux ($$root)${bootpath}/${kernel_file} ${boot_options} + initrd ($$root)${bootpath}/${initrd_file} +} +menuentry "Test this media & start ${title}" --class fedora --class gnu-linux --class gnu --class os { + devicetree ($$root)${bootpath}/x1p42100-microsoft-sp12in.dtb + linux ($$root)${bootpath}/${kernel_file} ${boot_options} rd.live.check + initrd ($$root)${bootpath}/${initrd_file} +} +submenu "Troubleshooting -->" { + menuentry "Start ${title} in basic graphics mode" --class fedora --class gnu-linux --class gnu --class os { + devicetree ($$root)${bootpath}/x1p42100-microsoft-sp12in.dtb + linux ($$root)${bootpath}/${kernel_file} ${boot_options} $${basicgfx} + initrd ($$root)${bootpath}/${initrd_file} + } +} diff --git a/grub-ppc.cfg.iso-template b/grub-ppc.cfg.iso-template new file mode 100644 index 0000000..26cd610 --- /dev/null +++ b/grub-ppc.cfg.iso-template @@ -0,0 +1,30 @@ +# Inspired by the config used for lorax-built live media + +set default="1" + +insmod gzio +insmod part_gpt +insmod ext2 + +terminal_input console +terminal_output ${terminal_output} + +set timeout=${boot_timeout} +set timeout_style=${boot_timeout_style} + +search ${search_params} + +menuentry "Start ${title}" --class fedora --class gnu-linux --class gnu --class os { + linux ($$root)${bootpath}/${kernel_file} ${boot_options} + initrd ($$root)${bootpath}/${initrd_file} +} +menuentry "Test this media & start ${title}" --class fedora --class gnu-linux --class gnu --class os { + linux ($$root)${bootpath}/${kernel_file} ${boot_options} rd.live.check + initrd ($$root)${bootpath}/${initrd_file} +} +submenu "Troubleshooting -->" { + menuentry "Start ${title} in basic graphics mode" --class fedora --class gnu-linux --class gnu --class os { + linux ($$root)${bootpath}/${kernel_file} ${boot_options} $${basicgfx} + initrd ($$root)${bootpath}/${initrd_file} + } +} diff --git a/grub-riscv64.cfg.iso-template b/grub-riscv64.cfg.iso-template new file mode 100644 index 0000000..037ae79 --- /dev/null +++ b/grub-riscv64.cfg.iso-template @@ -0,0 +1,41 @@ +# Inspired by the config used for lorax-built live media + +set default="1" + +function load_video { + insmod efi_gop + insmod efi_uga + insmod video_bochs + insmod video_cirrus + insmod all_video +} +set basicgfx="nomodeset" + +load_video +set gfxpayload=keep +insmod gzio +insmod part_gpt +insmod ext2 + +terminal_input console +terminal_output ${terminal_output} + +set timeout=${boot_timeout} +set timeout_style=${boot_timeout_style} + +search ${search_params} + +menuentry "Start ${title}" --class fedora --class gnu-linux --class gnu --class os { + linux ($$root)${bootpath}/${kernel_file} ${boot_options} + initrd ($$root)${bootpath}/${initrd_file} +} +menuentry "Test this media & start ${title}" --class fedora --class gnu-linux --class gnu --class os { + linux ($$root)${bootpath}/${kernel_file} ${boot_options} rd.live.check + initrd ($$root)${bootpath}/${initrd_file} +} +submenu "Troubleshooting -->" { + menuentry "Start ${title} in basic graphics mode" --class fedora --class gnu-linux --class gnu --class os { + linux ($$root)${bootpath}/${kernel_file} ${boot_options} $${basicgfx} + initrd ($$root)${bootpath}/${initrd_file} + } +} diff --git a/grub-x86.cfg.iso-template b/grub-x86.cfg.iso-template new file mode 100644 index 0000000..9b779bd --- /dev/null +++ b/grub-x86.cfg.iso-template @@ -0,0 +1,48 @@ +# Inspired by the config used for lorax-built live media + +set default="1" + +if [ "$$grub_platform" == "efi" ]; then + function load_video { + insmod efi_gop + insmod efi_uga + insmod video_bochs + insmod video_cirrus + insmod all_video + } + set basicgfx="nomodeset" +else + function load_video { + insmod all_video + } + set basicgfx="nomodeset vga=791" +fi + +load_video +set gfxpayload=keep +insmod gzio +insmod part_gpt +insmod ext2 + +terminal_input console +terminal_output ${terminal_output} + +set timeout=${boot_timeout} +set timeout_style=${boot_timeout_style} + +search ${search_params} + +menuentry "Start ${title}" --class fedora --class gnu-linux --class gnu --class os { + linux ($$root)${bootpath}/${kernel_file} ${boot_options} + initrd ($$root)${bootpath}/${initrd_file} +} +menuentry "Test this media & start ${title}" --class fedora --class gnu-linux --class gnu --class os { + linux ($$root)${bootpath}/${kernel_file} ${boot_options} rd.live.check + initrd ($$root)${bootpath}/${initrd_file} +} +submenu "Troubleshooting -->" { + menuentry "Start ${title} in basic graphics mode" --class fedora --class gnu-linux --class gnu --class os { + linux ($$root)${bootpath}/${kernel_file} ${boot_options} $${basicgfx} + initrd ($$root)${bootpath}/${initrd_file} + } +} diff --git a/iso-esp-excludes.yaml b/iso-esp-excludes.yaml new file mode 100644 index 0000000..c49d940 --- /dev/null +++ b/iso-esp-excludes.yaml @@ -0,0 +1,3 @@ +exclude: +- BOOT/fb*.efi +- fedora diff --git a/kiwi-build b/kiwi-build new file mode 100755 index 0000000..7ff247a --- /dev/null +++ b/kiwi-build @@ -0,0 +1,83 @@ +#!/bin/bash + +# Simple wrapper to call kiwi properly for image builds +# Author: Neal Gompa <ngompa@fedoraproject.org> + +set -eu -o pipefail + +kiwibuildsh="$(basename "$0")" +kiwibuild_scriptdir="$(dirname "$0")" + +usage() { + echo >&2 "usage: $kiwibuildsh [--kiwi-description-dir=DIR] [--kiwi-file=FILE] [--isolated] --output-dir=DIR --image-type=TYPE --image-profile=PROFILE [--image-release=RELEASEID] [--debug]" + echo >&2 " eg: $kiwibuildsh --kiwi-description-dir=/var/tmp/desc --kiwi-file=config.kiwi --output-dir=/var/tmp/work --image-type=oem --image-profile=Cloud-Base-Generic --image-release=0 --debug" + echo >&2 " eg: $kiwibuildsh --output-dir=/var/tmp/work --image-type=oem --image-profile=Cloud-Base-Generic" + echo >&2 " eg: $kiwibuildsh --isolated --output-dir=/var/tmp/work --image-type=oem --image-profile=Cloud-Base-Generic" + exit 255 +} + +optTemp=$(getopt --options '+k:,f:,i,b:,o:,t:,p:,r:,d,h' --longoptions 'kiwi-description-dir:,kiwi-file:,isolated,kiwi-bundle-format:,output-dir:,image-type:,image-profile:,image-release:,debug,help' --name "$kiwibuildsh" -- "$@") +eval set -- "$optTemp" +unset optTemp + +output_dir= +image_type= +image_profile= +image_release= +debug= +kiwi_isolated= +# For compatibility with older scripts where these did not exist +kiwi_description_dir="./" +kiwi_file="Fedora.kiwi" +kiwi_bundle_format= +kiwibuild_extra_args= + +while true; do + case "$1" in + -i|--isolated) kiwi_isolated=1; shift ;; + -k|--kiwi-description-dir) kiwi_description_dir="$2" ; shift 2 ;; + -f|--kiwi-file) kiwi_file="$2" ; shift 2 ;; + -b|--kiwi-bundle-format) kiwi_bundle_format="$2" ; shift 2 ;; + -o|--output-dir) output_dir="$2" ; shift 2 ;; + -t|--image-type) image_type="$2" ; shift 2 ;; + -p|--image-profile) image_profile="$2" ; shift 2 ;; + -r|--image-release) image_release="$2" ; shift 2 ;; + -d|--debug) debug="--debug" ; shift ;; + -h|--help) usage ;; + --) shift ; break ;; + esac +done + +# Capture arguments after -- +kiwibuild_extra_args=("$@") + +if [ -z "$output_dir" ] || [ -z "$image_type" ] || [ -z "$image_profile" ] || [ -z "$kiwi_file" ]; then + echo "Options not set!" + usage +fi + +if [ -z "$kiwi_bundle_format" ]; then + # Set the bundle format after we know the profile + kiwi_bundle_format=$("${kiwibuild_scriptdir}/scripts/fedora-kiwi-bundle-format-generator" "${kiwi_file}" "${image_profile}") +fi + +if [ "$image_type" = "iso" ]; then + # Add parameters for embedded ISO IDs + kiwibuild_iso_extra_args=$("${kiwibuild_scriptdir}/scripts/fedora-live-iso-label-generator" "${kiwi_file}" "${image_profile}" --output-kiwi-args) + kiwibuild_extra_args="${kiwibuild_extra_args:+${kiwibuild_extra_args}} ${kiwibuild_iso_extra_args}" +fi + + +set +e +if [ ! ${kiwi_isolated} ]; then + kiwi-ng ${debug} --type="${image_type}" --profile="${image_profile}" --kiwi-file="${kiwi_file}" --color-output system build --description "${kiwi_description_dir}" --target-dir "${output_dir}-build" ${kiwibuild_extra_args:+${kiwibuild_extra_args}} +else + kiwi-ng ${debug} --type="${image_type}" --profile="${image_profile}" --kiwi-file="${kiwi_file}" --color-output system boxbuild --box universal -- --description "${kiwi_description_dir}" --target-dir "${output_dir}-build" ${kiwibuild_extra_args:+${kiwibuild_extra_args}} +fi +kiwi_status=$? +set -e + +if [ "${kiwi_status}" = "0" ] && [ -n "$image_release" ]; then + kiwi-ng ${debug} result bundle --bundle-format="${kiwi_bundle_format}" --target-dir "${output_dir}-build" --bundle-dir "${output_dir}" --id="${image_release}" +fi +exit $kiwi_status diff --git a/maintainers.toml b/maintainers.toml new file mode 100644 index 0000000..6e86ff4 --- /dev/null +++ b/maintainers.toml @@ -0,0 +1,7 @@ +# You can read the original repo maintainers.toml at: +# https://forge.fedoraproject.org/releng/kiwi-descriptions/src/branch/rawhide/maintainers.toml + +# Surface Pro 12" customizations +[surface-pro-12-inch] +fas = [ "SayaAndy" ] +maintainers = [ "Saya Andy" ] diff --git a/repositories/core-eln.xml b/repositories/core-eln.xml new file mode 100644 index 0000000..79f739c --- /dev/null +++ b/repositories/core-eln.xml @@ -0,0 +1,22 @@ +<image> + <repository type="rpm-md" alias="extras" sourcetype="metalink"> + <source path="https://mirrors.fedoraproject.org/metalink?repo=eln-extras-1&arch=$basearch"> + <signing key="file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-rawhide-primary"/> + </source> + </repository> + <repository type="rpm-md" alias="crb" sourcetype="metalink"> + <source path="https://mirrors.fedoraproject.org/metalink?repo=eln-crb-1&arch=$basearch"> + <signing key="file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-rawhide-primary"/> + </source> + </repository> + <repository type="rpm-md" alias="appstream" sourcetype="metalink"> + <source path="https://mirrors.fedoraproject.org/metalink?repo=eln-appstream-1&arch=$basearch"> + <signing key="file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-rawhide-primary"/> + </source> + </repository> + <repository type="rpm-md" alias="baseos" sourcetype="metalink"> + <source path="https://mirrors.fedoraproject.org/metalink?repo=eln-baseos-1&arch=$basearch"> + <signing key="file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-rawhide-primary"/> + </source> + </repository> +</image> diff --git a/repositories/core-nonrawhide.xml b/repositories/core-nonrawhide.xml new file mode 100644 index 0000000..514e7e3 --- /dev/null +++ b/repositories/core-nonrawhide.xml @@ -0,0 +1,20 @@ +<image> + <repository type="rpm-md" alias="fedora" sourcetype="metalink"> + <source path="https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch"> + <signing key="file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-$releasever-primary"/> + </source> + </repository> + <repository type="rpm-md" alias="updates" sourcetype="metalink"> + <source path="https://mirrors.fedoraproject.org/metalink?repo=updates-released-f$releasever&arch=$basearch"> + <signing key="file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-$releasever-primary"/> + </source> + </repository> + <!-- For folks to enable for building images with content in test update repositories --> + <!-- + <repository type="rpm-md" alias="updates-testing" sourcetype="metalink"> + <source path="https://mirrors.fedoraproject.org/metalink?repo=updates-testing-f$releasever&arch=$basearch"> + <signing key="file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-$releasever-primary"/> + </source> + </repository> + --> +</image> diff --git a/repositories/core-rawhide.xml b/repositories/core-rawhide.xml new file mode 100644 index 0000000..c2ae124 --- /dev/null +++ b/repositories/core-rawhide.xml @@ -0,0 +1,7 @@ +<image> + <repository type="rpm-md" alias="rawhide" sourcetype="metalink"> + <source path="https://mirrors.fedoraproject.org/metalink?repo=rawhide&arch=$basearch"> + <signing key="file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-rawhide-primary"/> + </source> + </repository> +</image> diff --git a/repositories/core.xml b/repositories/core.xml new file mode 120000 index 0000000..86a91b7 --- /dev/null +++ b/repositories/core.xml @@ -0,0 +1 @@ +core-nonrawhide.xml
\ No newline at end of file diff --git a/repositories/kernel-sp12in.xml b/repositories/kernel-sp12in.xml new file mode 100644 index 0000000..2419e06 --- /dev/null +++ b/repositories/kernel-sp12in.xml @@ -0,0 +1,6 @@ +<image> + <!-- Surface Pro 12" (Snapdragon X1P-42-100): the patched kernel + libcamera.--> + <repository type="rpm-md" alias="kernel-surface" priority="1"> + <source path="https://rpm.sayag.it/kernel-sp12in/fedora/$releasever/aarch64/"/> + </repository> +</image> diff --git a/root/etc/fstab.script b/root/etc/fstab.script new file mode 100755 index 0000000..cd15a87 --- /dev/null +++ b/root/etc/fstab.script @@ -0,0 +1,5 @@ +#!/bin/sh + +# Set ESP mount options to match what Fedora does +# https://github.com/OSInside/kiwi/issues/2201 +gawk -i inplace '$2 == "/boot/efi" { $4 = $4",umask=0077,shortname=winnt" } { print $0 }' /etc/fstab diff --git a/root/tmp/DylanVanAssche/libssc b/root/tmp/DylanVanAssche/libssc new file mode 160000 +Subproject f6dfbfa5f34ef22f3d47ef346c22834e79c60df diff --git a/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/anaconda/conf.d/90-surface-pro-12-inch.conf b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/anaconda/conf.d/90-surface-pro-12-inch.conf new file mode 100644 index 0000000..0b46109 --- /dev/null +++ b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/anaconda/conf.d/90-surface-pro-12-inch.conf @@ -0,0 +1,19 @@ +# Surface Pro 12" (Snapdragon X1P-42-100): do not hide the GRUB menu. +# +# /etc/anaconda/profile.d/fedora-workstation.conf sets menu_auto_hide = True, +# and os-release here has VARIANT_ID=workstation, so anaconda selects that +# profile. Its grub2.py then writes both variables into grubenv: +# +# grub2-editenv - set menu_auto_hide=1 boot_success=1 +# +# deliberately, "so that the menu is hidden on the boot after install". On this +# firmware a hidden menu means GRUB counts down GRUB_TIMEOUT with nothing on +# screen and then crashes during the hand-off, so the very first boot of a fresh +# install always fails; it only succeeds from the second attempt, once the menu +# is drawn. Keeping the menu visible avoids that path entirely. +# +# conf.d is read after profile.d and is documented as the override location, and +# this file only needs to exist in the live installer environment -- it has no +# effect on, and is not needed by, the installed system. +[Bootloader] +menu_auto_hide = False diff --git a/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/dconf/db/local.d/00-power-button b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/dconf/db/local.d/00-power-button new file mode 100644 index 0000000..1b69eab --- /dev/null +++ b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/dconf/db/local.d/00-power-button @@ -0,0 +1,2 @@ +[org/gnome/settings-daemon/plugins/power] +power-button-action='interactive' diff --git a/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/dconf/profile/user b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/dconf/profile/user new file mode 100644 index 0000000..aca0641 --- /dev/null +++ b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/dconf/profile/user @@ -0,0 +1,2 @@ +user-db:user +system-db:local diff --git a/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/dracut.conf.d/surface-pro-12-inch.conf b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/dracut.conf.d/surface-pro-12-inch.conf new file mode 100644 index 0000000..9c7a9bd --- /dev/null +++ b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/dracut.conf.d/surface-pro-12-inch.conf @@ -0,0 +1,24 @@ +# Surface Pro 12" (Snapdragon X1P-42-100) +# +# Keep the ADSP/CDSP remoteproc driver out of the initramfs. +# +# qcom_q6v5_pas has auto_boot set, so it powers up the DSPs the moment it +# probes. In a hostonly initramfs it gets pulled in and probes at ~1.7s, long +# before root is mounted, and the firmware it needs lives on the root +# filesystem: +# +# remoteproc remoteproc0: adsp is available +# Direct firmware load for .../qcadsp8380.mbn failed with error -2 +# remoteproc remoteproc0: request_firmware failed: -2 +# +# remoteproc does not retry after that, so both DSPs stay offline for the whole +# boot -- which means no glink edge, no fastrpc devices, and therefore no +# sensors. Nothing in the initramfs needs the DSPs to mount root, so deferring +# the driver until after switch-root lets auto_boot find its firmware and +# succeed. The alternative, install_items with the blobs, adds ~45MB to every +# initramfs for no benefit. +# +# dracut reads this from the target's /etc/dracut.conf.d during anaconda's +# initramfs regeneration, so it survives installation (unlike /etc/default/grub, +# which anaconda rewrites from a fixed key set). +omit_drivers+=" qcom_q6v5_pas " diff --git a/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/kernel/cmdline b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/kernel/cmdline new file mode 100644 index 0000000..5b92d02 --- /dev/null +++ b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/kernel/cmdline @@ -0,0 +1 @@ +rootflags=subvol=root mem_sleep_default=s2idle clk_ignore_unused pd_ignore_unused systemd.tpm2_wait=0 rhgb quiet diff --git a/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/kernel/devicetree b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/kernel/devicetree new file mode 100644 index 0000000..2acf815 --- /dev/null +++ b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/kernel/devicetree @@ -0,0 +1 @@ +qcom/x1p42100-microsoft-sp12in.dtb diff --git a/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/kernel/install.conf b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/kernel/install.conf new file mode 100644 index 0000000..03aec7d --- /dev/null +++ b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/kernel/install.conf @@ -0,0 +1 @@ +BOOT_ROOT=/boot diff --git a/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/systemd/logind.conf.d/60-surface-power-key.conf b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/systemd/logind.conf.d/60-surface-power-key.conf new file mode 100644 index 0000000..c6fc547 --- /dev/null +++ b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/systemd/logind.conf.d/60-surface-power-key.conf @@ -0,0 +1,2 @@ +HandlePowerKey=suspend +HandlePowerKeyLongPress=poweroff diff --git a/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/systemd/system/hexagonrpc.service b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/systemd/system/hexagonrpc.service new file mode 100644 index 0000000..2e3cf82 --- /dev/null +++ b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/systemd/system/hexagonrpc.service @@ -0,0 +1,9 @@ +[Unit] +Description=HexagonRPC Service + +[Service] +ExecStart=/usr/local/bin/hexagonrpcd -f /dev/fastrpc-adsp-secure -s +Restart=on-failure + +[Install] +WantedBy=multi-user.target diff --git a/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/systemd/system/iio-sensor-proxy.service.d/60-surface-pro-12-inch.conf b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/systemd/system/iio-sensor-proxy.service.d/60-surface-pro-12-inch.conf new file mode 100644 index 0000000..7b3cfcb --- /dev/null +++ b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/systemd/system/iio-sensor-proxy.service.d/60-surface-pro-12-inch.conf @@ -0,0 +1,14 @@ +# Surface Pro 12" (Snapdragon X1P-42-100) +# +# The sensors on this device are not IIO devices. They live behind the SLPI +# DSP, reached over fastrpc by hexagonrpcd, and iio-sensor-proxy only sees them +# through the SSC backend it is built with here (-Dssc-support=enabled). So it +# has to start after that daemon, and stop being useful if the daemon dies. +# +# A drop-in rather than a replacement unit: upstream's own unit is D-Bus +# activated (Type=dbus, BusName=net.hadess.SensorProxy), which is how anything +# asking for net.hadess.SensorProxy gets the service started, and overriding it +# wholesale traded that away for nothing but this ordering. +[Unit] +Requires=hexagonrpc.service +After=hexagonrpc.service diff --git a/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/systemd/system/surface-video-firmware.service b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/systemd/system/surface-video-firmware.service new file mode 100644 index 0000000..5c83962 --- /dev/null +++ b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/systemd/system/surface-video-firmware.service @@ -0,0 +1,12 @@ +[Unit] +Description=Install Surface Pro 12in video codec firmware from a Windows partition +ConditionPathExists=!/lib/firmware/qcom/x1p42100/Microsoft/Surface12/qcvss8380_pa.mbn +After=local-fs.target + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/usr/local/bin/surface-video-firmware.sh + +[Install] +WantedBy=multi-user.target diff --git a/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/udev/rules.d/61-sensors-surface-pro-12-inch.rules b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/udev/rules.d/61-sensors-surface-pro-12-inch.rules new file mode 100644 index 0000000..e6ddb1f --- /dev/null +++ b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/udev/rules.d/61-sensors-surface-pro-12-inch.rules @@ -0,0 +1 @@ +ACTION=="add|change", SUBSYSTEM=="misc", KERNEL=="fastrpc-adsp-secure", ENV{ACCEL_MOUNT_MATRIX}="-1, 0, 0; 0, -1, 0; 0, 0, 1" diff --git a/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/yum.repos.d/kernel-sp12in.repo b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/yum.repos.d/kernel-sp12in.repo new file mode 100644 index 0000000..24fe9f3 --- /dev/null +++ b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/etc/yum.repos.d/kernel-sp12in.repo @@ -0,0 +1,7 @@ +[kernel-sp12in] +name=kernel-sp12in for Fedora $releasever - $basearch +baseurl=https://rpm.sayag.it/kernel-sp12in/fedora/$releasever/$basearch/ +enabled=1 +priority=1 +gpgcheck=0 +metadata_expire=6h diff --git a/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/usr/lib/kernel/install.d/60-surface-dtb.install b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/usr/lib/kernel/install.d/60-surface-dtb.install new file mode 100644 index 0000000..7622406 --- /dev/null +++ b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/usr/lib/kernel/install.d/60-surface-dtb.install @@ -0,0 +1,44 @@ +#!/bin/bash +set -eu +umask 022 + +COMMAND="$1" +KVER="$2" + +DTB_NAME=x1p42100-microsoft-sp12in.dtb +DEST="/usr/lib/modules/${KVER}/dtb/qcom/${DTB_NAME}" + +# The master copies come from kernel-surface: it builds the dtb in-tree from the +# patched dts and installs it under /usr/lib/surface-dtb, deliberately outside +# any /usr/lib/modules/<kver>, so it can be re-staged into a kernel that ships +# no device tree of its own -- a stock Fedora one. +# +# One directory per kernel version, because kernel-surface is installonly and +# rpm will not let two installed releases own one unqualified path once the file +# differs. They are all the same board, so the highest version is as good a +# choice as any, and is the one most likely to carry recent fixes. +SRC=$(ls -1 /usr/lib/surface-dtb/*/"${DTB_NAME}" 2>/dev/null | sort -V | tail -n1) + +case "${COMMAND}" in + add) + # kernel-surface ships its own dtb through dtbs_install, and that + # one is the release-matched copy. Leave it alone; the master is + # only for kernels that arrived without one. + if [ -f "${DEST}" ]; then + exit 0 + fi + # Neither means there is nothing this board can boot with, so say + # so rather than failing silently three steps later in the boot + # loader. + if [ -z "${SRC}" ]; then + echo "60-surface-dtb: no ${DTB_NAME} under /usr/lib/surface-dtb" >&2 + exit 1 + fi + mkdir -p "$(dirname ${DEST})" + cp -f "${SRC}" "${DEST}" + chmod 644 "${DEST}" + ;; + remove) + rm -f "${DEST}" + ;; +esac diff --git a/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/usr/lib/kernel/install.d/95-surface-dtb-patch.install b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/usr/lib/kernel/install.d/95-surface-dtb-patch.install new file mode 100644 index 0000000..65b8745 --- /dev/null +++ b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/usr/lib/kernel/install.d/95-surface-dtb-patch.install @@ -0,0 +1,55 @@ +#!/bin/bash +# Surface Pro 12" (Snapdragon X1P-42-100): put a devicetree line into the BLS +# loader entry. +# +# None of Fedora's built-in mechanisms can do this on their own: +# +# * /etc/kernel/devicetree is only read by 90-loaderentry.install, which exits +# early unless KERNEL_INSTALL_LAYOUT=bls. Fedora has no /boot/<entry-token> +# directory, so kernel-install always computes layout=other here and that +# plugin never runs. +# +# * GRUB_DEVICETREE in /etc/default/grub does work on a running system (see +# 20-grub.install's mkbls), but anaconda rewrites /etc/default/grub from a +# fixed list of keys it knows during installation, and GRUB_DEVICETREE is not +# on that list, so it is silently discarded on a fresh install. +# +# A kernel-install plugin survives both: anaconda runs kernel-install inside the +# target during installation, and anything sorting after 20-grub.install sees +# the entry it has just (re)generated. Because 20-grub.install rewrites the +# entry from scratch on every kernel install, this must re-apply each time -- +# hence a plugin rather than a one-shot fixup. + +set -eu +umask 022 + +COMMAND="${1:-}" +KVER="${2:-}" + +[ "$COMMAND" = "add" ] || exit 0 +[ -n "$KVER" ] || exit 0 + +DTB_NAME=x1p42100-microsoft-sp12in.dtb +DTB_REL="qcom/$DTB_NAME" +BOOT_ROOT="${KERNEL_INSTALL_BOOT_ROOT:-/boot}" + +# 60-surface-dtb.install stages the dtb into this kernel's module tree; fall +# back to kernel-surface's version-independent master copy if it has not run +# (or was removed). +DTB_SRC="/usr/lib/modules/${KVER}/dtb/${DTB_REL}" +if [ ! -f "$DTB_SRC" ]; then + # One directory per kernel version under here; see 60-surface-dtb.install. + DTB_SRC=$(ls -1 /usr/lib/surface-dtb/*/"$DTB_NAME" 2>/dev/null | sort -V | tail -n1) +fi +[ -n "$DTB_SRC" ] && [ -f "$DTB_SRC" ] || exit 0 + +# The boot loader reads the dtb from the boot filesystem, not the module tree +install -Dm644 "$DTB_SRC" "${BOOT_ROOT}/dtb-${KVER}/${DTB_REL}" + +# BLS entry paths are relative to the boot filesystem root, matching the +# "linux /vmlinuz-$KVER" line 20-grub.install writes. +for entry in "${BOOT_ROOT}"/loader/entries/*-"${KVER}".conf; do + [ -f "$entry" ] || continue + grep -q '^devicetree[[:space:]]' "$entry" && continue + sed -i "/initrd/i devicetree /dtb-${KVER}/${DTB_REL}" "$entry" +done diff --git a/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/usr/local/bin/surface-video-firmware.sh b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/usr/local/bin/surface-video-firmware.sh new file mode 100755 index 0000000..35dfdf1 --- /dev/null +++ b/root/tmp/SayaAndy/surface-pro-12-inch-linux-fedora/usr/local/bin/surface-video-firmware.sh @@ -0,0 +1,183 @@ +#!/bin/bash +# Surface Pro 12" (Snapdragon X1P-42-100): install the video codec firmware. +# +# The iris video codec needs firmware TrustZone will accept. linux-firmware's +# qcom/vpu/vpu30_p1_s7.mbn is the same codec signed with Qualcomm's SecTools +# *test* key chain, which a retail Surface rejects: +# +# qcom-iris aa00000.video-codec: error -22 initializing firmware qcom/vpu/vpu30_p1_s7.mbn +# +# The production-signed build ships only inside Microsoft's Surface driver +# package, which grants no redistribution right, so the image cannot carry it. +# What it can do is copy it out of a Windows install the owner already has a +# licence for, or out of a driver pack they downloaded themselves. This script +# does the copying; it never fetches anything the caller did not ask for. +# +# Usage: surface-video-firmware.sh [-m MSI] [-u URL] [-n] +# +# (no options) look for a Windows partition on this machine and copy the +# firmware out of its DriverStore. No network access. +# -m MSI extract from a Surface driver pack already on disk +# -u URL download a driver pack and extract from that +# -n say what would happen, change nothing +# +# The driver pack is a ~500 MB MSI from +# +# https://www.microsoft.com/en-us/download/details.aspx?id=108199 +# +# There is no stable direct link to hardcode: the Download Center hands out +# per-session URLs and the file name carries the driver release, so -u takes +# the URL the browser was given rather than guessing one that would rot. + +set -euo pipefail + +FW_DIR=/lib/firmware/qcom/x1p42100/Microsoft/Surface12 +BLOB=qcvss8380_pa.mbn +DRIVERSTORE=Windows/System32/DriverStore/FileRepository +PAGE=https://www.microsoft.com/en-us/download/details.aspx?id=108199 + +msi="" +url="" +dry_run=false + +while getopts ':m:u:nh' opt; do + case "${opt}" in + m) msi=${OPTARG} ;; + u) url=${OPTARG} ;; + n) dry_run=true ;; + h) sed -n '2,31p' "${BASH_SOURCE[0]}"; exit 0 ;; + *) echo "unknown option -${OPTARG}" >&2; exit 2 ;; + esac +done + +log() { printf 'surface-video-firmware: %s\n' "$*"; } +die() { printf 'surface-video-firmware: %s\n' "$*" >&2; exit 1; } + +if [[ -f "${FW_DIR}/${BLOB}" ]]; then + log "${FW_DIR}/${BLOB} is already installed" + exit 0 +fi + +[[ ${EUID} -eq 0 ]] || die "must run as root" + +cleanup_dirs=() +cleanup_mounts=() +cleanup() { + local m d + for m in ${cleanup_mounts[@]+"${cleanup_mounts[@]}"}; do + mountpoint -q "${m}" && umount "${m}" || true + done + for d in ${cleanup_dirs[@]+"${cleanup_dirs[@]}"}; do + rm -rf "${d}" || true + done +} +trap cleanup EXIT + +install_blob() { + local src=$1 + if [[ ${dry_run} == true ]]; then + log "would install ${src} as ${FW_DIR}/${BLOB}" + return 0 + fi + + install -Dm644 "${src}" "${FW_DIR}/${BLOB}" + log "installed ${FW_DIR}/${BLOB}" + + # The driver only asks for its firmware while probing, so it has to be + # reloaded to pick this up. It refuses while a decode session holds it, + # which is why a failure here is only worth a note. + if lsmod | grep -q '^qcom_iris'; then + if modprobe -r qcom_iris 2>/dev/null && modprobe qcom_iris 2>/dev/null; then + log "reloaded qcom_iris" + else + log "could not reload qcom_iris; reboot to start using the firmware" + fi + fi +} + +# Everything below hands find(1) the bare file name rather than a full path: +# the DriverStore directory carries a per-build hash, and the layout inside an +# extracted MSI is not documented anywhere worth trusting. +find_blob() { + find "$1" -type f -name "${BLOB}" -print -quit 2>/dev/null +} + +from_windows() { + local dev fstype part_mnt mnt found + + while read -r dev fstype part_mnt; do + [[ ${fstype} == ntfs* ]] || continue + + if [[ -n ${part_mnt} ]]; then + mnt=${part_mnt} + else + mnt=$(mktemp -d) + cleanup_dirs+=("${mnt}") + if ! mount -t ntfs3 -o ro,noatime "/dev/${dev}" "${mnt}" 2>/dev/null && + ! mount -o ro,noatime "/dev/${dev}" "${mnt}" 2>/dev/null; then + log "/dev/${dev}: could not mount read-only, skipping" + log "/dev/${dev}: if Windows is hibernated, shut it down fully and retry" + continue + fi + cleanup_mounts+=("${mnt}") + fi + + [[ -d "${mnt}/${DRIVERSTORE}" ]] || continue + + found=$(find_blob "${mnt}/${DRIVERSTORE}") + if [[ -n ${found} ]]; then + log "found ${BLOB} on /dev/${dev}" + install_blob "${found}" + return 0 + fi + log "/dev/${dev}: a Windows install, but no ${BLOB} in its DriverStore" + done < <(lsblk -rno NAME,FSTYPE,MOUNTPOINT) + + return 1 +} + +from_msi() { + local pack=$1 work found + + command -v msiextract >/dev/null || die "msiextract is missing; install msitools" + + work=$(mktemp -d) + cleanup_dirs+=("${work}") + + log "extracting ${pack}" + ( cd "${work}" && msiextract "${pack}" >/dev/null ) + + found=$(find_blob "${work}") + [[ -n ${found} ]] || die "no ${BLOB} inside ${pack}; is it the Surface Pro 12in driver pack?" + + log "found ${BLOB} in the driver pack" + install_blob "${found}" +} + +if [[ -n ${url} ]]; then + dl=$(mktemp -d) + cleanup_dirs+=("${dl}") + msi="${dl}/driverpack.msi" + log "downloading ${url}" + curl -fL --retry 3 --progress-bar -o "${msi}" "${url}" +fi + +if [[ -n ${msi} ]]; then + [[ -f ${msi} ]] || die "${msi} does not exist" + from_msi "${msi}" + exit 0 +fi + +if from_windows; then + exit 0 +fi + +# Nothing found, and nothing was asked for. Not an error: most of the time this +# is a machine with no Windows left on it, and the only thing left to do is say +# how to finish the job by hand. +log "no Windows install on this machine carries ${BLOB}" +log "hardware video decode stays off until it is installed. To finish by hand:" +log " 1. download the Surface Pro 12in driver pack (~500 MB) from" +log " ${PAGE}" +log " 2. sudo surface-video-firmware.sh -m /path/to/SurfacePro_12in_*.msi" +exit 0 diff --git a/root/tmp/harrisonvanderbyl/hexagonrpc b/root/tmp/harrisonvanderbyl/hexagonrpc new file mode 160000 +Subproject 78b67e2f00df0455f0c0282183b1b1b8b219447 diff --git a/root/tmp/harrisonvanderbyl/iio-sensor-proxy b/root/tmp/harrisonvanderbyl/iio-sensor-proxy new file mode 160000 +Subproject fcd5b5cf431bc053375350c57064b8b13dd961b diff --git a/root/tmp/harrisonvanderbyl/surface-pro-12-inch-linux b/root/tmp/harrisonvanderbyl/surface-pro-12-inch-linux new file mode 160000 +Subproject cab35118d7b5cf6ed88c7027e075a2564c921ea diff --git a/root/tmp/linux-msm/audioreach-topology b/root/tmp/linux-msm/audioreach-topology new file mode 160000 +Subproject d7a5e9d80ad18a7a6844eeb32cacbdeea0e7e67 diff --git a/scripts/fedora-kiwi-bundle-format-generator b/scripts/fedora-kiwi-bundle-format-generator new file mode 100755 index 0000000..7c48324 --- /dev/null +++ b/scripts/fedora-kiwi-bundle-format-generator @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 + +# Simple tool to generate bundle formats for kiwi image builds +# Author: Neal Gompa <ngompa@fedoraproject.org> +# SPDX-3.0-License-Identifier: GPL-3.0-or-later +# SPDX-2.0-License-Identifier: GPL-3.0+ + +from argparse import ArgumentParser +from pathlib import Path + +import xml.etree.ElementTree as ET + + +parser = ArgumentParser(description="Generator of kiwi bundle formats for Fedora image builds") +parser.add_argument("kiwi_file", type=Path, default="Fedora.kiwi", help="kiwi description file") +parser.add_argument("image_profile", type=str, help="kiwi image profile") +args = parser.parse_args() + +xml_tree = ET.parse(args.kiwi_file) +image_root = xml_tree.getroot() + +image_basename = image_root.attrib["name"] +image_profile = args.image_profile + +print(f"{image_basename}-{image_profile}-%v.%I.%A") diff --git a/scripts/fedora-live-iso-label-generator b/scripts/fedora-live-iso-label-generator new file mode 100755 index 0000000..fc5cef6 --- /dev/null +++ b/scripts/fedora-live-iso-label-generator @@ -0,0 +1,109 @@ +#!/usr/bin/env python3 + +# Simple tool to generate volume IDs and application IDs for ISOs for kiwi image builds +# Author: Neal Gompa <ngompa@fedoraproject.org> +# SPDX-3.0-License-Identifier: GPL-3.0-or-later +# SPDX-2.0-License-Identifier: GPL-3.0+ + +# Used to map kiwi profiles to application IDs (which may also +# may be used for connecting to volume ID substitutions). +profile_to_application_id = { + "KDE-Desktop": "KDE_Desktop", + "KDE-Mobile": "KDE_Mobile", +} + +# Used by Pungi to replace "Cloud" with "C" (etc.) in ISO volume IDs. +# There is a hard 32-character limit on ISO volume IDs, so we use +# these to try and produce short enough but legible IDs. Note this is +# duplicated in Koji for live images, as livemedia-creator does not +# allow Pungi to tell it what volume ID to use. Note: +# https://fedoraproject.org/wiki/User:Adamwill/Draft_fedora_image_naming_policy +# "-Workstation-" is a temporary workaround. See +# https://pagure.io/pungi-fedora/pull-request/525 +# Replace "Cloud" with "C" in volume id etc. +# WARNING: This list *MUST* remain in sync with pungi-fedora! +# https://pagure.io/pungi-fedora/blob/main/f/general.conf +volume_id_substitutions = { + "Beta": "B", + "Rawhide": "rawh", + "Astronomy_KDE": "AstK", + "Silverblue": "SB", + "Kinoite": "Knt", + "Cinnamon": "Cinn", + "Cloud": "C", + "Comp_Neuro": "CNr", + "COSMIC": "CSMC", + "COSMIC-Atomic": "CSMCA", + "COSMIC_Atomic": "CSMCA", + "Design_suite": "Dsgn", + "Electronic_Lab": "Elec", + "Everything": "E", + "Games": "Game", + "Images": "img", + "Jam_KDE": "Jam", + "KDE_Desktop": "KDE", + "KDE_Mobile": "KDEM", + "MATE_Compiz": "MATE", + "MiracleWM": "MirWM", + "Onyx": "Onyx", + # Note https://pagure.io/pungi-fedora/issue/533 + "Python-Classroom": "Clss", + "Python_Classroom": "Clss", + "Scientific_KDE": "SciK", + "Security": "Sec", + "Sericea": "Src", + "Server": "S", + "Workstation": "WS", + "-Workstation-": "-WS-", +} + + + +from argparse import ArgumentParser +from pathlib import Path + +import xml.etree.ElementTree as ET + + +parser = ArgumentParser(description="Generator of ISO labels for Fedora live media builds") +parser.add_argument("kiwi_file", type=Path, default="Fedora.kiwi", help="kiwi description file") +parser.add_argument("image_profile", type=str, help="kiwi image profile") +parser.add_argument("--output-kiwi-args", "-k", action="store_true", help="generate kiwi args instead of csv") +args = parser.parse_args() + +xml_tree = ET.parse(args.kiwi_file) +image_root = xml_tree.getroot() + +image_basename = image_root.attrib["name"] +image_version = image_root.find("preferences/version").text + +image_volid_version = image_version + +if image_volid_version == "Rawhide": + image_volid_version = "rawh" + +image_profile = args.image_profile +if image_profile.endswith("-Live"): + image_profile_baseprefix = image_profile[:-5] +else: + image_profile_baseprefix = image_profile + +image_profile_variant_appid_prefix = image_profile_baseprefix + +if image_profile_baseprefix in profile_to_application_id.keys(): + image_profile_variant_appid_prefix = profile_to_application_id[image_profile_baseprefix] +else: + image_profile_variant_appid_prefix = image_profile_baseprefix + +if image_profile_variant_appid_prefix in volume_id_substitutions.keys(): + image_profile_variant_volid_prefix = volume_id_substitutions[image_profile_variant_appid_prefix] +else: + image_profile_variant_volid_prefix = image_profile_variant_appid_prefix + +image_appid = f"{image_basename}-{image_profile_variant_appid_prefix}-Live-{image_version}" +image_volid = f"{image_basename}-{image_profile_variant_volid_prefix}-Live-{image_volid_version}" + +if args.output_kiwi_args: + print(f"--set-type-attr=application_id={image_appid} --set-type-attr=volid={image_volid}") +else: + print(f"application_id,{image_appid},volid,{image_volid}") diff --git a/surface-editbootconfig.sh b/surface-editbootconfig.sh new file mode 100755 index 0000000..e6cc67c --- /dev/null +++ b/surface-editbootconfig.sh @@ -0,0 +1,49 @@ +#!/bin/bash +# Surface Pro 12" (Snapdragon X1P-42-100): put the device tree on the ISO. +# +# kiwi has no device tree support of its own, and the ISO's GRUB needs the dtb +# as a plain file it can read: it loads it with a "devicetree" line before the +# kernel (see grub-arm.cfg.iso-template), it cannot read the erofs root image, +# and kiwi copies only the kernel and the initrd into the ISO's loader +# directory. +# +# editbootconfig is the one hook that reaches the ISO tree. kiwi's live builder +# calls it with "iso:<media dir>" as the first argument and the image root as +# the working directory, after setup_media_loader_directory has created the +# loader directory and the GRUB config has been written. So the dtb can be +# taken straight out of the kernel-surface RPM installed in the image root, +# which is why config-cdroot.tar is no longer needed to carry a committed copy. + +set -euo pipefail + +target="${1:-}" +case "${target}" in + iso:*) media_dir="${target#iso:}" ;; + *) + echo "surface-editbootconfig: expected an iso: target, got '${target}'" >&2 + exit 1 + ;; +esac + +dtb_name=x1p42100-microsoft-sp12in.dtb + +# The working directory is the image root, so this is kernel-surface's own copy, +# under a directory named for the kernel version because that package is +# installonly. config.sh has already failed the build if it is not there. +dtb_src=$(ls -1 usr/lib/surface-dtb/*/"${dtb_name}" 2>/dev/null | sort -V | tail -n1) +if [[ -z "${dtb_src}" ]]; then + echo "surface-editbootconfig: no ${dtb_name} under usr/lib/surface-dtb/ in the image root" >&2 + exit 1 +fi + +# ${bootpath} in the GRUB template is /boot/<kiwi platform name>/loader. Read +# the directory back off the media tree rather than recomputing that name, so +# the dtb cannot end up somewhere the GRUB config does not look. +loader_dirs=("${media_dir}"/boot/*/loader) +if [[ ${#loader_dirs[@]} -ne 1 || ! -d "${loader_dirs[0]}" ]]; then + echo "surface-editbootconfig: expected one ${media_dir}/boot/*/loader, found ${#loader_dirs[@]}" >&2 + exit 1 +fi + +install -Dm644 "${dtb_src}" "${loader_dirs[0]}/${dtb_name}" +echo "surface-editbootconfig: staged ${loader_dirs[0]}/${dtb_name}" diff --git a/teams/asahi.xml b/teams/asahi.xml new file mode 100644 index 0000000..4d89966 --- /dev/null +++ b/teams/asahi.xml @@ -0,0 +1,185 @@ +<image> + <profiles> + <profile name="FEX-RootFS" description="FEX RootFS packages"/> + </profiles> + <preferences profiles="FEX-RootFS" arch="x86_64"> + <type image="erofs" erofscompression="lz4"/> + <timezone>Etc/UTC</timezone> + <locale>en_US</locale> + <rpm-locale-filtering>true</rpm-locale-filtering> + <rpm-excludedocs>true</rpm-excludedocs> + </preferences> + <packages type="image" profiles="FEX-RootFS"> + <file name="fex-excludes.yaml" target="image/exclude_files.yaml"/> + </packages> + <packages type="bootstrap" profiles="FEX-RootFS"> + <package name="dnf5-plugins"/> + <package name="util-linux-core"/> + <package name="glibc.x86_64"/> + <package name="glibc.i686"/> + <package name="dbus-libs.x86_64"/> + <package name="dbus-libs.i686"/> + <package name="systemd.x86_64"/> + <package name="systemd.i686"/> + <package name="systemd-libs.x86_64"/> + <package name="systemd-libs.i686"/> + <package name="pulseaudio-libs.x86_64"/> + <package name="pulseaudio-libs.i686"/> + <package name="mesa-libGL.x86_64"/> + <package name="mesa-libGL.i686"/> + <package name="mesa-libEGL.x86_64"/> + <package name="mesa-libEGL.i686"/> + <package name="mesa-libGLU.x86_64"/> + <package name="mesa-libGLU.i686"/> + <package name="mesa-dri-drivers.x86_64"/> + <package name="mesa-dri-drivers.i686"/> + <package name="mesa-vulkan-drivers.x86_64"/> + <package name="mesa-vulkan-drivers.i686"/> + <package name="mesa-demos.x86_64"/> + <package name="libglvnd-opengl.x86_64"/> + <package name="libglvnd-opengl.i686"/> + <package name="libglvnd-egl.x86_64"/> + <package name="libglvnd-egl.i686"/> + <package name="libglvnd-gles.x86_64"/> + <package name="libglvnd-gles.i686"/> + <package name="libatomic.x86_64"/> + <package name="libatomic.i686"/> + <package name="libatomic_ops.x86_64"/> + <package name="libatomic_ops.i686"/> + <package name="libunwind.x86_64"/> + <package name="libunwind.i686"/> + <package name="libnsl.x86_64"/> + <package name="libnsl.i686"/> + <package name="flac-libs.x86_64"/> + <package name="flac-libs.i686"/> + <package name="sdl2-compat.x86_64"/> + <package name="sdl2-compat.i686"/> + <package name="SDL2_gfx.x86_64"/> + <package name="SDL2_gfx.i686"/> + <package name="SDL2_ttf.x86_64"/> + <package name="SDL2_ttf.i686"/> + <package name="SDL2_image.x86_64"/> + <package name="SDL2_image.i686"/> + <package name="SDL2_mixer.x86_64"/> + <package name="SDL2_mixer.i686"/> + <package name="SDL2_net.x86_64"/> + <package name="SDL2_net.i686"/> + <package name="SDL2_sound.x86_64"/> + <package name="SDL2_sound.i686"/> + <package name="sdl12-compat.x86_64"/> + <package name="sdl12-compat.i686"/> + <package name="protobuf-compiler.x86_64"/> + <package name="protobuf-compiler.i686"/> + <package name="protobuf-c.x86_64"/> + <package name="protobuf-c.i686"/> + <package name="openal-soft.x86_64"/> + <package name="openal-soft.i686"/> + <package name="speex.x86_64"/> + <package name="speex.i686"/> + <package name="libvorbis.x86_64"/> + <package name="libvorbis.i686"/> + <package name="usbutils"/> + <package name="pciutils"/> + <package name="libpciaccess.x86_64"/> + <package name="libpciaccess.x86_64"/> + <package name="libGLEW.x86_64"/> + <package name="libGLEW.i686"/> + <package name="libX11-xcb.x86_64"/> + <package name="libX11-xcb.i686"/> + <package name="xcb-util.x86_64"/> + <package name="xcb-util.i686"/> + <package name="xcb-util-cursor.x86_64"/> + <package name="xcb-util-cursor.i686"/> + <package name="xcb-util-image.x86_64"/> + <package name="xcb-util-image.i686"/> + <package name="xcb-util-keysyms.x86_64"/> + <package name="xcb-util-keysyms.i686"/> + <package name="xcb-util-wm.x86_64"/> + <package name="xcb-util-wm.i686"/> + <package name="xcb-util-xrm.x86_64"/> + <package name="xcb-util-xrm.i686"/> + <package name="xcb-imdkit.x86_64"/> + <package name="xcb-imdkit.i686"/> + <package name="libxkbcommon.x86_64"/> + <package name="libxkbcommon.i686"/> + <package name="libwayland-client.x86_64"/> + <package name="libwayland-client.i686"/> + <package name="libwayland-egl.x86_64"/> + <package name="libwayland-egl.i686"/> + <package name="libXext.x86_64"/> + <package name="libXext.i686"/> + <package name="libXdamage.x86_64"/> + <package name="libXdamage.i686"/> + <package name="libxcb.x86_64"/> + <package name="libxcb.i686"/> + <package name="libxshmfence.x86_64"/> + <package name="libxshmfence.i686"/> + <package name="libXxf86vm.x86_64"/> + <package name="libXxf86vm.i686"/> + <package name="libXrandr.x86_64"/> + <package name="libXrandr.i686"/> + <package name="clang-libs.x86_64"/> + <package name="clang-libs.i686"/> + <package name="llvm-libs.x86_64"/> + <package name="llvm-libs.i686"/> + <package name="libclc.x86_64"/> + <package name="libclc.i686"/> + <package name="spirv-tools-libs.x86_64"/> + <package name="spirv-tools-libs.i686"/> + <package name="spirv-llvm-translator.x86_64"/> + <package name="spirv-llvm-translator.i686"/> + <package name="harfbuzz.x86_64"/> + <package name="harfbuzz.i686"/> + <package name="libva.x86_64"/> + <package name="libva.i686"/> + <package name="libvdpau.x86_64"/> + <package name="libvdpau.i686"/> + <package name="fuse-libs.x86_64"/> + <package name="fuse-libs.i686"/> + <package name="fuse3-libs.x86_64"/> + <package name="fuse3-libs.i686"/> + <package name="mangohud.x86_64"/> + <package name="mangohud.i686"/> + <package name="nss.x86_64"/> + <package name="nss.i686"/> + <package name="nspr.x86_64"/> + <package name="nspr.i686"/> + <package name="python3.x86_64"/> + <package name="python3.i686"/> + <package name="openssl-libs.x86_64"/> + <package name="openssl-libs.i686"/> + <package name="curl"/> + <package name="xterm"/> + <package name="xz"/> + <package name="wine.x86_64"/> + <package name="vulkan-tools"/> + <package name="vulkan-loader.i686"/> + <package name="vulkan-loader.x86_64"/> + <package name="pkgconf.x86_64"/> + <package name="pkgconf.i686"/> + <package name="clinfo"/> + <package name="gobject-introspection"/> + <package name="kbd-misc"/> <!-- needed by kiwi --> + <package name="glibc-langpack-en"/> <!-- needed by kiwi --> + <package name="zlib-ng.x86_64"/> + <package name="zlib-ng.i686"/> + <package name="libxslt.x86_64"/> + <package name="libxslt.i686"/> + <package name="libgpg-error.x86_64"/> + <package name="libgpg-error.i686"/> + <!-- + Remove these if we choose to drop GTK2/GTK3 (currently there are other dependencies above). + These are useful for muvm X11 passthrough. Modern apps should use Wayland protocols, so + other IM support packages are hopefully not needed in the rootfs. + --> + <package name="gtk2-immodule-xim.x86_64"/> + <package name="gtk2-immodule-xim.i686"/> + <package name="gtk3-immodule-xim.x86_64"/> + <!-- unavailable <package name="gtk3-immodule-xim.i686"/> --> + <!-- + Needed to run XUL-based applications in muvm + --> + <package name="dbus-glib.x86_64"/> + <package name="dbus-glib.i686"/> + </packages> +</image> diff --git a/teams/astronomy.xml b/teams/astronomy.xml new file mode 100644 index 0000000..740a949 --- /dev/null +++ b/teams/astronomy.xml @@ -0,0 +1,106 @@ +<image> + <profiles> + <profile name="AstronomyDesktop" description="Desktop packages for Astronomy"> + <requires profile="KDE-Desktop"/> + </profile> + <profile name="Astronomy_KDE-Live" description="Astronomy KDE Lab Live DVD"> + <requires profile="AstronomyDesktop"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="Astronomy_KDE-Disk" description="Astronomy KDE Lab Install Disk"> + <requires profile="AstronomyDesktop"/> + <requires profile="BootDiskCore"/> + </profile> + </profiles> + <packages type="bootstrap" patternType="plusRecommended" profiles="AstronomyDesktop"> + <package name="fedora-release-kde"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="AstronomyDesktop"> + <!-- Installing the default/mandatory packages from engineering & scientific --> + <namedCollection name="engineering-and-scientific"/> + <!-- Basic development --> + <namedCollection name="development-tools"/> + <namedCollection name="c-development"/> + <!-- astronomical data analysis --> + <package name="astrometry"/> + <package name="astrometry-tycho2"/> + <package name="cdsclient"/> + <package name="cfitsio-utils"/> + <package name="psfex"/> + <package name="scamp"/> + <package name="sextractor"/> + <!-- <package name="siril"/> --> + <package name="skyviewer"/> + <package name="swarp"/> + <package name="wcstools"/> + <!-- Observatory: KStars + INDI --> + <package name="indistarter"/> + <package name="kstars"/> + <package name="libindi"/> + <!-- misc. astronomy --> + <!-- <package name="celestia"/> --> + <package name="stellarium"/> + <!-- <package name="virtualplanet"/> --> + <!-- Some astro environment stuff --> + <package name="astronomy-menus"/> + <package name="astronomy-menus-toplevel"/> + <!-- Python 3 and tools/libraries not included from the groups --> + <package name="python3"/> + <package name="python3-tools"/> + <package name="python3-matplotlib"/> + <package name="python3-scipy"/> + <package name="python3-numpy"/> + <package name="python3-ipython"/> + <package name="python3-ipython-console"/> + <package name="python3-ipython-notebook"/> + <package name="python3-sympy"/> + <package name="python3-networkx"/> + <package name="python3-pandas"/> + <package name="python3-pillow"/> + <package name="python3-seaborn"/> + <package name="python3-statsmodels"/> + <package name="python3-scikit-learn"/> + <package name="python3-scikit-image"/> + <!-- Python 3 astronomy --> + <package name="astropy-tools"/> + <package name="ginga"/> + <package name="python3-astropy"/> + <package name="python3-astroML"/> + <package name="python3-astroquery"/> + <package name="python3-astroscrappy"/> + <package name="python3-APLpy"/> + <package name="python3-ccdproc"/> + <package name="python3-fitsio"/> + <package name="python3-gatspy"/> + <package name="python3-photutils"/> + <package name="python3-pyvo"/> + <package name="python3-reproject"/> + <package name="python3-sep"/> + <!-- Matplotlib backend --> + <package name="python3-matplotlib-qt6"/> + <!-- Python IDE very useful for scientific use --> + <package name="python3-spyder"/> + <!-- BOINC for distributed computing --> + <package name="boinc-client"/> + <package name="boinc-manager"/> + <!-- Version control - A GUI for each as well --> + <package name="git"/> + <package name="git-gui"/> + <package name="git-cola"/> + <!-- Drawing, picture viewing tools, visualization tools --> + <package name="dia"/> + <package name="gimp"/> + <package name="kst"/> + <package name="kst-docs"/> + <package name="kst-fits"/> + <package name="LabPlot"/> + <!-- Misc tools --> + <package name="ImageMagick"/> + <package name="kate"/> + <package name="kate-plugins"/> + <package name="rlwrap"/> + <package name="screen"/> + <!-- Java JRE for VO tools --> + <package name="java"/> + </packages> +</image> diff --git a/teams/base.xml b/teams/base.xml new file mode 100644 index 0000000..9bda7dc --- /dev/null +++ b/teams/base.xml @@ -0,0 +1,17 @@ +<image> + <profiles> + <profile name="Tiny-Disk" description="Tiny Install Disk"> + <requires profile="BootDiskCore"/> + </profile> + </profiles> + <packages type="bootstrap" patternType="plusRecommended" profiles="Tiny-Disk"> + <package name="fedora-release"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="Tiny-Disk"> + <namedCollection name="core"/> + <namedCollection name="standard"/> + <namedCollection name="networkmanager-submodules"/> + <package name="initial-setup"/> + <ignore name="initial-setup-gui"/> + </packages> +</image> diff --git a/teams/budgie.xml b/teams/budgie.xml new file mode 100644 index 0000000..788ac78 --- /dev/null +++ b/teams/budgie.xml @@ -0,0 +1,15 @@ +<image> + <profiles> + <profile name="Budgie-Live" description="Budgie Spin Live DVD"> + <requires profile="Budgie-Desktop"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="Budgie-Disk" description="Budgie Spin Install Disk"> + <requires profile="Budgie-Desktop"/> + <requires profile="BootDiskCore"/> + </profile> + </profiles> + <packages type="bootstrap" patternType="plusRecommended" profiles="Budgie-Live,Budgie-Disk"> + <package name="fedora-release-budgie"/> + </packages> +</image> diff --git a/teams/cinnamon.xml b/teams/cinnamon.xml new file mode 100644 index 0000000..7087ba1 --- /dev/null +++ b/teams/cinnamon.xml @@ -0,0 +1,15 @@ +<image> + <profiles> + <profile name="Cinnamon-Live" description="Cinnamon Spin Live DVD"> + <requires profile="Cinnamon-Desktop"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="Cinnamon-Disk" description="Cinnamon Spin Install Disk"> + <requires profile="Cinnamon-Desktop"/> + <requires profile="BootDiskCore"/> + </profile> + </profiles> + <packages type="bootstrap" patternType="plusRecommended" profiles="Cinnamon-Live,Cinnamon-Disk"> + <package name="fedora-release-cinnamon"/> + </packages> +</image> diff --git a/teams/cloud/cloud.xml b/teams/cloud/cloud.xml new file mode 100644 index 0000000..3a99ce7 --- /dev/null +++ b/teams/cloud/cloud.xml @@ -0,0 +1,321 @@ +<image> + <profiles> + <profile name="CloudCore" description="Cloud spin core packages"> + <requires profile="BootCore"/> + </profile> + <profile name="CloudCoreUKI" description="Cloud spin core packages for UKI"> + <requires profile="BootCoreUKI"/> + </profile> + <profile name="Cloud-Base-Azure" description="Azure Base Guest Image"> + <requires profile="CloudCore"/> + </profile> + <profile name="Cloud-Base-AmazonEC2" description="Amazon EC2 HVM Base Guest Image"> + <requires profile="CloudCore"/> + </profile> + <profile name="Cloud-Base-GCE" description="GCE Base Guest Image"> + <requires profile="CloudCore"/> + </profile> + <profile name="Cloud-Base-Generic" description="Generic Base Guest Image"> + <requires profile="CloudCore"/> + </profile> + <profile name="Cloud-Base-UEFI-UKI" description="UEFI Base Guest Image using UKIs"> + <requires profile="CloudCoreUKI"/> + </profile> + <profile name="Cloud-Base-OpenStack" description="OpenStack Base Guest Image"> + <requires profile="Cloud-Base-Generic"/> + </profile> + <profile name="Cloud-Base-Oracle" description="Oracle Cloud Base Guest Image"> + <requires profile="Cloud-Base-Generic"/> + </profile> + </profiles> + <preferences profiles="Cloud-Base-Azure" arch="x86_64"> + <type image="oem" format="vhd-fixed" formatoptions="force_size" + filesystem="btrfs" btrfs_root_is_subvolume="true" btrfs_set_default_volume="false" fsmountoptions="compress=zstd:1" + kernelcmdline="no_timer_check console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0 systemd.firstboot=off" + devicepersistency="by-uuid" + bootpartition="false" efipartsize="100" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" console="serial" timeout="0"/> + <systemdisk> + <volume name="@root=root"/> + <volume name="boot" parent="/"/> + <volume name="home" parent="/"/> + <volume name="var" parent="/"/> + </systemdisk> + <size unit="G">5</size> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="Cloud-Base-Azure" arch="aarch64"> + <type image="oem" format="vhd-fixed" formatoptions="force_size" + filesystem="btrfs" btrfs_root_is_subvolume="true" btrfs_set_default_volume="false" fsmountoptions="compress=zstd:1" + kernelcmdline="no_timer_check console=tty1 console=ttyAMA0,115200n8 earlyprintk=ttyAMA0 systemd.firstboot=off" + devicepersistency="by-uuid" + bootpartition="false" efipartsize="100" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" console="serial" timeout="0"/> + <systemdisk> + <volume name="@root=root"/> + <volume name="boot" parent="/"/> + <volume name="home" parent="/"/> + <volume name="var" parent="/"/> + </systemdisk> + <size unit="G">5</size> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="Cloud-Base-AmazonEC2" arch="x86_64"> + <type image="oem" + filesystem="btrfs" btrfs_root_is_subvolume="true" btrfs_set_default_volume="false" fsmountoptions="compress=zstd:1" + kernelcmdline="no_timer_check console=tty1 console=ttyS0,115200n8 systemd.firstboot=off" + devicepersistency="by-uuid" + bootpartition="false" efipartsize="100" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" timeout="0"/> + <size unit="G">5</size> + <systemdisk> + <volume name="@root=root"/> + <volume name="boot" parent="/"/> + <volume name="home" parent="/"/> + <volume name="var" parent="/"/> + </systemdisk> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="Cloud-Base-AmazonEC2" arch="aarch64"> + <type image="oem" + filesystem="btrfs" btrfs_root_is_subvolume="true" btrfs_set_default_volume="false" fsmountoptions="compress=zstd:1" + kernelcmdline="no_timer_check console=tty1 console=ttyAMA0,115200n8 systemd.firstboot=off" + devicepersistency="by-uuid" + bootpartition="false" efipartsize="100" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" timeout="0"/> + <size unit="G">5</size> + <systemdisk> + <volume name="@root=root"/> + <volume name="boot" parent="/"/> + <volume name="home" parent="/"/> + <volume name="var" parent="/"/> + </systemdisk> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="Cloud-Base-GCE" arch="x86_64"> + <type image="oem" format="gce" + filesystem="btrfs" btrfs_root_is_subvolume="true" btrfs_set_default_volume="false" fsmountoptions="compress=zstd:1" + kernelcmdline="no_timer_check console=ttyS0,38400n8d systemd.firstboot=off" + devicepersistency="by-uuid" + bootpartition="false" efipartsize="100" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" timeout="0"/> + <!-- GCP engineers have told us the disk images have bad performance if they are anything less than 10G --> + <size unit="G">10</size> + <systemdisk> + <volume name="@root=root"/> + <volume name="boot" parent="/"/> + <volume name="home" parent="/"/> + <volume name="var" parent="/"/> + </systemdisk> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="Cloud-Base-GCE" arch="aarch64"> + <type image="oem" format="gce" + filesystem="btrfs" btrfs_root_is_subvolume="true" btrfs_set_default_volume="false" fsmountoptions="compress=zstd:1" + kernelcmdline="no_timer_check console=ttyAMA0,38400n8d systemd.firstboot=off" + devicepersistency="by-uuid" + bootpartition="false" efipartsize="100" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" timeout="0"/> + <!-- GCP engineers have told us the disk images have bad performance if they are anything less than 10G --> + <size unit="G">10</size> + <systemdisk> + <volume name="@root=root"/> + <volume name="boot" parent="/"/> + <volume name="home" parent="/"/> + <volume name="var" parent="/"/> + </systemdisk> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="Cloud-Base-Generic" arch="x86_64,riscv64"> + <type image="oem" format="qcow2" + filesystem="btrfs" btrfs_root_is_subvolume="true" btrfs_set_default_volume="false" fsmountoptions="compress=zstd:1" + kernelcmdline="no_timer_check console=tty1 console=ttyS0,115200n8 systemd.firstboot=off" + devicepersistency="by-uuid" + bootpartition="false" efipartsize="100" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" console="serial" timeout="0"/> + <size unit="G">5</size> + <systemdisk> + <volume name="@root=root"/> + <volume name="boot" parent="/"/> + <volume name="home" parent="/"/> + <volume name="var" parent="/"/> + </systemdisk> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="Cloud-Base-Generic" arch="aarch64"> + <type image="oem" format="qcow2" + filesystem="btrfs" btrfs_root_is_subvolume="true" btrfs_set_default_volume="false" fsmountoptions="compress=zstd:1" + kernelcmdline="no_timer_check console=tty1 console=ttyAMA0,115200n8 systemd.firstboot=off" + devicepersistency="by-uuid" + bootpartition="false" efipartsize="100" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" console="serial" timeout="0"/> + <size unit="G">5</size> + <systemdisk> + <volume name="@root=root"/> + <volume name="boot" parent="/"/> + <volume name="home" parent="/"/> + <volume name="var" parent="/"/> + </systemdisk> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="Cloud-Base-Generic" arch="ppc64le"> + <type image="oem" format="qcow2" + filesystem="btrfs" btrfs_root_is_subvolume="true" btrfs_set_default_volume="false" fsmountoptions="compress=zstd:1" + kernelcmdline="no_timer_check console=tty1 console=ttyS0,115200n8 systemd.firstboot=off" + devicepersistency="by-uuid" + bootpartition="false" firmware="ofw" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" console="serial" timeout="0"/> + <size unit="G">5</size> + <systemdisk> + <volume name="@root=root"/> + <volume name="boot" parent="/"/> + <volume name="home" parent="/"/> + <volume name="var" parent="/"/> + </systemdisk> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="Cloud-Base-Generic" arch="s390x"> + <type image="oem" format="qcow2" + filesystem="btrfs" btrfs_root_is_subvolume="true" btrfs_set_default_volume="false" fsmountoptions="compress=zstd:1" + kernelcmdline="no_timer_check console=tty1 console=ttyS0,115200n8 systemd.firstboot=off" + devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="ext4" + rootfs_label="fedora" + > + <bootloader name="zipl" timeout="1"/> + <size unit="G">5</size> + <systemdisk> + <volume name="@root=root"/> + <volume name="home" parent="/"/> + <volume name="var" parent="/"/> + </systemdisk> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="Cloud-Base-UEFI-UKI" arch="x86_64,aarch64,riscv64"> + <type image="oem" format="qcow2" + firmware="uefi" efipartsize="1000" + bootpartition="false" + filesystem="btrfs" btrfs_root_is_subvolume="true" btrfs_set_default_volume="true" + kernelcmdline="systemd.firstboot=off" + devicepersistency="by-uuid" + rootfs_label="fedora" + initrd_system="none" + editbootconfig="uki-editbootconfig.sh" + > + <bootloader name="custom"/> + <size unit="G">5</size> + <systemdisk> + <volume name="@root=root"/> + <volume name="home" parent="/"/> + <volume name="var" parent="/"/> + </systemdisk> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <packages type="bootstrap" patternType="plusRecommended" profiles="CloudCore,CloudCoreUKI"> + <package name="fedora-release-cloud"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="CloudCore"> + <namedCollection name="cloud-server-environment"/> + <ignore name="dracut-config-rescue"/> + <ignore name="firewalld"/> + <ignore name="fwupd"/> + <ignore name="kernel"/> + <ignore name="*-firmware"/> + <ignore name="geolite2-city"/> + <ignore name="geolite2-country"/> + <ignore name="plymouth"/> + <package name="btrfs-progs"/> + <package name="python3-dnf-plugin-tracer"/> + <package name="glibc-langpack-en"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="CloudCoreUKI"> + <namedCollection name="cloud-server-environment"/> + <ignore name="dracut-config-rescue"/> + <ignore name="firewalld"/> + <ignore name="fwupd"/> + <ignore name="kernel"/> + <ignore name="[a-oq-z]*-firmware"/> + <ignore name="geolite2-city"/> + <ignore name="geolite2-country"/> + <ignore name="plymouth"/> + <package name="btrfs-progs"/> + <package name="python3-dnf-plugin-tracer"/> + <package name="glibc-langpack-en"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="Cloud-Base-AmazonEC2"> + <package name="amazon-ec2-utils"/> + <package name="awscli2"/> + <package name="ec2-instance-connect"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="Cloud-Base-Azure"> + <package name="WALinuxAgent"/> + <package name="azure-vm-utils"/> + <package name="kernel-modules"/> + <package name="hyperv-daemons"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="Cloud-Base-GCE"> + <package name="google-compute-engine-guest-configs"/> + <package name="google-compute-engine-oslogin"/> + <package name="google-guest-agent"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="Cloud-Base-Generic"> + <package name="qemu-guest-agent"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="Cloud-Base-UEFI-UKI"> + <package name="qemu-guest-agent"/> + </packages> + <packages type="uninstall" profiles="Cloud-Base-GCE"> + <package name="cloud-init"/> + </packages> +</image> diff --git a/teams/cloud/container.xml b/teams/cloud/container.xml new file mode 100644 index 0000000..25dcd49 --- /dev/null +++ b/teams/cloud/container.xml @@ -0,0 +1,283 @@ +<image> + <profiles> + <profile name="ContainerCore" description="Container core packages"> + </profile> + <profile name="Container-Base-Generic-Minimal" description="Generic Minimal Base Container Image"> + <requires profile="ContainerCore"/> + </profile> + <profile name="Container-Base-Generic" description="Generic Base Container Image"> + <requires profile="ContainerCore"/> + </profile> + <profile name="Container-Base-Generic-Init" description="Generic Init Base Container Image"> + <requires profile="ContainerCore"/> + </profile> + <profile name="Container-Toolbox" description="Toolbox Container Image"/> + </profiles> + <preferences profiles="Container-Base-Generic"> + <type image="oci"> + <containerconfig + name="fedora" + tag="45" + maintainer="Fedora Project Contributors <devel@lists.fedoraproject.org>" + > + <subcommand execute="/bin/bash"/> + <labels> + <label name="org.opencontainers.image.vendor" value="Fedora Project"/> + <label name="org.opencontainers.image.url" value="https://fedoraproject.org/"/> + <label name="org.opencontainers.image.licenses" value="MIT"/> + <label name="org.opencontainers.image.title" value="fedora"/> + <label name="org.opencontainers.image.version" value="45"/> + </labels> + <environment> + <env name="container" value="oci"/> + <env name="PATH" value="/usr/local/bin:/usr/bin"/> + </environment> + </containerconfig> + </type> + <timezone>Etc/UTC</timezone> + <locale>en_US</locale> + <rpm-locale-filtering>true</rpm-locale-filtering> + <rpm-excludedocs>true</rpm-excludedocs> + </preferences> + <preferences profiles="Container-Base-Generic-Minimal"> + <type image="oci"> + <containerconfig + name="fedora-minimal" + tag="45" + maintainer="Fedora Project Contributors <devel@lists.fedoraproject.org>" + > + <subcommand execute="/bin/bash"/> + <labels> + <label name="org.opencontainers.image.vendor" value="Fedora Project"/> + <label name="org.opencontainers.image.url" value="https://fedoraproject.org/"/> + <label name="org.opencontainers.image.licenses" value="MIT"/> + <label name="org.opencontainers.image.title" value="fedora-minimal"/> + <label name="org.opencontainers.image.version" value="45"/> + </labels> + <environment> + <env name="container" value="oci"/> + <env name="PATH" value="/usr/local/bin:/usr/bin"/> + </environment> + </containerconfig> + </type> + <timezone>Etc/UTC</timezone> + <locale>en_US</locale> + <rpm-locale-filtering>true</rpm-locale-filtering> + <rpm-excludedocs>true</rpm-excludedocs> + </preferences> + <preferences profiles="Container-Base-Generic-Init"> + <type image="oci"> + <containerconfig + name="fedora-init" + tag="45" + maintainer="Fedora Project Contributors <devel@lists.fedoraproject.org>" + > + <subcommand execute="/sbin/init"/> + <labels> + <label name="org.opencontainers.image.vendor" value="Fedora Project"/> + <label name="org.opencontainers.image.url" value="https://fedoraproject.org/"/> + <label name="org.opencontainers.image.licenses" value="MIT"/> + <label name="org.opencontainers.image.title" value="fedora-init"/> + <label name="org.opencontainers.image.version" value="45"/> + </labels> + <stopsignal>SIGRTMIN+3</stopsignal> + </containerconfig> + </type> + <timezone>Etc/UTC</timezone> + <locale>en_US</locale> + <rpm-locale-filtering>true</rpm-locale-filtering> + <rpm-excludedocs>true</rpm-excludedocs> + </preferences> + <preferences profiles="Container-Toolbox"> + <type image="oci"> + <containerconfig + name="fedora-toolbox" + tag="45" + maintainer="Fedora Project Contributors <devel@lists.fedoraproject.org>" + > + <subcommand execute="/bin/bash"/> + <labels> + <label name="org.opencontainers.image.vendor" value="Fedora Project"/> + <label name="org.opencontainers.image.url" value="https://fedoraproject.org/"/> + <label name="org.opencontainers.image.licenses" value="MIT"/> + <label name="org.opencontainers.image.title" value="fedora-toolbox"/> + <label name="org.opencontainers.image.version" value="45"/> + <label name="com.github.containers.toolbox" value="true"/> + </labels> + <environment> + <env name="container" value="oci"/> + <env name="PATH" value="/usr/local/bin:/usr/bin"/> + </environment> + </containerconfig> + </type> + <timezone>Etc/UTC</timezone> + <locale>en_US</locale> + <rpm-locale-filtering>false</rpm-locale-filtering> + <rpm-excludedocs>false</rpm-excludedocs> + </preferences> + <packages type="bootstrap" profiles="ContainerCore"> + <ignore name="dosfstools"/> + <ignore name="e2fsprogs"/> + <ignore name="fuse-libs"/> + <ignore name="gnupg2-smime"/> + <ignore name="libss"/> <!-- used by e2fsprogs --> + <ignore name="kernel"/> + <ignore name="*-firmware"/> + <ignore name="geolite2-city"/> + <ignore name="geolite2-country"/> + <ignore name="pinentry"/> + <ignore name="shared-mime-info"/> + <ignore name="pinentry"/> + <ignore name="trousers"/> + <ignore name="xkeyboard-config"/> + <ignore name="grubby"/> + <ignore name="langpacks-en_GB"/> + <!-- https://bugzilla.redhat.com/show_bug.cgi?id=1951111 --> + <ignore name="sssd-client"/> + <package name="fedora-release-container"/> + <package name="bash"/> + <package name="coreutils"/> + <package name="rpm"/> + <package name="shadow-utils"/> + <package name="util-linux-core"/> + <package name="gawk"/> + </packages> + <packages type="bootstrap" profiles="Container-Base-Generic-Minimal"> + <ignore name="glibc-langpack-en"/> + <ignore name="langpacks-en"/> + <ignore name="tzdata"/> + <package name="dnf5"/> + <package name="glibc-minimal-langpack"/> + <package name="systemd-standalone-sysusers"/> + </packages> + <packages type="bootstrap" profiles="Container-Base-Generic"> + <package name="systemd-standalone-sysusers"/> + </packages> + <packages type="bootstrap" profiles="Container-Base-Generic,Container-Base-Generic-Init"> + <ignore name="glibc-langpack-en"/> + <ignore name="langpacks-en"/> + <package name="bzip2"/> + <package name="gzip"/> + <package name="sudo"/> + <package name="rootfiles"/> + <package name="tar"/> <!-- https://bugzilla.redhat.com/show_bug.cgi?id=1409920 --> + <package name="vim-minimal"/> + <package name="dnf5"/> + <package name="dnf5-plugins"/> + <package name="glibc-minimal-langpack"/> + <package name="tzdata"/> + <package name="xz"/> + <package name="zstd"/> + </packages> + <packages type="image" profiles="Container-Base-Generic-Init"> + <package name="glibc-langpack-en"/> + <package name="kbd"/> + <package name="systemd"/> + </packages> + <packages type="bootstrap" patternType="plusRecommended" profiles="Container-Toolbox"> + <ignore name="dosfstools"/> + <ignore name="e2fsprogs"/> + <ignore name="*-firmware"/> + <ignore name="fuse-libs"/> + <ignore name="geolite2-city"/> + <ignore name="geolite2-country"/> + <ignore name="grubby"/> + <ignore name="kernel"/> + <ignore name="libss"/> <!-- used by e2fsprogs --> + <ignore name="pinentry"/> + <ignore name="shared-mime-info"/> + <ignore name="sssd-client"/> + <!-- This is a weak dep of systemd, we do not want this in the container; + see: https://github.com/containers/toolbox/issues/1410 --> + <ignore name="systemd-resolved"/> + <ignore name="trousers"/> + <ignore name="xkeyboard-config"/> + <package name="acl"/> + <package name="bash"/> + <package name="bash-completion"/> + <package name="bc"/> + <package name="bzip2"/> + <package name="coreutils"/> + <package name="coreutils-common"/> + <package name="cpio"/> + <package name="curl"/> + <package name="default-editor"/> + <package name="diffutils"/> + <package name="dnf5"/> + <package name="dnf5-plugins"/> + <package name="fedora-release-toolbx"/> + <package name="file"/> + <package name="findutils"/> + <package name="flatpak-spawn"/> + <package name="fpaste"/> + <package name="gawk"/> + <package name="git"/> + <package name="glibc-all-langpacks"/> + <package name="gnupg2"/> + <package name="gnupg2-smime"/> + <package name="grep"/> + <package name="gvfs-client"/> + <package name="gzip"/> + <package name="hostname"/> + <package name="iproute"/> + <package name="iputils"/> + <package name="kbd-misc"/> + <package name="keyutils"/> + <package name="krb5-libs"/> + <package name="langpacks-en"/> + <package name="less"/> + <package name="libcap"/> + <package name="lsof"/> + <package name="man-db"/> + <package name="man-pages"/> + <package name="mesa-dri-drivers"/> + <package name="mesa-vulkan-drivers"/> + <package name="mtr"/> + <package name="nss-mdns"/> + <package name="openssh-clients"/> + <package name="openssl"/> + <package name="p11-kit-client"/> + <package name="pam"/> + <package name="pigz"/> + <package name="policycoreutils"/> + <package name="procps-ng"/> + <package name="psmisc"/> + <package name="python3"/> + <package name="rootfiles"/> + <package name="rpm"/> + <package name="rsync"/> + <package name="sed"/> + <package name="shadow-utils"/> + <package name="sudo"/> + <package name="tar"/> <!-- https://bugzilla.redhat.com/show_bug.cgi?id=1409920 --> + <package name="tcpdump"/> + <package name="time"/> + <package name="traceroute"/> + <package name="tree"/> + <package name="tzdata"/> + <package name="unzip"/> + <package name="util-linux"/> + <package name="vim-minimal"/> + <package name="vte-profile"/> + <package name="vulkan-loader"/> + <package name="wget"/> + <package name="which"/> + <package name="whois"/> + <package name="words"/> + <package name="xorg-x11-xauth"/> + <package name="xz"/> + <package name="zip"/> + </packages> + <packages type="uninstall" profiles="Container-Toolbox"> + <package name="dracut"/> + <package name="pinentry"/> + <package name="systemd-resolved"/> + <package name="xkeyboard-config"/> + </packages> + <packages type="bootstrap" profiles="Container-Base-Generic-Minimal,Container-Base-Generic,Container-Toolbox"> + <package name="systemd-standalone-tmpfiles"/> + </packages> + <packages type="uninstall" profiles="Container-Base-Generic-Minimal,Container-Base-Generic,Container-Toolbox"> + <package name="systemd-standalone-tmpfiles"/> + </packages> +</image> diff --git a/teams/cloud/vagrant.xml b/teams/cloud/vagrant.xml new file mode 100644 index 0000000..301b08c --- /dev/null +++ b/teams/cloud/vagrant.xml @@ -0,0 +1,77 @@ +<image> + <profiles> + <profile name="VagrantCore" description="Vagrant core packages"> + <requires profile="CloudCore"/> + </profile> + <profile name="Cloud-Base-Vagrant-libvirt" description="Vagrant Base guest image for libvirt"> + <requires profile="VagrantCore"/> + </profile> + <profile name="Cloud-Base-Vagrant-VirtualBox" description="Vagrant Base guest image for VirtualBox"> + <requires profile="VagrantCore"/> + </profile> + </profiles> + <preferences profiles="Cloud-Base-Vagrant-libvirt" arch="x86_64,aarch64"> + <type image="oem" format="vagrant" + filesystem="btrfs" btrfs_root_is_subvolume="true" btrfs_set_default_volume="false" fsmountoptions="compress=zstd:1" + kernelcmdline="no_timer_check console=tty1 console=ttyS0,115200n8" + devicepersistency="by-uuid" + bootpartition="false" efipartsize="100" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" console="serial" timeout="1"/> + <size unit="G">5</size> + <vagrantconfig provider="libvirt" virtualsize="5"/> + <systemdisk> + <volume name="@root=root"/> + <volume name="boot" parent="/"/> + <volume name="home" parent="/"/> + <volume name="var" parent="/"/> + </systemdisk> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="Cloud-Base-Vagrant-VirtualBox" arch="x86_64"> + <type image="oem" format="vagrant" + filesystem="btrfs" btrfs_root_is_subvolume="true" btrfs_set_default_volume="false" fsmountoptions="compress=zstd:1" + kernelcmdline="no_timer_check console=tty1 console=ttyS0,115200n8" + devicepersistency="by-uuid" + bootpartition="false" efipartsize="100" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" console="serial" timeout="1"/> + <size unit="G">5</size> + <vagrantconfig provider="virtualbox" virtualbox_guest_additions_present="true" virtualsize="5"/> + <systemdisk> + <volume name="@root=root"/> + <volume name="boot" parent="/"/> + <volume name="home" parent="/"/> + <volume name="var" parent="/"/> + </systemdisk> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <users profiles="VagrantCore"> + <!-- Standard password for the vagrant user, used by all images --> + <user name="vagrant" groups="vagrant" password="vagrant" home="/home/vagrant" pwdformat="plain" /> + <user password="$1$wYJUgpM5$RXMMeASDc035eX.NbYWFl0" home="/root" name="root" groups="root"/> + </users> + <packages type="image" patternType="plusRecommended" profiles="VagrantCore"> + <package name="rsync"/> + <package name="fuse-sshfs"/> + <package name="gdisk"/> + <package name="glibc-langpack-en"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="Cloud-Base-Vagrant-libvirt"> + <package name="qemu-guest-agent"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="Cloud-Base-Vagrant-VirtualBox"> + <package name="virtualbox-guest-additions"/> + </packages> + <packages type="uninstall" profiles="VagrantCore"> + <package name="cloud-init"/> + </packages> +</image> diff --git a/teams/cloud/wsl.xml b/teams/cloud/wsl.xml new file mode 100644 index 0000000..ffafb79 --- /dev/null +++ b/teams/cloud/wsl.xml @@ -0,0 +1,67 @@ +<image> + <profiles> + <profile name="WSL-Base" description="Windows Subsystem for Linux Base"/> + </profiles> + <preferences profiles="WSL-Base"> + <type image="wsl"/> + <timezone>Etc/UTC</timezone> + <locale>en_US</locale> + <rpm-locale-filtering>false</rpm-locale-filtering> + <rpm-excludedocs>false</rpm-excludedocs> + </preferences> + <packages type="bootstrap" profiles="WSL-Base"> + <package name="bash"/> + <package name="coreutils"/> + <package name="dnf5"/> + <package name="dnf5-plugins"/> + <package name="fedora-release-wsl"/> + <package name="rpm"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="WSL-Base"> + <package name="attr"/> + <package name="acl"/> + <package name="bash-color-prompt"/> + <package name="bash-completion"/> + <package name="bind-utils"/> + <package name="bzip2"/> + <package name="curl"/> + <package name="dbus"/> + <package name="default-editor"/> + <package name="file"/> + <package name="glibc-langpack-en"/> + <package name="gnupg2"/> + <package name="iproute"/> + <package name="iputils"/> + <package name="less"/> + <package name="lsof"/> + <package name="man-db"/> + <package name="man-pages"/> + <package name="NetworkManager"/> + <package name="nmap-ncat"/> + <package name="openssh-clients"/> + <package name="passwd"/> + <package name="pciutils"/> + <package name="procps-ng"/> + <package name="rsync"/> + <package name="shadow-utils"/> + <package name="sudo"/> + <package name="symlinks"/> + <package name="systemd-udev"/> + <package name="systemd-resolved"/> + <package name="tar"/> + <package name="tcpdump"/> + <package name="time"/> + <package name="traceroute"/> + <package name="tree"/> + <package name="unzip"/> + <package name="usbutils"/> + <package name="util-linux"/> + <package name="vim-minimal"/> + <package name="wget"/> + <package name="which"/> + <package name="whois"/> + <package name="wsl-setup"/> + <package name="zip"/> + <package name="zram-generator-defaults"/> + </packages> +</image> diff --git a/teams/cosmic.xml b/teams/cosmic.xml new file mode 100644 index 0000000..6fe057d --- /dev/null +++ b/teams/cosmic.xml @@ -0,0 +1,15 @@ +<image> + <profiles> + <profile name="COSMIC-Live" description="COSMIC Spin Live DVD"> + <requires profile="COSMIC-Desktop"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="COSMIC-Disk" description="COSMIC Spin Install Disk"> + <requires profile="COSMIC-Desktop"/> + <requires profile="BootDiskCore"/> + </profile> + </profiles> + <packages type="bootstrap" patternType="plusRecommended" profiles="COSMIC-Live,COSMIC-Disk"> + <package name="fedora-release-cosmic"/> + </packages> +</image> diff --git a/teams/designsuite.xml b/teams/designsuite.xml new file mode 100644 index 0000000..a50ed6b --- /dev/null +++ b/teams/designsuite.xml @@ -0,0 +1,34 @@ +<image> + <profiles> + <profile name="DesignSuiteDesktop" description="Desktop packages for Design Suite"> + <requires profile="GNOME-Desktop"/> + </profile> + <profile name="Design_suite-Live" description="Design Suite Lab Live DVD"> + <requires profile="DesignSuiteDesktop"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="Design_suite-Disk" description="Design Suite Lab Install Disk"> + <requires profile="DesignSuiteDesktop"/> + <requires profile="BootDiskCore"/> + </profile> + </profiles> + <packages type="bootstrap" patternType="plusRecommended" profiles="DesignSuiteDesktop"> + <package name="fedora-release-designsuite"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="DesignSuiteDesktop"> + <namedCollection name="design-suite"/> + <!-- Provides backup application (blocked by Workstation exclude of python3-boto3) --> + <!-- <package name="deja-dup"/> --> + <!-- Add extra gnome applications --> + <package name="gnome-calendar"/> + <package name="gnome-shell-extension-gsconnect"/> + <!-- Some convertible devices have broken automatic screen rotation on GNOME Wayland --> + <package name="gnome-shell-extension-screen-autorotate"/> + <package name="gnome-todo"/> + <!-- Add cosmetic for terminal --> + <package name="powerline"/> + <package name="powerline-fonts"/> + <!-- Removal of unneeded applications --> + <ignore name="gnome-boxes"/> + </packages> +</image> diff --git a/teams/eln/cloud.xml b/teams/eln/cloud.xml new file mode 100644 index 0000000..b146d48 --- /dev/null +++ b/teams/eln/cloud.xml @@ -0,0 +1,258 @@ +<image> + <profiles> + <profile name="CloudCore" description="Cloud spin core packages"> + <requires profile="BootCore"/> + </profile> + <profile name="CloudCoreUKI" description="Cloud spin core packages for UKI"> + <requires profile="BootCoreUKI"/> + </profile> + <profile name="Cloud-Base-Azure" description="Azure Base Guest Image"> + <requires profile="CloudCore"/> + </profile> + <profile name="Cloud-Base-AmazonEC2" description="Amazon EC2 HVM Base Guest Image"> + <requires profile="CloudCore"/> + </profile> + <profile name="Cloud-Base-GCE" description="GCE Base Guest Image"> + <requires profile="CloudCore"/> + </profile> + <profile name="Cloud-Base-Generic" description="Generic Base Guest Image"> + <requires profile="CloudCore"/> + </profile> + <profile name="Cloud-Base-UEFI-UKI" description="UEFI Base Guest Image using UKIs"> + <requires profile="CloudCoreUKI"/> + </profile> + <profile name="Cloud-Base-OpenStack" description="OpenStack Base Guest Image"> + <requires profile="Cloud-Base-Generic"/> + </profile> + <profile name="Cloud-Base-Oracle" description="Oracle Cloud Base Guest Image"> + <requires profile="Cloud-Base-Generic"/> + </profile> + </profiles> + <preferences profiles="Cloud-Base-Azure" arch="x86_64"> + <type image="oem" format="vhd-fixed" formatoptions="force_size" + filesystem="xfs" + kernelcmdline="no_timer_check console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0 systemd.firstboot=off" + devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="xfs" efipartsize="100" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" console="serial" timeout="0"/> + <size unit="G">5</size> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="Cloud-Base-Azure" arch="aarch64"> + <type image="oem" format="vhd-fixed" formatoptions="force_size" + filesystem="xfs" + kernelcmdline="no_timer_check console=tty1 console=ttyAMA0,115200n8 earlyprintk=ttyAMA0 systemd.firstboot=off" + devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="xfs" efipartsize="100" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" console="serial" timeout="0"/> + <size unit="G">5</size> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="Cloud-Base-AmazonEC2" arch="x86_64"> + <type image="oem" + filesystem="xfs" + kernelcmdline="no_timer_check console=tty1 console=ttyS0,115200n8 systemd.firstboot=off" + devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="xfs" efipartsize="100" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" timeout="0"/> + <size unit="G">5</size> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="Cloud-Base-AmazonEC2" arch="aarch64"> + <type image="oem" + filesystem="xfs" + kernelcmdline="no_timer_check console=tty1 console=ttyAMA0,115200n8 systemd.firstboot=off" + devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="xfs" efipartsize="100" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" timeout="0"/> + <size unit="G">5</size> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="Cloud-Base-GCE" arch="x86_64"> + <type image="oem" format="gce" + filesystem="xfs" + kernelcmdline="no_timer_check console=ttyS0,38400n8d systemd.firstboot=off" + devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="xfs" efipartsize="100" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" timeout="0"/> + <!-- GCP engineers have told us the disk images have bad performance if they are anything less than 10G --> + <size unit="G">10</size> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="Cloud-Base-GCE" arch="aarch64"> + <type image="oem" format="gce" + filesystem="xfs" + kernelcmdline="no_timer_check console=ttyAMA0,38400n8d systemd.firstboot=off" + devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="xfs" efipartsize="100" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" timeout="0"/> + <!-- GCP engineers have told us the disk images have bad performance if they are anything less than 10G --> + <size unit="G">10</size> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="Cloud-Base-Generic" arch="x86_64"> + <type image="oem" format="qcow2" + filesystem="xfs" + kernelcmdline="no_timer_check console=tty1 console=ttyS0,115200n8 systemd.firstboot=off" + devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="xfs" efipartsize="100" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" console="serial" timeout="0"/> + <size unit="G">5</size> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="Cloud-Base-Generic" arch="aarch64"> + <type image="oem" format="qcow2" + filesystem="xfs" + kernelcmdline="no_timer_check console=tty1 console=ttyAMA0,115200n8 systemd.firstboot=off" + devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="xfs" efipartsize="100" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" console="serial" timeout="0"/> + <size unit="G">5</size> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="Cloud-Base-Generic" arch="ppc64le"> + <type image="oem" format="qcow2" + filesystem="xfs" + kernelcmdline="no_timer_check console=tty1 console=ttyS0,115200n8 systemd.firstboot=off" + devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="xfs" firmware="ofw" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" console="serial" timeout="0"/> + <size unit="G">5</size> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="Cloud-Base-Generic" arch="s390x"> + <type image="oem" format="qcow2" + filesystem="xfs" + kernelcmdline="no_timer_check console=tty1 console=ttyS0,115200n8 systemd.firstboot=off" + devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="xfs" + rootfs_label="fedora" + > + <bootloader name="zipl" timeout="1"/> + <size unit="G">5</size> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="Cloud-Base-UEFI-UKI" arch="x86_64,aarch64"> + <type image="oem" format="qcow2" + firmware="uefi" efipartsize="1000" + bootpartition="false" + filesystem="xfs" + kernelcmdline="systemd.firstboot=off" + devicepersistency="by-uuid" + rootfs_label="fedora" + initrd_system="none" + editbootconfig="uki-editbootconfig.sh" + > + <bootloader name="custom"/> + <size unit="G">5</size> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <packages type="bootstrap" patternType="plusRecommended" profiles="CloudCore,CloudCoreUKI"> + <package name="fedora-eln-release"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="CloudCore"> + <namedCollection name="cloud-server-environment"/> + <ignore name="dracut-config-rescue"/> + <ignore name="firewalld"/> + <ignore name="fwupd"/> + <ignore name="kernel"/> + <ignore name="*-firmware"/> + <ignore name="geolite2-city"/> + <ignore name="geolite2-country"/> + <ignore name="plymouth"/> + <package name="glibc-langpack-en"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="CloudCoreUKI"> + <namedCollection name="cloud-server-environment"/> + <ignore name="dracut-config-rescue"/> + <ignore name="firewalld"/> + <ignore name="fwupd"/> + <ignore name="kernel"/> + <ignore name="[a-oq-z]*-firmware"/> + <ignore name="geolite2-city"/> + <ignore name="geolite2-country"/> + <ignore name="plymouth"/> + <package name="glibc-langpack-en"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="Cloud-Base-AmazonEC2"> + <package name="awscli2"/> + <!-- These packages aren't available in Fedora ELN + <package name="amazon-ec2-utils"/> + <package name="ec2-instance-connect"/> + --> + </packages> + <packages type="image" patternType="plusRecommended" profiles="Cloud-Base-Azure"> + <package name="WALinuxAgent"/> + <package name="kernel-modules"/> + <package name="hyperv-daemons"/> + </packages> + <!-- These packages aren't available in Fedora ELN + <packages type="image" patternType="plusRecommended" profiles="Cloud-Base-GCE"> + <package name="google-compute-engine-guest-configs"/> + <package name="google-compute-engine-oslogin"/> + <package name="google-guest-agent"/> + </packages> + --> + <packages type="image" patternType="plusRecommended" profiles="Cloud-Base-Generic"> + <package name="qemu-guest-agent"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="Cloud-Base-UEFI-UKI"> + <package name="qemu-guest-agent"/> + </packages> + <!-- We don't have the Google support tools above, so we need cloud-init + <packages type="uninstall" profiles="Cloud-Base-GCE"> + <package name="cloud-init"/> + </packages> + --> +</image> diff --git a/teams/eln/container.xml b/teams/eln/container.xml new file mode 100644 index 0000000..5eebfb4 --- /dev/null +++ b/teams/eln/container.xml @@ -0,0 +1,205 @@ +<image> + <profiles> + <profile name="ContainerCore" description="Container core packages"> + </profile> + <profile name="Container-Base-Generic" description="Generic Base Container Image"> + <requires profile="ContainerCore"/> + </profile> + <profile name="Container-Toolbox" description="Toolbox Container Image"/> + </profiles> + <preferences profiles="Container-Base-Generic"> + <type image="oci"> + <containerconfig + name="fedora" + tag="eln" + maintainer="Fedora Project Contributors <devel@lists.fedoraproject.org>" + > + <subcommand execute="/bin/bash"/> + <labels> + <label name="org.opencontainers.image.vendor" value="Fedora Project"/> + <label name="org.opencontainers.image.url" value="https://fedoraproject.org/"/> + <label name="org.opencontainers.image.licenses" value="MIT"/> + <label name="org.opencontainers.image.title" value="fedora"/> + <label name="org.opencontainers.image.version" value="eln"/> + </labels> + <environment> + <env name="container" value="oci"/> + </environment> + </containerconfig> + </type> + <timezone>Etc/UTC</timezone> + <locale>en_US</locale> + <rpm-locale-filtering>true</rpm-locale-filtering> + <rpm-excludedocs>true</rpm-excludedocs> + </preferences> + <preferences profiles="Container-Toolbox"> + <type image="oci"> + <containerconfig + name="fedora-toolbox" + tag="eln" + maintainer="Fedora Project Contributors <devel@lists.fedoraproject.org>" + > + <subcommand execute="/bin/bash"/> + <labels> + <label name="org.opencontainers.image.vendor" value="Fedora Project"/> + <label name="org.opencontainers.image.url" value="https://fedoraproject.org/"/> + <label name="org.opencontainers.image.licenses" value="MIT"/> + <label name="org.opencontainers.image.title" value="fedora-toolbox"/> + <label name="org.opencontainers.image.version" value="eln"/> + <label name="com.github.containers.toolbox" value="true"/> + </labels> + <environment> + <env name="container" value="oci"/> + <env name="PATH" value="/usr/local/bin:/usr/bin"/> + </environment> + </containerconfig> + </type> + <timezone>Etc/UTC</timezone> + <locale>en_US</locale> + <rpm-locale-filtering>false</rpm-locale-filtering> + <rpm-excludedocs>false</rpm-excludedocs> + </preferences> + <packages type="bootstrap" profiles="ContainerCore"> + <ignore name="dosfstools"/> + <ignore name="e2fsprogs"/> + <ignore name="fuse-libs"/> + <ignore name="gnupg2-smime"/> + <ignore name="libss"/> + <ignore name="kernel"/> + <ignore name="*-firmware"/> + <ignore name="geolite2-city"/> + <ignore name="geolite2-country"/> + <ignore name="pinentry"/> + <ignore name="shared-mime-info"/> + <ignore name="pinentry"/> + <ignore name="trousers"/> + <ignore name="xkeyboard-config"/> + <ignore name="grubby"/> + <ignore name="langpacks-en_GB"/> + <ignore name="sssd-client"/> + <package name="fedora-eln-release"/> + <package name="bash"/> + <package name="coreutils"/> + <package name="rpm"/> + <package name="util-linux-core"/> + </packages> + <packages type="bootstrap" profiles="Container-Base-Generic"> + <ignore name="glibc-langpack-en"/> + <ignore name="langpacks-en"/> + <package name="bzip2"/> + <package name="gzip"/> + <package name="sudo"/> + <package name="rootfiles"/> + <package name="tar"/> + <package name="vim-minimal"/> + <package name="dnf5"/> + <package name="dnf5-plugins"/> + <package name="glibc-minimal-langpack"/> + <package name="systemd-standalone-sysusers"/> + <package name="tzdata"/> + <package name="xz"/> + <package name="zstd"/> + </packages> + <packages type="bootstrap" patternType="plusRecommended" profiles="Container-Toolbox"> + <ignore name="dosfstools"/> + <ignore name="e2fsprogs"/> + <ignore name="*-firmware"/> + <ignore name="fuse-libs"/> + <ignore name="geolite2-city"/> + <ignore name="geolite2-country"/> + <ignore name="grubby"/> + <ignore name="kernel"/> + <ignore name="libss"/> <!-- used by e2fsprogs --> + <ignore name="pinentry"/> + <ignore name="shared-mime-info"/> + <ignore name="sssd-client"/> + <!-- This is a weak dep of systemd, we do not want this in the container; + see: https://github.com/containers/toolbox/issues/1410 --> + <ignore name="systemd-resolved"/> + <ignore name="trousers"/> + <ignore name="xkeyboard-config"/> + <package name="acl"/> + <package name="bash"/> + <package name="bash-completion"/> + <package name="bc"/> + <package name="bzip2"/> + <package name="coreutils"/> + <package name="coreutils-common"/> + <package name="cpio"/> + <package name="curl"/> + <package name="diffutils"/> + <package name="dnf5"/> + <package name="dnf5-plugins"/> + <package name="fedora-eln-release"/> + <package name="file"/> + <package name="findutils"/> + <package name="flatpak-spawn"/> + <package name="gawk"/> + <package name="git"/> + <package name="glibc-all-langpacks"/> + <package name="gnupg2"/> + <package name="gnupg2-smime"/> + <package name="grep"/> + <package name="gvfs-client"/> + <package name="gzip"/> + <package name="hostname"/> + <package name="iproute"/> + <package name="iputils"/> + <package name="kbd-misc"/> + <package name="keyutils"/> + <package name="krb5-libs"/> + <package name="langpacks-en"/> + <package name="less"/> + <package name="libcap"/> + <package name="lsof"/> + <package name="man-db"/> + <package name="man-pages"/> + <package name="mesa-dri-drivers"/> + <package name="mesa-vulkan-drivers" arch="x86_64"/> + <package name="mtr"/> + <package name="openssh-clients"/> + <package name="openssl"/> + <package name="pam"/> + <package name="pigz"/> + <package name="policycoreutils"/> + <package name="procps-ng"/> + <package name="psmisc"/> + <package name="python3"/> + <package name="rootfiles"/> + <package name="rpm"/> + <package name="rsync"/> + <package name="sed"/> + <package name="shadow-utils"/> + <package name="sudo"/> + <package name="tar"/> <!-- https://bugzilla.redhat.com/show_bug.cgi?id=1409920 --> + <package name="tcpdump"/> + <package name="time"/> + <package name="traceroute"/> + <package name="tree"/> + <package name="tzdata"/> + <package name="unzip"/> + <package name="util-linux"/> + <package name="vim-minimal"/> + <package name="vte-profile"/> + <package name="vulkan-loader"/> + <package name="wget"/> + <package name="which"/> + <package name="whois"/> + <package name="words"/> + <package name="xorg-x11-xauth"/> + <package name="xz"/> + <package name="zip"/> + </packages> + <packages type="uninstall" profiles="Container-Toolbox"> + <package name="dracut"/> + <package name="pinentry"/> + <package name="systemd-resolved"/> + <package name="xkeyboard-config"/> + </packages> + <packages type="bootstrap" profiles="Container-Base-Generic,Container-Toolbox"> + <package name="systemd-standalone-tmpfiles"/> + </packages> + <packages type="uninstall" profiles="Container-Base-Generic,Container-Toolbox"> + <package name="systemd-standalone-tmpfiles"/> + </packages> +</image> diff --git a/teams/eln/desktop-environments.xml b/teams/eln/desktop-environments.xml new file mode 100644 index 0000000..c9741b0 --- /dev/null +++ b/teams/eln/desktop-environments.xml @@ -0,0 +1,49 @@ +<image> + <profiles> + <profile name="DesktopCommon" description="Common desktop packages"/> + <profile name="GNOME-Desktop" description="GNOME Desktop"> + <requires profile="DesktopCommon"/> + </profile> + <profile name="KDE-Desktop" description="KDE Plasma Desktop"> + <requires profile="DesktopCommon"/> + </profile> + <profile name="COSMIC-Desktop" description="COSMIC Desktop"> + <requires profile="DesktopCommon"/> + </profile> + </profiles> + <packages type="image" patternType="plusRecommended" profiles="DesktopCommon"> + <package name="fedora-eln-backgrounds"/> + <package name="firefox"/> + <package name="plymouth-theme-spinner"/> + <namedCollection name="base-graphical"/> + <namedCollection name="core"/> + <namedCollection name="fonts"/> + <namedCollection name="guest-desktop-agents"/> + <namedCollection name="hardware-support"/> + <namedCollection name="multimedia"/> + <namedCollection name="networkmanager-submodules"/> + <namedCollection name="print-client"/> + <namedCollection name="standard"/> + <ignore name="insights-client"/> + <ignore name="libdnf-plugin-subscription-manager"/> + <ignore name="subscription-manager"/> + <ignore name="subscription-manager-cockpit"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="GNOME-Desktop"> + <namedCollection name="gnome-desktop"/> + <namedCollection name="workstation-product"/> + <package name="gnome-classic-session"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="KDE-Desktop"> + <namedCollection name="kde-desktop-environment"/> + <namedCollection name="kde-apps"/> + <namedCollection name="kde-media"/> + <ignore name="initial-setup"/> <!-- redundant with plasma-setup --> + <ignore name="plasma-nm-l2tp"/> + <ignore name="plasma-nm-vpnc"/> + <package name="fuse"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="COSMIC-Desktop"> + <namedCollection name="cosmic-desktop-environment"/> + </packages> +</image> diff --git a/teams/eln/liveprofiles.xml b/teams/eln/liveprofiles.xml new file mode 100644 index 0000000..05f7acb --- /dev/null +++ b/teams/eln/liveprofiles.xml @@ -0,0 +1,16 @@ +<image> + <profiles> + <profile name="GNOME-Live" description="GNOME Live DVD"> + <requires profile="GNOME-Desktop"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="KDE-Live" description="KDE Plasma Live DVD"> + <requires profile="KDE-Desktop"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="COSMIC-Live" description="COSMIC Live DVD"> + <requires profile="COSMIC-Desktop"/> + <requires profile="LiveInstall"/> + </profile> + </profiles> +</image> diff --git a/teams/eln/wsl.xml b/teams/eln/wsl.xml new file mode 100644 index 0000000..051f8e6 --- /dev/null +++ b/teams/eln/wsl.xml @@ -0,0 +1,65 @@ +<image> + <profiles> + <profile name="WSL-Base" description="Windows Subsystem for Linux Base"/> + </profiles> + <preferences profiles="WSL-Base"> + <type image="wsl"/> + <timezone>Etc/UTC</timezone> + <locale>en_US</locale> + <rpm-locale-filtering>false</rpm-locale-filtering> + <rpm-excludedocs>false</rpm-excludedocs> + </preferences> + <packages type="bootstrap" profiles="WSL-Base"> + <package name="bash"/> + <package name="coreutils"/> + <package name="dnf5"/> + <package name="dnf5-plugins"/> + <package name="fedora-eln-release"/> + <package name="rpm"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="WSL-Base"> + <package name="attr"/> + <package name="acl"/> + <package name="bash-color-prompt"/> + <package name="bash-completion"/> + <package name="bind-utils"/> + <package name="bzip2"/> + <package name="curl"/> + <package name="dbus"/> + <package name="file"/> + <package name="glibc-langpack-en"/> + <package name="gnupg2"/> + <package name="iproute"/> + <package name="iputils"/> + <package name="less"/> + <package name="lsof"/> + <package name="man-db"/> + <package name="man-pages"/> + <package name="NetworkManager"/> + <package name="nmap-ncat"/> + <package name="openssh-clients"/> + <package name="passwd"/> + <package name="pciutils"/> + <package name="procps-ng"/> + <package name="rsync"/> + <package name="shadow-utils"/> + <package name="sudo"/> + <package name="symlinks"/> + <package name="systemd-udev"/> + <package name="systemd-resolved"/> + <package name="tar"/> + <package name="tcpdump"/> + <package name="time"/> + <package name="traceroute"/> + <package name="tree"/> + <package name="unzip"/> + <package name="usbutils"/> + <package name="util-linux"/> + <package name="vim-minimal"/> + <package name="wget"/> + <package name="which"/> + <package name="whois"/> + <package name="wsl-setup"/> + <package name="zip"/> + </packages> +</image> diff --git a/teams/games.xml b/teams/games.xml new file mode 100644 index 0000000..fdfa829 --- /dev/null +++ b/teams/games.xml @@ -0,0 +1,173 @@ +<image> + <profiles> + <profile name="GamesKDEDesktop" description="KDE Desktop packages for Games Lab"> + <requires profile="DesktopCommon"/> + </profile> + <profile name="GamesDesktop" description="Desktop packages for Games Lab"> + <requires profile="GamesKDEDesktop"/> + </profile> + <profile name="Games-Live" description="Games Lab Live DVD"> + <requires profile="GamesDesktop"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="Games-Disk" description="Games Lab Install Disk"> + <requires profile="GamesDesktop"/> + <requires profile="BootDiskCore"/> + </profile> + </profiles> + <packages type="bootstrap" patternType="plusRecommended" profiles="GamesKDEDesktop"> + <package name="fedora-release-kde"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="GamesKDEDesktop"> + <!-- install env-group to resolve RhBug:1891500 --> + <namedCollection name="kde-desktop-environment"/> + <namedCollection name="kde-apps"/> + <namedCollection name="kde-media"/> + <namedCollection name="firefox"/> + <namedCollection name="x86-emulation" arch="aarch64"/> + <package name="kde-l10n"/> + <ignore name="gnome-disk-utility"/> <!-- redundant with kde partitionmanager --> + <ignore name="mariadb-server-utils"/> <!-- Not needed on desktops (pagure.io:fedora-kde/SIG#566) --> + <ignore name="system-config-language"/> <!-- redundant with kcms --> + <ignore name="system-config-printer"/> <!-- redundant with kcms --> + <!-- drop tracker stuff pulled in by gtk3 (pagureio:fedora-kde/SIG#124) --> + <ignore name="tracker"/> + <ignore name="tracker-miners"/> + <!-- space issues --> + <ignore name="digikam"/> <!-- digikam has duplicate functionality with gwenview (~28 megs) --> + <ignore name="k3b"/> <!-- ~15 megs --> + <ignore name="kipi-plugins"/> <!-- ~8 megs + drags in marble --> + <ignore name="krusader"/> <!-- ~4 megs --> + <ignore name="ktorrent"/> <!-- ~15 megs --> + <ignore name="initial-setup"/> <!-- redundant with plasma-setup --> + </packages> + <packages type="image" patternType="plusRecommended" profiles="GamesDesktop"> + <!-- The point of this is to show off Fedora games, not running Windows ones --> + <ignore name="wine"/> + <!-- Remove LibreOffice, we're here to have fun! --> + <ignore name="libreoffice*"/> + <!-- Allow joysticks and gamepads to work --> + <package name="joystick-support"/> + <package name="steam-devices"/> + <!-- Games --> + <!-- Traditional (big) --> + <!-- <package name="alienarena"/> --> <!-- Cut for size --> + <package name="armacycles-ad"/> + <package name="asc"/> + <package name="asc-music"/> + <package name="astromenace"/> + <package name="boswars"/> + <package name="bzflag"/> + <package name="crossfire-client"/> + <package name="extremetuxracer"/> + <package name="freeciv"/> + <package name="freecol"/> + <package name="freedoom"/> + <package name="freedroidrpg"/> + <package name="frozen-bubble"/> + <package name="glob2"/> + <package name="lincity-ng"/> + <package name="megaglest"/> + <package name="nethack-vultures"/> + <package name="netpanzer"/> + <package name="neverball"/> + <package name="nogravity"/> + <!-- <package name="pinball"/> --> <!-- Would pull in fluid-soundfont-lite-patches --> + <package name="scorched3d"/> + <package name="supertux"/> + <package name="supertuxkart"/> + <package name="ultimatestunts"/> + <package name="warzone2100"/> + <package name="wesnoth"/> + <!-- <package name="worminator"/> --> <!-- Would pull in fluid-soundfont-lite-patches --> + <package name="warmux"/> + <package name="xmoto"/> + <!-- Traditional (small) --> + <package name="abe"/> + <!-- <package name="alex4"/> --> <!-- Would pull in fluid-soundfont-lite-patches --> + <!-- <package name="ballz"/> --> <!-- Would pull in fluid-soundfont-lite-patches --> + <package name="blobwars"/> + <package name="bombardier"/> + <package name="cdogs-sdl"/> + <package name="clanbomber"/> + <package name="colossus"/> + <package name="foobillard"/> + <package name="glaxium"/> + <package name="gnubg"/> + <package name="gnugo"/> + <package name="haxima"/> + <package name="hedgewars"/> + <package name="kcheckers"/> + <package name="knights"/> + <package name="lbrickbuster2"/> + <!-- <package name="liquidwar"/> --> <!-- Would pull in fluid-soundfont-lite-patches --> + <package name="lordsawar"/> + <!-- <package name="machineball"/> --> <!-- Would pull in fluid-soundfont-lite-patches --> + <package name="nethack"/> + <package name="openlierox"/> + <package name="pachi"/> + <package name="pioneers"/> + <package name="quarry"/> + <!-- <package name="Ri-li"/> --> <!-- Cut for size --> + <package name="rogue"/> + <!-- <package name="scorchwentbonkers"/> --> <!-- Would pull in fluid-soundfont-lite-patches --> + <package name="solarwolf"/> + <package name="sopwith"/> + <package name="stormbaancoureur"/> + <package name="ularn"/> + <package name="xblast"/> + <!-- Arcade classics(ish) (big) --> + <package name="auriferous"/> + <package name="alienblaster"/> + <!-- <package name="duel3"/> --> <!-- Would pull in fluid-soundfont-lite-patches --> + <package name="powermanga"/> + <!-- <package name="raidem"/> --> <!-- Would pull in fluid-soundfont-lite-patches --> + <!-- <package name="raidem-music"/> --> <!-- Would pull in fluid-soundfont-lite-patches --> + <package name="trackballs"/> + <package name="trackballs-music"/> + <!-- Arcade classics(ish) (small) --> + <package name="ballbuster"/> + <package name="CriticalMass"/> + <package name="dd2"/> + <package name="KoboDeluxe"/> + <!-- <package name="lacewing"/> --> <!-- Would pull in fluid-soundfont-lite-patches --> + <package name="Maelstrom"/> + <package name="methane"/> + <package name="njam"/> + <package name="shippy"/> + <package name="tecnoballz"/> + <package name="wordwarvi"/> + <package name="xgalaxy"/> + <!-- <package name="zasx"/> --> <!-- Would pull in fluid-soundfont-lite-patches --> + <!-- Falling blocks games (small) --> + <package name="amoebax"/> + <package name="crack-attack"/> + <!-- <package name="crystal-stacker"/> --> <!-- Would pull in fluid-soundfont-lite-patches --> + <package name="gemdropx"/> + <package name="gweled"/> + <!-- Puzzles (big) --> + <package name="enigma"/> + <package name="fillets-ng"/> + <package name="pingus"/> + <!-- Puzzles (small) --> + <!-- <package name="gbrainy"/> --> <!-- Removed for space - only game that pulls in mono --> + <package name="mirrormagic"/> + <package name="pipenightdreams"/> + <package name="pipepanic"/> + <package name="pychess"/> + <package name="rocksndiamonds"/> + <package name="vodovod"/> + <!-- Card games --> + <package name="PySolFC"/> + <!-- Educational/Simulation --> + <package name="planets"/> + <package name="tuxpaint"/> + <package name="tuxpaint-stamps"/> + <package name="tuxtype2"/> + <!-- Compilations (we are avoiding compilations, rare exceptions) --> + <package name="bsd-games"/> + <!-- Utilities --> + <package name="games-menus"/> + <ignore name="autodownloader"/> <!-- Nothing should be downloading data to play --> + </packages> +</image> diff --git a/teams/i3.xml b/teams/i3.xml new file mode 100644 index 0000000..6246674 --- /dev/null +++ b/teams/i3.xml @@ -0,0 +1,15 @@ +<image> + <profiles> + <profile name="i3-Live" description="i3 Spin Live DVD"> + <requires profile="i3-Desktop"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="i3-Disk" description="i3 Spin Install Disk"> + <requires profile="i3-Desktop"/> + <requires profile="BootDiskCore"/> + </profile> + </profiles> + <packages type="bootstrap" patternType="plusRecommended" profiles="i3-Live,i3-Disk"> + <package name="fedora-release-i3"/> + </packages> +</image> diff --git a/teams/jam.xml b/teams/jam.xml new file mode 100644 index 0000000..33812e8 --- /dev/null +++ b/teams/jam.xml @@ -0,0 +1,50 @@ +<image> + <profiles> + <profile name="JamDesktop" description="Desktop packages for Jam"> + <requires profile="KDE-Desktop"/> + </profile> + <profile name="Jam_KDE-Live" description="Jam KDE Lab Live DVD"> + <requires profile="JamDesktop"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="Jam_KDE-Disk" description="Jam KDE Lab Install Disk"> + <requires profile="JamDesktop"/> + <requires profile="BootDiskCore"/> + </profile> + </profiles> + <packages type="bootstrap" patternType="plusRecommended" profiles="JamDesktop"> + <package name="fedora-release-kde"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="JamDesktop"> + <!-- Installing the default/mandatory packages for audio production --> + <namedCollection name="audio"/> + <!-- PipeWire --> + <package name="pipewire"/> + <!-- sound analysis, none of these are packaged yet --> + <!-- <package name="praat"/> --> <!-- rhbz#666656 --> + <!-- <package name="friture"/> --> + <!-- writing & publishing --> + <package name="emacs"/> + <package name="emacs-color-theme"/> + <package name="vim-enhanced"/> + <package name="nano"/> + <!-- fedora jam theming (to be customized) --> + <package name="fedora-jam-backgrounds"/> + <package name="fedora-jam-kde-theme"/> + <!-- Misc tools --> + <package name="multimedia-menus"/> + <package name="kernel-tools"/> + <package name="screen"/> + <!-- Add Mozilla Thunderbird --> + <package name="thunderbird"/> + <!-- Remove packages not needed --> + <ignore name="akregator"/> + <ignore name="kaddressbook"/> + <ignore name="kmail"/> + <ignore name="kontact"/> + <ignore name="korganizer"/> + <ignore name="non-mixer"/> + <ignore name="non-session-manager"/> + <ignore name="non-sequencer"/> + </packages> +</image> diff --git a/teams/kde.xml b/teams/kde.xml new file mode 100644 index 0000000..6424e05 --- /dev/null +++ b/teams/kde.xml @@ -0,0 +1,29 @@ +<image> + <profiles> + <profile name="KDE-Desktop-Live" description="KDE Plasma Desktop Spin Live DVD"> + <requires profile="KDE-Desktop"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="KDE-Desktop-Disk" description="KDE Plasma Desktop Spin Install Disk"> + <requires profile="BootDiskCore"/> + <requires profile="KDE-Desktop"/> + </profile> + <profile name="KDE-Mobile-Live" description="KDE Plasma Mobile Spin Live DVD"> + <requires profile="KDE-Mobile"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="KDE-Mobile-Disk" description="KDE Plasma Mobile Spin Install Disk"> + <requires profile="BootDiskCore"/> + <requires profile="KDE-Mobile"/> + </profile> + </profiles> + <packages type="bootstrap" patternType="plusRecommended" profiles="KDE-Desktop-Disk,KDE-Desktop-Live"> + <package name="fedora-release-kde"/> + </packages> + <packages type="bootstrap" patternType="plusRecommended" profiles="KDE-Mobile-Disk,KDE-Mobile-Live"> + <package name="fedora-release-kde-mobile"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="KDE-Desktop-Disk,KDE-Desktop-Live"> + <package name="plasma-welcome-fedora"/> + </packages> +</image> diff --git a/teams/lxde.xml b/teams/lxde.xml new file mode 100644 index 0000000..55f3524 --- /dev/null +++ b/teams/lxde.xml @@ -0,0 +1,15 @@ +<image> + <profiles> + <profile name="LXDE-Live" description="LXDE Spin Live DVD"> + <requires profile="LXDE-Desktop"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="LXDE-Disk" description="LXDE Spin Install Disk"> + <requires profile="LXDE-Desktop"/> + <requires profile="BootDiskCore"/> + </profile> + </profiles> + <packages type="bootstrap" patternType="plusRecommended" profiles="LXDE-Live,LXDE-Disk"> + <package name="fedora-release-lxde"/> + </packages> +</image> diff --git a/teams/lxqt.xml b/teams/lxqt.xml new file mode 100644 index 0000000..d8bb678 --- /dev/null +++ b/teams/lxqt.xml @@ -0,0 +1,15 @@ +<image> + <profiles> + <profile name="LXQt-Live" description="LXQt Spin Live DVD"> + <requires profile="LXQt-Desktop"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="LXQt-Disk" description="LXQt Spin Install Disk"> + <requires profile="LXQt-Desktop"/> + <requires profile="BootDiskCore"/> + </profile> + </profiles> + <packages type="bootstrap" patternType="plusRecommended" profiles="LXQt-Live,LXQt-Disk"> + <package name="fedora-release-lxqt"/> + </packages> +</image> diff --git a/teams/mate.xml b/teams/mate.xml new file mode 100644 index 0000000..d7b7f05 --- /dev/null +++ b/teams/mate.xml @@ -0,0 +1,15 @@ +<image> + <profiles> + <profile name="MATE_Compiz-Live" description="MATE-Compiz Spin Live DVD"> + <requires profile="MATE-Desktop"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="MATE_Compiz-Disk" description="MATE-Compiz Spin Install Disk"> + <requires profile="MATE-Desktop"/> + <requires profile="BootDiskCore"/> + </profile> + </profiles> + <packages type="bootstrap" patternType="plusRecommended" profiles="MATE_Compiz-Live,MATE_Compiz-Disk"> + <package name="fedora-release-matecompiz"/> + </packages> +</image> diff --git a/teams/miraclewm.xml b/teams/miraclewm.xml new file mode 100644 index 0000000..beb18f8 --- /dev/null +++ b/teams/miraclewm.xml @@ -0,0 +1,15 @@ +<image> + <profiles> + <profile name="MiracleWM-Live" description="MiracleWM Spin Live DVD"> + <requires profile="MiracleWM-Desktop"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="MiracleWM-Disk" description="MiracleWM Spin Install Disk"> + <requires profile="BootDiskCore"/> + <requires profile="MiracleWM-Desktop"/> + </profile> + </profiles> + <packages type="bootstrap" patternType="plusRecommended" profiles="MiracleWM-Live,MiracleWM-Disk"> + <package name="fedora-release-miraclewm"/> + </packages> +</image> diff --git a/teams/phosh.xml b/teams/phosh.xml new file mode 100644 index 0000000..ce5e920 --- /dev/null +++ b/teams/phosh.xml @@ -0,0 +1,15 @@ +<image> + <profiles> + <profile name="Phosh-Live" description="Phosh Spin Live DVD"> + <requires profile="Phosh-Desktop"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="Phosh-Disk" description="Phosh Spin Install Disk"> + <requires profile="BootDiskCore"/> + <requires profile="Phosh-Desktop"/> + </profile> + </profiles> + <packages type="bootstrap" patternType="plusRecommended" profiles="Phosh-Disk,Phosh-Live"> + <package name="fedora-release-mobility"/> + </packages> +</image> diff --git a/teams/python.xml b/teams/python.xml new file mode 100644 index 0000000..f37ebae --- /dev/null +++ b/teams/python.xml @@ -0,0 +1,96 @@ +<image> + <profiles> + <profile name="PythonClassroomCore" description="Core packages for Python Classroom"> + </profile> + <profile name="PythonClassroomGNOMEDesktop" description="Desktop packages for Python Classroom"> + <requires profile="PythonClassroomCore"/> + <requires profile="DesktopCommon"/> + </profile> + <profile name="Python-Classroom-Live" description="Python Classroom Lab Live DVD"> + <requires profile="PythonClassroomGNOMEDesktop"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="Python-Classroom-Disk" description="Python Classroom Lab Install Disk"> + <requires profile="PythonClassroomGNOMEDesktop"/> + <requires profile="BootDiskCore"/> + </profile> + <profile name="Python-Classroom-Vagrant-libvirt" description="Python Classroom Lab Vagrant box for libvirt"> + <requires profile="PythonClassroomCore"/> + <requires profile="Cloud-Base-Vagrant-libvirt"/> + </profile> + <profile name="Python-Classroom-Vagrant-VirtualBox" description="Python Classroom Lab Vagrant box for VirtualBox"> + <requires profile="PythonClassroomCore"/> + <requires profile="Cloud-Base-Vagrant-VirtualBox"/> + </profile> + </profiles> + <packages type="bootstrap" patternType="plusRecommended" profiles="PythonClassroomCore"> + <package name="fedora-release"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="PythonClassroomCore"> + <namedCollection name="core"/> + <namedCollection name="standard"/> + <namedCollection name="python-classroom"/> + <namedCollection name="python-science"/> + <package name="langpacks-en"/> + <package name="nano"/> + <package name="openssh-clients"/> + <package name="vim-enhanced"/> + <package name="wget2-wget"/> + <!-- No abrt --> + <ignore name="abrt*"/> + <!-- No legacy crontab --> + <ignore name="cron*"/> + <!-- Block unwanted Pythons from being installed with tox --> + <ignore name="python2*"/> + <ignore name="pypy"/> + <ignore name="pypy2*"/> + <!-- Block unnecessary extra Pythons from being installed with tox --> + <ignore name="python3.8"/> + <ignore name="python3.9"/> + <ignore name="pypy3.10"/> + <ignore name="python3.10"/> + <ignore name="python3.11"/> + <ignore name="python3.12"/> + <!-- Remove LaTeX stack (rhbz#1862450, rhbz#1902354) --> + <ignore name="texlive-base"/> + <ignore name="texlive-latex"/> + <!-- Remove gdal and proj to save ~600MB of space --> + <!-- Cf. https://lists.fedoraproject.org/archives/list/python-devel@lists.fedoraproject.org/thread/LGC5IMMHZ4DM7GQNPAFC6GU362PPTN7O/ --> + <ignore name="python3-gdal"/> + <ignore name="proj"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="PythonClassroomGNOMEDesktop"> + <namedCollection name="base-graphical"/> + <namedCollection name="desktop-accessibility"/> + <namedCollection name="firefox"/> + <namedCollection name="gnome-desktop"/> + <namedCollection name="guest-desktop-agents"/> + <namedCollection name="networkmanager-submodules"/> + <package name="emacs"/> + <package name="python3-matplotlib-tk"/> + <package name="python3-pillow-tk"/> + <package name="desktop-backgrounds-gnome"/> + <!-- No printing --> + <ignore name="system-config-printer*"/> + <!-- No user docs --> + <ignore name="gnome-user-docs"/> + <!-- No inkscape --> + <ignore name="inkscape*"/> + <ignore name="GraphicsMagick*"/> + <ignore name="ImageMagick*"/> + <!-- Block extra GNOME applications --> + <ignore name="gnome-boxes"/> + <ignore name="gnome-calendar"/> + <ignore name="gnome-clocks"/> + <ignore name="gnome-contacts"/> + <ignore name="gnome-disk-utility"/> + <ignore name="gnome-documents"/> + <ignore name="gnome-font-viewer"/> + <ignore name="gnome-maps"/> + <ignore name="gnome-photos"/> + <ignore name="gnome-weather"/> + <ignore name="grilo-plugins"/> + <ignore name="totem"/> + <ignore name="totem-nautilus"/> + </packages> +</image> diff --git a/teams/scitech.xml b/teams/scitech.xml new file mode 100644 index 0000000..9995bf2 --- /dev/null +++ b/teams/scitech.xml @@ -0,0 +1,168 @@ +<image> + <profiles> + <profile name="ScientificCore" description="Core packages for Scientific"> + </profile> + <profile name="ScientificDesktop" description="Desktop packages for Scientific"> + <requires profile="ScientificCore"/> + <requires profile="KDE-Desktop"/> + </profile> + <profile name="Scientific_KDE-Live" description="Scientific KDE Lab Live DVD"> + <requires profile="ScientificDesktop"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="Scientific_KDE-Disk" description="Scientific KDE Lab Install Disk"> + <requires profile="ScientificDesktop"/> + <requires profile="BootDiskCore"/> + </profile> + <profile name="Scientific-Vagrant-libvirt" description="Scientific Lab Vagrant box for libvirt"> + <requires profile="ScientificCore"/> + <requires profile="VagrantCore"/> + </profile> + <profile name="Scientific-Vagrant-VirtualBox" description="Scientific Lab Vagrant box for VirtualBox"> + <requires profile="ScientificCore"/> + <requires profile="VagrantCore"/> + </profile> + </profiles> + <preferences profiles="Scientific-Vagrant-libvirt" arch="x86_64,aarch64"> + <type image="oem" format="vagrant" + filesystem="btrfs" btrfs_root_is_subvolume="true" btrfs_set_default_volume="false" fsmountoptions="compress=zstd:1" + kernelcmdline="no_timer_check console=tty1 console=ttyS0,115200n8" + devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="ext4" efipartsize="100" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" console="serial" timeout="1"/> + <size unit="G">30</size> + <vagrantconfig provider="libvirt" virtualsize="30"/> + <systemdisk> + <volume name="@root=root"/> + <volume name="home" parent="/"/> + <volume name="var" parent="/"/> + </systemdisk> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="Scientific-Vagrant-VirtualBox" arch="x86_64"> + <type image="oem" format="vagrant" + filesystem="btrfs" btrfs_root_is_subvolume="true" btrfs_set_default_volume="false" fsmountoptions="compress=zstd:1" + kernelcmdline="no_timer_check console=tty1 console=ttyS0,115200n8" + devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="ext4" efipartsize="100" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" console="serial" timeout="1"/> + <size unit="G">30</size> + <vagrantconfig provider="virtualbox" virtualbox_guest_additions_present="true" virtualsize="30"/> + <systemdisk> + <volume name="@root=root"/> + <volume name="home" parent="/"/> + <volume name="var" parent="/"/> + </systemdisk> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <packages type="bootstrap" patternType="plusRecommended" profiles="ScientificDesktop"> + <package name="fedora-release-kde"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="ScientificCore"> + <namedCollection name="core"/> + <namedCollection name="standard"/> + <namedCollection name="engineering-and-scientific"/> + <!-- Install the mandatory packages from dev-tools and dev-libs --> + <namedCollection name="development-tools"/> + <namedCollection name="development-libs"/> + <namedCollection name="c-development"/> + <namedCollection name="rpm-development-tools"/> + <package name="langpacks-en"/> + <!-- Other C++ libraries not included in groups --> + <package name="blitz-devel"/> + <package name="armadillo-devel"/> + <!-- Misc related utilities --> + <package name="ddd"/> + <package name="valgrind"/> + <!-- Python 3 and tools/libraries not included from the groups --> + <package name="python3"/> + <package name="python3-tools"/> + <package name="python3-matplotlib"/> + <package name="python3-scipy"/> + <package name="python3-numpy"/> + <package name="python3-ipython"/> + <package name="python3-ipython-console"/> + <package name="python3-ipython-notebook"/> + <package name="python3-sympy"/> + <package name="python3-networkx"/> + <package name="python3-pandas"/> + <!-- Include Java development tools --> + <namedCollection name="java-development"/> + <package name="apache-commons-math"/> + <!-- fortran compiler --> + <package name="gcc-gfortran"/> + <!-- Julia --> + <package name="julia" arch="x86_64"/> + <package name="julia-doc" arch="x86_64"/> + <package name="julia-devel" arch="x86_64"/> + <!-- <package name="python3-spyder"/> --> <!-- FTI with Python 3.12, see rhbz#2220598 --> + <package name="python3-spyder-kernels"/> + <!-- writing & publishing --> + <package name="emacs-nw"/> + <package name="emacs-color-theme"/> + <package name="vim-enhanced"/> + <!-- Presentation, Bibliography & Document arrangement tools --> + <package name="BibTool"/> + <package name="pdfshuffler"/> + <!-- Parallel/Distributed computing libraries/tools --> + <package name="openmpi"/> + <package name="openmpi-devel"/> + <package name="valgrind-openmpi"/> + <package name="libgomp"/> + <package name="python3-mpi4py-openmpi"/> + <package name="python3-mpi4py-mpich"/> + <!-- Version control - A GUI for each as well --> + <package name="subversion"/> + <package name="git"/> + <package name="mercurial"/> + <!-- Deal with conflict between openmpi and emacs --> + <!-- Cf. https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/3HFNRNDK52FP3O2IEX5MUBQEFS56U5PZ/ --> + <package name="libotf"/> + <package name="root"/> + <!-- Misc tools --> + <package name="screen"/> + <package name="tmux"/> + <package name="rlwrap"/> + <package name="fig2ps"/> + <package name="hevea"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="ScientificDesktop"> + <namedCollection name="firefox"/> + <!-- Matplotlib backend --> + <package name="python3-matplotlib-qt6"/> + <!-- GUI for R --> + <package name="rkward"/> + <!-- writing & publishing --> + <package name="emacs"/> + <package name="scribus"/> + <package name="lyx"/> + <package name="kile"/> + <!-- Version control GUIs --> + <package name="rapidsvn"/> + <package name="git-gui"/> + <package name="mercurial-hgk"/> + <package name="backintime-qt"/> + <package name="root-gui-fitpanel"/> + <!-- Drawing, picture viewing tools, visualization tools --> + <package name="dia"/> + <package name="inkscape"/> + <package name="xzgv"/> + <package name="gimp"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="Scientific-Vagrant-libvirt"> + <package name="qemu-guest-agent"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="Scientific-Vagrant-VirtualBox"> + <package name="virtualbox-guest-additions"/> + </packages> +</image> diff --git a/teams/security.xml b/teams/security.xml new file mode 100644 index 0000000..a20b8ec --- /dev/null +++ b/teams/security.xml @@ -0,0 +1,76 @@ +<image> + <profiles> + <profile name="SecurityDesktop" description="Desktop packages for Security Lab"> + <requires profile="Xfce-Desktop"/> + </profile> + <profile name="Security-Live" description="Security Lab Live DVD"> + <requires profile="SecurityDesktop"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="Security-Disk" description="Security Lab Install Disk"> + <requires profile="SecurityDesktop"/> + <requires profile="BootDiskCore"/> + </profile> + </profiles> + <packages type="bootstrap" patternType="plusRecommended" profiles="SecurityDesktop"> + <package name="fedora-release"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="SecurityDesktop"> + <!-- Security tools --> + <namedCollection name="security-lab"/> + <package name="security-menus"/> + <!-- Unlock default keyring. FIXME: Should be done in comps --> + <package name="gnome-keyring-pam"/> + <!-- Save some space --> + <ignore name="autofs"/> + <ignore name="acpid"/> + <ignore name="gimp-help"/> + <ignore name="desktop-backgrounds-basic"/> + <ignore name="PackageKit*"/> <!-- We switched to dnfdragora, so we don't need this --> + <ignore name="aspell-*"/> <!-- Dictionaries are big --> + <ignore name="gnumeric"/> + <ignore name="foomatic-db-ppds"/> + <ignore name="foomatic"/> + <ignore name="stix-fonts"/> + <ignore name="default-fonts-core-math"/> + <ignore name="ibus-typing-booster"/> + <ignore name="xfce4-sensors-plugin"/> + <ignore name="man-pages-*"/> + <!-- Drop some system-config things --> + <ignore name="system-config-rootpassword"/> + <ignore name="policycoreutils-gui"/> + <!-- Exclude some packages to save some space --> + <ignore name="ArpON"/> + <ignore name="aide"/> + <ignore name="binwalk"/> + <ignore name="bkhive"/> + <ignore name="bonesi"/> + <ignore name="cmospwd"/> + <ignore name="dnstop"/> + <ignore name="etherape"/> + <ignore name="hfsutils"/> + <ignore name="httpie"/> + <ignore name="httrack"/> + <ignore name="hydra"/> + <ignore name="kismon"/> + <ignore name="labrea"/> + <ignore name="nebula"/> + <ignore name="netsed"/> + <ignore name="onesixtyone"/> + <ignore name="packETH"/> + <ignore name="pads"/> + <ignore name="pdfcrack"/> + <ignore name="proxychains"/> + <ignore name="pyrit"/> + <ignore name="rkhunter"/> + <ignore name="safecopy"/> + <ignore name="samdump2"/> + <ignore name="scalpel"/> + <ignore name="sslstrip"/> + <ignore name="tcpreen"/> + <ignore name="tcpreplay"/> + <ignore name="tripwire"/> + <ignore name="wipe"/> + <ignore name="zmap"/> + </packages> +</image> diff --git a/teams/server.xml b/teams/server.xml new file mode 100644 index 0000000..f3b88f4 --- /dev/null +++ b/teams/server.xml @@ -0,0 +1,208 @@ +<image> + <profiles> + <profile name="ServerCore" description="Server Edition core packages"> + <requires profile="BaseCommon"/> + <requires profile="BootCore"/> + </profile> + <profile name="ServerVMDisk" description="Server Edition VM disk configuration"> + <requires profile="ServerCore"/> + </profile> + <profile name="ServerDisk" description="Server Edition disk configuration"> + <requires profile="HardwareCommon"/> + <requires profile="ServerCore"/> + </profile> + <profile name="Server-Guest-Generic" description="Generic Server Guest Image"> + <requires profile="ServerVMDisk"/> + </profile> + <profile name="Server-Host-Generic" description="Generic Server Host Image"> + <requires profile="ServerDisk"/> + </profile> + </profiles> + <preferences profiles="ServerVMDisk" arch="x86_64,aarch64"> + <type image="oem" format="qcow2" + filesystem="xfs" + kernelcmdline="no_timer_check console=tty1 console=ttyS0,115200n8" + devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="xfs" efipartsize="500" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" console="serial" timeout="0"/> + <size unit="G">10</size> + <systemdisk> + <volume name="@root"/> + </systemdisk> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="ServerVMDisk" arch="ppc64le"> + <type image="oem" format="qcow2" + filesystem="xfs" + kernelcmdline="no_timer_check console=tty1 console=ttyS0,115200n8" + devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="xfs" firmware="ofw" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" console="serial" timeout="0"/> + <size unit="G">10</size> + <systemdisk> + <volume name="@root"/> + </systemdisk> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="ServerVMDisk" arch="s390x"> + <type image="oem" format="qcow2" + filesystem="xfs" + kernelcmdline="no_timer_check console=tty1 console=ttyS0,115200n8" + devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="xfs" + rootfs_label="fedora" + > + <bootloader name="zipl" timeout="1"/> + <size unit="G">10</size> + <systemdisk> + <volume name="@root"/> + </systemdisk> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="ServerVMDisk" arch="riscv64"> + <type image="oem" format="qcow2" + filesystem="xfs" + kernelcmdline="earlycon" + devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="ext4" efipartsize="500" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" console="serial" timeout="0"/> + <size unit="G">10</size> + <systemdisk> + <volume name="@root"/> + </systemdisk> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="ServerDisk" arch="x86_64"> + <type image="oem" + filesystem="xfs" + devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="xfs" efipartsize="500" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" console="serial" timeout="3" timeout_style="menu"/> + <size unit="G">10</size> + <systemdisk> + <volume name="@root"/> + </systemdisk> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="ServerDisk" arch="aarch64"> + <type image="oem" + filesystem="xfs" + devicepersistency="by-uuid" force_mbr="true" editbootinstall="editbootinstall_rpilegacy.sh" + bootpartition="true" bootpartsize="2000" bootfilesystem="ext4" efipartsize="500" disk_start_sector="34816" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" console="serial" timeout="3" timeout_style="menu"/> + <size unit="G">10</size> + <systemdisk> + <volume name="@root"/> + </systemdisk> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="ServerDisk" arch="ppc64le"> + <type image="oem" + filesystem="xfs" + devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="xfs" firmware="ofw" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" console="serial" timeout="3" timeout_style="menu"/> + <size unit="G">10</size> + <systemdisk> + <volume name="@root"/> + </systemdisk> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="ServerDisk" arch="s390x"> + <type image="oem" + filesystem="xfs" + devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="xfs" + rootfs_label="fedora" + > + <bootloader name="zipl" timeout="3"/> + <size unit="G">10</size> + <systemdisk> + <volume name="@root"/> + </systemdisk> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <preferences profiles="ServerDisk" arch="riscv64"> + <type image="oem" + filesystem="xfs" + kernelcmdline="earlycon" + devicepersistency="by-uuid" + bootpartition="true" bootpartsize="2000" bootfilesystem="ext4" efipartsize="500" firmware="uefi" + rootfs_label="fedora" + > + <bootloader name="grub2" bls="true" console="serial" timeout="3" timeout_style="menu"/> + <size unit="G">10</size> + <systemdisk> + <volume name="@root"/> + </systemdisk> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + </preferences> + <packages type="bootstrap" patternType="plusRecommended" profiles="ServerCore"> + <package name="fedora-release-server"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="ServerCore"> + <namedCollection name="server-product-environment"/> + <namedCollection name="domain-client"/> + <namedCollection name="arm-tools" arch="aarch64"/> + <ignore name="initial-setup-gui"/> + <ignore name="plymouth"/> + <package name="glibc-all-langpacks"/> + <package name="initial-setup"/> + <package name="lvm2"/> + <package name="xfsprogs"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="Server-Guest-Generic"> + <ignore name="dracut-config-rescue"/> + <ignore name="kernel"/> + <ignore name="*-firmware"/> + <ignore name="smartmontools"/> + <ignore name="smartmontools-selinux"/> + <namedCollection name="guest-agents"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="Server-Host-Generic"> + <namedCollection name="container-management"/> + <namedCollection name="server-hardware-support"/> + <package name="dracut-config-rescue"/> + <package name="kernel"/> + <package name="linux-firmware"/> + </packages> +</image> diff --git a/teams/soas.xml b/teams/soas.xml new file mode 100644 index 0000000..d1e7379 --- /dev/null +++ b/teams/soas.xml @@ -0,0 +1,15 @@ +<image> + <profiles> + <profile name="SoaS-Live" description="Sugar on a Stick Live DVD"> + <requires profile="SoaS-Desktop"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="SoaS-Disk" description="Sugar on a Stick Install Disk"> + <requires profile="SoaS-Desktop"/> + <requires profile="BootDiskCore"/> + </profile> + </profiles> + <packages type="bootstrap" patternType="plusRecommended" profiles="SoaS-Live,SoaS-Disk"> + <package name="fedora-release-soas"/> + </packages> +</image> diff --git a/teams/sway.xml b/teams/sway.xml new file mode 100644 index 0000000..a7c7074 --- /dev/null +++ b/teams/sway.xml @@ -0,0 +1,19 @@ +<image> + <profiles> + <profile name="Sway-Live" description="Sway Spin Live DVD"> + <requires profile="Sway-Desktop"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="Sway-Disk" description="Sway Spin Install Disk"> + <requires profile="Sway-Desktop"/> + <requires profile="BootDiskCore"/> + </profile> + </profiles> + <packages type="bootstrap" patternType="plusRecommended" profiles="Sway-Live,Sway-Disk"> + <package name="fedora-release-sway"/> + </packages> + <packages type="image" patternType="plusRecommended" profiles="Sway-Live"> + <!-- Required to display installation instructions --> + <package name="nwg-wrapper"/> + </packages> +</image> diff --git a/teams/workstation.xml b/teams/workstation.xml new file mode 100644 index 0000000..660de7c --- /dev/null +++ b/teams/workstation.xml @@ -0,0 +1,15 @@ +<image> + <profiles> + <profile name="Workstation-Live" description="Workstation Edition Live DVD"> + <requires profile="GNOME-Desktop"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="Workstation-Disk" description="Workstation Edition Install Disk"> + <requires profile="GNOME-Desktop"/> + <requires profile="BootDiskCore"/> + </profile> + </profiles> + <packages type="bootstrap" patternType="plusRecommended" profiles="Workstation-Live,Workstation-Disk"> + <package name="fedora-release-workstation"/> + </packages> +</image> diff --git a/teams/xfce.xml b/teams/xfce.xml new file mode 100644 index 0000000..80f3a58 --- /dev/null +++ b/teams/xfce.xml @@ -0,0 +1,15 @@ +<image> + <profiles> + <profile name="Xfce-Live" description="Xfce Spin Live DVD"> + <requires profile="Xfce-Desktop"/> + <requires profile="LiveInstall"/> + </profile> + <profile name="Xfce-Disk" description="Xfce Spin Install Disk"> + <requires profile="Xfce-Desktop"/> + <requires profile="BootDiskCore"/> + </profile> + </profiles> + <packages type="bootstrap" patternType="plusRecommended" profiles="Xfce-Live,Xfce-Disk"> + <package name="fedora-release-xfce"/> + </packages> +</image> diff --git a/tmt/plans/asahi/build-fex-rootfs.fmf b/tmt/plans/asahi/build-fex-rootfs.fmf new file mode 100644 index 0000000..30313f9 --- /dev/null +++ b/tmt/plans/asahi/build-fex-rootfs.fmf @@ -0,0 +1,12 @@ +summary: Build FEX RootFS +discover: + how: fmf +adjust: + enabled: false + when: arch != x86_64 +environment: + image_type: erofs + image_profile: FEX-RootFS + kiwi_file: Fedora.kiwi +execute: + how: tmt diff --git a/tmt/plans/base/tiny-disk.xml b/tmt/plans/base/tiny-disk.xml new file mode 100644 index 0000000..98ee6ed --- /dev/null +++ b/tmt/plans/base/tiny-disk.xml @@ -0,0 +1,9 @@ +summary: Build Tiny disk image +discover: + how: fmf +environment: + image_type: oem + image_profile: Tiny-Disk + kiwi_file: Fedora.kiwi +execute: + how: tmt diff --git a/tmt/plans/cloud/base/build-aws.fmf b/tmt/plans/cloud/base/build-aws.fmf new file mode 100644 index 0000000..758a3a0 --- /dev/null +++ b/tmt/plans/cloud/base/build-aws.fmf @@ -0,0 +1,9 @@ +summary: Build AWS EC2 base image +discover: + how: fmf +environment: + image_type: oem + image_profile: Cloud-Base-AmazonEC2 + kiwi_file: Fedora.kiwi +execute: + how: tmt diff --git a/tmt/plans/cloud/base/build-azure.fmf b/tmt/plans/cloud/base/build-azure.fmf new file mode 100644 index 0000000..4cc66ed --- /dev/null +++ b/tmt/plans/cloud/base/build-azure.fmf @@ -0,0 +1,9 @@ +summary: Build Azure base image +discover: + how: fmf +environment: + image_type: oem + image_profile: Cloud-Base-Azure + kiwi_file: Fedora.kiwi +execute: + how: tmt diff --git a/tmt/plans/cloud/base/build-gcp.fmf b/tmt/plans/cloud/base/build-gcp.fmf new file mode 100644 index 0000000..e5ed99e --- /dev/null +++ b/tmt/plans/cloud/base/build-gcp.fmf @@ -0,0 +1,9 @@ +summary: Build GCP base image +discover: + how: fmf +environment: + image_type: oem + image_profile: Cloud-Base-GCE + kiwi_file: Fedora.kiwi +execute: + how: tmt diff --git a/tmt/plans/cloud/base/build-generic.fmf b/tmt/plans/cloud/base/build-generic.fmf new file mode 100644 index 0000000..864e137 --- /dev/null +++ b/tmt/plans/cloud/base/build-generic.fmf @@ -0,0 +1,9 @@ +summary: Build Generic base image +discover: + how: fmf +environment: + image_type: oem + image_profile: Cloud-Base-Generic + kiwi_file: Fedora.kiwi +execute: + how: tmt diff --git a/tmt/plans/cloud/base/build-uefi-uki.fmf b/tmt/plans/cloud/base/build-uefi-uki.fmf new file mode 100644 index 0000000..3d1ad3c --- /dev/null +++ b/tmt/plans/cloud/base/build-uefi-uki.fmf @@ -0,0 +1,9 @@ +summary: Build UEFI UKI base image +discover: + how: fmf +environment: + image_type: oem + image_profile: Cloud-Base-UEFI-UKI + kiwi_file: Fedora.kiwi +execute: + how: tmt diff --git a/tmt/plans/container/base/build-generic-init.fmf b/tmt/plans/container/base/build-generic-init.fmf new file mode 100644 index 0000000..3a0e82a --- /dev/null +++ b/tmt/plans/container/base/build-generic-init.fmf @@ -0,0 +1,9 @@ +summary: Build Init Generic base container image +discover: + how: fmf +environment: + image_type: oci + image_profile: Container-Base-Generic-Init + kiwi_file: Fedora.kiwi +execute: + how: tmt diff --git a/tmt/plans/container/base/build-generic-minimal.fmf b/tmt/plans/container/base/build-generic-minimal.fmf new file mode 100644 index 0000000..9c192da --- /dev/null +++ b/tmt/plans/container/base/build-generic-minimal.fmf @@ -0,0 +1,9 @@ +summary: Build Minimal Generic base container image +discover: + how: fmf +environment: + image_type: oci + image_profile: Container-Base-Generic-Minimal + kiwi_file: Fedora.kiwi +execute: + how: tmt diff --git a/tmt/plans/container/base/build-generic.fmf b/tmt/plans/container/base/build-generic.fmf new file mode 100644 index 0000000..c6c71db --- /dev/null +++ b/tmt/plans/container/base/build-generic.fmf @@ -0,0 +1,9 @@ +summary: Build Generic base container image +discover: + how: fmf +environment: + image_type: oci + image_profile: Container-Base-Generic + kiwi_file: Fedora.kiwi +execute: + how: tmt diff --git a/tmt/plans/container/toolbox/build-toolbox.fmf b/tmt/plans/container/toolbox/build-toolbox.fmf new file mode 100644 index 0000000..76f0567 --- /dev/null +++ b/tmt/plans/container/toolbox/build-toolbox.fmf @@ -0,0 +1,9 @@ +summary: Build Toolbox container image +discover: + how: fmf +environment: + image_type: oci + image_profile: Container-Toolbox + kiwi_file: Fedora.kiwi +execute: + how: tmt diff --git a/tmt/plans/desktop/kde/build-desktop-disk.fmf b/tmt/plans/desktop/kde/build-desktop-disk.fmf new file mode 100644 index 0000000..11fcffb --- /dev/null +++ b/tmt/plans/desktop/kde/build-desktop-disk.fmf @@ -0,0 +1,9 @@ +summary: Build KDE Desktop disk image +discover: + how: fmf +environment: + image_type: oem + image_profile: KDE-Desktop-Disk + kiwi_file: Fedora.kiwi +execute: + how: tmt diff --git a/tmt/plans/desktop/kde/build-desktop-live.fmf b/tmt/plans/desktop/kde/build-desktop-live.fmf new file mode 100644 index 0000000..58ef3da --- /dev/null +++ b/tmt/plans/desktop/kde/build-desktop-live.fmf @@ -0,0 +1,18 @@ +summary: Build KDE Desktop live image +discover: + how: fmf +environment: + image_type: iso + image_profile: KDE-Desktop-Live + kiwi_file: Fedora.kiwi +execute: + how: tmt +provision: + how: artemis + hardware: + cpu: + # Add more CPUs to make mksquashfs faster + processors: ">= 8" + disk: + # Increase disk size for better IO performance + - size: '>=500 GiB' diff --git a/tmt/plans/desktop/workstation/build-disk.fmf b/tmt/plans/desktop/workstation/build-disk.fmf new file mode 100644 index 0000000..9718621 --- /dev/null +++ b/tmt/plans/desktop/workstation/build-disk.fmf @@ -0,0 +1,9 @@ +summary: Build Workstation disk image +discover: + how: fmf +environment: + image_type: oem + image_profile: Workstation-Disk + kiwi_file: Fedora.kiwi +execute: + how: tmt diff --git a/tmt/plans/desktop/workstation/build-live.fmf b/tmt/plans/desktop/workstation/build-live.fmf new file mode 100644 index 0000000..2ecd287 --- /dev/null +++ b/tmt/plans/desktop/workstation/build-live.fmf @@ -0,0 +1,18 @@ +summary: Build Workstation live image +discover: + how: fmf +environment: + image_type: iso + image_profile: Workstation-Live + kiwi_file: Fedora.kiwi +execute: + how: tmt +provision: + how: artemis + hardware: + cpu: + # Add more CPUs to make mksquashfs faster + processors: ">= 8" + disk: + # Increase disk size for better IO performance + - size: '>=500 GiB' diff --git a/tmt/plans/server/guest/build-generic.fmf b/tmt/plans/server/guest/build-generic.fmf new file mode 100644 index 0000000..252823d --- /dev/null +++ b/tmt/plans/server/guest/build-generic.fmf @@ -0,0 +1,9 @@ +summary: Build Generic guest image +discover: + how: fmf +environment: + image_type: oem + image_profile: Server-Guest-Generic + kiwi_file: Fedora.kiwi +execute: + how: tmt diff --git a/tmt/plans/server/host/build-generic.fmf b/tmt/plans/server/host/build-generic.fmf new file mode 100644 index 0000000..d2279f2 --- /dev/null +++ b/tmt/plans/server/host/build-generic.fmf @@ -0,0 +1,9 @@ +summary: Build Generic host image +discover: + how: fmf +environment: + image_type: oem + image_profile: Server-Host-Generic + kiwi_file: Fedora.kiwi +execute: + how: tmt diff --git a/tmt/plans/vagrant/base/build-libvirt.fmf b/tmt/plans/vagrant/base/build-libvirt.fmf new file mode 100644 index 0000000..5dc2751 --- /dev/null +++ b/tmt/plans/vagrant/base/build-libvirt.fmf @@ -0,0 +1,9 @@ +summary: Build base Vagrant image for libvirt +discover: + how: fmf +environment: + image_type: oem + image_profile: Cloud-Base-Vagrant-libvirt + kiwi_file: Fedora.kiwi +execute: + how: tmt diff --git a/tmt/plans/vagrant/base/build-virtualbox.fmf b/tmt/plans/vagrant/base/build-virtualbox.fmf new file mode 100644 index 0000000..22878fe --- /dev/null +++ b/tmt/plans/vagrant/base/build-virtualbox.fmf @@ -0,0 +1,12 @@ +summary: Build base Vagrant image for VirtualBox +discover: + how: fmf +adjust: + enabled: false + when: arch != x86_64 +environment: + image_type: oem + image_profile: Cloud-Base-Vagrant-VirtualBox + kiwi_file: Fedora.kiwi +execute: + how: tmt diff --git a/tmt/plans/wsl/build.fmf b/tmt/plans/wsl/build.fmf new file mode 100644 index 0000000..beca94b --- /dev/null +++ b/tmt/plans/wsl/build.fmf @@ -0,0 +1,9 @@ +summary: Build the Windows Subsystem for Linux image +discover: + how: fmf +environment: + image_type: wsl + image_profile: WSL-Base + kiwi_file: Fedora.kiwi +execute: + how: tmt diff --git a/tmt/tests/build-image.fmf b/tmt/tests/build-image.fmf new file mode 100644 index 0000000..3a400cd --- /dev/null +++ b/tmt/tests/build-image.fmf @@ -0,0 +1,15 @@ +summary: Build image +require: + - distribution-gpg-keys + - git-core + - kiwi + - kiwi-systemdeps-containers + - kiwi-systemdeps-disk-images + - libselinux-utils +framework: shell +path: / +test: | + ./kiwi-build --debug --image-type="$image_type" --image-profile="$image_profile" --kiwi-description-dir="${TMT_TREE}" --kiwi-file="$kiwi_file" --output-dir="${TMT_TEST_DATA}" --image-release="$(date --utc +'%Y%m%d.%H%M')" + mv ${TMT_TEST_DATA}-build/build/image-root.log ${TMT_TEST_DATA} + rm -rf "${TMT_TEST_DATA}-build" +duration: 60m diff --git a/uki-editbootconfig.sh b/uki-editbootconfig.sh new file mode 100755 index 0000000..a2e2bcc --- /dev/null +++ b/uki-editbootconfig.sh @@ -0,0 +1,40 @@ +#!/bin/sh +echo "###" "$0" "$@" + +# set arch-specific variables +case "$(uname -m)" in + aarch64) arch="aa64"; ARCH="AA64";; + riscv64) arch="riscv64"; ARCH="RISCV64";; + x86_64) arch="x64"; ARCH="X64";; +esac + +# figure where shim.efi and BOOT.CSV are located +shim="$(ls boot/efi/EFI/*/shim${arch}.efi)" +csv="${shim%/*}/BOOT${ARCH}.CSV" + +# copy UKI images (typically one) to ${ESP}/EFI/Linux and +# generate BOOT.CSV with one entry per UKI. +echo "# csv: $csv" +echo -ne '\xff\xfe' > "$csv" +for uki in lib/modules/*/vmlinuz*.efi; do + echo "# uki: $uki" + ver=${uki#lib/modules/} + ver=${ver%/*} + mkdir -p boot/efi/EFI/Linux + cp --reflink=auto $uki boot/efi/EFI/Linux/${ver}.efi + echo "shim${arch}.efi,$ver,\\EFI\\Linux\\${ver}.efi ,Comment" \ + | iconv -f utf-8 -t ucs-2le >> "$csv" +done + +# bz2240989: shim has a hard dependency on grub. grub has a hard +# dependency on dracut. Ideally we would simply not install +# grub+dracut, but given we can't until the shim bug is fixed disable +# their kernel-install plugins instead. +echo "# hack: kernel-install - disable plugins" +touch etc/kernel/install.d/20-grub.install +touch etc/kernel/install.d/50-dracut.install + +# package install ran kernel-install scripts, cleanup the leftovers. +echo "# hack: kernel-install - cleanup leftovers" +rm -v boot/initramfs* +rm -v boot/EFI/Linux/* |