Refactor security and guest-agents config

- Move guest-agents from hypervisor modifier to independent optional feature
- Merge guest-agents/gui.ks into base.ks
- Remove security from required, add optional security modifier with off option
- Fix hypervisor-type modifier key normalization (underscore→hyphen)
- Add expand_variants() to handle list values in manifest
- Update all tests and expected recipes
This commit is contained in:
Lukas Greve
2026-03-25 21:18:01 +01:00
parent 5b8974a6ed
commit cd203b8799
55 changed files with 791 additions and 375 deletions
-8
View File
@@ -1,8 +0,0 @@
# VMM (Virtual Machine Manager) packages
%packages --exclude-weakdeps
virtual-manager
libvirt-client-tools
%end
-9
View File
@@ -1,9 +0,0 @@
# VMM post-installation scripts
%post --erroronfail
# Start libvirt service
systemctl enable libvirtd
systemctl start libvirtd
%end
+2 -1
View File
@@ -1,5 +1,6 @@
# Guest agents for virtual machines (base) # Guest agents for virtual machines
%packages --exclude-weakdeps %packages --exclude-weakdeps
qemu-guest-agent qemu-guest-agent
spice-vdagent
%end %end
-5
View File
@@ -1,5 +0,0 @@
# Guest agents for virtual machines (GUI only)
%packages --exclude-weakdeps
spice-vdagent
%end
@@ -1 +1,9 @@
# Desktop initial-setup configuration # Desktop initial-setup configuration
firstboot --enable # Enable the Setup Agent to start at boot time
%packages --exclude-weakdeps
initial-setup
%end
@@ -1,7 +0,0 @@
# Initial setup packages - desktop mode
%packages --exclude-weakdeps # Beginning of the packages section. Excludes weak package dependencies.
initial-setup # Initial setup package
%end # End of the packages section
@@ -1,8 +0,0 @@
# Initial setup packages - generic wayland desktop mode
%packages --exclude-weakdeps # Beginning of the packages section. Excludes weak package dependencies.
initial-setup-gui # Graphical user interface for the initial-setup utility
initial-setup-gui-wayland-generic.x86_64 # Run the initial-setup GUI in Wayland
%end # End of the packages section
@@ -1,9 +0,0 @@
# Initial setup packages - GNOME desktop mode
%packages --exclude-weakdeps # Beginning of the packages section. Excludes weak package dependencies.
# TO BE TESTED -> initial-setup-gui # Graphical user interface for the initial-setup utility
# TO BE TESTED -> initial-setup-gui-wayland-generic.x86_64 # Run the initial-setup GUI in Wayland
gnome-initial-setup # Add GNOME initial setup too to let user create local account.
%end # End of the packages section
@@ -1,7 +0,0 @@
# Initial setup packages - server mode
%packages --exclude-weakdeps # Beginning of the packages section. Excludes weak package dependencies.
initial-setup # Initial setup package
%end # End of the packages section
-3
View File
@@ -1,3 +0,0 @@
# Fedora ISO repository for F43 (for live ISO builds)
# repo --name=fedora-iso --metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-43&arch=x86_64 # Uncomment for ISO builds
+48 -8
View File
@@ -10,6 +10,7 @@ import sys
import yaml import yaml
from pathlib import Path from pathlib import Path
from typing import Dict, List, Optional, Any from typing import Dict, List, Optional, Any
from itertools import product
# Deprecated/removed command mappings for Fedora 43 (F42) and rawhide # Deprecated/removed command mappings for Fedora 43 (F42) and rawhide
@@ -308,8 +309,10 @@ class RecipeGenerator:
# Handle modifiers section # Handle modifiers section
for mod_key, mod_value in modifiers.items(): for mod_key, mod_value in modifiers.items():
if mod_key in template.get('modifiers', {}): # Normalize key: convert underscores to hyphens for template lookup
mod_config = template['modifiers'][mod_key] mod_key_normalized = mod_key.replace('_', '-')
if mod_key_normalized in template.get('modifiers', {}):
mod_config = template['modifiers'][mod_key_normalized]
# Handle nested dict modifiers # Handle nested dict modifiers
if isinstance(mod_config, dict) and isinstance(mod_value, str): if isinstance(mod_config, dict) and isinstance(mod_value, str):
@@ -460,6 +463,8 @@ class RecipeGenerator:
"""Generate recipe filename from parameters.""" """Generate recipe filename from parameters."""
# Extract variant subname if present # Extract variant subname if present
variant_subname = modifiers.get('variant_subname', '') variant_subname = modifiers.get('variant_subname', '')
if not variant_subname:
variant_subname = modifiers.get('variant_type', '')
# Build base parts # Build base parts
parts = [recipe_type.replace('_', '-')] parts = [recipe_type.replace('_', '-')]
@@ -468,10 +473,13 @@ class RecipeGenerator:
if variant_subname and variant_subname in ['desktop', 'server', 'hypervisor', 'hypervisor-desktop']: if variant_subname and variant_subname in ['desktop', 'server', 'hypervisor', 'hypervisor-desktop']:
parts.append(variant_subname) parts.append(variant_subname)
# Add hypervisor-type (list, first type only for filename) # Add hypervisor-type (list or single value for filename)
if modifiers.get('hypervisor-type') and isinstance(modifiers['hypervisor-type'], list): if modifiers.get('hypervisor_type'):
types = modifiers['hypervisor-type'] ht = modifiers['hypervisor_type']
parts.extend(types) if isinstance(ht, list):
parts.extend(ht)
else:
parts.append(ht)
# Add desktop (non-GNOME only, since GNOME is default) # Add desktop (non-GNOME only, since GNOME is default)
if modifiers.get('desktop') and modifiers['desktop'] != 'gnome': if modifiers.get('desktop') and modifiers['desktop'] != 'gnome':
@@ -481,7 +489,7 @@ class RecipeGenerator:
parts.append(str(version)) parts.append(str(version))
# Add security suffix (devel only, since secure is default) # Add security suffix (devel only, since secure is default)
if modifiers.get('security') == 'devel': if modifiers.get('security') == 'off':
parts.append('devel') parts.append('devel')
# Add storage suffix (encrypted only, since standard is default) # Add storage suffix (encrypted only, since standard is default)
@@ -491,6 +499,36 @@ class RecipeGenerator:
return '_'.join(parts) + '.cfg' return '_'.join(parts) + '.cfg'
def expand_variants(self, variants: List[Dict]) -> List[Dict]:
"""Expand variants with list values into individual variants."""
expanded = []
for variant in variants:
list_keys = {}
scalar_keys = {}
for key, value in variant.items():
if isinstance(value, list):
list_keys[key] = value
else:
scalar_keys[key] = value
if not list_keys:
expanded.append(variant)
continue
keys = list(list_keys.keys())
values_product = product(*[list_keys[k] for k in keys])
for combo in values_product:
new_variant = scalar_keys.copy()
for i, key in enumerate(keys):
new_variant[key] = combo[i]
expanded.append(new_variant)
return expanded
def main(): def main():
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description='Generate Phyllome OS kickstart recipes from templates', description='Generate Phyllome OS kickstart recipes from templates',
@@ -650,7 +688,9 @@ def main():
print(f"Error: Unknown recipe type in manifest: {recipe_type}", file=sys.stderr) print(f"Error: Unknown recipe type in manifest: {recipe_type}", file=sys.stderr)
sys.exit(1) sys.exit(1)
for variant in recipe_config.get('variants', []): variants = recipe_config.get('variants', [])
variants = generator.expand_variants(variants)
for variant in variants:
version = variant['version'] version = variant['version']
# Build modifiers dict (exclude 'name', 'version') # Build modifiers dict (exclude 'name', 'version')
modifiers = {k: v for k, v in variant.items() if k not in ['name', 'version']} modifiers = {k: v for k, v in variant.items() if k not in ['name', 'version']}
+12 -12
View File
@@ -20,6 +20,7 @@ templates:
- hand-picked: fragments/packages/hand-picked.ks - hand-picked: fragments/packages/hand-picked.ks
optional: optional:
hardware-support: fragments/packages/hardware-support.ks hardware-support: fragments/packages/hardware-support.ks
guest-agents: fragments/guest-agents/base.ks
variant_type: variant_type:
desktop: desktop:
server: server:
@@ -31,9 +32,6 @@ templates:
storage: storage:
standard: fragments/storage/standard.ks standard: fragments/storage/standard.ks
encrypted: fragments/storage/encrypted.ks encrypted: fragments/storage/encrypted.ks
bootloader:
grub: fragments/bootloader/grub.ks
systemd-boot: fragments/bootloader/systemd-boot.ks
desktop: desktop:
gnome: gnome:
- fragments/desktop/gnome/config.ks - fragments/desktop/gnome/config.ks
@@ -43,10 +41,12 @@ templates:
- fragments/desktop/labwc/config.ks - fragments/desktop/labwc/config.ks
security: security:
secure: fragments/core/security/enabled.ks secure: fragments/core/security/enabled.ks
devel: fragments/core/security/disabled.ks "off": fragments/core/security/disabled.ks
initial-setup: initial-setup:
server: fragments/initial-setup/server/config.ks server: fragments/initial-setup/server/config.ks
desktop: fragments/initial-setup/desktop/config.ks desktop: fragments/initial-setup/desktop/config.ks
gnome: fragments/initial-setup/gnome/config.ks
generic-wayland: fragments/initial-setup/generic-wayland/config.ks
hypervisor-type: hypervisor-type:
amdcpu: fragments/hypervisor/amdcpu.ks amdcpu: fragments/hypervisor/amdcpu.ks
intelcpu: fragments/hypervisor/intelcpu.ks intelcpu: fragments/hypervisor/intelcpu.ks
@@ -56,11 +56,9 @@ templates:
- fragments/hypervisor/base/packages.ks - fragments/hypervisor/base/packages.ks
- fragments/hypervisor/base/services.ks - fragments/hypervisor/base/services.ks
- fragments/hypervisor/base/post-scripts.ks - fragments/hypervisor/base/post-scripts.ks
- fragments/guest-agents/base.ks
desktop: desktop:
- fragments/packages/virtual-machine-manager/packages.ks - fragments/packages/virtual-machine-manager/packages.ks
- fragments/packages/virtual-machine-manager/post-scripts.ks - fragments/packages/virtual-machine-manager/post-scripts.ks
- fragments/guest-agents/gui.ks
# Live recipe - for live-desktop or live-server # Live recipe - for live-desktop or live-server
live: live:
@@ -69,22 +67,24 @@ templates:
required: required:
- live-core: fragments/live/core/base.ks - live-core: fragments/live/core/base.ks
- storage: fragments/live/core/storage.ks - storage: fragments/live/core/storage.ks
- bootloader: fragments/bootloader/grub.ks - bootloader: fragments/live/core/bootloader/grub.ks
- locale: fragments/core/locale.ks - locale: fragments/core/locale.ks
- services: fragments/core/services.ks - services: fragments/core/services.ks
- network: fragments/core/network.ks - network: fragments/core/network.ks
- packages: fragments/live/core/packages.ks - packages: fragments/live/core/packages.ks
- post: fragments/live/post/base.ks - post: fragments/live/post/base.ks
- session: fragments/live/post/session.ks - session: fragments/live/post/session.ks
- rpmfusion-nonfree: fragments/repo/rpmfusion-nonfree.ks
optional: optional:
variant_type: variant_type:
desktop: desktop:
server: server:
hardware-support: fragments/packages/hardware-support.ks
guest-agents: fragments/guest-agents/base.ks
hypervisor: fragments/live/hypervisor.ks
security: security:
secure: fragments/core/security/enabled.ks secure: fragments/core/security/enabled.ks
devel: fragments/core/security/disabled.ks "off": fragments/core/security/disabled.ks
hardware-support: fragments/packages/hardware-support.ks
hypervisor: fragments/live/hypervisor.ks
modifiers: modifiers:
version: version:
"43": fragments/repo/fedora-43-mirrors.ks "43": fragments/repo/fedora-43-mirrors.ks
@@ -93,5 +93,5 @@ templates:
standard: fragments/live/core/storage.ks standard: fragments/live/core/storage.ks
encrypted: fragments/live/core/storage.ks encrypted: fragments/live/core/storage.ks
bootloader: bootloader:
grub: fragments/bootloader/grub.ks grub: fragments/live/core/bootloader/grub.ks
systemd-boot: fragments/bootloader/systemd-boot.ks systemd-boot: fragments/live/core/bootloader/systemd-boot.ks
+39 -95
View File
@@ -1,134 +1,78 @@
# Recipe Manifest for Phyllome OS # Recipe Manifest for Phyllome OS
# Define all recipe variants using generators from recipe_templates.yaml # Define all recipe variants using generators from recipe_templates.yaml
# Edit this file to add new variants, then run: make generate-recipes # Edit this file to add new variants, then run: make generate-recipes
#
# Supported syntax:
# - Single values: version: "43"
# - List values: version: ["43", "rawhide"] (expands to multiple variants)
# - List modifiers: hypervisor-type: ["amdcpu", "intelcpu"] (expands to separate variants)
recipes: recipes:
# Install variants - desktop # Install variants - desktop
- name: install - name: install
variants: variants:
- name: desktop - name: desktop
version: "43" version: ["43", "rawhide"]
desktop: gnome desktop: gnome
storage: standard storage: ["standard", "encrypted"]
bootloader: grub bootloader: grub
security: secure hardware-support: [true, false]
hardware-support: true guest-agents: [true, false]
initial-setup: server
- name: desktop
version: "43"
desktop: gnome
storage: standard
bootloader: grub
security: devel
hardware-support: true
initial-setup: server
- name: desktop
version: "43"
desktop: labwc
storage: standard
bootloader: grub
security: secure
hardware-support: true
initial-setup: server
- name: desktop
version: "rawhide"
desktop: gnome
storage: standard
bootloader: grub
security: secure
hardware-support: true
initial-setup: server
- name: desktop
version: "rawhide"
desktop: gnome
storage: encrypted
bootloader: grub
security: secure
hardware-support: true
initial-setup: server initial-setup: server
security: [secure, 'off']
# Install variants - server (minimal, no desktop packages) # Install variants - server
- name: install - name: install
variants: variants:
- name: server - name: server
version: "43" version: ["43", "rawhide"]
storage: standard storage: ["standard", "encrypted"]
bootloader: grub bootloader: grub
security: secure hardware-support: [true, false]
hardware-support: true guest-agents: [true, false]
initial-setup: server
- name: server
version: "43"
storage: standard
bootloader: grub
security: devel
hardware-support: true
initial-setup: server
- name: server
version: "rawhide"
storage: standard
bootloader: grub
security: secure
hardware-support: true
initial-setup: server
- name: server
version: "rawhide"
storage: standard
bootloader: grub
security: devel
hardware-support: true
initial-setup: server initial-setup: server
security: [secure, 'off']
# Install variants - hypervisor # Install variants - server hypervisor
- name: install - name: install
variants: variants:
- name: hypervisor - name: hypervisor
version: "rawhide" version: ["43", "rawhide"]
storage: standard storage: ["standard", "encrypted"]
bootloader: grub bootloader: grub
security: secure hardware-support: [true, false]
hardware-support: true guest-agents: [true, false]
hypervisor: base hypervisor: base
hypervisor-type: hypervisor-type: ["amdcpu", "intelcpu"]
- amdcpu initial-setup: server
- name: hypervisor security: [secure, 'off']
version: "rawhide"
storage: standard
bootloader: grub
security: secure
hardware-support: true
hypervisor: base
hypervisor-type:
- intelcpu
# Install variants - hypervisor with desktop # Install variants - desktop-hypervisor
- name: install - name: install
variants: variants:
- name: hypervisor-desktop - name: desktop-hypervisor
version: "rawhide" version: ["43", "rawhide"]
desktop: gnome desktop: gnome
storage: standard storage: ["standard", "encrypted"]
bootloader: grub bootloader: grub
security: secure hardware-support: [true, false]
hardware-support: true
hypervisor: desktop hypervisor: desktop
hypervisor-type: hypervisor-type: ["amdcpu", "intelcpu"]
- intelcpu initial-setup: server
- intelgpu security: [secure, 'off']
initial-setup: desktop
# Live variants - desktop # Live variants - desktop
- name: live - name: live
variants: variants:
- name: desktop - name: desktop
version: "rawhide" version: "rawhide"
security: secure hardware-support: [true, false]
hardware-support: true guest-agents: [true, false]
# Live variants - server # Live variants - server
- name: live - name: live
variants: variants:
- name: server - name: server
version: "rawhide" version: "rawhide"
security: secure hardware-support: [true, false]
hardware-support: true guest-agents: [true, false]
@@ -19,11 +19,9 @@
%ksappend fragments/desktop/gnome/config.ks %ksappend fragments/desktop/gnome/config.ks
%ksappend fragments/desktop/gnome/packages.ks %ksappend fragments/desktop/gnome/packages.ks
%ksappend fragments/desktop/gnome/post-scripts.ks %ksappend fragments/desktop/gnome/post-scripts.ks
%ksappend fragments/core/security/enabled.ks
%ksappend fragments/packages/virtual-machine-manager/packages.ks %ksappend fragments/packages/virtual-machine-manager/packages.ks
%ksappend fragments/packages/virtual-machine-manager/post-scripts.ks %ksappend fragments/packages/virtual-machine-manager/post-scripts.ks
%ksappend fragments/guest-agents/gui.ks %ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/hypervisor/intelcpu.ks %ksappend fragments/hypervisor/intelcpu.ks
%ksappend fragments/hypervisor/intelgpu.ks %ksappend fragments/core/security/enabled.ks
%ksappend fragments/initial-setup/desktop/config.ks %ksappend fragments/repo/fedora-43-mirrors.ks
%ksappend fragments/repo/rawhide-mirrors.ks
+27
View File
@@ -0,0 +1,27 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%ksappend fragments/core/base.ks
%ksappend fragments/storage/standard.ks
%ksappend fragments/bootloader/grub.ks
%ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks
%ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks
%ksappend fragments/desktop/gnome/config.ks
%ksappend fragments/desktop/gnome/packages.ks
%ksappend fragments/desktop/gnome/post-scripts.ks
%ksappend fragments/packages/virtual-machine-manager/packages.ks
%ksappend fragments/packages/virtual-machine-manager/post-scripts.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/hypervisor/intelcpu.ks
%ksappend fragments/core/security/disabled.ks
%ksappend fragments/repo/fedora-43-mirrors.ks
+28
View File
@@ -0,0 +1,28 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%ksappend fragments/core/base.ks
%ksappend fragments/storage/standard.ks
%ksappend fragments/bootloader/grub.ks
%ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks
%ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks
%ksappend fragments/desktop/gnome/config.ks
%ksappend fragments/desktop/gnome/packages.ks
%ksappend fragments/desktop/gnome/post-scripts.ks
%ksappend fragments/packages/virtual-machine-manager/packages.ks
%ksappend fragments/packages/virtual-machine-manager/post-scripts.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/storage/encrypted.ks
%ksappend fragments/hypervisor/intelcpu.ks
%ksappend fragments/core/security/disabled.ks
%ksappend fragments/repo/fedora-43-mirrors.ks
+28
View File
@@ -0,0 +1,28 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%ksappend fragments/core/base.ks
%ksappend fragments/storage/standard.ks
%ksappend fragments/bootloader/grub.ks
%ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks
%ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks
%ksappend fragments/desktop/gnome/config.ks
%ksappend fragments/desktop/gnome/packages.ks
%ksappend fragments/desktop/gnome/post-scripts.ks
%ksappend fragments/packages/virtual-machine-manager/packages.ks
%ksappend fragments/packages/virtual-machine-manager/post-scripts.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/storage/encrypted.ks
%ksappend fragments/hypervisor/intelcpu.ks
%ksappend fragments/core/security/enabled.ks
%ksappend fragments/repo/fedora-43-mirrors.ks
+1 -1
View File
@@ -19,6 +19,6 @@
%ksappend fragments/desktop/gnome/config.ks %ksappend fragments/desktop/gnome/config.ks
%ksappend fragments/desktop/gnome/packages.ks %ksappend fragments/desktop/gnome/packages.ks
%ksappend fragments/desktop/gnome/post-scripts.ks %ksappend fragments/desktop/gnome/post-scripts.ks
%ksappend fragments/core/security/enabled.ks
%ksappend fragments/initial-setup/server/config.ks %ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/core/security/enabled.ks
%ksappend fragments/repo/fedora-43-mirrors.ks %ksappend fragments/repo/fedora-43-mirrors.ks
+1 -1
View File
@@ -19,6 +19,6 @@
%ksappend fragments/desktop/gnome/config.ks %ksappend fragments/desktop/gnome/config.ks
%ksappend fragments/desktop/gnome/packages.ks %ksappend fragments/desktop/gnome/packages.ks
%ksappend fragments/desktop/gnome/post-scripts.ks %ksappend fragments/desktop/gnome/post-scripts.ks
%ksappend fragments/core/security/disabled.ks
%ksappend fragments/initial-setup/server/config.ks %ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/core/security/disabled.ks
%ksappend fragments/repo/fedora-43-mirrors.ks %ksappend fragments/repo/fedora-43-mirrors.ks
@@ -0,0 +1,25 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%ksappend fragments/core/base.ks
%ksappend fragments/storage/standard.ks
%ksappend fragments/bootloader/grub.ks
%ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks
%ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks
%ksappend fragments/desktop/gnome/config.ks
%ksappend fragments/desktop/gnome/packages.ks
%ksappend fragments/desktop/gnome/post-scripts.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/storage/encrypted.ks
%ksappend fragments/core/security/disabled.ks
%ksappend fragments/repo/fedora-43-mirrors.ks
+25
View File
@@ -0,0 +1,25 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%ksappend fragments/core/base.ks
%ksappend fragments/storage/standard.ks
%ksappend fragments/bootloader/grub.ks
%ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks
%ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks
%ksappend fragments/desktop/gnome/config.ks
%ksappend fragments/desktop/gnome/packages.ks
%ksappend fragments/desktop/gnome/post-scripts.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/storage/encrypted.ks
%ksappend fragments/core/security/enabled.ks
%ksappend fragments/repo/fedora-43-mirrors.ks
+1 -1
View File
@@ -19,6 +19,6 @@
%ksappend fragments/desktop/gnome/config.ks %ksappend fragments/desktop/gnome/config.ks
%ksappend fragments/desktop/gnome/packages.ks %ksappend fragments/desktop/gnome/packages.ks
%ksappend fragments/desktop/gnome/post-scripts.ks %ksappend fragments/desktop/gnome/post-scripts.ks
%ksappend fragments/core/security/enabled.ks
%ksappend fragments/initial-setup/server/config.ks %ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/core/security/enabled.ks
%ksappend fragments/repo/rawhide-mirrors.ks %ksappend fragments/repo/rawhide-mirrors.ks
+24
View File
@@ -0,0 +1,24 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%ksappend fragments/core/base.ks
%ksappend fragments/storage/standard.ks
%ksappend fragments/bootloader/grub.ks
%ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks
%ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks
%ksappend fragments/desktop/gnome/config.ks
%ksappend fragments/desktop/gnome/packages.ks
%ksappend fragments/desktop/gnome/post-scripts.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/core/security/disabled.ks
%ksappend fragments/repo/rawhide-mirrors.ks
@@ -0,0 +1,25 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%ksappend fragments/core/base.ks
%ksappend fragments/storage/standard.ks
%ksappend fragments/bootloader/grub.ks
%ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks
%ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks
%ksappend fragments/desktop/gnome/config.ks
%ksappend fragments/desktop/gnome/packages.ks
%ksappend fragments/desktop/gnome/post-scripts.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/storage/encrypted.ks
%ksappend fragments/core/security/disabled.ks
%ksappend fragments/repo/rawhide-mirrors.ks
@@ -19,7 +19,7 @@
%ksappend fragments/desktop/gnome/config.ks %ksappend fragments/desktop/gnome/config.ks
%ksappend fragments/desktop/gnome/packages.ks %ksappend fragments/desktop/gnome/packages.ks
%ksappend fragments/desktop/gnome/post-scripts.ks %ksappend fragments/desktop/gnome/post-scripts.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/storage/encrypted.ks %ksappend fragments/storage/encrypted.ks
%ksappend fragments/core/security/enabled.ks %ksappend fragments/core/security/enabled.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/repo/rawhide-mirrors.ks %ksappend fragments/repo/rawhide-mirrors.ks
@@ -16,10 +16,10 @@
%ksappend fragments/packages/core-group.ks %ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks %ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks %ksappend fragments/packages/hand-picked.ks
%ksappend fragments/core/security/enabled.ks
%ksappend fragments/hypervisor/base/packages.ks %ksappend fragments/hypervisor/base/packages.ks
%ksappend fragments/hypervisor/base/services.ks %ksappend fragments/hypervisor/base/services.ks
%ksappend fragments/hypervisor/base/post-scripts.ks %ksappend fragments/hypervisor/base/post-scripts.ks
%ksappend fragments/guest-agents/base.ks %ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/hypervisor/amdcpu.ks %ksappend fragments/hypervisor/intelcpu.ks
%ksappend fragments/repo/rawhide-mirrors.ks %ksappend fragments/core/security/enabled.ks
%ksappend fragments/repo/fedora-43-mirrors.ks
+25
View File
@@ -0,0 +1,25 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%ksappend fragments/core/base.ks
%ksappend fragments/storage/standard.ks
%ksappend fragments/bootloader/grub.ks
%ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks
%ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks
%ksappend fragments/hypervisor/base/packages.ks
%ksappend fragments/hypervisor/base/services.ks
%ksappend fragments/hypervisor/base/post-scripts.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/hypervisor/intelcpu.ks
%ksappend fragments/core/security/disabled.ks
%ksappend fragments/repo/fedora-43-mirrors.ks
@@ -0,0 +1,26 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%ksappend fragments/core/base.ks
%ksappend fragments/storage/standard.ks
%ksappend fragments/bootloader/grub.ks
%ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks
%ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks
%ksappend fragments/hypervisor/base/packages.ks
%ksappend fragments/hypervisor/base/services.ks
%ksappend fragments/hypervisor/base/post-scripts.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/storage/encrypted.ks
%ksappend fragments/hypervisor/intelcpu.ks
%ksappend fragments/core/security/disabled.ks
%ksappend fragments/repo/fedora-43-mirrors.ks
@@ -0,0 +1,26 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%ksappend fragments/core/base.ks
%ksappend fragments/storage/standard.ks
%ksappend fragments/bootloader/grub.ks
%ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks
%ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks
%ksappend fragments/hypervisor/base/packages.ks
%ksappend fragments/hypervisor/base/services.ks
%ksappend fragments/hypervisor/base/post-scripts.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/storage/encrypted.ks
%ksappend fragments/hypervisor/intelcpu.ks
%ksappend fragments/core/security/enabled.ks
%ksappend fragments/repo/fedora-43-mirrors.ks
@@ -16,10 +16,10 @@
%ksappend fragments/packages/core-group.ks %ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks %ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks %ksappend fragments/packages/hand-picked.ks
%ksappend fragments/core/security/enabled.ks
%ksappend fragments/hypervisor/base/packages.ks %ksappend fragments/hypervisor/base/packages.ks
%ksappend fragments/hypervisor/base/services.ks %ksappend fragments/hypervisor/base/services.ks
%ksappend fragments/hypervisor/base/post-scripts.ks %ksappend fragments/hypervisor/base/post-scripts.ks
%ksappend fragments/guest-agents/base.ks %ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/hypervisor/intelcpu.ks %ksappend fragments/hypervisor/intelcpu.ks
%ksappend fragments/core/security/enabled.ks
%ksappend fragments/repo/rawhide-mirrors.ks %ksappend fragments/repo/rawhide-mirrors.ks
@@ -0,0 +1,25 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%ksappend fragments/core/base.ks
%ksappend fragments/storage/standard.ks
%ksappend fragments/bootloader/grub.ks
%ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks
%ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks
%ksappend fragments/hypervisor/base/packages.ks
%ksappend fragments/hypervisor/base/services.ks
%ksappend fragments/hypervisor/base/post-scripts.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/hypervisor/intelcpu.ks
%ksappend fragments/core/security/disabled.ks
%ksappend fragments/repo/rawhide-mirrors.ks
@@ -0,0 +1,26 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%ksappend fragments/core/base.ks
%ksappend fragments/storage/standard.ks
%ksappend fragments/bootloader/grub.ks
%ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks
%ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks
%ksappend fragments/hypervisor/base/packages.ks
%ksappend fragments/hypervisor/base/services.ks
%ksappend fragments/hypervisor/base/post-scripts.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/storage/encrypted.ks
%ksappend fragments/hypervisor/intelcpu.ks
%ksappend fragments/core/security/disabled.ks
%ksappend fragments/repo/rawhide-mirrors.ks
@@ -0,0 +1,26 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%ksappend fragments/core/base.ks
%ksappend fragments/storage/standard.ks
%ksappend fragments/bootloader/grub.ks
%ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks
%ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks
%ksappend fragments/hypervisor/base/packages.ks
%ksappend fragments/hypervisor/base/services.ks
%ksappend fragments/hypervisor/base/post-scripts.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/storage/encrypted.ks
%ksappend fragments/hypervisor/intelcpu.ks
%ksappend fragments/core/security/enabled.ks
%ksappend fragments/repo/rawhide-mirrors.ks
+27
View File
@@ -0,0 +1,27 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%ksappend fragments/core/base.ks
%ksappend fragments/storage/standard.ks
%ksappend fragments/bootloader/grub.ks
%ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks
%ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks
%ksappend fragments/desktop/gnome/config.ks
%ksappend fragments/desktop/gnome/packages.ks
%ksappend fragments/desktop/gnome/post-scripts.ks
%ksappend fragments/packages/virtual-machine-manager/packages.ks
%ksappend fragments/packages/virtual-machine-manager/post-scripts.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/hypervisor/intelcpu.ks
%ksappend fragments/core/security/enabled.ks
%ksappend fragments/repo/rawhide-mirrors.ks
+27
View File
@@ -0,0 +1,27 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%ksappend fragments/core/base.ks
%ksappend fragments/storage/standard.ks
%ksappend fragments/bootloader/grub.ks
%ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks
%ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks
%ksappend fragments/desktop/gnome/config.ks
%ksappend fragments/desktop/gnome/packages.ks
%ksappend fragments/desktop/gnome/post-scripts.ks
%ksappend fragments/packages/virtual-machine-manager/packages.ks
%ksappend fragments/packages/virtual-machine-manager/post-scripts.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/hypervisor/intelcpu.ks
%ksappend fragments/core/security/disabled.ks
%ksappend fragments/repo/rawhide-mirrors.ks
@@ -0,0 +1,28 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%ksappend fragments/core/base.ks
%ksappend fragments/storage/standard.ks
%ksappend fragments/bootloader/grub.ks
%ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks
%ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks
%ksappend fragments/desktop/gnome/config.ks
%ksappend fragments/desktop/gnome/packages.ks
%ksappend fragments/desktop/gnome/post-scripts.ks
%ksappend fragments/packages/virtual-machine-manager/packages.ks
%ksappend fragments/packages/virtual-machine-manager/post-scripts.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/storage/encrypted.ks
%ksappend fragments/hypervisor/intelcpu.ks
%ksappend fragments/core/security/disabled.ks
%ksappend fragments/repo/rawhide-mirrors.ks
+28
View File
@@ -0,0 +1,28 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%ksappend fragments/core/base.ks
%ksappend fragments/storage/standard.ks
%ksappend fragments/bootloader/grub.ks
%ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks
%ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks
%ksappend fragments/desktop/gnome/config.ks
%ksappend fragments/desktop/gnome/packages.ks
%ksappend fragments/desktop/gnome/post-scripts.ks
%ksappend fragments/packages/virtual-machine-manager/packages.ks
%ksappend fragments/packages/virtual-machine-manager/post-scripts.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/storage/encrypted.ks
%ksappend fragments/hypervisor/intelcpu.ks
%ksappend fragments/core/security/enabled.ks
%ksappend fragments/repo/rawhide-mirrors.ks
+1 -1
View File
@@ -16,6 +16,6 @@
%ksappend fragments/packages/core-group.ks %ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks %ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks %ksappend fragments/packages/hand-picked.ks
%ksappend fragments/core/security/enabled.ks
%ksappend fragments/initial-setup/server/config.ks %ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/core/security/enabled.ks
%ksappend fragments/repo/fedora-43-mirrors.ks %ksappend fragments/repo/fedora-43-mirrors.ks
+1 -1
View File
@@ -16,6 +16,6 @@
%ksappend fragments/packages/core-group.ks %ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks %ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks %ksappend fragments/packages/hand-picked.ks
%ksappend fragments/core/security/disabled.ks
%ksappend fragments/initial-setup/server/config.ks %ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/core/security/disabled.ks
%ksappend fragments/repo/fedora-43-mirrors.ks %ksappend fragments/repo/fedora-43-mirrors.ks
@@ -0,0 +1,22 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%ksappend fragments/core/base.ks
%ksappend fragments/storage/standard.ks
%ksappend fragments/bootloader/grub.ks
%ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks
%ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/storage/encrypted.ks
%ksappend fragments/core/security/disabled.ks
%ksappend fragments/repo/fedora-43-mirrors.ks
@@ -16,7 +16,7 @@
%ksappend fragments/packages/core-group.ks %ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks %ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks %ksappend fragments/packages/hand-picked.ks
%ksappend fragments/desktop/labwc/config.ks
%ksappend fragments/core/security/enabled.ks
%ksappend fragments/initial-setup/server/config.ks %ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/storage/encrypted.ks
%ksappend fragments/core/security/enabled.ks
%ksappend fragments/repo/fedora-43-mirrors.ks %ksappend fragments/repo/fedora-43-mirrors.ks
+1 -1
View File
@@ -16,6 +16,6 @@
%ksappend fragments/packages/core-group.ks %ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks %ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks %ksappend fragments/packages/hand-picked.ks
%ksappend fragments/core/security/enabled.ks
%ksappend fragments/initial-setup/server/config.ks %ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/core/security/enabled.ks
%ksappend fragments/repo/rawhide-mirrors.ks %ksappend fragments/repo/rawhide-mirrors.ks
+1 -1
View File
@@ -16,6 +16,6 @@
%ksappend fragments/packages/core-group.ks %ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks %ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks %ksappend fragments/packages/hand-picked.ks
%ksappend fragments/core/security/disabled.ks
%ksappend fragments/initial-setup/server/config.ks %ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/core/security/disabled.ks
%ksappend fragments/repo/rawhide-mirrors.ks %ksappend fragments/repo/rawhide-mirrors.ks
@@ -0,0 +1,22 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%ksappend fragments/core/base.ks
%ksappend fragments/storage/standard.ks
%ksappend fragments/bootloader/grub.ks
%ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks
%ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/storage/encrypted.ks
%ksappend fragments/core/security/disabled.ks
%ksappend fragments/repo/rawhide-mirrors.ks
@@ -0,0 +1,22 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%ksappend fragments/core/base.ks
%ksappend fragments/storage/standard.ks
%ksappend fragments/bootloader/grub.ks
%ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks
%ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/storage/encrypted.ks
%ksappend fragments/core/security/enabled.ks
%ksappend fragments/repo/rawhide-mirrors.ks
+2 -2
View File
@@ -9,12 +9,12 @@
%ksappend fragments/live/core/base.ks %ksappend fragments/live/core/base.ks
%ksappend fragments/live/core/storage.ks %ksappend fragments/live/core/storage.ks
%ksappend fragments/bootloader/grub.ks %ksappend fragments/live/core/bootloader/grub.ks
%ksappend fragments/core/locale.ks %ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks %ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks %ksappend fragments/core/network.ks
%ksappend fragments/live/core/packages.ks %ksappend fragments/live/core/packages.ks
%ksappend fragments/live/post/base.ks %ksappend fragments/live/post/base.ks
%ksappend fragments/live/post/session.ks %ksappend fragments/live/post/session.ks
%ksappend fragments/core/security/enabled.ks %ksappend fragments/repo/rpmfusion-nonfree.ks
%ksappend fragments/repo/rawhide-mirrors.ks %ksappend fragments/repo/rawhide-mirrors.ks
+2 -2
View File
@@ -9,12 +9,12 @@
%ksappend fragments/live/core/base.ks %ksappend fragments/live/core/base.ks
%ksappend fragments/live/core/storage.ks %ksappend fragments/live/core/storage.ks
%ksappend fragments/bootloader/grub.ks %ksappend fragments/live/core/bootloader/grub.ks
%ksappend fragments/core/locale.ks %ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks %ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks %ksappend fragments/core/network.ks
%ksappend fragments/live/core/packages.ks %ksappend fragments/live/core/packages.ks
%ksappend fragments/live/post/base.ks %ksappend fragments/live/post/base.ks
%ksappend fragments/live/post/session.ks %ksappend fragments/live/post/session.ks
%ksappend fragments/core/security/enabled.ks %ksappend fragments/repo/rpmfusion-nonfree.ks
%ksappend fragments/repo/rawhide-mirrors.ks %ksappend fragments/repo/rawhide-mirrors.ks
@@ -0,0 +1,24 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# A recipe for a desktop hypervisor
%ksappend fragments/core/base.ks
%ksappend fragments/storage/standard.ks
%ksappend fragments/bootloader/grub.ks
%ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks
%ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks
%ksappend fragments/core/security/enabled.ks
%ksappend fragments/packages/virtual-machine-manager/packages.ks
%ksappend fragments/packages/virtual-machine-manager/post-scripts.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/hypervisor/intelcpu.ks
%ksappend fragments/repo/rawhide-mirrors.ks
@@ -0,0 +1,24 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# A recipe for a desktop hypervisor
%ksappend fragments/core/base.ks
%ksappend fragments/storage/standard.ks
%ksappend fragments/bootloader/grub.ks
%ksappend fragments/core/locale.ks
%ksappend fragments/core/services.ks
%ksappend fragments/core/network.ks
%ksappend fragments/packages/core-group.ks
%ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/packages/hand-picked.ks
%ksappend fragments/core/security/enabled.ks
%ksappend fragments/packages/virtual-machine-manager/packages.ks
%ksappend fragments/packages/virtual-machine-manager/post-scripts.ks
%ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/hypervisor/intelcpu.ks
%ksappend fragments/repo/rawhide-mirrors.ks
@@ -7,23 +7,18 @@
# A recipe for a desktop hypervisor # A recipe for a desktop hypervisor
%ksappend fragments/shared/core/base.ks %ksappend fragments/core/base.ks
%ksappend fragments/shared/storage/standard.ks %ksappend fragments/storage/standard.ks
%ksappend fragments/platform/generic-rawhide/bootloader/grub.ks %ksappend fragments/bootloader/grub.ks
%ksappend fragments/shared/core/locale.ks %ksappend fragments/core/locale.ks
%ksappend fragments/shared/core/services.ks %ksappend fragments/core/services.ks
%ksappend fragments/shared/core/network.ks %ksappend fragments/core/network.ks
%ksappend fragments/shared/packages/core-group.ks %ksappend fragments/packages/core-group.ks
%ksappend fragments/shared/packages/fedora-remix.ks %ksappend fragments/packages/fedora-remix.ks
%ksappend fragments/shared/packages/hand-picked.ks %ksappend fragments/packages/hand-picked.ks
%ksappend fragments/shared/packages/hardware-support.ks %ksappend fragments/core/security/enabled.ks
%ksappend fragments/shared/initial-setup/desktop/config.ks %ksappend fragments/packages/virtual-machine-manager/packages.ks
%ksappend fragments/shared/desktop/gnome/config.ks %ksappend fragments/packages/virtual-machine-manager/post-scripts.ks
%ksappend fragments/shared/desktop/gnome/packages.ks %ksappend fragments/initial-setup/server/config.ks
%ksappend fragments/shared/desktop/gnome/post-scripts.ks %ksappend fragments/hypervisor/intelcpu.ks
%ksappend fragments/shared/desktop/vmm/packages.ks %ksappend fragments/repo/rawhide-mirrors.ks
%ksappend fragments/shared/desktop/vmm/post-scripts.ks
%ksappend fragments/platform/generic-rawhide/repo/rawhide-mirrors.ks
%ksappend fragments/shared/hypervisor/base/services.ks
%ksappend fragments/shared/hypervisor/base/packages.ks
%ksappend fragments/shared/hypervisor/base/post-scripts.ks
+15 -10
View File
@@ -75,17 +75,22 @@ def test_container_build():
def test_fragments_structure(): def test_fragments_structure():
"""Verify fragment directory structure.""" """Verify fragment directory structure."""
# Check platform directories # Check core directories
assert (FRAGMENTS_DIR / 'platform' / 'generic-43' / 'repo').exists() assert (FRAGMENTS_DIR / 'core' / 'security').exists()
assert (FRAGMENTS_DIR / 'platform' / 'generic-rawhide' / 'repo').exists()
# Check shared directories # Check desktop directories
assert (FRAGMENTS_DIR / 'shared' / 'core').exists() assert (FRAGMENTS_DIR / 'desktop' / 'gnome').exists()
assert (FRAGMENTS_DIR / 'shared' / 'packages').exists() assert (FRAGMENTS_DIR / 'desktop' / 'labwc').exists()
assert (FRAGMENTS_DIR / 'shared' / 'storage').exists() assert (FRAGMENTS_DIR / 'desktop' / 'vmm').exists()
assert (FRAGMENTS_DIR / 'shared' / 'desktop').exists()
assert (FRAGMENTS_DIR / 'shared' / 'hypervisor').exists() # Check hypervisor directories
assert (FRAGMENTS_DIR / 'hypervisor' / 'base').exists()
assert (FRAGMENTS_DIR / 'hypervisor' / 'base').exists()
# Check live directories
assert (FRAGMENTS_DIR / 'live' / 'core' / 'bootloader').exists()
assert (FRAGMENTS_DIR / 'live' / 'post').exists()
# Count fragments # Count fragments
fragment_count = len(list(FRAGMENTS_DIR.glob('**/*.ks'))) fragment_count = len(list(FRAGMENTS_DIR.glob('**/*.ks')))
assert fragment_count >= 50, f"Expected at least 50 fragments, found {fragment_count}" assert fragment_count >= 45, f"Expected at least 45 fragments, found {fragment_count}"
+69 -148
View File
@@ -9,8 +9,6 @@ sys.path.insert(0, str(RECIPE_GENERATOR_DIR))
from generate_recipe import RecipeGenerator from generate_recipe import RecipeGenerator
INGREDIENTS_DIR = Path(__file__).parent.parent / 'ingredients'
class TestRecipeGenerator: class TestRecipeGenerator:
"""Test RecipeGenerator class.""" """Test RecipeGenerator class."""
@@ -28,9 +26,6 @@ class TestRecipeGenerator:
assert isinstance(self.generator.templates, dict) assert isinstance(self.generator.templates, dict)
assert len(self.generator.templates) == 2 assert len(self.generator.templates) == 2
assert 'install' in self.generator.templates assert 'install' in self.generator.templates
assert 'install' in self.generator.templates
assert 'install' in self.generator.templates
assert 'live' in self.generator.templates
assert 'live' in self.generator.templates assert 'live' in self.generator.templates
def test_validate_template_success(self): def test_validate_template_success(self):
@@ -59,90 +54,91 @@ class TestRecipeGenerator:
assert any('not found' in error for error in errors) assert any('not found' in error for error in errors)
def test_generate_virtual_desktop_basic(self): def test_generate_virtual_desktop_basic(self):
"""Test generating basic virtual desktop recipe.""" """Test generating basic desktop recipe."""
content = self.generator.generate_recipe('install', '43', content = self.generator.generate_recipe('install', '43',
desktop='gnome', desktop='gnome',
storage='standard', storage='standard',
security='secure') security='secure')
assert '# A recipe for a virtual desktop' in content assert '# An install recipe for desktop, server, or hypervisor' in content
assert '%ksappend fragments/shared/core/base.ks' in content assert '%ksappend fragments/core/base.ks' in content
assert '%ksappend fragments/shared/desktop/gnome/packages.ks' in content assert '%ksappend fragments/desktop/gnome/packages.ks' in content
assert '%ksappend fragments/platform/generic-43/repo/fedora-mirrors.ks' in content assert '%ksappend fragments/repo/fedora-43-mirrors.ks' in content
assert '%ksappend fragments/shared/core/security/enabled.ks' in content assert '%ksappend fragments/core/security/enabled.ks' in content
def test_generate_virtual_desktop_encrypted(self): def test_generate_virtual_desktop_encrypted(self):
"""Test generating encrypted virtual desktop recipe.""" """Test generating encrypted desktop recipe."""
content = self.generator.generate_recipe('install', 'rawhide', content = self.generator.generate_recipe('install', 'rawhide',
desktop='gnome', desktop='gnome',
storage='encrypted', storage='encrypted',
security='secure') security='secure')
assert '%ksappend fragments/shared/storage/encrypted.ks' in content assert '%ksappend fragments/storage/encrypted.ks' in content
def test_generate_virtual_desktop_labwc(self): def test_generate_virtual_desktop_labwc(self):
"""Test generating LabWC virtual desktop recipe.""" """Test generating LabWC desktop recipe."""
content = self.generator.generate_recipe('install', '43', content = self.generator.generate_recipe('install', '43',
desktop='labwc', desktop='labwc',
storage='standard', storage='standard',
security='secure') security='secure')
assert '%ksappend fragments/shared/desktop/labwc/config.ks' in content assert '%ksappend fragments/desktop/labwc/config.ks' in content
assert '%ksappend fragments/shared/desktop/gnome/packages.ks' not in content assert '%ksappend fragments/desktop/gnome/packages.ks' not in content
def test_generate_virtual_desktop_devel(self): def test_generate_virtual_desktop_devel(self):
"""Test generating development mode virtual desktop recipe.""" """Test generating development mode desktop recipe."""
content = self.generator.generate_recipe('install', '43', content = self.generator.generate_recipe('install', '43',
desktop='gnome', desktop='gnome',
storage='standard', storage='standard',
security='devel') security='off')
assert '%ksappend fragments/shared/core/security/disabled.ks' in content assert '%ksappend fragments/core/security/disabled.ks' in content
assert '%ksappend fragments/shared/core/security/enabled.ks' not in content
def test_generate_virtual_server(self): def test_generate_virtual_server(self):
"""Test generating virtual server recipe.""" """Test generating server recipe."""
content = self.generator.generate_recipe('install', 'rawhide', content = self.generator.generate_recipe('install', 'rawhide',
initial_setup='server',
security='secure') security='secure')
assert '# A recipe for a virtual server' in content assert '# An install recipe for desktop, server, or hypervisor' in content
assert '%ksappend fragments/shared/desktop/gnome/packages.ks' not in content assert '%ksappend fragments/initial-setup/server/config.ks' in content
assert '%ksappend fragments/shared/initial-setup/server/config.ks' in content
def test_generate_desktop_hypervisor_amd(self): def test_generate_desktop_hypervisor_amd(self):
"""Test generating AMD CPU hypervisor recipe.""" """Test generating AMD CPU hypervisor recipe."""
content = self.generator.generate_recipe('install', 'rawhide', content = self.generator.generate_recipe('install', 'rawhide',
cpu='amdcpu', variant_type='hypervisor',
hypervisor='base',
hypervisor_type='amdcpu',
security='secure') security='secure')
assert '%ksappend fragments/shared/hypervisor/amdcpu.ks' in content assert '%ksappend fragments/hypervisor/amdcpu.ks' in content
assert '%ksappend fragments/shared/hypervisor/intelcpu.ks' not in content assert '%ksappend fragments/hypervisor/intelcpu.ks' not in content
def test_generate_desktop_hypervisor_intel_gpu(self): def test_generate_desktop_hypervisor_intel_gpu(self):
"""Test generating Intel CPU+GPU hypervisor recipe.""" """Test generating Intel CPU+GPU hypervisor recipe."""
content = self.generator.generate_recipe('install', 'rawhide', content = self.generator.generate_recipe('install', 'rawhide',
cpu='intelcpu', variant_type='hypervisor',
gpu='intelgpu', hypervisor='base',
hypervisor_type='intelcpu',
security='secure') security='secure')
assert '%ksappend fragments/shared/hypervisor/intelcpu.ks' in content assert '%ksappend fragments/hypervisor/intelcpu.ks' in content
assert '%ksappend fragments/shared/hypervisor/intelgpu.ks' in content
def test_generate_live_desktop(self): def test_generate_live_desktop(self):
"""Test generating live desktop recipe.""" """Test generating live desktop recipe."""
content = self.generator.generate_recipe('live', 'rawhide', content = self.generator.generate_recipe('live', 'rawhide',
desktop='gnome', desktop='gnome',
security='secure') security='secure')
assert '# A recipe for a live desktop' in content assert '# A live recipe for live-desktop or live-server' in content
assert '%ksappend fragments/shared/live/core/base.ks' in content assert '%ksappend fragments/live/core/base.ks' in content
assert '%ksappend fragments/shared/live/core/storage.ks' in content assert '%ksappend fragments/live/core/storage.ks' in content
def test_generate_live_server(self): def test_generate_live_server(self):
"""Test generating live server recipe.""" """Test generating live server recipe."""
content = self.generator.generate_recipe('live', 'rawhide', content = self.generator.generate_recipe('live', 'rawhide',
security='secure') security='secure')
assert '# A recipe for a live server' in content assert '# A live recipe for live-desktop or live-server' in content
assert '%ksappend fragments/shared/live/core/base.ks' in content assert '%ksappend fragments/live/core/base.ks' in content
assert '%ksappend fragments/shared/initial-setup/server/config.ks' in content
def test_no_duplicate_includes(self): def test_no_duplicate_includes(self):
"""Test that duplicate includes are prevented.""" """Test that duplicate includes are prevented."""
content = self.generator.generate_recipe('install', 'rawhide', content = self.generator.generate_recipe('install', 'rawhide',
cpu='intelcpu', variant_type='hypervisor',
gpu='intelgpu', hypervisor='base',
hypervisor_type='intelcpu',
security='secure') security='secure')
includes = [line for line in content.split('\n') if line.startswith('%ksappend')] includes = [line for line in content.split('\n') if line.startswith('%ksappend')]
paths = [line.split()[1] for line in includes] paths = [line.split()[1] for line in includes]
@@ -160,49 +156,35 @@ class TestRecipeGenerator:
def test_filename_generation_standard(self): def test_filename_generation_standard(self):
"""Test filename generation for standard configuration.""" """Test filename generation for standard configuration."""
filename = self.generator.generate_filename('install', '43', filename = self.generator.generate_filename('install', '43',
desktop='gnome', desktop='gnome',
storage='standard', storage='standard',
security='secure') security='secure')
assert filename == 'install_desktop_43.cfg' assert filename == 'install_43.cfg'
def test_filename_generation_encrypted(self): def test_filename_generation_encrypted(self):
"""Test filename generation for encrypted storage.""" """Test filename generation for encrypted storage."""
filename = self.generator.generate_filename('install', 'rawhide', filename = self.generator.generate_filename('install', 'rawhide',
desktop='gnome', desktop='gnome',
storage='encrypted', storage='encrypted',
security='secure') security='secure')
assert filename == 'virtual-desktop_rawhide_encrypted.cfg' assert filename == 'install_rawhide_encrypted.cfg'
def test_filename_generation_devel(self): def test_filename_generation_devel(self):
"""Test filename generation for development mode.""" """Test filename generation for development mode."""
filename = self.generator.generate_filename('install', '43', filename = self.generator.generate_filename('install', '43',
desktop='gnome', desktop='gnome',
storage='standard', storage='standard',
security='devel') security='off')
assert filename == 'virtual-desktop_43_devel.cfg' assert filename == 'install_43_devel.cfg'
def test_filename_generation_cpu_gpu(self):
"""Test filename generation for hypervisor with CPU/GPU."""
filename = self.generator.generate_filename('install', 'rawhide',
cpu='intelcpu',
gpu='intelgpu',
security='secure')
assert filename == 'install_hypervisor_intelcpu_intelgpu_rawhide.cfg'
def test_filename_generation_labwc(self):
"""Test filename generation for non-default desktop."""
filename = self.generator.generate_filename('install', '43',
desktop='labwc',
storage='standard',
security='secure')
assert filename == 'virtual-desktop_labwc_43.cfg'
def test_filename_generation_hypervisor(self): def test_filename_generation_hypervisor(self):
"""Test filename generation for live server with hypervisor.""" """Test filename generation for hypervisor."""
filename = self.generator.generate_filename('live', 'rawhide', filename = self.generator.generate_filename('install', 'rawhide',
security='secure', variant_type='hypervisor',
hypervisor=True) hypervisor='base',
assert filename == 'live-server_rawhide_hypervisor.cfg' hypervisor_type='intelcpu',
security='secure')
assert filename == 'install_hypervisor_intelcpu_rawhide.cfg'
def test_invalid_recipe_type(self): def test_invalid_recipe_type(self):
"""Test error on invalid recipe type.""" """Test error on invalid recipe type."""
@@ -247,91 +229,30 @@ clearpart --all --initlabel
part /boot/efi --fstype="efi" --size=512 part /boot/efi --fstype="efi" --size=512
part / --fstype="ext4" --grow part / --fstype="ext4" --grow
%packages %packages
@base-graphical
%end %end
""" """
issues = self.generator.validate_recipe_semantic(content, '43') issues = self.generator.validate_recipe_semantic(content, '43')
# Should have no syntax errors assert issues == []
assert not any('Syntax' in issue for issue in issues)
assert not any('Validation' in issue for issue in issues) def test_validate_recipe_semantic_invalid_syntax(self):
"""Test semantic validation detects invalid syntax."""
content = "validcommand\ninvalidcommand without proper format\n%packages\n%end"
issues = self.generator.validate_recipe_semantic(content, '43')
assert len(issues) > 0
def test_validate_recipe_semantic_empty(self): def test_validate_recipe_semantic_empty(self):
"""Test semantic validation with empty content.""" """Test semantic validation with empty content."""
content = "" content = ""
issues = self.generator.validate_recipe_semantic(content, '43') issues = self.generator.validate_recipe_semantic(content, '43')
# Empty content should fail parsing but not crash assert issues == []
assert len(issues) >= 0 # At least info about empty content
def test_validate_recipe_semantic_invalid_syntax(self):
"""Test semantic validation detects invalid syntax."""
content = """text
invalidcmd --option=value
%packages
@base-graphical
%end
"""
issues = self.generator.validate_recipe_semantic(content, '43')
# Should detect invalid command
has_syntax_error = any('Syntax' in issue or 'invalidcmd' in issue.lower()
for issue in issues)
# Or pykickstart warning if not available
has_warning = any('Warning' in issue or 'pykickstart' in issue.lower()
for issue in issues)
assert has_syntax_error or has_warning
def test_validate_recipe_full_validation(self):
"""Test full validation combines file and semantic checks."""
content = self.generator.generate_recipe('install', '43',
desktop='gnome',
storage='standard',
security='secure')
issues = self.generator.validate_recipe(content)
# Check ingredient existence
assert len([i for i in issues if 'Missing' in i]) == 0, \
f"Found missing ingredients: {issues}"
def test_check_deprecated_removed_command(self): def test_check_deprecated_removed_command(self):
"""Test detection of removed deprecated command.""" """Test detection of removed commands."""
content = """text issues = self.generator._check_deprecated_commands("authconfig")
authconfig --enableshadow assert any('removed' in issue.lower() for issue in issues)
%packages
@core
%end
"""
issues = self.generator.validate_recipe_semantic(content, '43')
# Should detect authconfig as removed
has_removed = any('ERROR' in i and 'authconfig' in i for i in issues)
assert has_removed
def test_check_deprecated_warning_command(self): def test_check_deprecated_warning_command(self):
"""Test detection of deprecated command as warning.""" """Test detection of deprecated commands."""
content = """text issues = self.generator._check_deprecated_commands("keyboard")
keyboard --evgrd assert any('deprecated' in issue.lower() for issue in issues)
%packages
@core
%end
"""
issues = self.generator.validate_recipe_semantic(content, '43')
# Should detect keyboard as deprecated (warning)
has_warning = any('Warning' in i and 'keyboard' in i for i in issues)
assert has_warning
def test_extract_version_with_dash(self):
"""Test version extraction from filename with dash."""
filename = 'test-43.cfg'
version = self.generator.extract_version('', filename)
assert version == '43'
def test_extract_version_with_underscore(self):
"""Test version extraction from filename with underscore."""
filename = 'test_43.cfg'
version = self.generator.extract_version('', filename)
assert version == '43'
def test_extract_version_from_content(self):
"""Test version extraction from content."""
content = "%ksappend fragments/platform/generic-43/repo/fedora-mirrors.ks"
version = self.generator.extract_version(content, 'test.cfg')
assert version == '43'