refactor: Move recipe generator to cook/ directory and fix flattening bugs
- Move recipe-generator/ to cook/ for cleaner structure - Fix ksflatten-relative path conversion to handle all %include paths - Fix validation exit code to only fail on actual errors - All recipes now generate and flatten successfully via make all
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
.PHONY: help generate-recipes validate-recipes clean clean-dishes install-deps flatten-dishes all
|
||||
|
||||
help:
|
||||
@echo "Phyllome OS Recipe Generator"
|
||||
@echo ""
|
||||
@echo "Available targets:"
|
||||
@echo " generate-recipes - Generate all recipes from manifest"
|
||||
@echo " validate-recipes - Validate existing recipes"
|
||||
@echo " all - Generate, validate, and flatten all recipes (default)"
|
||||
@echo " flatten-dishes - Flatten all recipes to dishes"
|
||||
@echo " clean-dishes - Remove flattened dishes"
|
||||
@echo " clean - Remove generated recipes"
|
||||
@echo " install-deps - Install Python dependencies"
|
||||
|
||||
all: generate-recipes validate-recipes flatten-dishes
|
||||
@echo "✓ All recipes generated, validated, and flattened to dishes"
|
||||
|
||||
install-deps:
|
||||
pip install -r requirements.txt
|
||||
|
||||
generate-recipes:
|
||||
rm -f recipes/*.cfg
|
||||
python3 generate_recipe.py \
|
||||
--manifest recipes_manifest.yaml \
|
||||
--output-dir recipes/
|
||||
|
||||
validate-recipes:
|
||||
python3 generate_recipe.py \
|
||||
--validate recipes/*.cfg
|
||||
|
||||
flatten-dishes:
|
||||
@echo "Flattening recipes to dishes..."
|
||||
@python bin/ksflatten-relative recipes dishes
|
||||
|
||||
clean-dishes:
|
||||
rm -f dishes/*.cfg
|
||||
@echo "✓ Flattened dishes removed. Run 'make flatten-dishes' to regenerate."
|
||||
|
||||
clean:
|
||||
rm -f recipes/*.cfg
|
||||
@echo "Generated recipes removed. Edit recipes_manifest.yaml and run 'make generate-recipes' to regenerate. Run 'make clean-dishes' to remove flattened dishes."
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,100 @@
|
||||
# __ ____ ____ _____
|
||||
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
|
||||
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
|
||||
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
|
||||
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
|
||||
# /_/ /____/
|
||||
|
||||
# The list of ingredients for composing Phyllome OS
|
||||
# Uncomment lines with "%include" to enable ingredient
|
||||
|
||||
# Installation method
|
||||
# Exactly one option has to be picked
|
||||
# %include ../ingredients/core.cfg # Text mode
|
||||
# %include ../ingredients/live-core.cfg # For live systems only
|
||||
# Documentation: https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#graphical-or-text-or-cmdline
|
||||
|
||||
# Storage configuration
|
||||
# Exactly one option has to be picked
|
||||
# WARNING !!! Will erase local disks!
|
||||
# %include ../ingredients/core-storage.cfg # Basic ext4 partition layout for UEFI-based systems
|
||||
# %include ../ingredients/live-core-storage.cfg # For live systems only
|
||||
# Documentation: https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#part-or-partition
|
||||
|
||||
# Booloader configuration
|
||||
# Exactly one option has to be picked
|
||||
# %include ../ingredients/core-bootloader-grub.cfg # GNU GRUB bootloader
|
||||
# %include ../ingredients/core-bootloader-systemd-boot.cfg # systemd-boot, an EFI-only bootloader
|
||||
# %include ../ingredients/live-core-bootloader-grub.cfg # GNU GRUB for live systems
|
||||
# Documentation: https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#bootloader
|
||||
|
||||
# System locale configuration
|
||||
# Exactly one option has to be picked
|
||||
# %include ../ingredients/core-locale.cfg # System locale sets to Swiss French as keyboard layout and English as language. Timezone is also set. Can be changed during by end-user during first boot
|
||||
|
||||
# Security mode
|
||||
# Exactly one option has to be picked
|
||||
# %include ../ingredients/core-security-off.cfg # Sets security to low
|
||||
# %include ../ingredients/core-security-on.cfg # Sets security to medium
|
||||
|
||||
# System services
|
||||
# Optional
|
||||
# %include ../ingredients/core-services.cfg # List of systemd services that are explicitly enabled
|
||||
|
||||
# Network configuration
|
||||
# %include ../ingredients/core-network.cfg # Network configuration
|
||||
# Documentation: https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#id123
|
||||
|
||||
# Repositories
|
||||
# Exactly one option has to be picked
|
||||
# %include ../ingredients/core-fedora-repo.cfg # Official repositories for Fedora
|
||||
# %include ../ingredients/core-fedora-repo-rawhide.cfg # Official repositories for Fedora Rawhide
|
||||
|
||||
# Packages
|
||||
# Exactly one option has to be picked
|
||||
# %include ../ingredients/core-packages-mandatory.cfg # Mandatory packages
|
||||
# %include ../ingredients/core-packages-mandatory-trimming-attempt.cfg # Trimming attempt for the mandatory packages
|
||||
# Mandatory packages for live editions
|
||||
# %include ../ingredients/live-core-mandatory-packages.cfg # For live systems
|
||||
# Other optional packages
|
||||
# Recommended but not strictly required
|
||||
# %include ../ingredients/core-packages-default.cfg # Recommended extra packages
|
||||
# %include ../ingredients/core-packages-hardware-support.cfg # Extended hardware support. Recommended for non-virtual systems
|
||||
# Documentation: https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#chapter-9-package-selection
|
||||
|
||||
# Pre- and post-installation sections
|
||||
# Optional
|
||||
# All options can be picked
|
||||
# %include ../ingredients/pre.cfg # Triggered just after the kickstart file has been parsed
|
||||
# Documentation: https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#chapter-4-pre-installation-script
|
||||
# %include ../ingredients/pre-install.cfg # Script triggered just after the system storage has been set up
|
||||
# Documentation: https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#chapter-5-pre-install-script
|
||||
# %include ../ingredients/core-post-nochroot.cfg # Triggered after the installation no chroot
|
||||
# Documentation: https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#chapter-6-post-installation-script
|
||||
# %include ../ingredients/core-post.cfg # Triggered after the installation
|
||||
# Documentation: https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#chapter-6-post-installation-script
|
||||
# Two options have to be picked, for live systems only
|
||||
# %include ../ingredients/live-core-post.cfg # Post configuration script for a live system only
|
||||
# %include ../ingredients/live-core-post-live-session.cfg # Live session script
|
||||
|
||||
# OEM setup
|
||||
# Exactly one option has to be picked
|
||||
# %include ../ingredients/core-desktop-initial-setup.cfg # Ensures that GNOME initial setup will launch on the first system start-up
|
||||
# %include ../ingredients/core-server-initial-setup.cfg # For headless systems
|
||||
|
||||
# A GNOME Shell-based desktop environment
|
||||
# Optional
|
||||
# %include ../ingredients/base-desktop-gnome.cfg # A GNOME Shell-based desktop environment
|
||||
# Documentation: https://fedoraproject.org/wiki/InitialSetup
|
||||
|
||||
# Virtualization-related packages
|
||||
# Optional
|
||||
# %include ../ingredients/base-desktop-virtual-machine-manager.cfg # Virtual Machine Manager
|
||||
# %include ../ingredients/base-hypervisor.cfg # Generic building block to build a virtualization host
|
||||
|
||||
# Virtualization-related options
|
||||
# Optional
|
||||
# %include ../ingredients/base-hypervisor-amdcpu.cfg # Virtualization configuration for AMD (tm) CPUs
|
||||
# %include ../ingredients/base-hypervisor-intelcpu.cfg # Virtualization configuration for Intel (tm) CPUs
|
||||
# %include ../ingredients/base-hypervisor-intelgpu.cfg # Virtualization configuration for Intel (tm) GPUs from 4th to the 9th generation (compatible with vfio-mdev)
|
||||
# %include ../ingredients/base-guest-agents.cfg # Guest agents
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
#!/bin/bash
|
||||
exec "$(dirname "$0")/../recipe-generator/generate_recipe.py" "$@"
|
||||
Executable
+90
@@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Flatten kickstart recipes with relative %include paths.
|
||||
Converts %include ingredients/... to %include ../ingredients/... relative to recipes/ location.
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
import tempfile
|
||||
|
||||
|
||||
def flatten_recipe(recipe_path, output_path):
|
||||
"""Flatten a recipe file, converting relative paths."""
|
||||
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
# Read the recipe
|
||||
with open(recipe_path, 'r') as f:
|
||||
content = f.read()
|
||||
|
||||
# Convert %include paths to relative (from recipes/ perspective)
|
||||
lines = []
|
||||
for line in content.split('\n'):
|
||||
if line.startswith('%include '):
|
||||
# Get the fragment path from %include path
|
||||
parts = line.split(None, 1)
|
||||
if len(parts) >= 2:
|
||||
fragment_path = parts[1]
|
||||
# Make it relative to recipes/
|
||||
# From recipes/, ingredients/ is at ../ingredients/
|
||||
if fragment_path.startswith('ingredients/'):
|
||||
relative_path = '../' + fragment_path
|
||||
else:
|
||||
relative_path = '../ingredients/' + fragment_path
|
||||
lines.append('%include ' + relative_path)
|
||||
else:
|
||||
lines.append(line)
|
||||
else:
|
||||
lines.append(line)
|
||||
|
||||
# Write to temp file in recipes directory
|
||||
temp_fd, temp_path = tempfile.mkstemp(suffix='.ks', dir=os.path.dirname(recipe_path))
|
||||
|
||||
try:
|
||||
os.write(temp_fd, '\n'.join(lines).encode('utf-8'))
|
||||
os.close(temp_fd)
|
||||
|
||||
# Call ksflatten
|
||||
cmd = ['ksflatten', '-c', temp_path, '-o', output_path]
|
||||
result = subprocess.run(cmd, capture_output=True, text=True)
|
||||
|
||||
if result.returncode != 0:
|
||||
print(f"Error flattening {os.path.basename(recipe_path)}:", file=sys.stderr)
|
||||
print(result.stderr, file=sys.stderr)
|
||||
return False
|
||||
return True
|
||||
finally:
|
||||
os.unlink(temp_path)
|
||||
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 3:
|
||||
print("Usage: ksflatten-relative RECIPE_DIR DISH_DIR", file=sys.stderr)
|
||||
print("Example: ksflatten-relative recipes dishes", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
recipe_dir = sys.argv[1]
|
||||
dish_dir = sys.argv[2]
|
||||
|
||||
if not os.path.isdir(recipe_dir):
|
||||
print(f"Error: {recipe_dir} is not a directory", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
os.makedirs(dish_dir, exist_ok=True)
|
||||
|
||||
recipes = [f for f in os.listdir(recipe_dir) if f.endswith('.cfg')]
|
||||
|
||||
for recipe_name in sorted(recipes):
|
||||
recipe_path = os.path.join(recipe_dir, recipe_name)
|
||||
dish_path = os.path.join(dish_dir, recipe_name)
|
||||
|
||||
print(f" Processing: {recipe_name}")
|
||||
if not flatten_recipe(recipe_path, dish_path):
|
||||
sys.exit(1)
|
||||
|
||||
print("✓ All recipes flattened to dishes")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
+510
@@ -0,0 +1,510 @@
|
||||
"""CLI entry point for recipe generator.
|
||||
|
||||
This module handles the command-line interface for the recipe generator. It:
|
||||
1. Parses command-line arguments and options
|
||||
2. Selects the appropriate mode (validation, batch generation, single generation)
|
||||
3. Sets up generators and validators with proper configuration
|
||||
4. Orchestrates the workflow based on user input
|
||||
5. Handles output and exit codes for integration with CI systems
|
||||
|
||||
The CLI supports three main modes:
|
||||
- Single generation: Generate one recipe with specific options
|
||||
- Batch generation: Generate many recipes from a manifest file
|
||||
- Validation mode: Check existing recipes for errors
|
||||
|
||||
Exit codes:
|
||||
- 0: Success
|
||||
- 1: Validation errors or generation failed
|
||||
- 2: Invalid arguments or missing files
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from typing import List
|
||||
|
||||
import yaml
|
||||
|
||||
from manifest import ManifestProcessor
|
||||
from recipe_generator import RecipeGenerator
|
||||
from validators import (
|
||||
ContentValidator,
|
||||
SemanticValidator,
|
||||
TemplateValidator,
|
||||
validate_manifest,
|
||||
)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
"""Main entry point for recipe generator CLI.
|
||||
|
||||
This is the primary function that gets called when running the script.
|
||||
It handles argument parsing, mode selection, and workflow orchestration.
|
||||
|
||||
Command-line arguments:
|
||||
--ingredients (-i): Directory containing ingredient fragments (default: parent/ingredients)
|
||||
--templates (-t): Path to templates YAML file (default: ./recipe_templates.yaml)
|
||||
|
||||
Batch mode flags:
|
||||
--manifest (-m): Path to manifest YAML for batch generation
|
||||
--output-dir (-d): Output directory for generated recipes (default: ./recipes)
|
||||
--dry-run (-n): Show what would be generated without writing files
|
||||
|
||||
Single generation flags:
|
||||
--type (-T): Recipe type to generate (e.g., virtual-desktop)
|
||||
--output (-o): Output file path for single generation
|
||||
|
||||
Recipe parameters:
|
||||
--version (-v): Fedora version (43 or rawhide, default: 43)
|
||||
--desktop: Desktop environment (gnome or labwc, default: gnome)
|
||||
--storage: Storage type (standard or encrypted, default: standard)
|
||||
--security: Security mode (secure or devel, default: secure)
|
||||
--cpu: CPU optimization (generic, amdcpu, or intelcpu)
|
||||
--gpu: GPU passthrough (none or intelgpu, default: none)
|
||||
|
||||
Validation mode:
|
||||
--validate (-V): Validate existing recipe files
|
||||
--strict: Treat warnings as errors (CI mode)
|
||||
|
||||
Modes:
|
||||
1. Validation mode (--validate): Check recipe files without generating new ones
|
||||
2. Batch generation mode (--manifest): Generate many recipes from a manifest
|
||||
3. Single generation mode (--type): Generate one recipe with specified options
|
||||
4. Help mode: No arguments or --help shows usage information
|
||||
"""
|
||||
# Set up argument parser with descriptive help text
|
||||
parser = argparse.ArgumentParser(
|
||||
description='Generate Phyllome OS kickstart recipes from templates',
|
||||
formatter_class=argparse.RawDescriptionHelpFormatter
|
||||
)
|
||||
|
||||
# Calculate paths relative to this script's location
|
||||
# SCRIPTS_DIR points to recipe-generator/
|
||||
# PROJECT_ROOT points to phyllomeos/
|
||||
SCRIPTS_DIR = Path(__file__).resolve().parent # noqa: N806 - Constant
|
||||
PROJECT_ROOT = SCRIPTS_DIR.parent # noqa: N806 - Constant
|
||||
|
||||
parser.add_argument('--ingredients', '-i',
|
||||
type=Path, default=PROJECT_ROOT / 'ingredients',
|
||||
help='Ingredients directory (default: parent/ingredients)')
|
||||
parser.add_argument('--templates', '-t',
|
||||
type=Path, default=SCRIPTS_DIR / 'recipe_templates.yaml',
|
||||
help='Templates YAML file (default: ./recipe_templates.yaml)')
|
||||
|
||||
# Batch mode options
|
||||
parser.add_argument('--manifest', '-m',
|
||||
type=Path, help='Manifest YAML for batch generation')
|
||||
parser.add_argument('--output-dir', '-d',
|
||||
type=Path, default=SCRIPTS_DIR / 'recipes',
|
||||
help='Output directory (batch generation, default: ./recipes)')
|
||||
parser.add_argument('--dry-run', '-n',
|
||||
action='store_true',
|
||||
help='Show what would be generated without writing files')
|
||||
|
||||
# Single generation mode options
|
||||
parser.add_argument('--type', '-T',
|
||||
help='Recipe type (e.g., virtual-desktop)')
|
||||
parser.add_argument('--output', '-o',
|
||||
type=Path, help='Output file (single generation)')
|
||||
|
||||
# Recipe customization parameters (default to safe/common values)
|
||||
parser.add_argument('--version', '-v',
|
||||
choices=['43', 'rawhide'], default='43',
|
||||
help='Fedora version (default: 43)')
|
||||
|
||||
parser.add_argument('--desktop',
|
||||
choices=['gnome', 'labwc'],
|
||||
default='gnome',
|
||||
help='Desktop environment (default: gnome)')
|
||||
parser.add_argument('--storage',
|
||||
choices=['standard', 'encrypted'],
|
||||
help='Storage type (default: standard)')
|
||||
parser.add_argument('--security',
|
||||
choices=['secure', 'devel'],
|
||||
help='Security mode (default: secure)')
|
||||
parser.add_argument('--cpu',
|
||||
choices=['generic', 'amdcpu', 'intelcpu'],
|
||||
help='CPU optimization')
|
||||
parser.add_argument('--gpu',
|
||||
choices=['none', 'intelgpu'],
|
||||
default='none',
|
||||
help='GPU passthrough (default: none)')
|
||||
|
||||
# Validation mode
|
||||
parser.add_argument('--validate', '-V',
|
||||
nargs='+',
|
||||
help='Validate recipe files')
|
||||
|
||||
# Strict mode for CI
|
||||
parser.add_argument('--strict',
|
||||
action='store_true',
|
||||
help='Treat warnings as errors (CI mode)')
|
||||
|
||||
# Parse arguments from command line
|
||||
args = parser.parse_args()
|
||||
|
||||
# Initialize the recipe generator with loaded templates
|
||||
generator = RecipeGenerator(args.templates)
|
||||
|
||||
# Initialize validators - they'll be used throughout the workflow
|
||||
template_validator = TemplateValidator(generator.project_root)
|
||||
content_validator = ContentValidator(generator.project_root)
|
||||
semantic_validator = SemanticValidator()
|
||||
|
||||
# === VALIDATION MODE ===
|
||||
# If --validate is specified, skip generation and just check existing recipes
|
||||
if args.validate:
|
||||
all_issues = validate_recipes(args.validate, content_validator, semantic_validator, args.strict)
|
||||
handle_validation_results(all_issues, args.strict)
|
||||
return
|
||||
|
||||
# === BATCH GENERATION MODE ===
|
||||
# If --manifest is specified, generate many recipes from a manifest file
|
||||
if args.manifest:
|
||||
generate_from_manifest(args, generator)
|
||||
return
|
||||
|
||||
# === SINGLE GENERATION MODE ===
|
||||
# If --type is specified, generate one recipe with the given options
|
||||
if args.type:
|
||||
generate_single(args, generator)
|
||||
return
|
||||
|
||||
# === NO MODE SPECIFIED ===
|
||||
# Show help and exit with error
|
||||
parser.print_help()
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def validate_recipes(recipe_paths: List[str], content_validator: ContentValidator,
|
||||
semantic_validator: SemanticValidator, strict: bool) -> List:
|
||||
"""Validate multiple recipes from file paths.
|
||||
|
||||
This function iterates through a list of recipe file paths, validates each one
|
||||
for both content issues (duplicates, missing ingredients) and semantic issues
|
||||
(kickstart syntax errors).
|
||||
|
||||
The validation process for each file:
|
||||
1. Read the file content
|
||||
2. Run ContentValidator to check ingredient existence and duplicates
|
||||
3. Try to extract the Fedora version from content or filename
|
||||
4. Run SemanticValidator (pykickstart parser) to check kickstart syntax
|
||||
5. Collect all issues found
|
||||
|
||||
Args:
|
||||
recipe_paths: List of file paths to validate
|
||||
content_validator: ContentValidator instance for ingredient checks
|
||||
semantic_validator: SemanticValidator instance for kickstart parsing
|
||||
strict: If True, treat warnings as errors (exit with 1)
|
||||
|
||||
Returns:
|
||||
List of (path, issues) tuples for files that have issues
|
||||
Example: [('recipes/gnome.cfg', ['ERROR: Missing ingredient', 'Warning: ...'])]
|
||||
"""
|
||||
all_issues = []
|
||||
for recipe_path in recipe_paths:
|
||||
try:
|
||||
# Validate content - check for duplicates and missing ingredients
|
||||
content = Path(recipe_path).read_text(encoding='utf-8')
|
||||
issues = content_validator.validate(content)
|
||||
|
||||
# Extract version from content or filename for semantic validation
|
||||
filename = Path(recipe_path).stem
|
||||
version = extract_version(content, filename)
|
||||
if version:
|
||||
semantic_issues = semantic_validator.validate(content, version)
|
||||
issues.extend(semantic_issues)
|
||||
else:
|
||||
# Could not determine version, can't do semantic validation
|
||||
issues.append("Warning: Could not determine version, "
|
||||
"skipping semantic validation")
|
||||
|
||||
if issues:
|
||||
# Only track files that have issues
|
||||
all_issues.append((recipe_path, issues))
|
||||
except FileNotFoundError:
|
||||
print(f"Error: Recipe not found: {recipe_path}", file=sys.stderr)
|
||||
sys.exit(2)
|
||||
|
||||
return all_issues
|
||||
|
||||
|
||||
def extract_version(content: str, filename: str) -> str | None:
|
||||
"""Extract Fedora version from recipe content or filename.
|
||||
|
||||
This function tries multiple heuristics to determine which Fedora version
|
||||
a recipe is targeting. It checks the filename first, then falls back to
|
||||
searching the content for version-specific patterns.
|
||||
|
||||
The method checks for:
|
||||
1. Version in filename: patterns like _43_, -rawhide.cfg, _43.cfg
|
||||
2. Version in content: repository paths like 'core-fedora-repo-43'
|
||||
|
||||
This is useful for batch operations where the version might not be
|
||||
explicitly stated but can be inferred from naming conventions or content.
|
||||
|
||||
Args:
|
||||
content: The content of the recipe file (as a string)
|
||||
filename: Just the filename without path
|
||||
|
||||
Returns:
|
||||
Version string ('43' or 'rawhide') if found, None otherwise
|
||||
"""
|
||||
import re
|
||||
|
||||
# Try to extract from filename first using regex
|
||||
# Matches patterns like _43, -43, _rawhide, -rawhide, etc.
|
||||
# The lookahead for .cfg|.yaml|$ ensures we don't match 43 in '431'
|
||||
filename_match = re.search(r'(?:_|-)(43|rawhide)(?:_|-|.cfg|.yaml|$)', filename)
|
||||
if filename_match:
|
||||
return filename_match.group(1)
|
||||
|
||||
# Fall back to content inspection
|
||||
# Check for Fedora repository paths that contain version info
|
||||
for line in content.split('\n'):
|
||||
if 'core-fedora-repo-43' in line:
|
||||
return '43'
|
||||
elif 'core-fedora-repo-rawhide' in line:
|
||||
return 'rawhide'
|
||||
if 'generic-43/repo' in line:
|
||||
return '43'
|
||||
elif 'generic-rawhide/repo' in line:
|
||||
return 'rawhide'
|
||||
|
||||
return None
|
||||
|
||||
|
||||
def handle_validation_results(all_issues: List, strict: bool) -> None:
|
||||
"""Handle validation results and exit with appropriate code.
|
||||
|
||||
This function formats and displays validation results to the user,
|
||||
then exits with the appropriate code based on the results and strict mode.
|
||||
|
||||
The output format:
|
||||
- Group issues by file
|
||||
- Show errors first (separate from warnings)
|
||||
- Show summary totals at the end
|
||||
|
||||
Exit codes:
|
||||
- 0: All files passed validation
|
||||
- 1: Any issues found (or warnings in strict mode)
|
||||
- 2: Error during processing
|
||||
|
||||
Args:
|
||||
all_issues: List of (path, issues) tuples from validate_recipes()
|
||||
strict: If True, warnings are treated as errors
|
||||
"""
|
||||
if all_issues:
|
||||
# Display issues for each file that has problems
|
||||
for path, issues in all_issues:
|
||||
print(f"\n{path}:", file=sys.stderr)
|
||||
|
||||
# Count errors and warnings separately
|
||||
error_count = sum(1 for i in issues if 'ERROR' in i or 'error' in i.lower())
|
||||
warning_count = sum(1 for i in issues if 'Warning' in i or 'warning' in i.lower())
|
||||
|
||||
# Display errors (if any)
|
||||
if error_count > 0:
|
||||
for issue in issues:
|
||||
if 'ERROR' in issue or 'error' in issue.lower():
|
||||
print(f" {issue}", file=sys.stderr)
|
||||
|
||||
# Display warnings (if any)
|
||||
if warning_count > 0:
|
||||
for issue in issues:
|
||||
if 'Warning' in issue or 'warning' in issue.lower():
|
||||
print(f" {issue}", file=sys.stderr)
|
||||
|
||||
# Handle case where no issues match expected patterns
|
||||
if error_count == 0 and warning_count == 0:
|
||||
print(f" No issues found (file exists)", file=sys.stderr)
|
||||
|
||||
# Print summary
|
||||
print(f"\nSummary:", file=sys.stderr)
|
||||
print(f" - {len(all_issues)} recipe(s) checked", file=sys.stderr)
|
||||
|
||||
# Calculate totals across all files
|
||||
total_errors = sum(len([i for i in issues if 'ERROR' in i or 'error' in i.lower()])
|
||||
for _, issues in all_issues)
|
||||
total_warnings = sum(len([i for i in issues if 'Warning' in i or 'warning' in i.lower()])
|
||||
for _, issues in all_issues)
|
||||
print(f" - {total_errors} error(s), {total_warnings} warning(s)", file=sys.stderr)
|
||||
|
||||
# In strict mode, warnings are treated as errors
|
||||
if strict and total_warnings > 0:
|
||||
print("\nStrict mode: Warnings treated as errors", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
# Exit with error if any issues found
|
||||
if total_errors > 0:
|
||||
sys.exit(1)
|
||||
else:
|
||||
# All recipes validated successfully
|
||||
print("All recipes validated successfully")
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
def generate_from_manifest(args: argparse.Namespace, generator: RecipeGenerator) -> None:
|
||||
"""Generate recipes in batch from a manifest file.
|
||||
|
||||
This function handles batch generation mode. It:
|
||||
1. Loads and parses the manifest YAML file
|
||||
2. Validates the manifest structure
|
||||
3. Iterates through each recipe configuration in the manifest
|
||||
4. Expands any variants with list values (cartesian product)
|
||||
5. Generates each variant and writes to output files
|
||||
6. Optionally runs validation or dry-run checks
|
||||
|
||||
The manifest YAML format:
|
||||
recipes:
|
||||
- name: virtual-desktop
|
||||
variants:
|
||||
- version: 43
|
||||
desktop: gnome
|
||||
storage: encrypted
|
||||
- version: ["43", "rawhide"]
|
||||
security: secure
|
||||
|
||||
The list-valued variants (like version) get expanded into all combinations.
|
||||
|
||||
Args:
|
||||
args: Parsed command-line arguments containing paths and settings
|
||||
generator: Pre-configured RecipeGenerator instance
|
||||
"""
|
||||
manifest_path = args.manifest
|
||||
try:
|
||||
# Load manifest YAML file
|
||||
with open(manifest_path, encoding='utf-8') as f:
|
||||
manifest = yaml.safe_load(f)
|
||||
except FileNotFoundError:
|
||||
print(f"Error: Manifest file not found: {manifest_path}", file=sys.stderr)
|
||||
sys.exit(2)
|
||||
except yaml.YAMLError as e:
|
||||
print(f"Error: Invalid YAML in manifest: {e}", file=sys.stderr)
|
||||
sys.exit(2)
|
||||
|
||||
# Validate manifest structure before processing
|
||||
manifest_processor = ManifestProcessor(generator.project_root)
|
||||
errors = manifest_processor.validate(manifest)
|
||||
if errors:
|
||||
print(f"Error: Invalid manifest:", file=sys.stderr)
|
||||
for error in errors:
|
||||
print(f" - {error}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
# Generate all recipes from the manifest
|
||||
for recipe_config in manifest.get('recipes', []):
|
||||
recipe_type = recipe_config.get('recipe_type', recipe_config['name'])
|
||||
if recipe_type not in generator.templates:
|
||||
print(f"Error: Unknown recipe type in manifest: {recipe_type}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
# Get variants for this recipe type
|
||||
variants = recipe_config.get('variants', [])
|
||||
|
||||
# Expand list-valued variants (e.g., version: ["43", "rawhide"])
|
||||
variants = generator.expand_variants(variants)
|
||||
|
||||
for variant in variants:
|
||||
# Extract version and other modifiers from variant
|
||||
version = variant['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']}
|
||||
# name kept for manifest organization only, not passed to generator
|
||||
|
||||
# Generate the recipe content
|
||||
content = generator.generate(recipe_type, version, **modifiers)
|
||||
|
||||
# Optional validation on generated content
|
||||
if args.validate and not args.dry_run:
|
||||
issues = content_validator.validate(content)
|
||||
semantic_issues = semantic_validator.validate(content, version)
|
||||
all_issues = issues + semantic_issues
|
||||
if all_issues:
|
||||
print(f"Validation issues for {recipe_type} {version}:", file=sys.stderr)
|
||||
for issue in issues:
|
||||
print(f" - {issue}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
# Generate output filename based on recipe parameters
|
||||
filename = generator.generate_filename(recipe_type, version, **modifiers)
|
||||
output_path = args.output_dir / filename
|
||||
|
||||
# Handle dry-run mode
|
||||
if args.dry_run:
|
||||
print(f"Would generate: {output_path}")
|
||||
else:
|
||||
# Actually write the file
|
||||
print(f"Generating: {output_path}")
|
||||
with open(output_path, 'w', encoding='utf-8') as f:
|
||||
f.write(content)
|
||||
|
||||
|
||||
def generate_single(args: argparse.Namespace, generator: RecipeGenerator) -> None:
|
||||
"""Generate a single recipe with the specified parameters.
|
||||
|
||||
This function handles single recipe generation mode. It:
|
||||
1. Constructs a modifiers dictionary from command-line arguments
|
||||
2. Only includes non-default values (e.g., only adds 'encrypted' if storage is encrypted)
|
||||
3. Generates the recipe content
|
||||
4. Optionally validates the content
|
||||
5. Outputs to a file or stdout based on arguments
|
||||
|
||||
Command-line parameter to modifier mapping:
|
||||
--type -> recipe_type (required)
|
||||
--version -> version (43 or rawhide)
|
||||
--desktop -> desktop (gnome or labwc)
|
||||
--storage -> storage (standard or encrypted)
|
||||
--security -> security (secure or devel)
|
||||
--cpu -> cpu (generic, amdcpu, or intelcpu)
|
||||
--gpu -> gpu (none or intelgpu)
|
||||
|
||||
Args:
|
||||
args: Parsed command-line arguments
|
||||
generator: Pre-configured RecipeGenerator instance
|
||||
"""
|
||||
# Build modifiers dictionary from command-line arguments
|
||||
# Only include non-default values to keep filenames clean
|
||||
modifiers = {
|
||||
|
||||
'desktop': args.desktop if args.desktop else None,
|
||||
'storage': args.storage if args.storage != 'standard' else None,
|
||||
'security': args.security if args.security != 'secure' else None,
|
||||
'cpu': args.cpu if args.cpu and args.cpu != 'generic' else None,
|
||||
'gpu': args.gpu if args.gpu and args.gpu != 'none' else None,
|
||||
}
|
||||
# Remove Nones from modifiers
|
||||
modifiers = {k: v for k, v in modifiers.items() if v is not None}
|
||||
|
||||
# Generate the recipe
|
||||
content = generator.generate(args.type, args.version, **modifiers)
|
||||
|
||||
# Optional validation
|
||||
if args.validate:
|
||||
content_validator = ContentValidator(generator.project_root)
|
||||
issues = content_validator.validate(content)
|
||||
semantic_validator = SemanticValidator()
|
||||
semantic_issues = semantic_validator.validate(content, args.version)
|
||||
all_issues = issues + semantic_issues
|
||||
if all_issues:
|
||||
print("Validation issues:", file=sys.stderr)
|
||||
for issue in issues:
|
||||
print(f" - {issue}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
else:
|
||||
print("Validation passed")
|
||||
|
||||
# Output the recipe
|
||||
if args.output:
|
||||
# Write to file
|
||||
if args.dry_run:
|
||||
print(f"Would write to: {args.output}")
|
||||
else:
|
||||
with open(args.output, 'w', encoding='utf-8') as f:
|
||||
f.write(content)
|
||||
print(f"Generated: {args.output}")
|
||||
else:
|
||||
# Print to stdout
|
||||
print(content)
|
||||
@@ -0,0 +1,141 @@
|
||||
# Generated by pykickstart v3.69
|
||||
#version=DEVEL
|
||||
# Use text mode install
|
||||
text
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Run the Setup Agent on first boot
|
||||
firstboot --reconfig
|
||||
# Keyboard layouts
|
||||
keyboard --xlayouts='ch (fr)'
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64
|
||||
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64
|
||||
#Root password
|
||||
rootpw --lock
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# System services
|
||||
services --enabled="NetworkManager,systemd-resolved"
|
||||
# System timezone
|
||||
timezone Europe/Zurich --utc
|
||||
# Use network installation
|
||||
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64"
|
||||
# X Window System configuration information
|
||||
xconfig --defaultdesktop=GNOME --startxonboot
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --timeout=1
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all --initlabel
|
||||
# Disk partitioning information
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --mkfsoptions="-O encrypt,fast_commit"
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --encrypted --mkfsoptions="-O encrypt,fast_commit"
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/gnome-desktop-post.log
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.media-handling.gschema.override<< EOF
|
||||
[org.gnome.desktop.media-handling]
|
||||
automount-open=false
|
||||
autorun-never=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.Terminal.gschema.override<< EOF
|
||||
[org.gnome.Terminal.Legacy.Profile]
|
||||
font='DejaVu Sans Mono 12'
|
||||
use-system-font=false
|
||||
auditable-bell=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.override<< EOF
|
||||
[org.gnome.desktop.wm.preferences]
|
||||
button-layout=':minimize,maximize,close'
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.a11y.gschema.override<< EOF
|
||||
[org.gnome.desktop.a11y]
|
||||
always-show-universal-access-status=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.override<< EOF
|
||||
[org.gnome.desktop.interface]
|
||||
enable-animations=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.privacy.gschema.override<< EOF
|
||||
[org.gnome.desktop.privacy]
|
||||
remove-old-temp-files=true
|
||||
remember-recent-file=false
|
||||
remember-app-usage=false
|
||||
disable-camera=true
|
||||
disable-microphone=true
|
||||
disable-sound-output=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.search-providers.gschema.override<< EOF
|
||||
[org.gnome.desktop.search-providers]
|
||||
disable-external=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.notifications.gschema.override<< EOF
|
||||
[org.gnome.desktop.notifications.application]
|
||||
enable-sound-alerts=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.sound.gschema.override<< EOF
|
||||
[org.gnome.desktop.sound]
|
||||
event-sounds=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.thumbnailers.gschema.override<< EOF
|
||||
[org.gnome.desktop.thumbnailers]
|
||||
disable-all=true
|
||||
EOF
|
||||
|
||||
glib-compile-schemas /mnt/sysimage/usr/share/glib-2.0/schemas/
|
||||
|
||||
%end
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
@base-graphical
|
||||
@core
|
||||
bash-color-prompt
|
||||
curl
|
||||
dconf
|
||||
dejavu-sans-mono-fonts
|
||||
fedora-remix-logos
|
||||
firefox
|
||||
gdm
|
||||
generic-logos
|
||||
generic-release
|
||||
generic-release-common
|
||||
generic-release-notes
|
||||
gnome-backgrounds.noarch
|
||||
gnome-control-center
|
||||
gnome-session-wayland-session
|
||||
gnome-shell
|
||||
gnome-terminal
|
||||
gvfs-fuse
|
||||
initial-setup
|
||||
libusb
|
||||
mozilla-ublock-origin.noarch
|
||||
nano
|
||||
nautilus
|
||||
pciutils
|
||||
pipewire-alsa
|
||||
pipewire-jack-audio-connection-kit
|
||||
pipewire-pulseaudio
|
||||
usbutils
|
||||
wget
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,142 @@
|
||||
# Generated by pykickstart v3.69
|
||||
#version=DEVEL
|
||||
# Use text mode install
|
||||
text
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Run the Setup Agent on first boot
|
||||
firstboot --reconfig
|
||||
# Keyboard layouts
|
||||
keyboard --xlayouts='ch (fr)'
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64
|
||||
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64
|
||||
repo --name="rawhide" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64
|
||||
#Root password
|
||||
rootpw --lock
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# System services
|
||||
services --enabled="NetworkManager,systemd-resolved"
|
||||
# System timezone
|
||||
timezone Europe/Zurich --utc
|
||||
# Use network installation
|
||||
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64"
|
||||
# X Window System configuration information
|
||||
xconfig --defaultdesktop=GNOME --startxonboot
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --timeout=1
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all --initlabel
|
||||
# Disk partitioning information
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --mkfsoptions="-O encrypt,fast_commit"
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --encrypted --mkfsoptions="-O encrypt,fast_commit"
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/gnome-desktop-post.log
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.media-handling.gschema.override<< EOF
|
||||
[org.gnome.desktop.media-handling]
|
||||
automount-open=false
|
||||
autorun-never=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.Terminal.gschema.override<< EOF
|
||||
[org.gnome.Terminal.Legacy.Profile]
|
||||
font='DejaVu Sans Mono 12'
|
||||
use-system-font=false
|
||||
auditable-bell=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.override<< EOF
|
||||
[org.gnome.desktop.wm.preferences]
|
||||
button-layout=':minimize,maximize,close'
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.a11y.gschema.override<< EOF
|
||||
[org.gnome.desktop.a11y]
|
||||
always-show-universal-access-status=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.override<< EOF
|
||||
[org.gnome.desktop.interface]
|
||||
enable-animations=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.privacy.gschema.override<< EOF
|
||||
[org.gnome.desktop.privacy]
|
||||
remove-old-temp-files=true
|
||||
remember-recent-file=false
|
||||
remember-app-usage=false
|
||||
disable-camera=true
|
||||
disable-microphone=true
|
||||
disable-sound-output=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.search-providers.gschema.override<< EOF
|
||||
[org.gnome.desktop.search-providers]
|
||||
disable-external=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.notifications.gschema.override<< EOF
|
||||
[org.gnome.desktop.notifications.application]
|
||||
enable-sound-alerts=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.sound.gschema.override<< EOF
|
||||
[org.gnome.desktop.sound]
|
||||
event-sounds=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.thumbnailers.gschema.override<< EOF
|
||||
[org.gnome.desktop.thumbnailers]
|
||||
disable-all=true
|
||||
EOF
|
||||
|
||||
glib-compile-schemas /mnt/sysimage/usr/share/glib-2.0/schemas/
|
||||
|
||||
%end
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
@base-graphical
|
||||
@core
|
||||
bash-color-prompt
|
||||
curl
|
||||
dconf
|
||||
dejavu-sans-mono-fonts
|
||||
fedora-remix-logos
|
||||
firefox
|
||||
gdm
|
||||
generic-logos
|
||||
generic-release
|
||||
generic-release-common
|
||||
generic-release-notes
|
||||
gnome-backgrounds.noarch
|
||||
gnome-control-center
|
||||
gnome-session-wayland-session
|
||||
gnome-shell
|
||||
gnome-terminal
|
||||
gvfs-fuse
|
||||
initial-setup
|
||||
libusb
|
||||
mozilla-ublock-origin.noarch
|
||||
nano
|
||||
nautilus
|
||||
pciutils
|
||||
pipewire-alsa
|
||||
pipewire-jack-audio-connection-kit
|
||||
pipewire-pulseaudio
|
||||
usbutils
|
||||
wget
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,141 @@
|
||||
# Generated by pykickstart v3.69
|
||||
#version=DEVEL
|
||||
# Use text mode install
|
||||
text
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Run the Setup Agent on first boot
|
||||
firstboot --reconfig
|
||||
# Keyboard layouts
|
||||
keyboard --xlayouts='ch (fr)'
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64
|
||||
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64
|
||||
#Root password
|
||||
rootpw --lock
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# System services
|
||||
services --enabled="NetworkManager,systemd-resolved"
|
||||
# System timezone
|
||||
timezone Europe/Zurich --utc
|
||||
# Use network installation
|
||||
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64"
|
||||
# X Window System configuration information
|
||||
xconfig --defaultdesktop=GNOME --startxonboot
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --timeout=1
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all --initlabel
|
||||
# Disk partitioning information
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --mkfsoptions="-O encrypt,fast_commit"
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --encrypted --mkfsoptions="-O encrypt,fast_commit"
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/gnome-desktop-post.log
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.media-handling.gschema.override<< EOF
|
||||
[org.gnome.desktop.media-handling]
|
||||
automount-open=false
|
||||
autorun-never=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.Terminal.gschema.override<< EOF
|
||||
[org.gnome.Terminal.Legacy.Profile]
|
||||
font='DejaVu Sans Mono 12'
|
||||
use-system-font=false
|
||||
auditable-bell=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.override<< EOF
|
||||
[org.gnome.desktop.wm.preferences]
|
||||
button-layout=':minimize,maximize,close'
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.a11y.gschema.override<< EOF
|
||||
[org.gnome.desktop.a11y]
|
||||
always-show-universal-access-status=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.override<< EOF
|
||||
[org.gnome.desktop.interface]
|
||||
enable-animations=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.privacy.gschema.override<< EOF
|
||||
[org.gnome.desktop.privacy]
|
||||
remove-old-temp-files=true
|
||||
remember-recent-file=false
|
||||
remember-app-usage=false
|
||||
disable-camera=true
|
||||
disable-microphone=true
|
||||
disable-sound-output=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.search-providers.gschema.override<< EOF
|
||||
[org.gnome.desktop.search-providers]
|
||||
disable-external=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.notifications.gschema.override<< EOF
|
||||
[org.gnome.desktop.notifications.application]
|
||||
enable-sound-alerts=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.sound.gschema.override<< EOF
|
||||
[org.gnome.desktop.sound]
|
||||
event-sounds=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.thumbnailers.gschema.override<< EOF
|
||||
[org.gnome.desktop.thumbnailers]
|
||||
disable-all=true
|
||||
EOF
|
||||
|
||||
glib-compile-schemas /mnt/sysimage/usr/share/glib-2.0/schemas/
|
||||
|
||||
%end
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
@base-graphical
|
||||
@core
|
||||
bash-color-prompt
|
||||
curl
|
||||
dconf
|
||||
dejavu-sans-mono-fonts
|
||||
fedora-remix-logos
|
||||
firefox
|
||||
gdm
|
||||
generic-logos
|
||||
generic-release
|
||||
generic-release-common
|
||||
generic-release-notes
|
||||
gnome-backgrounds.noarch
|
||||
gnome-control-center
|
||||
gnome-session-wayland-session
|
||||
gnome-shell
|
||||
gnome-terminal
|
||||
gvfs-fuse
|
||||
initial-setup
|
||||
libusb
|
||||
mozilla-ublock-origin.noarch
|
||||
nano
|
||||
nautilus
|
||||
pciutils
|
||||
pipewire-alsa
|
||||
pipewire-jack-audio-connection-kit
|
||||
pipewire-pulseaudio
|
||||
usbutils
|
||||
wget
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,142 @@
|
||||
# Generated by pykickstart v3.69
|
||||
#version=DEVEL
|
||||
# Use text mode install
|
||||
text
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Run the Setup Agent on first boot
|
||||
firstboot --reconfig
|
||||
# Keyboard layouts
|
||||
keyboard --xlayouts='ch (fr)'
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64
|
||||
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64
|
||||
repo --name="rawhide" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64
|
||||
#Root password
|
||||
rootpw --lock
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# System services
|
||||
services --enabled="NetworkManager,systemd-resolved"
|
||||
# System timezone
|
||||
timezone Europe/Zurich --utc
|
||||
# Use network installation
|
||||
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64"
|
||||
# X Window System configuration information
|
||||
xconfig --defaultdesktop=GNOME --startxonboot
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --timeout=1
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all --initlabel
|
||||
# Disk partitioning information
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --mkfsoptions="-O encrypt,fast_commit"
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --encrypted --mkfsoptions="-O encrypt,fast_commit"
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/gnome-desktop-post.log
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.media-handling.gschema.override<< EOF
|
||||
[org.gnome.desktop.media-handling]
|
||||
automount-open=false
|
||||
autorun-never=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.Terminal.gschema.override<< EOF
|
||||
[org.gnome.Terminal.Legacy.Profile]
|
||||
font='DejaVu Sans Mono 12'
|
||||
use-system-font=false
|
||||
auditable-bell=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.override<< EOF
|
||||
[org.gnome.desktop.wm.preferences]
|
||||
button-layout=':minimize,maximize,close'
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.a11y.gschema.override<< EOF
|
||||
[org.gnome.desktop.a11y]
|
||||
always-show-universal-access-status=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.override<< EOF
|
||||
[org.gnome.desktop.interface]
|
||||
enable-animations=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.privacy.gschema.override<< EOF
|
||||
[org.gnome.desktop.privacy]
|
||||
remove-old-temp-files=true
|
||||
remember-recent-file=false
|
||||
remember-app-usage=false
|
||||
disable-camera=true
|
||||
disable-microphone=true
|
||||
disable-sound-output=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.search-providers.gschema.override<< EOF
|
||||
[org.gnome.desktop.search-providers]
|
||||
disable-external=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.notifications.gschema.override<< EOF
|
||||
[org.gnome.desktop.notifications.application]
|
||||
enable-sound-alerts=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.sound.gschema.override<< EOF
|
||||
[org.gnome.desktop.sound]
|
||||
event-sounds=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.thumbnailers.gschema.override<< EOF
|
||||
[org.gnome.desktop.thumbnailers]
|
||||
disable-all=true
|
||||
EOF
|
||||
|
||||
glib-compile-schemas /mnt/sysimage/usr/share/glib-2.0/schemas/
|
||||
|
||||
%end
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
@base-graphical
|
||||
@core
|
||||
bash-color-prompt
|
||||
curl
|
||||
dconf
|
||||
dejavu-sans-mono-fonts
|
||||
fedora-remix-logos
|
||||
firefox
|
||||
gdm
|
||||
generic-logos
|
||||
generic-release
|
||||
generic-release-common
|
||||
generic-release-notes
|
||||
gnome-backgrounds.noarch
|
||||
gnome-control-center
|
||||
gnome-session-wayland-session
|
||||
gnome-shell
|
||||
gnome-terminal
|
||||
gvfs-fuse
|
||||
initial-setup
|
||||
libusb
|
||||
mozilla-ublock-origin.noarch
|
||||
nano
|
||||
nautilus
|
||||
pciutils
|
||||
pipewire-alsa
|
||||
pipewire-jack-audio-connection-kit
|
||||
pipewire-pulseaudio
|
||||
usbutils
|
||||
wget
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,138 @@
|
||||
# Generated by pykickstart v3.69
|
||||
#version=DEVEL
|
||||
# Use text mode install
|
||||
text
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Run the Setup Agent on first boot
|
||||
firstboot --reconfig
|
||||
# Keyboard layouts
|
||||
keyboard --xlayouts='ch (fr)'
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64
|
||||
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64
|
||||
#Root password
|
||||
rootpw --lock
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# System services
|
||||
services --enabled="NetworkManager,systemd-resolved"
|
||||
# System timezone
|
||||
timezone Europe/Zurich --utc
|
||||
# Use network installation
|
||||
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64"
|
||||
# X Window System configuration information
|
||||
xconfig --defaultdesktop=GNOME --startxonboot
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --timeout=1
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all --initlabel
|
||||
# Disk partitioning information
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --mkfsoptions="-O encrypt,fast_commit"
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/gnome-desktop-post.log
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.media-handling.gschema.override<< EOF
|
||||
[org.gnome.desktop.media-handling]
|
||||
automount-open=false
|
||||
autorun-never=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.Terminal.gschema.override<< EOF
|
||||
[org.gnome.Terminal.Legacy.Profile]
|
||||
font='DejaVu Sans Mono 12'
|
||||
use-system-font=false
|
||||
auditable-bell=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.override<< EOF
|
||||
[org.gnome.desktop.wm.preferences]
|
||||
button-layout=':minimize,maximize,close'
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.a11y.gschema.override<< EOF
|
||||
[org.gnome.desktop.a11y]
|
||||
always-show-universal-access-status=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.override<< EOF
|
||||
[org.gnome.desktop.interface]
|
||||
enable-animations=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.privacy.gschema.override<< EOF
|
||||
[org.gnome.desktop.privacy]
|
||||
remove-old-temp-files=true
|
||||
remember-recent-file=false
|
||||
remember-app-usage=false
|
||||
disable-camera=true
|
||||
disable-microphone=true
|
||||
disable-sound-output=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.search-providers.gschema.override<< EOF
|
||||
[org.gnome.desktop.search-providers]
|
||||
disable-external=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.notifications.gschema.override<< EOF
|
||||
[org.gnome.desktop.notifications.application]
|
||||
enable-sound-alerts=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.sound.gschema.override<< EOF
|
||||
[org.gnome.desktop.sound]
|
||||
event-sounds=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.thumbnailers.gschema.override<< EOF
|
||||
[org.gnome.desktop.thumbnailers]
|
||||
disable-all=true
|
||||
EOF
|
||||
|
||||
glib-compile-schemas /mnt/sysimage/usr/share/glib-2.0/schemas/
|
||||
|
||||
%end
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
@base-graphical
|
||||
@core
|
||||
bash-color-prompt
|
||||
curl
|
||||
dconf
|
||||
dejavu-sans-mono-fonts
|
||||
fedora-remix-logos
|
||||
firefox
|
||||
gdm
|
||||
generic-logos
|
||||
generic-release
|
||||
generic-release-common
|
||||
generic-release-notes
|
||||
gnome-backgrounds.noarch
|
||||
gnome-control-center
|
||||
gnome-session-wayland-session
|
||||
gnome-shell
|
||||
gnome-terminal
|
||||
gvfs-fuse
|
||||
initial-setup
|
||||
libusb
|
||||
mozilla-ublock-origin.noarch
|
||||
nano
|
||||
nautilus
|
||||
pciutils
|
||||
pipewire-alsa
|
||||
pipewire-jack-audio-connection-kit
|
||||
pipewire-pulseaudio
|
||||
usbutils
|
||||
wget
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,139 @@
|
||||
# Generated by pykickstart v3.69
|
||||
#version=DEVEL
|
||||
# Use text mode install
|
||||
text
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Run the Setup Agent on first boot
|
||||
firstboot --reconfig
|
||||
# Keyboard layouts
|
||||
keyboard --xlayouts='ch (fr)'
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64
|
||||
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64
|
||||
repo --name="rawhide" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64
|
||||
#Root password
|
||||
rootpw --lock
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# System services
|
||||
services --enabled="NetworkManager,systemd-resolved"
|
||||
# System timezone
|
||||
timezone Europe/Zurich --utc
|
||||
# Use network installation
|
||||
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64"
|
||||
# X Window System configuration information
|
||||
xconfig --defaultdesktop=GNOME --startxonboot
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --timeout=1
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all --initlabel
|
||||
# Disk partitioning information
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --mkfsoptions="-O encrypt,fast_commit"
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/gnome-desktop-post.log
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.media-handling.gschema.override<< EOF
|
||||
[org.gnome.desktop.media-handling]
|
||||
automount-open=false
|
||||
autorun-never=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.Terminal.gschema.override<< EOF
|
||||
[org.gnome.Terminal.Legacy.Profile]
|
||||
font='DejaVu Sans Mono 12'
|
||||
use-system-font=false
|
||||
auditable-bell=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.override<< EOF
|
||||
[org.gnome.desktop.wm.preferences]
|
||||
button-layout=':minimize,maximize,close'
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.a11y.gschema.override<< EOF
|
||||
[org.gnome.desktop.a11y]
|
||||
always-show-universal-access-status=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.override<< EOF
|
||||
[org.gnome.desktop.interface]
|
||||
enable-animations=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.privacy.gschema.override<< EOF
|
||||
[org.gnome.desktop.privacy]
|
||||
remove-old-temp-files=true
|
||||
remember-recent-file=false
|
||||
remember-app-usage=false
|
||||
disable-camera=true
|
||||
disable-microphone=true
|
||||
disable-sound-output=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.search-providers.gschema.override<< EOF
|
||||
[org.gnome.desktop.search-providers]
|
||||
disable-external=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.notifications.gschema.override<< EOF
|
||||
[org.gnome.desktop.notifications.application]
|
||||
enable-sound-alerts=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.sound.gschema.override<< EOF
|
||||
[org.gnome.desktop.sound]
|
||||
event-sounds=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.thumbnailers.gschema.override<< EOF
|
||||
[org.gnome.desktop.thumbnailers]
|
||||
disable-all=true
|
||||
EOF
|
||||
|
||||
glib-compile-schemas /mnt/sysimage/usr/share/glib-2.0/schemas/
|
||||
|
||||
%end
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
@base-graphical
|
||||
@core
|
||||
bash-color-prompt
|
||||
curl
|
||||
dconf
|
||||
dejavu-sans-mono-fonts
|
||||
fedora-remix-logos
|
||||
firefox
|
||||
gdm
|
||||
generic-logos
|
||||
generic-release
|
||||
generic-release-common
|
||||
generic-release-notes
|
||||
gnome-backgrounds.noarch
|
||||
gnome-control-center
|
||||
gnome-session-wayland-session
|
||||
gnome-shell
|
||||
gnome-terminal
|
||||
gvfs-fuse
|
||||
initial-setup
|
||||
libusb
|
||||
mozilla-ublock-origin.noarch
|
||||
nano
|
||||
nautilus
|
||||
pciutils
|
||||
pipewire-alsa
|
||||
pipewire-jack-audio-connection-kit
|
||||
pipewire-pulseaudio
|
||||
usbutils
|
||||
wget
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,138 @@
|
||||
# Generated by pykickstart v3.69
|
||||
#version=DEVEL
|
||||
# Use text mode install
|
||||
text
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Run the Setup Agent on first boot
|
||||
firstboot --reconfig
|
||||
# Keyboard layouts
|
||||
keyboard --xlayouts='ch (fr)'
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64
|
||||
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64
|
||||
#Root password
|
||||
rootpw --lock
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# System services
|
||||
services --enabled="NetworkManager,systemd-resolved"
|
||||
# System timezone
|
||||
timezone Europe/Zurich --utc
|
||||
# Use network installation
|
||||
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64"
|
||||
# X Window System configuration information
|
||||
xconfig --defaultdesktop=GNOME --startxonboot
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --timeout=1
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all --initlabel
|
||||
# Disk partitioning information
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --mkfsoptions="-O encrypt,fast_commit"
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/gnome-desktop-post.log
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.media-handling.gschema.override<< EOF
|
||||
[org.gnome.desktop.media-handling]
|
||||
automount-open=false
|
||||
autorun-never=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.Terminal.gschema.override<< EOF
|
||||
[org.gnome.Terminal.Legacy.Profile]
|
||||
font='DejaVu Sans Mono 12'
|
||||
use-system-font=false
|
||||
auditable-bell=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.override<< EOF
|
||||
[org.gnome.desktop.wm.preferences]
|
||||
button-layout=':minimize,maximize,close'
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.a11y.gschema.override<< EOF
|
||||
[org.gnome.desktop.a11y]
|
||||
always-show-universal-access-status=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.override<< EOF
|
||||
[org.gnome.desktop.interface]
|
||||
enable-animations=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.privacy.gschema.override<< EOF
|
||||
[org.gnome.desktop.privacy]
|
||||
remove-old-temp-files=true
|
||||
remember-recent-file=false
|
||||
remember-app-usage=false
|
||||
disable-camera=true
|
||||
disable-microphone=true
|
||||
disable-sound-output=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.search-providers.gschema.override<< EOF
|
||||
[org.gnome.desktop.search-providers]
|
||||
disable-external=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.notifications.gschema.override<< EOF
|
||||
[org.gnome.desktop.notifications.application]
|
||||
enable-sound-alerts=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.sound.gschema.override<< EOF
|
||||
[org.gnome.desktop.sound]
|
||||
event-sounds=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.thumbnailers.gschema.override<< EOF
|
||||
[org.gnome.desktop.thumbnailers]
|
||||
disable-all=true
|
||||
EOF
|
||||
|
||||
glib-compile-schemas /mnt/sysimage/usr/share/glib-2.0/schemas/
|
||||
|
||||
%end
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
@base-graphical
|
||||
@core
|
||||
bash-color-prompt
|
||||
curl
|
||||
dconf
|
||||
dejavu-sans-mono-fonts
|
||||
fedora-remix-logos
|
||||
firefox
|
||||
gdm
|
||||
generic-logos
|
||||
generic-release
|
||||
generic-release-common
|
||||
generic-release-notes
|
||||
gnome-backgrounds.noarch
|
||||
gnome-control-center
|
||||
gnome-session-wayland-session
|
||||
gnome-shell
|
||||
gnome-terminal
|
||||
gvfs-fuse
|
||||
initial-setup
|
||||
libusb
|
||||
mozilla-ublock-origin.noarch
|
||||
nano
|
||||
nautilus
|
||||
pciutils
|
||||
pipewire-alsa
|
||||
pipewire-jack-audio-connection-kit
|
||||
pipewire-pulseaudio
|
||||
usbutils
|
||||
wget
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,139 @@
|
||||
# Generated by pykickstart v3.69
|
||||
#version=DEVEL
|
||||
# Use text mode install
|
||||
text
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Run the Setup Agent on first boot
|
||||
firstboot --reconfig
|
||||
# Keyboard layouts
|
||||
keyboard --xlayouts='ch (fr)'
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64
|
||||
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64
|
||||
repo --name="rawhide" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64
|
||||
#Root password
|
||||
rootpw --lock
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# System services
|
||||
services --enabled="NetworkManager,systemd-resolved"
|
||||
# System timezone
|
||||
timezone Europe/Zurich --utc
|
||||
# Use network installation
|
||||
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64"
|
||||
# X Window System configuration information
|
||||
xconfig --defaultdesktop=GNOME --startxonboot
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --timeout=1
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all --initlabel
|
||||
# Disk partitioning information
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --mkfsoptions="-O encrypt,fast_commit"
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/gnome-desktop-post.log
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.media-handling.gschema.override<< EOF
|
||||
[org.gnome.desktop.media-handling]
|
||||
automount-open=false
|
||||
autorun-never=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.Terminal.gschema.override<< EOF
|
||||
[org.gnome.Terminal.Legacy.Profile]
|
||||
font='DejaVu Sans Mono 12'
|
||||
use-system-font=false
|
||||
auditable-bell=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.override<< EOF
|
||||
[org.gnome.desktop.wm.preferences]
|
||||
button-layout=':minimize,maximize,close'
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.a11y.gschema.override<< EOF
|
||||
[org.gnome.desktop.a11y]
|
||||
always-show-universal-access-status=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.override<< EOF
|
||||
[org.gnome.desktop.interface]
|
||||
enable-animations=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.privacy.gschema.override<< EOF
|
||||
[org.gnome.desktop.privacy]
|
||||
remove-old-temp-files=true
|
||||
remember-recent-file=false
|
||||
remember-app-usage=false
|
||||
disable-camera=true
|
||||
disable-microphone=true
|
||||
disable-sound-output=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.search-providers.gschema.override<< EOF
|
||||
[org.gnome.desktop.search-providers]
|
||||
disable-external=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.notifications.gschema.override<< EOF
|
||||
[org.gnome.desktop.notifications.application]
|
||||
enable-sound-alerts=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.sound.gschema.override<< EOF
|
||||
[org.gnome.desktop.sound]
|
||||
event-sounds=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.thumbnailers.gschema.override<< EOF
|
||||
[org.gnome.desktop.thumbnailers]
|
||||
disable-all=true
|
||||
EOF
|
||||
|
||||
glib-compile-schemas /mnt/sysimage/usr/share/glib-2.0/schemas/
|
||||
|
||||
%end
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
@base-graphical
|
||||
@core
|
||||
bash-color-prompt
|
||||
curl
|
||||
dconf
|
||||
dejavu-sans-mono-fonts
|
||||
fedora-remix-logos
|
||||
firefox
|
||||
gdm
|
||||
generic-logos
|
||||
generic-release
|
||||
generic-release-common
|
||||
generic-release-notes
|
||||
gnome-backgrounds.noarch
|
||||
gnome-control-center
|
||||
gnome-session-wayland-session
|
||||
gnome-shell
|
||||
gnome-terminal
|
||||
gvfs-fuse
|
||||
initial-setup
|
||||
libusb
|
||||
mozilla-ublock-origin.noarch
|
||||
nano
|
||||
nautilus
|
||||
pciutils
|
||||
pipewire-alsa
|
||||
pipewire-jack-audio-connection-kit
|
||||
pipewire-pulseaudio
|
||||
usbutils
|
||||
wget
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,110 @@
|
||||
# Generated by pykickstart v3.69
|
||||
#version=DEVEL
|
||||
# Use text mode install
|
||||
text
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Run the Setup Agent on first boot
|
||||
firstboot --reconfig
|
||||
# Keyboard layouts
|
||||
keyboard --xlayouts='ch (fr)'
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64
|
||||
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64
|
||||
#Root password
|
||||
rootpw --lock
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# System services
|
||||
services --enabled="NetworkManager,systemd-resolved,libvirtd"
|
||||
# System timezone
|
||||
timezone Europe/Zurich --utc
|
||||
# Use network installation
|
||||
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64"
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --timeout=1
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all --initlabel
|
||||
# Disk partitioning information
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --mkfsoptions="-O encrypt,fast_commit"
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/hypervisor-base-post.log
|
||||
|
||||
# Load kernel modules by adding vfio, vfio_pci, vfio_iommu_type1, vfio_virqfd
|
||||
echo "vfio" > /mnt/sysimage/etc/modules-load.d/vfio.conf
|
||||
echo "vfio-pci" > /mnt/sysimage/etc/modules-load.d/vfio-pci.conf
|
||||
echo "vfio_iommu_type1" > /mnt/sysimage/etc/modules-load.d/vfio_iommu_type1.conf
|
||||
echo "vfio_virqfd" > /mnt/sysimage/etc/modules-load.d/vfio_virqfd.conf
|
||||
|
||||
mkdir /mnt/sysimage/var/lib/libvirt/isos # Create a directory to store iso images. SELinux is already taking this one into account.
|
||||
|
||||
# wget https://boot.netboot.xyz/ipxe/netboot.xyz.iso -P /mnt/sysimage/var/lib/libvirt/isos/ # fetch netboot.xyz iso and store it to the newly created iso directory
|
||||
|
||||
# # virsh commands fail in a kickstart environment (chroot or not it seems). would need to fetch a script and execute post-launch with a delay, for example using a systemd unit
|
||||
# virsh pool-define-as isos dir - - - - /mnt/sysimage/var/lib/libvirt/isos/ # Make libvirt aware of this new directory by creating a so-called 'pool'.
|
||||
# virsh pool-build isos # Build the pool
|
||||
# virsh pool-start isos # Start it
|
||||
# virsh pool-autostart isos # Set-it to autostart
|
||||
|
||||
# fetch custom script and make it executable
|
||||
# wget https://raw.githubusercontent.com/PhyllomeOS/phyllomeos/main/post-first-startup-scripts/virtualization-tweaks-root-needed.sh -P /mnt/sysimage/usr/local/bin/
|
||||
# chmod +x /mnt/sysimage/usr/local/bin/virtualization-tweaks-root-needed.sh
|
||||
|
||||
# wget https://raw.githubusercontent.com/PhyllomeOS/xml-definition-for-domains/main/xml/system/linux.xml
|
||||
# virsh define linux.xml
|
||||
|
||||
# wget https://raw.githubusercontent.com/PhyllomeOS/xml-definition-for-domains/main/xml/system/windows.xml
|
||||
# virsh define windows.xml
|
||||
|
||||
%end
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/hypervisor-amdcpu-post.log
|
||||
|
||||
sed -i 's/\(quiet\)/\1 iommu=pt rd.driver.pre=vfio-pci/i' /mnt/sysimage/etc/default/grub # Load kernel modules in GRUB.
|
||||
|
||||
echo "options kvm_amd nested=1" >> /mnt/sysimage/etc/modprobe.d/kvm.conf # Add support for nested virtualization
|
||||
|
||||
%end
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
@core
|
||||
curl
|
||||
fedora-remix-logos
|
||||
generic-logos
|
||||
generic-release
|
||||
generic-release-common
|
||||
generic-release-notes
|
||||
initial-setup
|
||||
libusb
|
||||
libvirt
|
||||
libvirt-client
|
||||
libvirt-client-qemu
|
||||
libvirt-daemon
|
||||
libvirt-daemon-common
|
||||
libvirt-daemon-config-network
|
||||
libvirt-daemon-driver-ch
|
||||
libvirt-daemon-driver-interface
|
||||
libvirt-daemon-driver-network
|
||||
libvirt-daemon-driver-qemu
|
||||
libvirt-daemon-kvm
|
||||
libvirt-daemon-log
|
||||
libvirt-daemon-qemu
|
||||
libvirt-dbus
|
||||
libvirt-nss
|
||||
nano
|
||||
pciutils
|
||||
qemu-kvm
|
||||
usbutils
|
||||
virt-install
|
||||
wget
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,110 @@
|
||||
# Generated by pykickstart v3.69
|
||||
#version=DEVEL
|
||||
# Use text mode install
|
||||
text
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Run the Setup Agent on first boot
|
||||
firstboot --reconfig
|
||||
# Keyboard layouts
|
||||
keyboard --xlayouts='ch (fr)'
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64
|
||||
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64
|
||||
#Root password
|
||||
rootpw --lock
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# System services
|
||||
services --enabled="NetworkManager,systemd-resolved,libvirtd"
|
||||
# System timezone
|
||||
timezone Europe/Zurich --utc
|
||||
# Use network installation
|
||||
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64"
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --timeout=1
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all --initlabel
|
||||
# Disk partitioning information
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --mkfsoptions="-O encrypt,fast_commit"
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/hypervisor-base-post.log
|
||||
|
||||
# Load kernel modules by adding vfio, vfio_pci, vfio_iommu_type1, vfio_virqfd
|
||||
echo "vfio" > /mnt/sysimage/etc/modules-load.d/vfio.conf
|
||||
echo "vfio-pci" > /mnt/sysimage/etc/modules-load.d/vfio-pci.conf
|
||||
echo "vfio_iommu_type1" > /mnt/sysimage/etc/modules-load.d/vfio_iommu_type1.conf
|
||||
echo "vfio_virqfd" > /mnt/sysimage/etc/modules-load.d/vfio_virqfd.conf
|
||||
|
||||
mkdir /mnt/sysimage/var/lib/libvirt/isos # Create a directory to store iso images. SELinux is already taking this one into account.
|
||||
|
||||
# wget https://boot.netboot.xyz/ipxe/netboot.xyz.iso -P /mnt/sysimage/var/lib/libvirt/isos/ # fetch netboot.xyz iso and store it to the newly created iso directory
|
||||
|
||||
# # virsh commands fail in a kickstart environment (chroot or not it seems). would need to fetch a script and execute post-launch with a delay, for example using a systemd unit
|
||||
# virsh pool-define-as isos dir - - - - /mnt/sysimage/var/lib/libvirt/isos/ # Make libvirt aware of this new directory by creating a so-called 'pool'.
|
||||
# virsh pool-build isos # Build the pool
|
||||
# virsh pool-start isos # Start it
|
||||
# virsh pool-autostart isos # Set-it to autostart
|
||||
|
||||
# fetch custom script and make it executable
|
||||
# wget https://raw.githubusercontent.com/PhyllomeOS/phyllomeos/main/post-first-startup-scripts/virtualization-tweaks-root-needed.sh -P /mnt/sysimage/usr/local/bin/
|
||||
# chmod +x /mnt/sysimage/usr/local/bin/virtualization-tweaks-root-needed.sh
|
||||
|
||||
# wget https://raw.githubusercontent.com/PhyllomeOS/xml-definition-for-domains/main/xml/system/linux.xml
|
||||
# virsh define linux.xml
|
||||
|
||||
# wget https://raw.githubusercontent.com/PhyllomeOS/xml-definition-for-domains/main/xml/system/windows.xml
|
||||
# virsh define windows.xml
|
||||
|
||||
%end
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/hypervisor-intelcpu-post.log
|
||||
|
||||
sed -i 's/\(quiet\)/\1 intel_iommu=on iommu=pt rd.driver.pre=vfio-pci/i' /mnt/sysimage/etc/default/grub # Load kernel modules in GRUB.
|
||||
|
||||
echo "options kvm_intel nested=1" >> /mnt/sysimage/etc/modprobe.d/kvm.conf # Add support for nested virtualization on Intel CPUs
|
||||
|
||||
%end
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
@core
|
||||
curl
|
||||
fedora-remix-logos
|
||||
generic-logos
|
||||
generic-release
|
||||
generic-release-common
|
||||
generic-release-notes
|
||||
initial-setup
|
||||
libusb
|
||||
libvirt
|
||||
libvirt-client
|
||||
libvirt-client-qemu
|
||||
libvirt-daemon
|
||||
libvirt-daemon-common
|
||||
libvirt-daemon-config-network
|
||||
libvirt-daemon-driver-ch
|
||||
libvirt-daemon-driver-interface
|
||||
libvirt-daemon-driver-network
|
||||
libvirt-daemon-driver-qemu
|
||||
libvirt-daemon-kvm
|
||||
libvirt-daemon-log
|
||||
libvirt-daemon-qemu
|
||||
libvirt-dbus
|
||||
libvirt-nss
|
||||
nano
|
||||
pciutils
|
||||
qemu-kvm
|
||||
usbutils
|
||||
virt-install
|
||||
wget
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,141 @@
|
||||
# Generated by pykickstart v3.69
|
||||
#version=DEVEL
|
||||
# Use text mode install
|
||||
text
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Run the Setup Agent on first boot
|
||||
firstboot --reconfig
|
||||
# Keyboard layouts
|
||||
keyboard --xlayouts='ch (fr)'
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64
|
||||
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64
|
||||
#Root password
|
||||
rootpw --lock
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# System services
|
||||
services --enabled="NetworkManager,systemd-resolved"
|
||||
# System timezone
|
||||
timezone Europe/Zurich --utc
|
||||
# Use network installation
|
||||
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64"
|
||||
# X Window System configuration information
|
||||
xconfig --defaultdesktop=GNOME --startxonboot
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --timeout=1
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all --initlabel
|
||||
# Disk partitioning information
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --mkfsoptions="-O encrypt,fast_commit"
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --encrypted --mkfsoptions="-O encrypt,fast_commit"
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/gnome-desktop-post.log
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.media-handling.gschema.override<< EOF
|
||||
[org.gnome.desktop.media-handling]
|
||||
automount-open=false
|
||||
autorun-never=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.Terminal.gschema.override<< EOF
|
||||
[org.gnome.Terminal.Legacy.Profile]
|
||||
font='DejaVu Sans Mono 12'
|
||||
use-system-font=false
|
||||
auditable-bell=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.override<< EOF
|
||||
[org.gnome.desktop.wm.preferences]
|
||||
button-layout=':minimize,maximize,close'
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.a11y.gschema.override<< EOF
|
||||
[org.gnome.desktop.a11y]
|
||||
always-show-universal-access-status=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.override<< EOF
|
||||
[org.gnome.desktop.interface]
|
||||
enable-animations=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.privacy.gschema.override<< EOF
|
||||
[org.gnome.desktop.privacy]
|
||||
remove-old-temp-files=true
|
||||
remember-recent-file=false
|
||||
remember-app-usage=false
|
||||
disable-camera=true
|
||||
disable-microphone=true
|
||||
disable-sound-output=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.search-providers.gschema.override<< EOF
|
||||
[org.gnome.desktop.search-providers]
|
||||
disable-external=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.notifications.gschema.override<< EOF
|
||||
[org.gnome.desktop.notifications.application]
|
||||
enable-sound-alerts=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.sound.gschema.override<< EOF
|
||||
[org.gnome.desktop.sound]
|
||||
event-sounds=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.thumbnailers.gschema.override<< EOF
|
||||
[org.gnome.desktop.thumbnailers]
|
||||
disable-all=true
|
||||
EOF
|
||||
|
||||
glib-compile-schemas /mnt/sysimage/usr/share/glib-2.0/schemas/
|
||||
|
||||
%end
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
@base-graphical
|
||||
@core
|
||||
bash-color-prompt
|
||||
curl
|
||||
dconf
|
||||
dejavu-sans-mono-fonts
|
||||
fedora-remix-logos
|
||||
firefox
|
||||
gdm
|
||||
generic-logos
|
||||
generic-release
|
||||
generic-release-common
|
||||
generic-release-notes
|
||||
gnome-backgrounds.noarch
|
||||
gnome-control-center
|
||||
gnome-session-wayland-session
|
||||
gnome-shell
|
||||
gnome-terminal
|
||||
gvfs-fuse
|
||||
initial-setup
|
||||
libusb
|
||||
mozilla-ublock-origin.noarch
|
||||
nano
|
||||
nautilus
|
||||
pciutils
|
||||
pipewire-alsa
|
||||
pipewire-jack-audio-connection-kit
|
||||
pipewire-pulseaudio
|
||||
usbutils
|
||||
wget
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,142 @@
|
||||
# Generated by pykickstart v3.69
|
||||
#version=DEVEL
|
||||
# Use text mode install
|
||||
text
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Run the Setup Agent on first boot
|
||||
firstboot --reconfig
|
||||
# Keyboard layouts
|
||||
keyboard --xlayouts='ch (fr)'
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64
|
||||
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64
|
||||
repo --name="rawhide" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64
|
||||
#Root password
|
||||
rootpw --lock
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# System services
|
||||
services --enabled="NetworkManager,systemd-resolved"
|
||||
# System timezone
|
||||
timezone Europe/Zurich --utc
|
||||
# Use network installation
|
||||
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64"
|
||||
# X Window System configuration information
|
||||
xconfig --defaultdesktop=GNOME --startxonboot
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --timeout=1
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all --initlabel
|
||||
# Disk partitioning information
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --mkfsoptions="-O encrypt,fast_commit"
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --encrypted --mkfsoptions="-O encrypt,fast_commit"
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/gnome-desktop-post.log
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.media-handling.gschema.override<< EOF
|
||||
[org.gnome.desktop.media-handling]
|
||||
automount-open=false
|
||||
autorun-never=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.Terminal.gschema.override<< EOF
|
||||
[org.gnome.Terminal.Legacy.Profile]
|
||||
font='DejaVu Sans Mono 12'
|
||||
use-system-font=false
|
||||
auditable-bell=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.override<< EOF
|
||||
[org.gnome.desktop.wm.preferences]
|
||||
button-layout=':minimize,maximize,close'
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.a11y.gschema.override<< EOF
|
||||
[org.gnome.desktop.a11y]
|
||||
always-show-universal-access-status=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.override<< EOF
|
||||
[org.gnome.desktop.interface]
|
||||
enable-animations=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.privacy.gschema.override<< EOF
|
||||
[org.gnome.desktop.privacy]
|
||||
remove-old-temp-files=true
|
||||
remember-recent-file=false
|
||||
remember-app-usage=false
|
||||
disable-camera=true
|
||||
disable-microphone=true
|
||||
disable-sound-output=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.search-providers.gschema.override<< EOF
|
||||
[org.gnome.desktop.search-providers]
|
||||
disable-external=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.notifications.gschema.override<< EOF
|
||||
[org.gnome.desktop.notifications.application]
|
||||
enable-sound-alerts=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.sound.gschema.override<< EOF
|
||||
[org.gnome.desktop.sound]
|
||||
event-sounds=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.thumbnailers.gschema.override<< EOF
|
||||
[org.gnome.desktop.thumbnailers]
|
||||
disable-all=true
|
||||
EOF
|
||||
|
||||
glib-compile-schemas /mnt/sysimage/usr/share/glib-2.0/schemas/
|
||||
|
||||
%end
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
@base-graphical
|
||||
@core
|
||||
bash-color-prompt
|
||||
curl
|
||||
dconf
|
||||
dejavu-sans-mono-fonts
|
||||
fedora-remix-logos
|
||||
firefox
|
||||
gdm
|
||||
generic-logos
|
||||
generic-release
|
||||
generic-release-common
|
||||
generic-release-notes
|
||||
gnome-backgrounds.noarch
|
||||
gnome-control-center
|
||||
gnome-session-wayland-session
|
||||
gnome-shell
|
||||
gnome-terminal
|
||||
gvfs-fuse
|
||||
initial-setup
|
||||
libusb
|
||||
mozilla-ublock-origin.noarch
|
||||
nano
|
||||
nautilus
|
||||
pciutils
|
||||
pipewire-alsa
|
||||
pipewire-jack-audio-connection-kit
|
||||
pipewire-pulseaudio
|
||||
usbutils
|
||||
wget
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,141 @@
|
||||
# Generated by pykickstart v3.69
|
||||
#version=DEVEL
|
||||
# Use text mode install
|
||||
text
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Run the Setup Agent on first boot
|
||||
firstboot --reconfig
|
||||
# Keyboard layouts
|
||||
keyboard --xlayouts='ch (fr)'
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64
|
||||
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64
|
||||
#Root password
|
||||
rootpw --lock
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# System services
|
||||
services --enabled="NetworkManager,systemd-resolved"
|
||||
# System timezone
|
||||
timezone Europe/Zurich --utc
|
||||
# Use network installation
|
||||
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64"
|
||||
# X Window System configuration information
|
||||
xconfig --defaultdesktop=GNOME --startxonboot
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --timeout=1
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all --initlabel
|
||||
# Disk partitioning information
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --mkfsoptions="-O encrypt,fast_commit"
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --encrypted --mkfsoptions="-O encrypt,fast_commit"
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/gnome-desktop-post.log
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.media-handling.gschema.override<< EOF
|
||||
[org.gnome.desktop.media-handling]
|
||||
automount-open=false
|
||||
autorun-never=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.Terminal.gschema.override<< EOF
|
||||
[org.gnome.Terminal.Legacy.Profile]
|
||||
font='DejaVu Sans Mono 12'
|
||||
use-system-font=false
|
||||
auditable-bell=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.override<< EOF
|
||||
[org.gnome.desktop.wm.preferences]
|
||||
button-layout=':minimize,maximize,close'
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.a11y.gschema.override<< EOF
|
||||
[org.gnome.desktop.a11y]
|
||||
always-show-universal-access-status=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.override<< EOF
|
||||
[org.gnome.desktop.interface]
|
||||
enable-animations=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.privacy.gschema.override<< EOF
|
||||
[org.gnome.desktop.privacy]
|
||||
remove-old-temp-files=true
|
||||
remember-recent-file=false
|
||||
remember-app-usage=false
|
||||
disable-camera=true
|
||||
disable-microphone=true
|
||||
disable-sound-output=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.search-providers.gschema.override<< EOF
|
||||
[org.gnome.desktop.search-providers]
|
||||
disable-external=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.notifications.gschema.override<< EOF
|
||||
[org.gnome.desktop.notifications.application]
|
||||
enable-sound-alerts=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.sound.gschema.override<< EOF
|
||||
[org.gnome.desktop.sound]
|
||||
event-sounds=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.thumbnailers.gschema.override<< EOF
|
||||
[org.gnome.desktop.thumbnailers]
|
||||
disable-all=true
|
||||
EOF
|
||||
|
||||
glib-compile-schemas /mnt/sysimage/usr/share/glib-2.0/schemas/
|
||||
|
||||
%end
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
@base-graphical
|
||||
@core
|
||||
bash-color-prompt
|
||||
curl
|
||||
dconf
|
||||
dejavu-sans-mono-fonts
|
||||
fedora-remix-logos
|
||||
firefox
|
||||
gdm
|
||||
generic-logos
|
||||
generic-release
|
||||
generic-release-common
|
||||
generic-release-notes
|
||||
gnome-backgrounds.noarch
|
||||
gnome-control-center
|
||||
gnome-session-wayland-session
|
||||
gnome-shell
|
||||
gnome-terminal
|
||||
gvfs-fuse
|
||||
initial-setup
|
||||
libusb
|
||||
mozilla-ublock-origin.noarch
|
||||
nano
|
||||
nautilus
|
||||
pciutils
|
||||
pipewire-alsa
|
||||
pipewire-jack-audio-connection-kit
|
||||
pipewire-pulseaudio
|
||||
usbutils
|
||||
wget
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,142 @@
|
||||
# Generated by pykickstart v3.69
|
||||
#version=DEVEL
|
||||
# Use text mode install
|
||||
text
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Run the Setup Agent on first boot
|
||||
firstboot --reconfig
|
||||
# Keyboard layouts
|
||||
keyboard --xlayouts='ch (fr)'
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64
|
||||
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64
|
||||
repo --name="rawhide" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64
|
||||
#Root password
|
||||
rootpw --lock
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# System services
|
||||
services --enabled="NetworkManager,systemd-resolved"
|
||||
# System timezone
|
||||
timezone Europe/Zurich --utc
|
||||
# Use network installation
|
||||
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64"
|
||||
# X Window System configuration information
|
||||
xconfig --defaultdesktop=GNOME --startxonboot
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --timeout=1
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all --initlabel
|
||||
# Disk partitioning information
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --mkfsoptions="-O encrypt,fast_commit"
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --encrypted --mkfsoptions="-O encrypt,fast_commit"
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/gnome-desktop-post.log
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.media-handling.gschema.override<< EOF
|
||||
[org.gnome.desktop.media-handling]
|
||||
automount-open=false
|
||||
autorun-never=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.Terminal.gschema.override<< EOF
|
||||
[org.gnome.Terminal.Legacy.Profile]
|
||||
font='DejaVu Sans Mono 12'
|
||||
use-system-font=false
|
||||
auditable-bell=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.override<< EOF
|
||||
[org.gnome.desktop.wm.preferences]
|
||||
button-layout=':minimize,maximize,close'
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.a11y.gschema.override<< EOF
|
||||
[org.gnome.desktop.a11y]
|
||||
always-show-universal-access-status=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.override<< EOF
|
||||
[org.gnome.desktop.interface]
|
||||
enable-animations=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.privacy.gschema.override<< EOF
|
||||
[org.gnome.desktop.privacy]
|
||||
remove-old-temp-files=true
|
||||
remember-recent-file=false
|
||||
remember-app-usage=false
|
||||
disable-camera=true
|
||||
disable-microphone=true
|
||||
disable-sound-output=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.search-providers.gschema.override<< EOF
|
||||
[org.gnome.desktop.search-providers]
|
||||
disable-external=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.notifications.gschema.override<< EOF
|
||||
[org.gnome.desktop.notifications.application]
|
||||
enable-sound-alerts=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.sound.gschema.override<< EOF
|
||||
[org.gnome.desktop.sound]
|
||||
event-sounds=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.thumbnailers.gschema.override<< EOF
|
||||
[org.gnome.desktop.thumbnailers]
|
||||
disable-all=true
|
||||
EOF
|
||||
|
||||
glib-compile-schemas /mnt/sysimage/usr/share/glib-2.0/schemas/
|
||||
|
||||
%end
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
@base-graphical
|
||||
@core
|
||||
bash-color-prompt
|
||||
curl
|
||||
dconf
|
||||
dejavu-sans-mono-fonts
|
||||
fedora-remix-logos
|
||||
firefox
|
||||
gdm
|
||||
generic-logos
|
||||
generic-release
|
||||
generic-release-common
|
||||
generic-release-notes
|
||||
gnome-backgrounds.noarch
|
||||
gnome-control-center
|
||||
gnome-session-wayland-session
|
||||
gnome-shell
|
||||
gnome-terminal
|
||||
gvfs-fuse
|
||||
initial-setup
|
||||
libusb
|
||||
mozilla-ublock-origin.noarch
|
||||
nano
|
||||
nautilus
|
||||
pciutils
|
||||
pipewire-alsa
|
||||
pipewire-jack-audio-connection-kit
|
||||
pipewire-pulseaudio
|
||||
usbutils
|
||||
wget
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,138 @@
|
||||
# Generated by pykickstart v3.69
|
||||
#version=DEVEL
|
||||
# Use text mode install
|
||||
text
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Run the Setup Agent on first boot
|
||||
firstboot --reconfig
|
||||
# Keyboard layouts
|
||||
keyboard --xlayouts='ch (fr)'
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64
|
||||
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64
|
||||
#Root password
|
||||
rootpw --lock
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# System services
|
||||
services --enabled="NetworkManager,systemd-resolved"
|
||||
# System timezone
|
||||
timezone Europe/Zurich --utc
|
||||
# Use network installation
|
||||
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64"
|
||||
# X Window System configuration information
|
||||
xconfig --defaultdesktop=GNOME --startxonboot
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --timeout=1
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all --initlabel
|
||||
# Disk partitioning information
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --mkfsoptions="-O encrypt,fast_commit"
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/gnome-desktop-post.log
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.media-handling.gschema.override<< EOF
|
||||
[org.gnome.desktop.media-handling]
|
||||
automount-open=false
|
||||
autorun-never=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.Terminal.gschema.override<< EOF
|
||||
[org.gnome.Terminal.Legacy.Profile]
|
||||
font='DejaVu Sans Mono 12'
|
||||
use-system-font=false
|
||||
auditable-bell=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.override<< EOF
|
||||
[org.gnome.desktop.wm.preferences]
|
||||
button-layout=':minimize,maximize,close'
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.a11y.gschema.override<< EOF
|
||||
[org.gnome.desktop.a11y]
|
||||
always-show-universal-access-status=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.override<< EOF
|
||||
[org.gnome.desktop.interface]
|
||||
enable-animations=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.privacy.gschema.override<< EOF
|
||||
[org.gnome.desktop.privacy]
|
||||
remove-old-temp-files=true
|
||||
remember-recent-file=false
|
||||
remember-app-usage=false
|
||||
disable-camera=true
|
||||
disable-microphone=true
|
||||
disable-sound-output=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.search-providers.gschema.override<< EOF
|
||||
[org.gnome.desktop.search-providers]
|
||||
disable-external=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.notifications.gschema.override<< EOF
|
||||
[org.gnome.desktop.notifications.application]
|
||||
enable-sound-alerts=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.sound.gschema.override<< EOF
|
||||
[org.gnome.desktop.sound]
|
||||
event-sounds=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.thumbnailers.gschema.override<< EOF
|
||||
[org.gnome.desktop.thumbnailers]
|
||||
disable-all=true
|
||||
EOF
|
||||
|
||||
glib-compile-schemas /mnt/sysimage/usr/share/glib-2.0/schemas/
|
||||
|
||||
%end
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
@base-graphical
|
||||
@core
|
||||
bash-color-prompt
|
||||
curl
|
||||
dconf
|
||||
dejavu-sans-mono-fonts
|
||||
fedora-remix-logos
|
||||
firefox
|
||||
gdm
|
||||
generic-logos
|
||||
generic-release
|
||||
generic-release-common
|
||||
generic-release-notes
|
||||
gnome-backgrounds.noarch
|
||||
gnome-control-center
|
||||
gnome-session-wayland-session
|
||||
gnome-shell
|
||||
gnome-terminal
|
||||
gvfs-fuse
|
||||
initial-setup
|
||||
libusb
|
||||
mozilla-ublock-origin.noarch
|
||||
nano
|
||||
nautilus
|
||||
pciutils
|
||||
pipewire-alsa
|
||||
pipewire-jack-audio-connection-kit
|
||||
pipewire-pulseaudio
|
||||
usbutils
|
||||
wget
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,139 @@
|
||||
# Generated by pykickstart v3.69
|
||||
#version=DEVEL
|
||||
# Use text mode install
|
||||
text
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Run the Setup Agent on first boot
|
||||
firstboot --reconfig
|
||||
# Keyboard layouts
|
||||
keyboard --xlayouts='ch (fr)'
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64
|
||||
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64
|
||||
repo --name="rawhide" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64
|
||||
#Root password
|
||||
rootpw --lock
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# System services
|
||||
services --enabled="NetworkManager,systemd-resolved"
|
||||
# System timezone
|
||||
timezone Europe/Zurich --utc
|
||||
# Use network installation
|
||||
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64"
|
||||
# X Window System configuration information
|
||||
xconfig --defaultdesktop=GNOME --startxonboot
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --timeout=1
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all --initlabel
|
||||
# Disk partitioning information
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --mkfsoptions="-O encrypt,fast_commit"
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/gnome-desktop-post.log
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.media-handling.gschema.override<< EOF
|
||||
[org.gnome.desktop.media-handling]
|
||||
automount-open=false
|
||||
autorun-never=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.Terminal.gschema.override<< EOF
|
||||
[org.gnome.Terminal.Legacy.Profile]
|
||||
font='DejaVu Sans Mono 12'
|
||||
use-system-font=false
|
||||
auditable-bell=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.override<< EOF
|
||||
[org.gnome.desktop.wm.preferences]
|
||||
button-layout=':minimize,maximize,close'
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.a11y.gschema.override<< EOF
|
||||
[org.gnome.desktop.a11y]
|
||||
always-show-universal-access-status=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.override<< EOF
|
||||
[org.gnome.desktop.interface]
|
||||
enable-animations=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.privacy.gschema.override<< EOF
|
||||
[org.gnome.desktop.privacy]
|
||||
remove-old-temp-files=true
|
||||
remember-recent-file=false
|
||||
remember-app-usage=false
|
||||
disable-camera=true
|
||||
disable-microphone=true
|
||||
disable-sound-output=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.search-providers.gschema.override<< EOF
|
||||
[org.gnome.desktop.search-providers]
|
||||
disable-external=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.notifications.gschema.override<< EOF
|
||||
[org.gnome.desktop.notifications.application]
|
||||
enable-sound-alerts=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.sound.gschema.override<< EOF
|
||||
[org.gnome.desktop.sound]
|
||||
event-sounds=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.thumbnailers.gschema.override<< EOF
|
||||
[org.gnome.desktop.thumbnailers]
|
||||
disable-all=true
|
||||
EOF
|
||||
|
||||
glib-compile-schemas /mnt/sysimage/usr/share/glib-2.0/schemas/
|
||||
|
||||
%end
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
@base-graphical
|
||||
@core
|
||||
bash-color-prompt
|
||||
curl
|
||||
dconf
|
||||
dejavu-sans-mono-fonts
|
||||
fedora-remix-logos
|
||||
firefox
|
||||
gdm
|
||||
generic-logos
|
||||
generic-release
|
||||
generic-release-common
|
||||
generic-release-notes
|
||||
gnome-backgrounds.noarch
|
||||
gnome-control-center
|
||||
gnome-session-wayland-session
|
||||
gnome-shell
|
||||
gnome-terminal
|
||||
gvfs-fuse
|
||||
initial-setup
|
||||
libusb
|
||||
mozilla-ublock-origin.noarch
|
||||
nano
|
||||
nautilus
|
||||
pciutils
|
||||
pipewire-alsa
|
||||
pipewire-jack-audio-connection-kit
|
||||
pipewire-pulseaudio
|
||||
usbutils
|
||||
wget
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,138 @@
|
||||
# Generated by pykickstart v3.69
|
||||
#version=DEVEL
|
||||
# Use text mode install
|
||||
text
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Run the Setup Agent on first boot
|
||||
firstboot --reconfig
|
||||
# Keyboard layouts
|
||||
keyboard --xlayouts='ch (fr)'
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64
|
||||
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64
|
||||
#Root password
|
||||
rootpw --lock
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# System services
|
||||
services --enabled="NetworkManager,systemd-resolved"
|
||||
# System timezone
|
||||
timezone Europe/Zurich --utc
|
||||
# Use network installation
|
||||
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64"
|
||||
# X Window System configuration information
|
||||
xconfig --defaultdesktop=GNOME --startxonboot
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --timeout=1
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all --initlabel
|
||||
# Disk partitioning information
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --mkfsoptions="-O encrypt,fast_commit"
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/gnome-desktop-post.log
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.media-handling.gschema.override<< EOF
|
||||
[org.gnome.desktop.media-handling]
|
||||
automount-open=false
|
||||
autorun-never=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.Terminal.gschema.override<< EOF
|
||||
[org.gnome.Terminal.Legacy.Profile]
|
||||
font='DejaVu Sans Mono 12'
|
||||
use-system-font=false
|
||||
auditable-bell=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.override<< EOF
|
||||
[org.gnome.desktop.wm.preferences]
|
||||
button-layout=':minimize,maximize,close'
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.a11y.gschema.override<< EOF
|
||||
[org.gnome.desktop.a11y]
|
||||
always-show-universal-access-status=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.override<< EOF
|
||||
[org.gnome.desktop.interface]
|
||||
enable-animations=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.privacy.gschema.override<< EOF
|
||||
[org.gnome.desktop.privacy]
|
||||
remove-old-temp-files=true
|
||||
remember-recent-file=false
|
||||
remember-app-usage=false
|
||||
disable-camera=true
|
||||
disable-microphone=true
|
||||
disable-sound-output=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.search-providers.gschema.override<< EOF
|
||||
[org.gnome.desktop.search-providers]
|
||||
disable-external=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.notifications.gschema.override<< EOF
|
||||
[org.gnome.desktop.notifications.application]
|
||||
enable-sound-alerts=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.sound.gschema.override<< EOF
|
||||
[org.gnome.desktop.sound]
|
||||
event-sounds=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.thumbnailers.gschema.override<< EOF
|
||||
[org.gnome.desktop.thumbnailers]
|
||||
disable-all=true
|
||||
EOF
|
||||
|
||||
glib-compile-schemas /mnt/sysimage/usr/share/glib-2.0/schemas/
|
||||
|
||||
%end
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
@base-graphical
|
||||
@core
|
||||
bash-color-prompt
|
||||
curl
|
||||
dconf
|
||||
dejavu-sans-mono-fonts
|
||||
fedora-remix-logos
|
||||
firefox
|
||||
gdm
|
||||
generic-logos
|
||||
generic-release
|
||||
generic-release-common
|
||||
generic-release-notes
|
||||
gnome-backgrounds.noarch
|
||||
gnome-control-center
|
||||
gnome-session-wayland-session
|
||||
gnome-shell
|
||||
gnome-terminal
|
||||
gvfs-fuse
|
||||
initial-setup
|
||||
libusb
|
||||
mozilla-ublock-origin.noarch
|
||||
nano
|
||||
nautilus
|
||||
pciutils
|
||||
pipewire-alsa
|
||||
pipewire-jack-audio-connection-kit
|
||||
pipewire-pulseaudio
|
||||
usbutils
|
||||
wget
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,139 @@
|
||||
# Generated by pykickstart v3.69
|
||||
#version=DEVEL
|
||||
# Use text mode install
|
||||
text
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Run the Setup Agent on first boot
|
||||
firstboot --reconfig
|
||||
# Keyboard layouts
|
||||
keyboard --xlayouts='ch (fr)'
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64
|
||||
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64
|
||||
repo --name="rawhide" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64
|
||||
#Root password
|
||||
rootpw --lock
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# System services
|
||||
services --enabled="NetworkManager,systemd-resolved"
|
||||
# System timezone
|
||||
timezone Europe/Zurich --utc
|
||||
# Use network installation
|
||||
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64"
|
||||
# X Window System configuration information
|
||||
xconfig --defaultdesktop=GNOME --startxonboot
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --timeout=1
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all --initlabel
|
||||
# Disk partitioning information
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --mkfsoptions="-O encrypt,fast_commit"
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/gnome-desktop-post.log
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.media-handling.gschema.override<< EOF
|
||||
[org.gnome.desktop.media-handling]
|
||||
automount-open=false
|
||||
autorun-never=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.Terminal.gschema.override<< EOF
|
||||
[org.gnome.Terminal.Legacy.Profile]
|
||||
font='DejaVu Sans Mono 12'
|
||||
use-system-font=false
|
||||
auditable-bell=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.override<< EOF
|
||||
[org.gnome.desktop.wm.preferences]
|
||||
button-layout=':minimize,maximize,close'
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.a11y.gschema.override<< EOF
|
||||
[org.gnome.desktop.a11y]
|
||||
always-show-universal-access-status=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.override<< EOF
|
||||
[org.gnome.desktop.interface]
|
||||
enable-animations=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.privacy.gschema.override<< EOF
|
||||
[org.gnome.desktop.privacy]
|
||||
remove-old-temp-files=true
|
||||
remember-recent-file=false
|
||||
remember-app-usage=false
|
||||
disable-camera=true
|
||||
disable-microphone=true
|
||||
disable-sound-output=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.search-providers.gschema.override<< EOF
|
||||
[org.gnome.desktop.search-providers]
|
||||
disable-external=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.notifications.gschema.override<< EOF
|
||||
[org.gnome.desktop.notifications.application]
|
||||
enable-sound-alerts=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.sound.gschema.override<< EOF
|
||||
[org.gnome.desktop.sound]
|
||||
event-sounds=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.thumbnailers.gschema.override<< EOF
|
||||
[org.gnome.desktop.thumbnailers]
|
||||
disable-all=true
|
||||
EOF
|
||||
|
||||
glib-compile-schemas /mnt/sysimage/usr/share/glib-2.0/schemas/
|
||||
|
||||
%end
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
@base-graphical
|
||||
@core
|
||||
bash-color-prompt
|
||||
curl
|
||||
dconf
|
||||
dejavu-sans-mono-fonts
|
||||
fedora-remix-logos
|
||||
firefox
|
||||
gdm
|
||||
generic-logos
|
||||
generic-release
|
||||
generic-release-common
|
||||
generic-release-notes
|
||||
gnome-backgrounds.noarch
|
||||
gnome-control-center
|
||||
gnome-session-wayland-session
|
||||
gnome-shell
|
||||
gnome-terminal
|
||||
gvfs-fuse
|
||||
initial-setup
|
||||
libusb
|
||||
mozilla-ublock-origin.noarch
|
||||
nano
|
||||
nautilus
|
||||
pciutils
|
||||
pipewire-alsa
|
||||
pipewire-jack-audio-connection-kit
|
||||
pipewire-pulseaudio
|
||||
usbutils
|
||||
wget
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,202 @@
|
||||
# Generated by pykickstart v3.69
|
||||
#version=DEVEL
|
||||
# Use text mode install
|
||||
text
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Run the Setup Agent on first boot
|
||||
firstboot --reconfig
|
||||
# Keyboard layouts
|
||||
keyboard --xlayouts='ch (fr)'
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64
|
||||
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64
|
||||
#Root password
|
||||
rootpw --lock
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# System services
|
||||
services --enabled="NetworkManager,systemd-resolved"
|
||||
# System timezone
|
||||
timezone Europe/Zurich --utc
|
||||
# Use network installation
|
||||
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64"
|
||||
# X Window System configuration information
|
||||
xconfig --defaultdesktop=GNOME --startxonboot
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --timeout=1
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all --initlabel
|
||||
# Disk partitioning information
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --mkfsoptions="-O encrypt,fast_commit"
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/gnome-desktop-post.log
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.media-handling.gschema.override<< EOF
|
||||
[org.gnome.desktop.media-handling]
|
||||
automount-open=false
|
||||
autorun-never=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.Terminal.gschema.override<< EOF
|
||||
[org.gnome.Terminal.Legacy.Profile]
|
||||
font='DejaVu Sans Mono 12'
|
||||
use-system-font=false
|
||||
auditable-bell=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.override<< EOF
|
||||
[org.gnome.desktop.wm.preferences]
|
||||
button-layout=':minimize,maximize,close'
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.a11y.gschema.override<< EOF
|
||||
[org.gnome.desktop.a11y]
|
||||
always-show-universal-access-status=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.override<< EOF
|
||||
[org.gnome.desktop.interface]
|
||||
enable-animations=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.privacy.gschema.override<< EOF
|
||||
[org.gnome.desktop.privacy]
|
||||
remove-old-temp-files=true
|
||||
remember-recent-file=false
|
||||
remember-app-usage=false
|
||||
disable-camera=true
|
||||
disable-microphone=true
|
||||
disable-sound-output=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.search-providers.gschema.override<< EOF
|
||||
[org.gnome.desktop.search-providers]
|
||||
disable-external=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.notifications.gschema.override<< EOF
|
||||
[org.gnome.desktop.notifications.application]
|
||||
enable-sound-alerts=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.sound.gschema.override<< EOF
|
||||
[org.gnome.desktop.sound]
|
||||
event-sounds=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.thumbnailers.gschema.override<< EOF
|
||||
[org.gnome.desktop.thumbnailers]
|
||||
disable-all=true
|
||||
EOF
|
||||
|
||||
glib-compile-schemas /mnt/sysimage/usr/share/glib-2.0/schemas/
|
||||
|
||||
%end
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/vmm-post-scripts.log
|
||||
|
||||
# Create a file to autostart virt-manager
|
||||
cat > /mnt/sysimage/etc/xdg/autostart/virt-manager.desktop << EOF
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=Virtual Machine Manager
|
||||
Exec=virt-manager
|
||||
EOF
|
||||
|
||||
# Modify the default virt-manager behavior for misc. options
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.virt-manager.virt-manager.gschema.override<< EOF
|
||||
|
||||
[org.virt-manager.virt-manager]
|
||||
xmleditor-enabled=true
|
||||
manager-window-height=600
|
||||
manager-window-width=200
|
||||
|
||||
[org.virt-manager.virt-manager.connections]
|
||||
uris=['qemu:///system', 'qemu:///session']
|
||||
autoconnect=['qemu:///session']
|
||||
|
||||
[org.virt-manager.virt-manager.vmlist-fields]
|
||||
cpu-usage=false
|
||||
|
||||
[org.virt-manager.virt-manager.stats]
|
||||
update-interval=3
|
||||
enable-disk-poll=true
|
||||
enable-memory-poll=true
|
||||
enable-net-poll=true
|
||||
|
||||
[org.virt-manager.virt-manager.console]
|
||||
scaling=2
|
||||
resize-guest=1
|
||||
autoconnect=false
|
||||
|
||||
[org.virt-manager.virt-manager.details]
|
||||
show-toolbar=false
|
||||
|
||||
[org.virt-manager.virt-manager.new-vm]
|
||||
storage-format='raw'
|
||||
cpu-default='host-model'
|
||||
graphics-type='spice'
|
||||
|
||||
[org.virt-manager.virt-manager.confirm]
|
||||
forcepoweroff=false
|
||||
removedev=false
|
||||
unapplied-dev=false
|
||||
|
||||
EOF
|
||||
|
||||
glib-compile-schemas /mnt/sysimage/usr/share/glib-2.0/schemas/
|
||||
|
||||
%end
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/hypervisor-amdcpu-post.log
|
||||
|
||||
sed -i 's/\(quiet\)/\1 iommu=pt rd.driver.pre=vfio-pci/i' /mnt/sysimage/etc/default/grub # Load kernel modules in GRUB.
|
||||
|
||||
echo "options kvm_amd nested=1" >> /mnt/sysimage/etc/modprobe.d/kvm.conf # Add support for nested virtualization
|
||||
|
||||
%end
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
@base-graphical
|
||||
@core
|
||||
bash-color-prompt
|
||||
curl
|
||||
dconf
|
||||
dejavu-sans-mono-fonts
|
||||
fedora-remix-logos
|
||||
firefox
|
||||
gdm
|
||||
generic-logos
|
||||
generic-release
|
||||
generic-release-common
|
||||
generic-release-notes
|
||||
gnome-backgrounds.noarch
|
||||
gnome-control-center
|
||||
gnome-session-wayland-session
|
||||
gnome-shell
|
||||
gnome-terminal
|
||||
gvfs-fuse
|
||||
initial-setup
|
||||
libusb
|
||||
mozilla-ublock-origin.noarch
|
||||
nano
|
||||
nautilus
|
||||
pciutils
|
||||
pipewire-alsa
|
||||
pipewire-jack-audio-connection-kit
|
||||
pipewire-pulseaudio
|
||||
usbutils
|
||||
virt-manager
|
||||
wget
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,202 @@
|
||||
# Generated by pykickstart v3.69
|
||||
#version=DEVEL
|
||||
# Use text mode install
|
||||
text
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Run the Setup Agent on first boot
|
||||
firstboot --reconfig
|
||||
# Keyboard layouts
|
||||
keyboard --xlayouts='ch (fr)'
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64
|
||||
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64
|
||||
#Root password
|
||||
rootpw --lock
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# System services
|
||||
services --enabled="NetworkManager,systemd-resolved"
|
||||
# System timezone
|
||||
timezone Europe/Zurich --utc
|
||||
# Use network installation
|
||||
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64"
|
||||
# X Window System configuration information
|
||||
xconfig --defaultdesktop=GNOME --startxonboot
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --timeout=1
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all --initlabel
|
||||
# Disk partitioning information
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --mkfsoptions="-O encrypt,fast_commit"
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/gnome-desktop-post.log
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.media-handling.gschema.override<< EOF
|
||||
[org.gnome.desktop.media-handling]
|
||||
automount-open=false
|
||||
autorun-never=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.Terminal.gschema.override<< EOF
|
||||
[org.gnome.Terminal.Legacy.Profile]
|
||||
font='DejaVu Sans Mono 12'
|
||||
use-system-font=false
|
||||
auditable-bell=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.override<< EOF
|
||||
[org.gnome.desktop.wm.preferences]
|
||||
button-layout=':minimize,maximize,close'
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.a11y.gschema.override<< EOF
|
||||
[org.gnome.desktop.a11y]
|
||||
always-show-universal-access-status=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.override<< EOF
|
||||
[org.gnome.desktop.interface]
|
||||
enable-animations=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.privacy.gschema.override<< EOF
|
||||
[org.gnome.desktop.privacy]
|
||||
remove-old-temp-files=true
|
||||
remember-recent-file=false
|
||||
remember-app-usage=false
|
||||
disable-camera=true
|
||||
disable-microphone=true
|
||||
disable-sound-output=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.search-providers.gschema.override<< EOF
|
||||
[org.gnome.desktop.search-providers]
|
||||
disable-external=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.notifications.gschema.override<< EOF
|
||||
[org.gnome.desktop.notifications.application]
|
||||
enable-sound-alerts=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.sound.gschema.override<< EOF
|
||||
[org.gnome.desktop.sound]
|
||||
event-sounds=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.thumbnailers.gschema.override<< EOF
|
||||
[org.gnome.desktop.thumbnailers]
|
||||
disable-all=true
|
||||
EOF
|
||||
|
||||
glib-compile-schemas /mnt/sysimage/usr/share/glib-2.0/schemas/
|
||||
|
||||
%end
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/vmm-post-scripts.log
|
||||
|
||||
# Create a file to autostart virt-manager
|
||||
cat > /mnt/sysimage/etc/xdg/autostart/virt-manager.desktop << EOF
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=Virtual Machine Manager
|
||||
Exec=virt-manager
|
||||
EOF
|
||||
|
||||
# Modify the default virt-manager behavior for misc. options
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.virt-manager.virt-manager.gschema.override<< EOF
|
||||
|
||||
[org.virt-manager.virt-manager]
|
||||
xmleditor-enabled=true
|
||||
manager-window-height=600
|
||||
manager-window-width=200
|
||||
|
||||
[org.virt-manager.virt-manager.connections]
|
||||
uris=['qemu:///system', 'qemu:///session']
|
||||
autoconnect=['qemu:///session']
|
||||
|
||||
[org.virt-manager.virt-manager.vmlist-fields]
|
||||
cpu-usage=false
|
||||
|
||||
[org.virt-manager.virt-manager.stats]
|
||||
update-interval=3
|
||||
enable-disk-poll=true
|
||||
enable-memory-poll=true
|
||||
enable-net-poll=true
|
||||
|
||||
[org.virt-manager.virt-manager.console]
|
||||
scaling=2
|
||||
resize-guest=1
|
||||
autoconnect=false
|
||||
|
||||
[org.virt-manager.virt-manager.details]
|
||||
show-toolbar=false
|
||||
|
||||
[org.virt-manager.virt-manager.new-vm]
|
||||
storage-format='raw'
|
||||
cpu-default='host-model'
|
||||
graphics-type='spice'
|
||||
|
||||
[org.virt-manager.virt-manager.confirm]
|
||||
forcepoweroff=false
|
||||
removedev=false
|
||||
unapplied-dev=false
|
||||
|
||||
EOF
|
||||
|
||||
glib-compile-schemas /mnt/sysimage/usr/share/glib-2.0/schemas/
|
||||
|
||||
%end
|
||||
|
||||
%post --nochroot --logfile=/mnt/sysimage/root/hypervisor-intelcpu-post.log
|
||||
|
||||
sed -i 's/\(quiet\)/\1 intel_iommu=on iommu=pt rd.driver.pre=vfio-pci/i' /mnt/sysimage/etc/default/grub # Load kernel modules in GRUB.
|
||||
|
||||
echo "options kvm_intel nested=1" >> /mnt/sysimage/etc/modprobe.d/kvm.conf # Add support for nested virtualization on Intel CPUs
|
||||
|
||||
%end
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
@base-graphical
|
||||
@core
|
||||
bash-color-prompt
|
||||
curl
|
||||
dconf
|
||||
dejavu-sans-mono-fonts
|
||||
fedora-remix-logos
|
||||
firefox
|
||||
gdm
|
||||
generic-logos
|
||||
generic-release
|
||||
generic-release-common
|
||||
generic-release-notes
|
||||
gnome-backgrounds.noarch
|
||||
gnome-control-center
|
||||
gnome-session-wayland-session
|
||||
gnome-shell
|
||||
gnome-terminal
|
||||
gvfs-fuse
|
||||
initial-setup
|
||||
libusb
|
||||
mozilla-ublock-origin.noarch
|
||||
nano
|
||||
nautilus
|
||||
pciutils
|
||||
pipewire-alsa
|
||||
pipewire-jack-audio-connection-kit
|
||||
pipewire-pulseaudio
|
||||
usbutils
|
||||
virt-manager
|
||||
wget
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,55 @@
|
||||
# Generated by pykickstart v3.69
|
||||
#version=DEVEL
|
||||
# Use text mode install
|
||||
text
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Run the Setup Agent on first boot
|
||||
firstboot --reconfig
|
||||
# Keyboard layouts
|
||||
keyboard --xlayouts='ch (fr)'
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64
|
||||
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64
|
||||
#Root password
|
||||
rootpw --lock
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# System services
|
||||
services --enabled="NetworkManager,systemd-resolved"
|
||||
# System timezone
|
||||
timezone Europe/Zurich --utc
|
||||
# Use network installation
|
||||
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64"
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --timeout=1
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all --initlabel
|
||||
# Disk partitioning information
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --mkfsoptions="-O encrypt,fast_commit"
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
@core
|
||||
curl
|
||||
fedora-remix-logos
|
||||
generic-logos
|
||||
generic-release
|
||||
generic-release-common
|
||||
generic-release-notes
|
||||
initial-setup
|
||||
libusb
|
||||
nano
|
||||
pciutils
|
||||
usbutils
|
||||
wget
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,56 @@
|
||||
# Generated by pykickstart v3.69
|
||||
#version=DEVEL
|
||||
# Use text mode install
|
||||
text
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Run the Setup Agent on first boot
|
||||
firstboot --reconfig
|
||||
# Keyboard layouts
|
||||
keyboard --xlayouts='ch (fr)'
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64
|
||||
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64
|
||||
repo --name="rawhide" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64
|
||||
#Root password
|
||||
rootpw --lock
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# System services
|
||||
services --enabled="NetworkManager,systemd-resolved"
|
||||
# System timezone
|
||||
timezone Europe/Zurich --utc
|
||||
# Use network installation
|
||||
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64"
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --timeout=1
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all --initlabel
|
||||
# Disk partitioning information
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label="efi"
|
||||
part /boot --fstype="ext4" --size=2048 --label="boot"
|
||||
part / --fstype="ext4" --grow --label="root" --mkfsoptions="-O encrypt,fast_commit"
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
@core
|
||||
curl
|
||||
fedora-remix-logos
|
||||
generic-logos
|
||||
generic-release
|
||||
generic-release-common
|
||||
generic-release-notes
|
||||
initial-setup
|
||||
libusb
|
||||
nano
|
||||
pciutils
|
||||
usbutils
|
||||
wget
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,114 @@
|
||||
# Generated by pykickstart v3.69
|
||||
#version=DEVEL
|
||||
# Keyboard layouts
|
||||
keyboard --xlayouts='ch (fr)'
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64
|
||||
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64
|
||||
repo --name="rpmfusion-nonfree" --mirrorlist=https://mirrors.rpmfusion.org/mirrorlist?repo=nonfree-fedora-$releasever&arch=$basearch --includepkgs="rpmfusion-nonfree-release"
|
||||
repo --name="rpmfusion-nonfree-updates" --mirrorlist=https://mirrors.rpmfusion.org/mirrorlist?repo=nonfree-fedora-updates-released-$releasever&arch=$basearch --includepkgs="rpmfusion-nonfree-release"
|
||||
# System services
|
||||
services --enabled="NetworkManager,systemd-resolved"
|
||||
# System timezone
|
||||
timezone Europe/Zurich --utc
|
||||
# Use network installation
|
||||
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64"
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --timeout=1
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all --initlabel
|
||||
# Disk partitioning information
|
||||
part / --fstype="ext4" --size=5120
|
||||
part / --size=8576
|
||||
|
||||
%post --logfile=/mnt/sysimage/root/live-core-post.log
|
||||
|
||||
# Enable livesys services
|
||||
systemctl enable livesys.service
|
||||
systemctl enable livesys-late.service
|
||||
|
||||
# enable tmpfs for /tmp
|
||||
systemctl enable tmp.mount
|
||||
|
||||
# make it so that we don't do writing to the overlay for things which
|
||||
# are just tmpdirs/caches
|
||||
# note https://bugzilla.redhat.com/show_bug.cgi?id=1135475
|
||||
cat >> /etc/fstab << EOF
|
||||
vartmp /var/tmp tmpfs defaults 0 0
|
||||
EOF
|
||||
|
||||
# work around for poor key import UI in PackageKit
|
||||
rm -f /var/lib/rpm/__db*
|
||||
echo "Packages within this LiveCD"
|
||||
rpm -qa --qf '%{size}\t%{name}-%{version}-%{release}.%{arch}\n' |sort -rn
|
||||
# Note that running rpm recreates the rpm db files which aren't needed or wanted
|
||||
rm -f /var/lib/rpm/__db*
|
||||
|
||||
# go ahead and pre-make the man -k cache (#455968)
|
||||
/usr/bin/mandb
|
||||
|
||||
# make sure there aren't core files lying around
|
||||
rm -f /core*
|
||||
|
||||
# remove random seed, the newly installed instance should make it's own
|
||||
rm -f /var/lib/systemd/random-seed
|
||||
|
||||
# convince readahead not to collect
|
||||
# FIXME: for systemd
|
||||
|
||||
echo 'File created by kickstart. See systemd-update-done.service(8).' \
|
||||
| tee /etc/.updated >/var/.updated
|
||||
|
||||
# Drop the rescue kernel and initramfs, we don't need them on the live media itself.
|
||||
# See bug 1317709
|
||||
rm -f /boot/*-rescue*
|
||||
|
||||
# Disable network service here, as doing it in the services line
|
||||
# fails due to RHBZ #1369794
|
||||
systemctl disable network
|
||||
|
||||
# Remove machine-id on pre generated images
|
||||
rm -f /etc/machine-id
|
||||
touch /etc/machine-id
|
||||
|
||||
%end
|
||||
|
||||
%post --logfile=/mnt/sysimage/root/post-live-session.log
|
||||
|
||||
# set livesys session type
|
||||
sed -i 's/^livesys_session=.*/livesys_session="gnome"/' /etc/sysconfig/livesys
|
||||
|
||||
%end
|
||||
|
||||
%post
|
||||
|
||||
# Import RPM Fusion PGP Key. Courtesy of https://github.com/rpmfusion/rpmfusion-nonfree-remix-kickstarts/blob/master/rpmfusion-nonfree-live-base.ks
|
||||
echo "== RPM Fusion Nonfree: Base section =="
|
||||
echo "Importing RPM Fusion keys"
|
||||
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-rpmfusion-nonfree-fedora-*-primary
|
||||
echo "List of packages from RPM Fusion Nonfree:"
|
||||
rpm -qa --qf '%{NAME} %{SIGGPG:pgpsig} %{SIGPGP:pgpsig} \n' | grep -e 3DE8C682E38EE9BC0FDFEA47FCAE2EA87F858107 | awk ' { print $1 } ' | sort
|
||||
echo "List of incuded RPM Fusion packages with their size:"
|
||||
rpm -q --qf '%{SIZE} %{NAME}\n' $(rpm -qa --qf '%{NAME} %{SIGGPG:pgpsig} %{SIGPGP:pgpsig} \n' | grep -e 3DE8C682E38EE9BC0FDFEA47FCAE2EA87F858107 | awk ' { print $1 } ') | sort -n
|
||||
echo
|
||||
|
||||
%end
|
||||
|
||||
%packages
|
||||
@anaconda-tools
|
||||
aajohan-comfortaa-fonts
|
||||
dracut-live
|
||||
glibc-all-langpacks
|
||||
kernel
|
||||
kernel-modules
|
||||
kernel-modules-extra
|
||||
livesys-scripts
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,25 @@
|
||||
"""Entry point for the recipe generator.
|
||||
|
||||
This is a simple wrapper script that provides the main entry point for running
|
||||
the recipe generator. It follows the common Python pattern of having a script
|
||||
that can be run directly or imported as a module.
|
||||
|
||||
Usage:
|
||||
# Run as script
|
||||
python generate_recipe.py --type virtual-desktop --version 43 --output output.cfg
|
||||
|
||||
# Or from another Python script
|
||||
from generate_recipe import main
|
||||
main()
|
||||
|
||||
This module doesn't do any processing itself - it delegates to the cli.main()
|
||||
function which handles all the actual work. The separation allows for:
|
||||
- Easy command-line execution (this file is the entry point)
|
||||
- Module imports without triggering execution
|
||||
- Clean separation of concerns (cli.py handles CLI, this just delegates)
|
||||
"""
|
||||
|
||||
from cli import main
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -0,0 +1,3 @@
|
||||
# GRUB bootloader configuration
|
||||
|
||||
bootloader --timeout=1 # Set the GNU GRUB bootloader timeout to 1
|
||||
@@ -0,0 +1,3 @@
|
||||
# systemd-boot bootloader configuration
|
||||
|
||||
bootsupport --sdboot --location=mbr --timeout=1 # Use systemd-boot and set a timeout to 1
|
||||
@@ -0,0 +1,5 @@
|
||||
# Core base kickstart configuration
|
||||
# Common settings for all Phyllome OS installations
|
||||
|
||||
text # Kickstart installation in text mode
|
||||
poweroff # Shut down the system after a successful installation
|
||||
@@ -0,0 +1,5 @@
|
||||
# Keyboard, language, and timezone configuration
|
||||
|
||||
keyboard --xlayouts='ch (fr)' # Set keyboard layouts for Romandy
|
||||
lang en_US.UTF-8 # Set system language to American English. More languages could be supported: --addsupport=cs_CZ,de_DE,en_UK
|
||||
timezone Europe/Zurich --utc # Set system timezone to Zurich
|
||||
@@ -0,0 +1,3 @@
|
||||
# Network configuration
|
||||
|
||||
network --onboot=yes --bootproto=dhcp --device=link --activate --hostname=phyllome-alpha # Configure network devices, enable them at boot time device and sets a particular hostname. "link" selects the first device reaching an up state
|
||||
@@ -0,0 +1,5 @@
|
||||
# Security configuration - disabled mode
|
||||
|
||||
rootpw --plaintext 1234 --allow-ssh # Root account is enabled with weak password and allow ssh
|
||||
selinux --disabled # Disable SELinux
|
||||
firewall --enabled --ssh # Reject incoming connections that are not in response to outbound requests except SSH
|
||||
@@ -0,0 +1,5 @@
|
||||
# Security configuration - enabled mode
|
||||
|
||||
rootpw --lock # No root login from the console
|
||||
selinux --enforcing # Set SELinux to enforcing mode
|
||||
firewall --enabled # Enable firewall
|
||||
@@ -0,0 +1,3 @@
|
||||
# System services
|
||||
|
||||
services --enabled=NetworkManager,systemd-resolved # List of comma-separated systemd services that can be explicitly enabled
|
||||
@@ -0,0 +1 @@
|
||||
xconfig --startxonboot --defaultdesktop=GNOME # Start the display session on boot. Although it says --startx, which seems to imply xorg, it is actually generic and thus works also with Wayland.
|
||||
@@ -0,0 +1,51 @@
|
||||
# __ ____ ____ _____
|
||||
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
|
||||
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
|
||||
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
|
||||
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
|
||||
# /_/ /____/
|
||||
|
||||
# GNOME desktop packages
|
||||
|
||||
%packages --exclude-weakdeps # Beginning of the packages section. Excludes weak package dependencies
|
||||
|
||||
@base-graphical
|
||||
## provides the following as mandatory packages:
|
||||
# mesa-dri-drivers
|
||||
# mesa-vulkan-drivers
|
||||
# plymouth-system-theme
|
||||
|
||||
# @critical-path-gnome not using this group but hand-picking packages
|
||||
## Mandatory packages found in hidden `@critical-path-gnome` group (`dnf group info --hidden critical-path-gnome`)
|
||||
## Not using
|
||||
## provides the following as mandatory packages:
|
||||
bash-color-prompt # Color prompt for bash shell
|
||||
dconf # A configuration system
|
||||
gdm # The GNOME Display Manager
|
||||
# gnome-classic-session # GNOME "classic" mode session
|
||||
gnome-control-center # Utilities to configure the GNOME desktop
|
||||
# gnome-initial-setup # Bootstrapping your OS
|
||||
gnome-shell # Window management and application launching for GNOME
|
||||
gvfs-fuse # FUSE support for gvfs
|
||||
# ptyxis # A container oriented terminal for GNOME
|
||||
### and the following as default packages
|
||||
# NetworkManager-pptp # NetworkManager VPN plugin for PPTP
|
||||
# avahi # Local network service discovery
|
||||
# gnome-bluetooth # Bluetooth graphical utilities
|
||||
gnome-session-wayland-session # Desktop file for wayland based gnome session
|
||||
# gnome-software # A software center for GNOME
|
||||
nautilus # File manager for GNOME
|
||||
# toolbox # Tool for interactive command line environments on Linux
|
||||
|
||||
## Extra hand-picked packages
|
||||
gnome-backgrounds.noarch # wallpapers from the GNOME project
|
||||
gnome-terminal # Terminal emulator for GNOME
|
||||
dejavu-sans-mono-fonts # the gnome-shell package doesn't include much fonts by default, resulting in weird spacings in GNOME Terminal. GNOME Terminal unfortunately doesn't automatically pick this font
|
||||
firefox # Mozilla Firefox Web browser
|
||||
mozilla-ublock-origin.noarch # An efficient blocker for Firefox
|
||||
|
||||
pipewire-alsa # PipeWire media server ALSA support
|
||||
pipewire-pulseaudio # PipeWire PulseAudio implementation
|
||||
pipewire-jack-audio-connection-kit # PipeWire JACK implementation
|
||||
|
||||
%end # End of the packagages section
|
||||
@@ -0,0 +1,65 @@
|
||||
# GNOME desktop post-installation configuration
|
||||
|
||||
%post --nochroot --log=/mnt/sysimage/root/gnome-desktop-post.log # Beginning of %post section. Those commands are executed outside the chroot environment
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.media-handling.gschema.override<< EOF
|
||||
[org.gnome.desktop.media-handling]
|
||||
automount-open=false
|
||||
autorun-never=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.Terminal.gschema.override<< EOF
|
||||
[org.gnome.Terminal.Legacy.Profile]
|
||||
font='DejaVu Sans Mono 12'
|
||||
use-system-font=false
|
||||
auditable-bell=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.override<< EOF
|
||||
[org.gnome.desktop.wm.preferences]
|
||||
button-layout=':minimize,maximize,close'
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.a11y.gschema.override<< EOF
|
||||
[org.gnome.desktop.a11y]
|
||||
always-show-universal-access-status=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.override<< EOF
|
||||
[org.gnome.desktop.interface]
|
||||
enable-animations=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.privacy.gschema.override<< EOF
|
||||
[org.gnome.desktop.privacy]
|
||||
remove-old-temp-files=true
|
||||
remember-recent-file=false
|
||||
remember-app-usage=false
|
||||
disable-camera=true
|
||||
disable-microphone=true
|
||||
disable-sound-output=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.search-providers.gschema.override<< EOF
|
||||
[org.gnome.desktop.search-providers]
|
||||
disable-external=true
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.notifications.gschema.override<< EOF
|
||||
[org.gnome.desktop.notifications.application]
|
||||
enable-sound-alerts=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.sound.gschema.override<< EOF
|
||||
[org.gnome.desktop.sound]
|
||||
event-sounds=false
|
||||
EOF
|
||||
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.thumbnailers.gschema.override<< EOF
|
||||
[org.gnome.desktop.thumbnailers]
|
||||
disable-all=true
|
||||
EOF
|
||||
|
||||
glib-compile-schemas /mnt/sysimage/usr/share/glib-2.0/schemas/
|
||||
|
||||
%end # End of the %post section
|
||||
@@ -0,0 +1,19 @@
|
||||
# Untested
|
||||
|
||||
xconfig --startxonboot # Start the display session on boot. Although it says --startx, which seems to imply xorg, it is actually generic and thus works also with Wayland.
|
||||
|
||||
%packages --exclude-weakdeps # Beginning of the packages section. Excludes weak package dependencies.
|
||||
|
||||
@base-graphical
|
||||
## provides the following as mandatory packages:
|
||||
# mesa-dri-drivers
|
||||
# mesa-vulkan-drivers
|
||||
# plymouth-system-theme
|
||||
|
||||
labwc # A Wayland window-stacking compositor
|
||||
|
||||
## Extra hand-picked packages
|
||||
firefox # Mozilla Firefox Web browser
|
||||
mozilla-ublock-origin.noarch # An efficient blocker for Firefox
|
||||
|
||||
%end # End of the packagages section
|
||||
@@ -0,0 +1,6 @@
|
||||
# Guest agents for virtual machines
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
qemu-guest-agent
|
||||
spice-vdagent
|
||||
%end
|
||||
@@ -0,0 +1,9 @@
|
||||
# AMD CPU optimization for hypervisor
|
||||
|
||||
%post --nochroot --log=/mnt/sysimage/root/hypervisor-amdcpu-post.log # Beginning of %post section. Those commands are executed outside the chroot environment. Logging is enabled to help with post-installation troubleshooting
|
||||
|
||||
sed -i 's/\(quiet\)/\1 iommu=pt rd.driver.pre=vfio-pci/i' /mnt/sysimage/etc/default/grub # Load kernel modules in GRUB.
|
||||
|
||||
echo "options kvm_amd nested=1" >> /mnt/sysimage/etc/modprobe.d/kvm.conf # Add support for nested virtualization
|
||||
|
||||
%end # End of the %post section
|
||||
@@ -0,0 +1,30 @@
|
||||
# __ ____ ____ _____
|
||||
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
|
||||
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
|
||||
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
|
||||
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
|
||||
# /_/ /____/
|
||||
|
||||
# Virtualization packages
|
||||
|
||||
%packages --exclude-weakdeps # Beginning of the packages section. Does not include weak dependencies.
|
||||
|
||||
qemu-kvm # QEMU metapackage for KVM support
|
||||
libvirt # Library providing a simple virtualization API
|
||||
libvirt-client # Client side utilities of the libvirt library
|
||||
libvirt-client-qemu # Additional client side utilities for QEMU. Used to interact with some QEMU specific features of libvirt.
|
||||
libvirt-daemon # Server side daemon and supporting files for libvirt library
|
||||
libvirt-daemon-common # Miscellaneous files and utilities used by other libvirt daemons
|
||||
libvirt-daemon-config-network # Default configuration files for the libvirtd daemon. Provides NAT based networking
|
||||
libvirt-daemon-driver-interface # Interface driver plugin for the libvirtd daemon
|
||||
libvirt-daemon-driver-network # The network driver plugin for the libvirtd daemon, providing an implementation of the virtual network APIs using the Linux bridge capabilities.
|
||||
libvirt-daemon-driver-qemu # QEMU driver plugin for the libvirtd daemon
|
||||
libvirt-daemon-kvm # Server side daemon & driver required to run KVM guests
|
||||
libvirt-daemon-log # Server side daemon for managing logs
|
||||
libvirt-daemon-qemu # Server side daemon and driver required to manage the virtualization capabilities of the QEMU TCG emulators
|
||||
libvirt-nss # Libvirt plugin for Name Service Switch
|
||||
libvirt-dbus # libvirt D-Bus API binding
|
||||
libvirt-daemon-driver-ch # Cloud-Hypervisor driver plugin for libvirtd daemon
|
||||
virt-install # Utilities for installing virtual machines
|
||||
|
||||
%end # End of the packages section
|
||||
@@ -0,0 +1,31 @@
|
||||
# Hypervisor base post-installation configuration
|
||||
|
||||
%post --nochroot --log=/mnt/sysimage/root/hypervisor-base-post.log # Beginning of %post section. Those commands are executed outside the chroot environment. Logging is enabled to help with post-installation troubleshooting
|
||||
|
||||
# Load kernel modules by adding vfio, vfio_pci, vfio_iommu_type1, vfio_virqfd
|
||||
echo "vfio" > /mnt/sysimage/etc/modules-load.d/vfio.conf
|
||||
echo "vfio-pci" > /mnt/sysimage/etc/modules-load.d/vfio-pci.conf
|
||||
echo "vfio_iommu_type1" > /mnt/sysimage/etc/modules-load.d/vfio_iommu_type1.conf
|
||||
echo "vfio_virqfd" > /mnt/sysimage/etc/modules-load.d/vfio_virqfd.conf
|
||||
|
||||
mkdir /mnt/sysimage/var/lib/libvirt/isos # Create a directory to store iso images. SELinux is already taking this one into account.
|
||||
|
||||
# wget https://boot.netboot.xyz/ipxe/netboot.xyz.iso -P /mnt/sysimage/var/lib/libvirt/isos/ # fetch netboot.xyz iso and store it to the newly created iso directory
|
||||
|
||||
# # virsh commands fail in a kickstart environment (chroot or not it seems). would need to fetch a script and execute post-launch with a delay, for example using a systemd unit
|
||||
# virsh pool-define-as isos dir - - - - /mnt/sysimage/var/lib/libvirt/isos/ # Make libvirt aware of this new directory by creating a so-called 'pool'.
|
||||
# virsh pool-build isos # Build the pool
|
||||
# virsh pool-start isos # Start it
|
||||
# virsh pool-autostart isos # Set-it to autostart
|
||||
|
||||
# fetch custom script and make it executable
|
||||
# wget https://raw.githubusercontent.com/PhyllomeOS/phyllomeos/main/post-first-startup-scripts/virtualization-tweaks-root-needed.sh -P /mnt/sysimage/usr/local/bin/
|
||||
# chmod +x /mnt/sysimage/usr/local/bin/virtualization-tweaks-root-needed.sh
|
||||
|
||||
# wget https://raw.githubusercontent.com/PhyllomeOS/xml-definition-for-domains/main/xml/system/linux.xml
|
||||
# virsh define linux.xml
|
||||
|
||||
# wget https://raw.githubusercontent.com/PhyllomeOS/xml-definition-for-domains/main/xml/system/windows.xml
|
||||
# virsh define windows.xml
|
||||
|
||||
%end # End of the %post section
|
||||
@@ -0,0 +1,3 @@
|
||||
# Hypervisor base configuration
|
||||
|
||||
services --enabled="NetworkManager,systemd-resolved,libvirtd" # Without libvirtd here, it appears the service won't automatically start
|
||||
@@ -0,0 +1,9 @@
|
||||
# Intel CPU optimization for hypervisor
|
||||
|
||||
%post --nochroot --log=/mnt/sysimage/root/hypervisor-intelcpu-post.log # Beginning of %post section. Those commands are executed outside the chroot environment. Logging is enabled to help with post-installation troubleshooting
|
||||
|
||||
sed -i 's/\(quiet\)/\1 intel_iommu=on iommu=pt rd.driver.pre=vfio-pci/i' /mnt/sysimage/etc/default/grub # Load kernel modules in GRUB.
|
||||
|
||||
echo "options kvm_intel nested=1" >> /mnt/sysimage/etc/modprobe.d/kvm.conf # Add support for nested virtualization on Intel CPUs
|
||||
|
||||
%end # End of the %post section
|
||||
@@ -0,0 +1,11 @@
|
||||
# Intel GPU passthrough configuration
|
||||
|
||||
%post --nochroot --log=/mnt/sysimage/root/hypervisor-intelgpu-post.log # Beginning of %post section. Those commands are executed outside the chroot environment. Logging is enabled to help with post-installtion troubleshooting
|
||||
|
||||
sed -i 's/\(vfio-pci\)/\1 i915.enable_gvt=1/i' /mnt/sysimage/etc/default/grub # Load kernel modules in grub.
|
||||
|
||||
# Load extra kernel modules to enable vfio-mdev on selected hardware
|
||||
echo "kvmgt" > /mnt/sysimage/etc/modules-load.d/kvmgt.conf # Load specific kernel modules kvmgt and vfio-mdev, for Intel (tm) GVT-g and Nvidia (tm)
|
||||
echo "vfio-mdev" > /mnt/sysimage/etc/modules-load.d/vfio-mdev.conf # Load specific kernel modules kvmgt and vfio-mdev, for Intel (tm) GVT-g and Nvidia (tm)
|
||||
|
||||
%end # End of the %post section
|
||||
@@ -0,0 +1,9 @@
|
||||
# Desktop initial-setup configuration
|
||||
|
||||
firstboot --enable # Enable the Setup Agent to start at boot time
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
|
||||
initial-setup
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,11 @@
|
||||
# Initial setup - generic wayland desktop mode
|
||||
|
||||
firstboot --enable # Initial Setup will start after the first reboot
|
||||
|
||||
%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
|
||||
@@ -0,0 +1,25 @@
|
||||
# Initial setup - GNOME desktop mode
|
||||
|
||||
firstboot --enable # Initial Setup will start after the first reboot
|
||||
|
||||
%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
|
||||
|
||||
# %post --nochroot --log=/mnt/sysimage/root/initial-setup-gnome.log # Beginning of %post section. Those commands are executed outside the chroot environment. Add logging.
|
||||
#
|
||||
# truncate -s 0 /mnt/sysimage/usr/share/gnome-initial-setup/vendor.conf # remove content of vendor.conf so that all options are made available
|
||||
#
|
||||
# ## Append lines to existing vendor.conf file, so that options are skipped upon reboot
|
||||
# cat >> /mnt/sysimage/usr/share/gnome-initial-setup/vendor.conf<< EOF
|
||||
# [pages]
|
||||
# skip=privacy
|
||||
# [goa]
|
||||
# providers=local-first!
|
||||
# EOF
|
||||
#
|
||||
# %end # End of the %post section
|
||||
@@ -0,0 +1,9 @@
|
||||
# Initial setup - server mode
|
||||
|
||||
firstboot --enable --reconfig # Enable the Setup Agent to start at boot time in reconfiguration mode. This mode enables the language, mouse, keyboard, root password, security level, time zone, and networking configuration options in addition to the default ones
|
||||
|
||||
%packages --exclude-weakdeps # Beginning of the packages section. Excludes weak package dependencies.
|
||||
|
||||
initial-setup # Initial setup package
|
||||
|
||||
%end # End of the packages section
|
||||
@@ -0,0 +1,3 @@
|
||||
# Live core base configuration
|
||||
|
||||
poweroff # Shut down the system after a successful installation
|
||||
@@ -0,0 +1,3 @@
|
||||
# Live core bootloader configuration
|
||||
|
||||
bootloader --timeout=1 # Set the GNU GRUB bootloader timeout to 1 and to location to none
|
||||
@@ -0,0 +1,3 @@
|
||||
# Live core systemd-boot configuration
|
||||
|
||||
bootloader --sdboot --location=none --timeout=1 # Use systemd-boot and set location to none
|
||||
@@ -0,0 +1,25 @@
|
||||
# Anaconda tools and kernel packages for live media
|
||||
|
||||
%packages # Beginning of the package section. Include weak dependencies. Description courtesy of the Fedora project
|
||||
|
||||
@anaconda-tools
|
||||
|
||||
# Explicitly specified here:
|
||||
# <notting> walters: because otherwise dependency loops cause yum issues.
|
||||
kernel
|
||||
kernel-modules
|
||||
kernel-modules-extra
|
||||
|
||||
# Need aajohan-comfortaa-fonts for the SVG rnotes images
|
||||
aajohan-comfortaa-fonts
|
||||
|
||||
# Without this, initramfs generation during live image creation fails: #1242586
|
||||
dracut-live
|
||||
|
||||
# anaconda needs the locales available to run for different locales
|
||||
glibc-all-langpacks
|
||||
|
||||
# provide the livesys scripts
|
||||
livesys-scripts
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,7 @@
|
||||
# Live core storage configuration
|
||||
|
||||
zerombr # WARNING : Dangerous command ! Will clear the Master Boot Record
|
||||
clearpart --all --initlabel # Partition clearing information. This setup uses GPT by default.
|
||||
|
||||
part / --fstype="ext4" --size=5120 # Create a root partition of around 7GB
|
||||
part / --size=8576
|
||||
@@ -0,0 +1,14 @@
|
||||
# Live desktop hypervisor configuration
|
||||
|
||||
# Enable virtualization support in live environment
|
||||
%packages
|
||||
qemu-kvm
|
||||
libvirt-client
|
||||
virt-install
|
||||
%end
|
||||
|
||||
%post --erroronfail
|
||||
# Setup libvirt for live environment
|
||||
mkdir -p /var/lib/libvirt
|
||||
systemctl enable libvirtd
|
||||
%end
|
||||
@@ -0,0 +1,53 @@
|
||||
# Live core post-installation configuration
|
||||
|
||||
%post --log=/mnt/sysimage/root/live-core-post.log # Beginning of the post-installation section. Add logging.
|
||||
|
||||
# Enable livesys services
|
||||
systemctl enable livesys.service
|
||||
systemctl enable livesys-late.service
|
||||
|
||||
# enable tmpfs for /tmp
|
||||
systemctl enable tmp.mount
|
||||
|
||||
# make it so that we don't do writing to the overlay for things which
|
||||
# are just tmpdirs/caches
|
||||
# note https://bugzilla.redhat.com/show_bug.cgi?id=1135475
|
||||
cat >> /etc/fstab << EOF
|
||||
vartmp /var/tmp tmpfs defaults 0 0
|
||||
EOF
|
||||
|
||||
# work around for poor key import UI in PackageKit
|
||||
rm -f /var/lib/rpm/__db*
|
||||
echo "Packages within this LiveCD"
|
||||
rpm -qa --qf '%{size}\t%{name}-%{version}-%{release}.%{arch}\n' |sort -rn
|
||||
# Note that running rpm recreates the rpm db files which aren't needed or wanted
|
||||
rm -f /var/lib/rpm/__db*
|
||||
|
||||
# go ahead and pre-make the man -k cache (#455968)
|
||||
/usr/bin/mandb
|
||||
|
||||
# make sure there aren't core files lying around
|
||||
rm -f /core*
|
||||
|
||||
# remove random seed, the newly installed instance should make it's own
|
||||
rm -f /var/lib/systemd/random-seed
|
||||
|
||||
# convince readahead not to collect
|
||||
# FIXME: for systemd
|
||||
|
||||
echo 'File created by kickstart. See systemd-update-done.service(8).' \
|
||||
| tee /etc/.updated >/var/.updated
|
||||
|
||||
# Drop the rescue kernel and initramfs, we don't need them on the live media itself.
|
||||
# See bug 1317709
|
||||
rm -f /boot/*-rescue*
|
||||
|
||||
# Disable network service here, as doing it in the services line
|
||||
# fails due to RHBZ #1369794
|
||||
systemctl disable network
|
||||
|
||||
# Remove machine-id on pre generated images
|
||||
rm -f /etc/machine-id
|
||||
touch /etc/machine-id
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,8 @@
|
||||
# Live session configuration
|
||||
|
||||
%post --log=/mnt/sysimage/root/post-live-session.log # Beginning of the post-installation section. Add logging.
|
||||
|
||||
# set livesys session type
|
||||
sed -i 's/^livesys_session=.*/livesys_session="gnome"/' /etc/sysconfig/livesys
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,67 @@
|
||||
# __ ____ ____ _____
|
||||
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
|
||||
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
|
||||
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
|
||||
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
|
||||
# /_/ /____/
|
||||
|
||||
# Core DNF package group
|
||||
# More information: https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#id240
|
||||
|
||||
%packages --exclude-weakdeps # Beginning of the packages section. Excludes weak package dependencies. Package description courtesy of the Fedora project
|
||||
|
||||
@core
|
||||
## Mandatory packages found in hidden `core` group (`dnf group info --hidden core`)
|
||||
# audit # User space tools for kernel auditing
|
||||
# basesystem # The skeleton package which defines a simple Fedora system
|
||||
# bash # The Bourne Again SHell, a command-line interpreter.
|
||||
# coreutils # A set of basic GNU tools commonly used in shell scripts
|
||||
# curl # A utility for getting files from remote servers (FTP, HTTP, and others)
|
||||
# dhcp-client # Provides the ISC DHCP client daemon and dhclient-script
|
||||
# dnf5 # Command-line package manager
|
||||
# e2fsprogs # Utilities for managing ext2, ext3, and ext4 file systems
|
||||
# filesystem # The basic directory layout for a Linux system
|
||||
# glibc # The GNU libc libraries
|
||||
# hostname # Utility to set/show the host name or domain name
|
||||
# iproute # Advanced IP routing and network device configuration tools
|
||||
# iputils # Network monitoring tools including ping
|
||||
# kbd # Tools for configuring the console (keyboard, virtual terminals, etc.)
|
||||
# kernel # The Linux kernel
|
||||
# less # A text file browser similar to more, but better. Can be excluded
|
||||
# man-db # Tools for searching and reading man pages. Can be excluded
|
||||
# ncurses # Ncurses support utilities
|
||||
# openssh-clients # An open source SSH client applications. Can be excluded
|
||||
# openssh-server # An open source SSH server daemon. Can be excluded
|
||||
# parted # The GNU disk partition manipulation program
|
||||
# policycoreutils # SELinux policy core utilities. Can be excluded
|
||||
# procps-ng # System and process monitoring utilities
|
||||
# rootfiles # The basic required files for the root user's directory
|
||||
# rpm # The RPM package management system
|
||||
# selinux-policy-targeted # SELinux targeted policy. Can be excluded
|
||||
# setup # A set of system configuration and setup files
|
||||
# shadow-utils # Utilities for managing accounts and shadow password files
|
||||
# sssd-common # Common files for the SSSD. Can be excluded
|
||||
# sssd-kcm # An implementation of a Kerberos KCM server. Can be excluded
|
||||
# sudo # Allows restricted root access for specified users
|
||||
# systemd # System and Service Manager
|
||||
# util-linux # Collection of basic system utilities
|
||||
# vim-minimal # A minimal version of the VIM editor
|
||||
|
||||
## Default packages found in hidden `core` group (`dnf group info --hidden core`)
|
||||
# NetworkManager # Network connection manager and user applications
|
||||
# dnf5-plugins # Plugins for dnf5
|
||||
# dracut-config-rescue # dracut configuration to turn on rescue image generation
|
||||
# firewalld # A firewall daemon with D-Bus interface providing a dynamic firewall
|
||||
# fwupd # Firmware update daemon
|
||||
# plymouth # Graphical Boot Animation and Logger
|
||||
# prefixdevname # Udev helper utility that provides network interface naming using user defined prefix
|
||||
# systemd-resolved # Network Name Resolution manager
|
||||
# zram-generator-defaults # Default configuration for zram-generator
|
||||
|
||||
## Optionnal packages found in hidden `core` group (`dnf group info --hidden core`)
|
||||
## Not installed by default unless "@core --optional" is used
|
||||
# dracut-config-generic
|
||||
# initial-setup
|
||||
# initscripts
|
||||
|
||||
%end # End of the packages section
|
||||
@@ -0,0 +1,18 @@
|
||||
# __ ____ ____ _____
|
||||
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
|
||||
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
|
||||
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
|
||||
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
|
||||
# /_/ /____/
|
||||
|
||||
# Packages to be used to create a Fedora Remix and comply Fedora Remix legal guidelines: https://fedoraproject.org/wiki/Remix
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
|
||||
fedora-remix-logos # Fedora Remix logos
|
||||
generic-release # Generic release files
|
||||
generic-logos # Icons and pictures
|
||||
generic-release-common # Generic release files
|
||||
generic-release-notes # Release Notes
|
||||
|
||||
%end # End of the packages section
|
||||
@@ -0,0 +1,12 @@
|
||||
# Hand-picked packages
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
|
||||
pciutils # PCI bus related utilities
|
||||
libusb # Library for accessing USB devices
|
||||
usbutils # Linux USB utilities
|
||||
curl # transfer a URL
|
||||
wget # An advanced file and recursive website downloader
|
||||
nano # A small text editor
|
||||
|
||||
%end # End of the packages section
|
||||
@@ -0,0 +1,61 @@
|
||||
# __ ____ ____ _____
|
||||
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
|
||||
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
|
||||
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
|
||||
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
|
||||
# /_/ /____/
|
||||
|
||||
# Extended physical hardware support. Useful for bare metal deployments.
|
||||
|
||||
%packages --exclude-weakdeps
|
||||
|
||||
@hardware-support
|
||||
## Mandatory packages found in hidden `hardware-support` group
|
||||
# alsa-sof-firmware # Audio drivers and firmware for ALSA. Essential for audio functionality.
|
||||
# amd-gpu-firmware # Firmware for AMD GPUs. Required for proper GPU operation.
|
||||
# atheros-firmware # Firmware for Atheros wireless network adapters. Critical for wireless connectivity.
|
||||
# b43-fwcutter # Utility for cutting firmware files for B43 drivers. Needed for driver compatibility.
|
||||
# b43-openfwwf # Driver and firmware for B43 network cards. Essential for network card operation.
|
||||
# brcmfmac-firmware # Firmware for Broadcom MAC controllers. Required for wireless and wired network performance.
|
||||
# cirrus-audio-firmware # Firmware for Cirrus Logic audio chips. Necessary for audio hardware support.
|
||||
# intel-audio-firmware # Firmware for Intel audio processors. Required for integrated audio functionality.
|
||||
# intel-gpu-firmware # Firmware for Intel GPUs. Essential for GPU operation.
|
||||
# intel-vsc-firmware # Firmware for Intel Video Scheduling Controller. Required for GPU performance.
|
||||
# iwlegacy-firmware # Legacy firmware for older Intel wireless cards. Needed for compatibility.
|
||||
# iwlwifi-dvm-firmware # Firmware for Intel Wireless Link 5100/5200 series. Crucial for wireless connectivity.
|
||||
# iwlwifi-mvm-firmware # Firmware for Intel Wireless Link 5300/5400 series. Required for wireless performance.
|
||||
# libertas-firmware # Firmware for Broadcom wireless network cards. Essential for wireless connectivity.
|
||||
# mt7xxx-firmware # Firmware for MediaTek wireless network adapters. Required for wireless connectivity.
|
||||
# nvidia-gpu-firmware # Firmware for NVIDIA GPUs. Essential for GPU operation.
|
||||
# nxpwireless-firmware # Firmware for NXP wireless network adapters. Required for wireless connectivity.
|
||||
# realtek-firmware # Firmware for Realtek network adapters and audio devices. Essential for various device support.
|
||||
# tiwilink-firmware # Firmware for TI WiLink wireless network adapters. Required for wireless connectivity.
|
||||
|
||||
## Optional packages found in hidden `hardware-support` group
|
||||
## Not installed by default unless "@hardware-support --optional" is used
|
||||
# acpi # Command-line ACPI client
|
||||
# acpitool # Command line ACPI client
|
||||
# alsa-firmware # Firmware for several ALSA-supported sound cards
|
||||
# atmel-firmware # Firmware for Atmel at76c50x wireless network chips
|
||||
# cmospwd # BIOS password cracker utility
|
||||
# dvb-firmware # Firmware for various DVB broadcast receivers
|
||||
# gpsd # Service daemon for mediating access to a GPS
|
||||
# gpsd-clients # Clients for gpsd
|
||||
# hddtemp # Hard disk temperature tool
|
||||
# hdparm # A utility for displaying and/or setting hard disk parameters
|
||||
# iscan-firmware # Firmware for Epson flatbed scanners
|
||||
# libifp # General-purpose library-driver for iRiver's iFP portable audio players
|
||||
# lsscsi # List SCSI devices (or hosts) and associated information
|
||||
# mlxsw_spectrum-firmware # Firmware for Mellanox Spectrum 1/2/3 Switches
|
||||
# mrvlprestera-firmware # Firmware for Marvell Prestera Switchdev/ASIC devices
|
||||
# netronome-firmware # Firmware for Netronome Smart NICs
|
||||
# opensc # Smart card library and applications
|
||||
# pcsc-lite # PC/SC Lite smart card framework and applications
|
||||
# pcsc-lite-ccid # Generic USB CCID smart card reader driver
|
||||
# qcom-accel-firmware # Firmware for Qualcomm Technologies data center / Open-vRAN Accelerators
|
||||
# qed-firmware # Firmware for Marvell FastLinQ adapters family
|
||||
# radeontop # AMD Radeon video cards monitoring utility
|
||||
# wpan-tools # Userspace tools for the Linux IEEE 802.15.4 stack
|
||||
# zd1211-firmware # Firmware for wireless devices based on zd1211 chipset
|
||||
|
||||
%end # End of the packages section
|
||||
@@ -0,0 +1,5 @@
|
||||
%packages --exclude-weakdeps # Beginning of the packages section. Excludes weak package dependencies.
|
||||
|
||||
virt-manager # Install virt-manager, a graphical front-end for QEMU/KVM
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,56 @@
|
||||
# Virt-manager post-installation configuration
|
||||
|
||||
%post --nochroot --log=/mnt/sysimage/root/vmm-post-scripts.log # Beginning of %post section
|
||||
|
||||
# Create a file to autostart virt-manager
|
||||
cat > /mnt/sysimage/etc/xdg/autostart/virt-manager.desktop << EOF
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=Virtual Machine Manager
|
||||
Exec=virt-manager
|
||||
EOF
|
||||
|
||||
# Modify the default virt-manager behavior for misc. options
|
||||
cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.virt-manager.virt-manager.gschema.override<< EOF
|
||||
|
||||
[org.virt-manager.virt-manager]
|
||||
xmleditor-enabled=true
|
||||
manager-window-height=600
|
||||
manager-window-width=200
|
||||
|
||||
[org.virt-manager.virt-manager.connections]
|
||||
uris=['qemu:///system', 'qemu:///session']
|
||||
autoconnect=['qemu:///session']
|
||||
|
||||
[org.virt-manager.virt-manager.vmlist-fields]
|
||||
cpu-usage=false
|
||||
|
||||
[org.virt-manager.virt-manager.stats]
|
||||
update-interval=3
|
||||
enable-disk-poll=true
|
||||
enable-memory-poll=true
|
||||
enable-net-poll=true
|
||||
|
||||
[org.virt-manager.virt-manager.console]
|
||||
scaling=2
|
||||
resize-guest=1
|
||||
autoconnect=false
|
||||
|
||||
[org.virt-manager.virt-manager.details]
|
||||
show-toolbar=false
|
||||
|
||||
[org.virt-manager.virt-manager.new-vm]
|
||||
storage-format='raw'
|
||||
cpu-default='host-model'
|
||||
graphics-type='spice'
|
||||
|
||||
[org.virt-manager.virt-manager.confirm]
|
||||
forcepoweroff=false
|
||||
removedev=false
|
||||
unapplied-dev=false
|
||||
|
||||
EOF
|
||||
|
||||
glib-compile-schemas /mnt/sysimage/usr/share/glib-2.0/schemas/
|
||||
|
||||
%end # End of the %post section
|
||||
@@ -0,0 +1,5 @@
|
||||
# Fedora 43 repositories
|
||||
|
||||
repo --name=fedora --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64 # Official Fedora mirror
|
||||
repo --name=updates --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f43&arch=x86_64 # Official Fedora updates mirror
|
||||
url --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-43&arch=x86_64 # Official Fedora updates mirror
|
||||
@@ -0,0 +1,4 @@
|
||||
# Fedora Rawhide repositories
|
||||
|
||||
repo --name=rawhide --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64
|
||||
url --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64
|
||||
@@ -0,0 +1,21 @@
|
||||
# RPM Fusion non-free repositories
|
||||
|
||||
# RPM fusion repositories
|
||||
# For the current release tree
|
||||
repo --name=rpmfusion-nonfree --mirrorlist=https://mirrors.rpmfusion.org/mirrorlist?repo=nonfree-fedora-$releasever&arch=$basearch --includepkgs=rpmfusion-nonfree-release
|
||||
# Updates for the current release tree
|
||||
repo --name=rpmfusion-nonfree-updates --mirrorlist=https://mirrors.rpmfusion.org/mirrorlist?repo=nonfree-fedora-updates-released-$releasever&arch=$basearch --includepkgs=rpmfusion-nonfree-release
|
||||
|
||||
%post
|
||||
|
||||
# Import RPM Fusion PGP Key. Courtesy of https://github.com/rpmfusion/rpmfusion-nonfree-remix-kickstarts/blob/master/rpmfusion-nonfree-live-base.ks
|
||||
echo "== RPM Fusion Nonfree: Base section =="
|
||||
echo "Importing RPM Fusion keys"
|
||||
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-rpmfusion-nonfree-fedora-*-primary
|
||||
echo "List of packages from RPM Fusion Nonfree:"
|
||||
rpm -qa --qf '%{NAME} %{SIGGPG:pgpsig} %{SIGPGP:pgpsig} \n' | grep -e 3DE8C682E38EE9BC0FDFEA47FCAE2EA87F858107 | awk ' { print $1 } ' | sort
|
||||
echo "List of incuded RPM Fusion packages with their size:"
|
||||
rpm -q --qf '%{SIZE} %{NAME}\n' $(rpm -qa --qf '%{NAME} %{SIGGPG:pgpsig} %{SIGPGP:pgpsig} \n' | grep -e 3DE8C682E38EE9BC0FDFEA47FCAE2EA87F858107 | awk ' { print $1 } ') | sort -n
|
||||
echo
|
||||
|
||||
%end
|
||||
@@ -0,0 +1,9 @@
|
||||
# Core post-installation configuration
|
||||
|
||||
%post --log=/mnt/sysimage/root/post.log # Beginning of the post-installation section. Log all messages to a given file
|
||||
|
||||
localectl set-keymap ch-fr # Set keymap to `ch-fr`. Alternatively, `us` can be picked.
|
||||
dnf update -y # Update the system
|
||||
grub2-mkconfig -o /boot/grub2/grub.cfg # Unsure it is actually useful
|
||||
|
||||
%end # End of the %post section
|
||||
@@ -0,0 +1,5 @@
|
||||
# Post-installation no-chroot section
|
||||
|
||||
%post --nochroot --log=/mnt/sysimage/root/post-nochroot.log # Beginning of the post-installation section. Log all messages to a given file
|
||||
|
||||
%end # End of the %post section
|
||||
@@ -0,0 +1 @@
|
||||
# Server-specific post-install tasks
|
||||
@@ -0,0 +1,5 @@
|
||||
# Pre-installation kickstart section
|
||||
|
||||
%pre --log=/mnt/sysimage/root/pre.log Beginning of the pre section. Log all messages to a given file
|
||||
|
||||
%end # End of the %post section
|
||||
@@ -0,0 +1,5 @@
|
||||
# Pre-installation kickstart section
|
||||
|
||||
%pre --log=/mnt/sysimage/root/pre-install.log Beginning of the pre-installation section. Log all messages to a given file
|
||||
|
||||
%end # End of the %post section
|
||||
@@ -0,0 +1,8 @@
|
||||
# Encrypted storage configuration
|
||||
|
||||
zerombr # Destroy all the contents of disks with invalid partition tables or other formatting unrecognizable to the installer
|
||||
clearpart --all --initlabel # Erase all partitions and Initializes the disk label to the default for the target architecture
|
||||
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label=efi # Creates a 512 MiB EFI system partition
|
||||
part /boot --fstype="ext4" --size=2048 --label=boot # Creates a 2048 MiB ext4 boot partition
|
||||
part / --fstype="ext4" --grow --label=root --mkfsoptions="-O encrypt,fast_commit" --encrypted --passphrase= # Create a single encrypted root partition with the remaining space.
|
||||
@@ -0,0 +1,8 @@
|
||||
# Standard storage configuration
|
||||
|
||||
zerombr # Destroy all the contents of disks with invalid partition tables or other formatting unrecognizable to the installer
|
||||
clearpart --all --initlabel # Erase all partitions and Initializes the disk label to the default for the target architecture
|
||||
|
||||
part /boot/efi --fstype="efi" --size=512 --fsoptions="umask=0077,shortname=winnt" --label=efi # Creates a 512 MiB EFI system partition
|
||||
part /boot --fstype="ext4" --size=2048 --label=boot # Creates a 2048 MiB ext4 boot partition
|
||||
part / --fstype="ext4" --grow --label=root --mkfsoptions="-O encrypt,fast_commit" # Create a single root partition with the remaining space
|
||||
@@ -0,0 +1,6 @@
|
||||
# Validation fragment - success if empty
|
||||
|
||||
%post
|
||||
# If this is being run, it's a success
|
||||
echo SUCCESS > /root/RESULT
|
||||
%end
|
||||
@@ -0,0 +1,197 @@
|
||||
"""Manifest loading and variant expansion.
|
||||
|
||||
This module provides functionality for processing manifest YAML files, which
|
||||
are used in batch recipe generation mode. It has two main responsibilities:
|
||||
|
||||
1. Loading and Parsing Manifests
|
||||
- Reads YAML files containing recipe configurations
|
||||
- Validates basic structure of the manifest
|
||||
|
||||
2. Variant Expansion
|
||||
- Converts compact manifest entries with list values into individual variants
|
||||
- Uses cartesian product to generate all combinations
|
||||
- Enables generating many recipes from a single manifest entry
|
||||
|
||||
Manifest Example:
|
||||
recipes:
|
||||
- name: virtual-desktop
|
||||
variants:
|
||||
- version: 43
|
||||
desktop: gnome
|
||||
- version: ["43", "rawhide"]
|
||||
storage: ["standard", "encrypted"]
|
||||
|
||||
The above would generate 4 recipes (2 versions × 2 storage types).
|
||||
|
||||
The key insight is that list values in variants represent "multiple values for
|
||||
this field", and we want to generate one recipe for each combination. This is
|
||||
the classic cartesian product problem.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from itertools import product
|
||||
from pathlib import Path
|
||||
from typing import Dict, List
|
||||
|
||||
import yaml
|
||||
|
||||
|
||||
class ManifestProcessor:
|
||||
"""Load and process recipe manifests.
|
||||
|
||||
This class handles the loading and processing of manifest YAML files.
|
||||
A manifest is a YAML file that defines which recipes to generate and
|
||||
what variations (variants) of each recipe to create.
|
||||
|
||||
Key features:
|
||||
- Loads and parses YAML manifest files
|
||||
- Validates manifest structure (schema-level checks)
|
||||
- Expands variants with list values into all combinations
|
||||
|
||||
The variant expansion is particularly useful for generating multiple
|
||||
versions (e.g., both Fedora 43 and rawhide) or multiple configurations
|
||||
(e.g., both standard and encrypted storage) in a compact format.
|
||||
"""
|
||||
|
||||
def __init__(self, project_root: Path):
|
||||
"""Initialize the processor with project root path.
|
||||
|
||||
Args:
|
||||
project_root: Path to the phyllomeos project root directory.
|
||||
Not currently used but available for future enhancements.
|
||||
"""
|
||||
self.project_root = project_root
|
||||
|
||||
def load(self, path: Path) -> Dict:
|
||||
"""Load and parse manifest YAML file.
|
||||
|
||||
This method reads a YAML file from disk and parses it into a Python
|
||||
dictionary. It's a simple wrapper around yaml.safe_load that provides
|
||||
error handling and a consistent interface.
|
||||
|
||||
Args:
|
||||
path: Path to the manifest YAML file
|
||||
|
||||
Returns:
|
||||
Parsed manifest as a dictionary
|
||||
|
||||
Raises:
|
||||
FileNotFoundError: If the file doesn't exist
|
||||
yaml.YAMLError: If the file contains invalid YAML
|
||||
"""
|
||||
with open(path, encoding='utf-8') as f:
|
||||
return yaml.safe_load(f)
|
||||
|
||||
def validate(self, manifest: Dict) -> List[str]:
|
||||
"""Validate manifest structure.
|
||||
|
||||
This method performs schema-level validation of a manifest dictionary.
|
||||
It checks that:
|
||||
1. The top-level 'recipes' key exists
|
||||
2. Each recipe configuration has a 'name' field
|
||||
3. Each recipe configuration has a 'variants' field
|
||||
4. Each variant has a 'version' field
|
||||
|
||||
This is a basic structural check that catches obvious errors before
|
||||
trying to process the manifest. It doesn't validate the content of
|
||||
individual recipes (that's done by RecipeGenerator and validators).
|
||||
|
||||
Args:
|
||||
manifest: The manifest dictionary to validate
|
||||
|
||||
Returns:
|
||||
List of validation error strings (empty if valid)
|
||||
"""
|
||||
errors = []
|
||||
|
||||
# Check for required top-level key
|
||||
if 'recipes' not in manifest:
|
||||
errors.append("Manifest missing 'recipes' key")
|
||||
return errors # Can't proceed without recipes
|
||||
|
||||
# Validate each recipe configuration
|
||||
for recipe_config in manifest.get('recipes', []):
|
||||
if 'name' not in recipe_config:
|
||||
errors.append("Recipe config missing 'name' key")
|
||||
if 'variants' not in recipe_config:
|
||||
errors.append(f"Recipe '{recipe_config.get('name', 'unnamed')}' "
|
||||
"missing 'variants' key")
|
||||
|
||||
return errors
|
||||
|
||||
def expand_variants(self, variants: List[Dict]) -> List[Dict]:
|
||||
"""Expand variants with list values into individual variants.
|
||||
|
||||
This is the core functionality of the manifest processor. It converts
|
||||
a compact representation with list values into a complete list of
|
||||
individual variants by generating the cartesian product.
|
||||
|
||||
Example Input:
|
||||
[
|
||||
{
|
||||
'version': ['43', 'rawhide'],
|
||||
'storage': ['standard', 'encrypted'],
|
||||
'desktop': 'gnome'
|
||||
},
|
||||
{
|
||||
'version': '43',
|
||||
'security': 'devel'
|
||||
}
|
||||
]
|
||||
|
||||
Example Output:
|
||||
[
|
||||
{'version': '43', 'storage': 'standard', 'desktop': 'gnome'},
|
||||
{'version': '43', 'storage': 'encrypted', 'desktop': 'gnome'},
|
||||
{'version': 'rawhide', 'storage': 'standard', 'desktop': 'gnome'},
|
||||
{'version': 'rawhide', 'storage': 'encrypted', 'desktop': 'gnome'},
|
||||
{'version': '43', 'security': 'devel'}
|
||||
]
|
||||
|
||||
How it works:
|
||||
1. For each variant dictionary, separate list-valued keys from scalar keys
|
||||
2. If there are no lists, keep the variant as-is
|
||||
3. If there are lists, generate the cartesian product of all list values
|
||||
4. For each combination, create a new variant with scalar values preserved
|
||||
5. Return the complete list of expanded variants
|
||||
|
||||
This enables generating many recipes from a single compact manifest entry,
|
||||
making it easy to generate variations across multiple dimensions.
|
||||
|
||||
Args:
|
||||
variants: List of variant dictionaries, where some values may be lists
|
||||
|
||||
Returns:
|
||||
Expanded list where each variant has only scalar (non-list) values
|
||||
"""
|
||||
expanded = []
|
||||
|
||||
for variant in variants:
|
||||
# Separate list-valued keys from scalar keys
|
||||
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:
|
||||
# No lists to expand, keep variant as-is
|
||||
expanded.append(variant)
|
||||
continue
|
||||
|
||||
# Get the cartesian product of all list values
|
||||
keys = list(list_keys.keys())
|
||||
values_product = product(*[list_keys[k] for k in keys])
|
||||
|
||||
# Create a new variant for each combination
|
||||
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
|
||||
@@ -0,0 +1,42 @@
|
||||
import subprocess
|
||||
import re
|
||||
|
||||
# Get all package names from your config file
|
||||
packages = []
|
||||
with open('core-packages-hardware-support.cfg', 'r') as f:
|
||||
for line in f:
|
||||
if line.strip() and not line.startswith('#') and '#' not in line:
|
||||
# Extract package name (everything before the first space or #)
|
||||
package = line.strip().split('#')[0].strip()
|
||||
if package and not package.startswith('%'):
|
||||
packages.append(package)
|
||||
|
||||
# Get summaries using dnf info
|
||||
summaries = {}
|
||||
for package in packages:
|
||||
try:
|
||||
result = subprocess.run(['dnf', 'info', package],
|
||||
capture_output=True, text=True, timeout=30)
|
||||
if result.returncode == 0:
|
||||
# Extract summary line
|
||||
summary_match = re.search(r'Summary\s*:\s*(.+)', result.stdout)
|
||||
if summary_match:
|
||||
summaries[package] = summary_match.group(1).strip()
|
||||
except Exception as e:
|
||||
print(f"Error getting info for {package}: {e}")
|
||||
|
||||
# Now you can generate your updated package list with summaries
|
||||
with open('core-packages-hardware-support.cfg', 'r') as f:
|
||||
lines = f.readlines()
|
||||
|
||||
new_lines = []
|
||||
for line in lines:
|
||||
if line.strip() and not line.startswith('#') and not line.startswith('%'):
|
||||
package = line.strip().split('#')[0].strip()
|
||||
if package in summaries:
|
||||
line = f"{package} # {summaries[package]}\n"
|
||||
new_lines.append(line)
|
||||
|
||||
# Write back to file (or save as new file)
|
||||
with open('updated-packages.cfg', 'w') as f:
|
||||
f.writelines(new_lines)
|
||||
@@ -0,0 +1,799 @@
|
||||
"""Core recipe generation logic.
|
||||
|
||||
This module is the heart of the Phyllome OS kickstart recipe generation system.
|
||||
It works like a sophisticated template engine that:
|
||||
|
||||
1. Reads template definitions from recipe_templates.yaml
|
||||
2. Each template defines:
|
||||
- Required ingredients (always included, like base system components)
|
||||
- Modifiers (user choices like desktop environment, storage type)
|
||||
- Optional ingredients (included based on modifier values)
|
||||
- Versioned ingredients (Fedora version-specific paths)
|
||||
- Conditional ingredients (complex logic based on multiple factors)
|
||||
- Flags (boolean on/off switches for features)
|
||||
|
||||
3. When you call generate(), it:
|
||||
- Looks up the template for your recipe type (e.g., "virtual-desktop")
|
||||
- Processes all the modifier values you passed in
|
||||
- Builds a list of %include directives pointing to ingredient fragments
|
||||
- Returns a complete kickstart file with header and includes
|
||||
|
||||
Think of it as a "recipe assembler" - the templates are the master recipes,
|
||||
modifiers are your customizations, and the output is a complete installation
|
||||
script that pulls in the right ingredient fragments.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
from typing import Dict, List
|
||||
|
||||
from validators import (
|
||||
TemplateValidator,
|
||||
ContentValidator,
|
||||
SemanticValidator,
|
||||
validate_manifest,
|
||||
)
|
||||
|
||||
import yaml
|
||||
|
||||
# ASCII art banner displayed at the top of every generated recipe file.
|
||||
# This decorative header identifies the output as a Phyllome OS kickstart recipe.
|
||||
# The backslashes are escaped because they're inside a Python string.
|
||||
HEADER_ASCII_ART = [
|
||||
"# __ ____ ____ _____",
|
||||
"# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \\/ ___/",
|
||||
"# / __ \\/ __ \\/ / / / / / __ \\/ __ `__ \\/ _ \\ / / / /\\__ \\",
|
||||
"# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /",
|
||||
"# / .___/_/ /_/\\__, /_/_/\\____/_/ /_/ /_/\\___/ \\____//____/",
|
||||
"# /_/ /____/",
|
||||
"",
|
||||
]
|
||||
|
||||
|
||||
class RecipeGenerator:
|
||||
"""Generate kickstart recipes from templates and modifiers.
|
||||
|
||||
This is the core class that powers the recipe generation system. It works by:
|
||||
1. Loading template definitions from a YAML file (recipe_templates.yaml)
|
||||
2. Taking a recipe type (like "virtual-desktop") and version (like "43")
|
||||
3. Accepting optional modifiers (like desktop environment, storage type, security mode)
|
||||
4. Building a list of %include directives that reference ingredient fragments
|
||||
5. Outputting a complete kickstart file with header and include statements
|
||||
|
||||
The templates define which ingredients are required, optional, conditional, or version-specific.
|
||||
Modifiers control which optional ingredients get included based on user preferences.
|
||||
|
||||
Example usage:
|
||||
generator = RecipeGenerator(Path('recipe_templates.yaml'))
|
||||
recipe = generator.generate('virtual-desktop', '43', desktop='gnome', storage='encrypted')
|
||||
# Returns a string containing the complete kickstart recipe
|
||||
"""
|
||||
|
||||
def __init__(self, templates_file: Path):
|
||||
"""Initialize RecipeGenerator.
|
||||
|
||||
Args:
|
||||
templates_file: Path to the templates YAML file.
|
||||
This should be the full path to recipe_templates.yaml.
|
||||
"""
|
||||
self.project_root = templates_file.parent.parent
|
||||
self.templates = self._load_templates(templates_file)
|
||||
|
||||
def _load_templates(self, path: Path) -> Dict:
|
||||
"""Load recipe templates from YAML file.
|
||||
|
||||
This method reads the templates YAML file and extracts the 'templates' section.
|
||||
The YAML file contains a top-level 'templates' key with all recipe type definitions.
|
||||
|
||||
Args:
|
||||
path: Path to the templates YAML file (can be absolute or relative)
|
||||
|
||||
Returns:
|
||||
Dictionary mapping recipe types to their template definitions.
|
||||
Example structure:
|
||||
{
|
||||
'virtual-desktop': {
|
||||
'description': 'Virtual machine with desktop',
|
||||
'required': ['ingredients/base.cfg', ...],
|
||||
'modifiers': {'desktop': {...}, 'storage': {...}},
|
||||
'optional': {...},
|
||||
'versioned': {...},
|
||||
'conditional': {...},
|
||||
'flags': {...}
|
||||
},
|
||||
...
|
||||
}
|
||||
|
||||
Raises:
|
||||
SystemExit: If the file is not found or contains invalid YAML
|
||||
"""
|
||||
try:
|
||||
if path.is_absolute():
|
||||
template_path = path
|
||||
else:
|
||||
# Resolve relative paths from project root
|
||||
template_path = self.project_root / path
|
||||
with open(template_path, encoding='utf-8') as f:
|
||||
data = yaml.safe_load(f)
|
||||
# Extract the 'templates' section - the YAML file has this as top-level key
|
||||
return data['templates']
|
||||
except FileNotFoundError:
|
||||
print(f"Error: Templates file not found: {template_path}")
|
||||
exit(2)
|
||||
except yaml.YAMLError as e:
|
||||
print(f"Error: Invalid YAML in {template_path}: {e}")
|
||||
exit(2)
|
||||
|
||||
def generate(self, recipe_type: str, version: str, **modifiers) -> str:
|
||||
"""Generate a complete kickstart recipe from a template with modifiers.
|
||||
|
||||
This is the main entry point for recipe generation. It takes a recipe type
|
||||
(like "virtual-desktop"), a Fedora version, and any number of modifier options,
|
||||
then returns a complete kickstart file as a string.
|
||||
|
||||
Args:
|
||||
recipe_type: The type of recipe to generate. Must match a key in the templates.
|
||||
Examples: 'virtual-desktop', 'server', 'hypervisor'
|
||||
version: Fedora version string, typically '43' or 'rawhide'.
|
||||
This affects which versioned ingredients are included.
|
||||
**modifiers: Keyword arguments for recipe customization:
|
||||
- desktop: 'gnome' or 'labwc'
|
||||
- storage: 'standard' or 'encrypted'
|
||||
- security: 'secure' or 'devel'
|
||||
- cpu: 'generic', 'amdcpu', or 'intelcpu'
|
||||
- gpu: 'none' or 'intelgpu'
|
||||
- guest_agents: True/False for virtualization tools
|
||||
- And many others...
|
||||
|
||||
Returns:
|
||||
A string containing the complete kickstart recipe, including:
|
||||
- ASCII art header
|
||||
- Description comment
|
||||
- %include directives for all required and selected ingredients
|
||||
|
||||
Raises:
|
||||
SystemExit: If the recipe_type is not found in templates
|
||||
"""
|
||||
if recipe_type not in self.templates:
|
||||
print(f"Error: Unknown recipe type: {recipe_type}")
|
||||
exit(1)
|
||||
|
||||
template = self.templates[recipe_type]
|
||||
|
||||
# Build the output in two parts:
|
||||
# 1. Header with ASCII art and description
|
||||
# 2. All the %include lines for ingredients
|
||||
lines = self._build_header(template['description'])
|
||||
lines.extend(self._build_includes(template, version, modifiers))
|
||||
|
||||
# Join all lines with newlines to create the final recipe string
|
||||
return '\n'.join(lines)
|
||||
|
||||
generate_recipe = generate # Compatibility alias - old code may use this name
|
||||
|
||||
def _build_header(self, description: str) -> List[str]:
|
||||
"""Build the ASCII art header and description for the recipe.
|
||||
|
||||
Creates the decorative banner that appears at the top of every generated
|
||||
kickstart file. This helps identify the file as a Phyllome OS recipe and
|
||||
describes what type of system it will install.
|
||||
|
||||
Args:
|
||||
description: Human-readable description of the recipe type
|
||||
(e.g., "Virtual desktop environment")
|
||||
|
||||
Returns:
|
||||
List of strings representing the header lines, including:
|
||||
- The ASCII art banner (from HEADER_ASCII_ART constant)
|
||||
- A comment line with the recipe description
|
||||
- An empty line to separate header from content
|
||||
"""
|
||||
header = HEADER_ASCII_ART.copy()
|
||||
header.append(f"# {description}")
|
||||
header.append("")
|
||||
return header
|
||||
|
||||
def _build_includes(self, template: Dict, version: str, modifiers: Dict) -> List[str]:
|
||||
"""Build %include lines from template and modifiers.
|
||||
|
||||
This is the most complex method in the class - it's the core logic that
|
||||
determines which ingredient fragments get included in the final recipe.
|
||||
|
||||
The method processes six different types of ingredient sources:
|
||||
|
||||
1. REQUIRED: Always included, no conditions
|
||||
Example: base system packages, partition layout
|
||||
|
||||
2. MODIFIERS: User-specified options that map to ingredient paths
|
||||
Example: desktop='gnome' → ingredients/desktops/gnome.cfg
|
||||
|
||||
3. OPTIONAL: Included only if the modifier is present
|
||||
Example: gpu='intelgpu' → ingredients/gpu/intel.cfg
|
||||
|
||||
4. VERSIONED: Paths with {version} placeholder substituted
|
||||
Example: ingredients/repo/f{version}.cfg → ingredients/repo/f43.cfg
|
||||
|
||||
5. CONDITIONAL: Complex logic based on modifier values
|
||||
Example: If security='devel', include development tools
|
||||
|
||||
6. FLAGS: Boolean on/off switches
|
||||
Example: hardware_support=True → ingredients/hardware-detection.cfg
|
||||
|
||||
The 'seen' set prevents duplicate includes if multiple paths reference
|
||||
the same ingredient.
|
||||
|
||||
Args:
|
||||
template: The template dictionary for this recipe type
|
||||
version: Fedora version string for versioned paths
|
||||
modifiers: Dictionary of user-specified options
|
||||
|
||||
Returns:
|
||||
List of %include directive strings, one per ingredient
|
||||
"""
|
||||
includes = []
|
||||
seen = set() # Track which ingredients we've already added
|
||||
|
||||
# Add version to modifiers so templates can reference it
|
||||
modifiers = modifiers.copy()
|
||||
modifiers['version'] = version
|
||||
|
||||
# === 1. REQUIRED INGREDIENTS ===
|
||||
# These are always included, regardless of user options
|
||||
# Example: base system, bootloader, partition scheme
|
||||
for item in template.get('required', []):
|
||||
if isinstance(item, dict):
|
||||
# Dict format allows conditional logic within required
|
||||
fragment_path = list(item.values())[0]
|
||||
else:
|
||||
# Simple string path
|
||||
fragment_path = item
|
||||
|
||||
if fragment_path not in seen:
|
||||
includes.append(f"%include {fragment_path}")
|
||||
seen.add(fragment_path)
|
||||
|
||||
# === 2. MODIFIER INGREDIENTS ===
|
||||
# Process user-specified options like desktop, storage, security
|
||||
for mod_key, mod_value in modifiers.items():
|
||||
# Normalize key: convert underscores to hyphens for template lookup
|
||||
# This allows Python-style snake_case (guest_agents) to match
|
||||
# YAML-style kebab-case (guest-agents)
|
||||
mod_key_normalized = mod_key.replace("_", "-")
|
||||
if mod_key_normalized in template.get("modifiers", {}):
|
||||
mod_key_to_use = mod_key_normalized
|
||||
elif mod_key in template.get("modifiers", {}):
|
||||
mod_key_to_use = mod_key
|
||||
else:
|
||||
# This modifier doesn't have a mapping in the template, skip it
|
||||
continue
|
||||
mod_config = template["modifiers"][mod_key_to_use]
|
||||
|
||||
# Handle nested dict modifiers with string values
|
||||
# Example: mod_config = {'gnome': 'ingredients/gnome.cfg', 'labwc': 'ingredients/labwc.cfg'}
|
||||
# mod_value = 'gnome'
|
||||
# Result: include ingredients/gnome.cfg
|
||||
if isinstance(mod_config, dict) and isinstance(mod_value, str):
|
||||
if mod_value in mod_config:
|
||||
fragment_path = mod_config[mod_value]
|
||||
if isinstance(fragment_path, list):
|
||||
# Some modifiers map to multiple ingredients
|
||||
for fp in fragment_path:
|
||||
if fp is not None and fp not in seen:
|
||||
includes.append(f"%include {fp}")
|
||||
seen.add(fp)
|
||||
elif fragment_path and fragment_path not in seen:
|
||||
includes.append(f"%include {fragment_path}")
|
||||
seen.add(fragment_path)
|
||||
|
||||
# Handle list modifiers
|
||||
# Example: User passes multiple values like hypervisor_type=['kvm', 'xen']
|
||||
elif isinstance(mod_config, dict) and isinstance(mod_value, list):
|
||||
for item in mod_value:
|
||||
if item in mod_config:
|
||||
fragment_path = mod_config[item]
|
||||
if isinstance(fragment_path, list):
|
||||
for fp in fragment_path:
|
||||
if fp is not None and fp not in seen:
|
||||
includes.append(f"%include {fp}")
|
||||
seen.add(fp)
|
||||
elif fragment_path and fragment_path not in seen:
|
||||
includes.append(f"%include {fragment_path}")
|
||||
seen.add(fragment_path)
|
||||
|
||||
# === 3. OPTIONAL INGREDIENTS ===
|
||||
# Included based on modifier presence and value
|
||||
# More flexible than modifiers - can handle complex nested structures
|
||||
for opt_key, opt_config in template.get("optional", {}).items():
|
||||
if opt_key in modifiers:
|
||||
value = modifiers[opt_key]
|
||||
|
||||
# Case 1: opt_config is nested dict, value is string/int
|
||||
# Example: opt_config = {'gnome': 'ingredients/gnome.cfg'}
|
||||
# value = 'gnome'
|
||||
if isinstance(opt_config, dict) and not isinstance(value, (dict, list)):
|
||||
if value in opt_config:
|
||||
fragment_path = opt_config[value]
|
||||
if isinstance(fragment_path, list):
|
||||
for fp in fragment_path:
|
||||
if fp is not None and fp not in seen:
|
||||
includes.append(f"%include {fp}")
|
||||
seen.add(fp)
|
||||
elif fragment_path and fragment_path not in seen:
|
||||
includes.append(f"%include {fragment_path}")
|
||||
seen.add(fragment_path)
|
||||
|
||||
# Case 2: opt_config is nested dict, value is dict
|
||||
# Example: value = {'kvm': True, 'xen': False}
|
||||
# Include ingredients for keys that are present
|
||||
elif isinstance(opt_config, dict) and isinstance(value, dict):
|
||||
for nested_key in value:
|
||||
if nested_key in opt_config:
|
||||
nested_value = opt_config[nested_key]
|
||||
if isinstance(nested_value, list):
|
||||
for fp in nested_value:
|
||||
if fp is not None and fp not in seen:
|
||||
includes.append(f"%include {fp}")
|
||||
seen.add(fp)
|
||||
elif nested_value is not None and nested_value not in seen:
|
||||
includes.append(f"%include {nested_value}")
|
||||
seen.add(nested_value)
|
||||
|
||||
# Case 3: opt_config is nested dict, value is boolean True
|
||||
# Include ALL options when value is True
|
||||
elif isinstance(opt_config, dict) and isinstance(value, bool) and value:
|
||||
for nested_key, nested_value in opt_config.items():
|
||||
if isinstance(nested_value, list):
|
||||
for fp in nested_value:
|
||||
if fp is not None and fp not in seen:
|
||||
includes.append(f"%include {fp}")
|
||||
seen.add(fp)
|
||||
elif nested_value is not None and nested_value not in seen:
|
||||
includes.append(f"%include {nested_value}")
|
||||
seen.add(nested_value)
|
||||
|
||||
# Case 4: opt_config is list, value is boolean True
|
||||
# Include all items in the list
|
||||
elif isinstance(opt_config, list) and value is True:
|
||||
for fragment_path in opt_config:
|
||||
if fragment_path is not None and fragment_path not in seen:
|
||||
includes.append(f"%include {fragment_path}")
|
||||
seen.add(fragment_path)
|
||||
|
||||
# === 4. VERSIONED INGREDIENTS ===
|
||||
# Paths that change based on Fedora version
|
||||
# Example: 'repo': 'ingredients/repo/f{version}.cfg'
|
||||
# Becomes: ingredients/repo/f43.cfg or ingredients/repo/frawhide.cfg
|
||||
versioned = template.get('versioned', {})
|
||||
for fragment_path in versioned.values():
|
||||
# Substitute {version} placeholder with actual version
|
||||
resolved_path = fragment_path.format(version=version)
|
||||
if resolved_path not in seen:
|
||||
includes.append(f"%include {resolved_path}")
|
||||
seen.add(resolved_path)
|
||||
|
||||
# === 5. CONDITIONAL INGREDIENTS ===
|
||||
# Similar to optional, but with different template structure
|
||||
# Used for more complex conditional logic
|
||||
conditional = template.get('conditional', {})
|
||||
for mod_key, mod_config in conditional.items():
|
||||
# Support both hyphenated and underscored key names
|
||||
if mod_key.replace('-', '_') in modifiers:
|
||||
value = modifiers[mod_key.replace('-', '_')]
|
||||
elif mod_key in modifiers:
|
||||
value = modifiers[mod_key]
|
||||
else:
|
||||
# This modifier wasn't provided, skip
|
||||
continue
|
||||
|
||||
# Same four cases as optional section above
|
||||
if isinstance(mod_config, dict) and not isinstance(value, (dict, list)):
|
||||
if value in mod_config:
|
||||
fragment_path = mod_config[value]
|
||||
if isinstance(fragment_path, list):
|
||||
for fp in fragment_path:
|
||||
if fp is not None and fp not in seen:
|
||||
includes.append(f"%include {fp}")
|
||||
seen.add(fp)
|
||||
elif fragment_path and fragment_path not in seen:
|
||||
includes.append(f"%include {fragment_path}")
|
||||
seen.add(fragment_path)
|
||||
|
||||
elif isinstance(mod_config, dict) and isinstance(value, dict):
|
||||
for nested_key in value:
|
||||
if nested_key in mod_config:
|
||||
nested_value = mod_config[nested_key]
|
||||
if isinstance(nested_value, list):
|
||||
for fp in nested_value:
|
||||
if fp is not None and fp not in seen:
|
||||
includes.append(f"%include {fp}")
|
||||
seen.add(fp)
|
||||
elif nested_value is not None and nested_value not in seen:
|
||||
includes.append(f"%include {nested_value}")
|
||||
seen.add(nested_value)
|
||||
|
||||
elif isinstance(mod_config, dict) and isinstance(value, bool) and value:
|
||||
for nested_key, nested_value in mod_config.items():
|
||||
if isinstance(nested_value, list):
|
||||
for fp in nested_value:
|
||||
if fp is not None and fp not in seen:
|
||||
includes.append(f"%include {fp}")
|
||||
seen.add(fp)
|
||||
elif nested_value is not None and nested_value not in seen:
|
||||
includes.append(f"%include {nested_value}")
|
||||
seen.add(nested_value)
|
||||
|
||||
elif isinstance(mod_config, list) and isinstance(value, bool) and value:
|
||||
for fragment_path in mod_config:
|
||||
if fragment_path is not None and fragment_path not in seen:
|
||||
includes.append(f"%include {fragment_path}")
|
||||
seen.add(fragment_path)
|
||||
|
||||
# === 6. FLAG INGREDIENTS ===
|
||||
# Simple boolean on/off switches
|
||||
# Example: hardware_support=True → include hardware detection
|
||||
# Only includes when value is exactly True (not False or None)
|
||||
for mod_key, mod_value in modifiers.items():
|
||||
mod_key_normalized = mod_key.replace('_', '-')
|
||||
if mod_key_normalized in template.get('flags', {}):
|
||||
fragment_path = template['flags'][mod_key_normalized]
|
||||
if mod_value is True and fragment_path not in seen:
|
||||
includes.append(f"%include {fragment_path}")
|
||||
seen.add(fragment_path)
|
||||
|
||||
return includes
|
||||
|
||||
def _get_modifier(self, modifiers: dict, key: str, default=None):
|
||||
"""Get modifier value, checking both hyphenated and underscored versions.
|
||||
|
||||
This helper method handles the naming convention mismatch between:
|
||||
- Python code: uses snake_case (e.g., guest_agents)
|
||||
- YAML templates: use kebab-case (e.g., guest-agents)
|
||||
|
||||
It tries both versions so users can pass modifiers using either convention.
|
||||
|
||||
Args:
|
||||
modifiers: Dictionary of modifier values
|
||||
key: The key to look up (will try both this and the hyphenated version)
|
||||
default: Value to return if key is not found
|
||||
|
||||
Returns:
|
||||
The modifier value if found, otherwise the default
|
||||
"""
|
||||
if key in modifiers:
|
||||
return modifiers[key]
|
||||
alt_key = key.replace('_', '-')
|
||||
if alt_key in modifiers:
|
||||
return modifiers[alt_key]
|
||||
return default
|
||||
|
||||
def generate_filename(self, recipe_type: str, version: str, **modifiers) -> str:
|
||||
"""Generate recipe filename from parameters.
|
||||
|
||||
Creates a descriptive filename that encodes the recipe's configuration.
|
||||
This allows users to identify what a recipe does just from its name.
|
||||
|
||||
Filename format:
|
||||
{recipe_type}-{guest_type}-{variant}-{desktop}-{security}-{storage}-{version}.cfg
|
||||
|
||||
Examples:
|
||||
- virtual-desktop_gnome_43.cfg
|
||||
- server_encrypted_43.cfg
|
||||
- hypervisor_kvm_devel_43.cfg
|
||||
|
||||
The method only adds suffixes for non-default values:
|
||||
- GNOME is default → only add if different (labwc)
|
||||
- secure is default → only add if devel
|
||||
- standard is default → only add if encrypted
|
||||
|
||||
Args:
|
||||
recipe_type: Base recipe type (e.g., 'virtual-desktop')
|
||||
version: Fedora version (e.g., '43' or 'rawhide')
|
||||
**modifiers: All the modifier values that affect the recipe
|
||||
|
||||
Returns:
|
||||
Filename string ending in .cfg
|
||||
"""
|
||||
# Build base parts - start with recipe type
|
||||
parts = [recipe_type.replace('_', '-')]
|
||||
|
||||
# Add guest_agents suffix (for both True and False)
|
||||
# Distinguishes between virtual machines and bare metal installs
|
||||
guest_agents = self._get_modifier(modifiers, 'guest_agents')
|
||||
if guest_agents is True:
|
||||
parts.append('virtual')
|
||||
elif guest_agents is False:
|
||||
parts.append('bare-metal')
|
||||
|
||||
# Add hypervisor indicator if present
|
||||
if modifiers.get('hypervisor'):
|
||||
if modifiers.get('hypervisor') in ['base', 'desktop']:
|
||||
if modifiers.get('desktop'):
|
||||
parts.append('hypervisor-desktop')
|
||||
else:
|
||||
parts.append('hypervisor')
|
||||
|
||||
# Add hypervisor_type suffix
|
||||
# For hypervisors, include the type (kvm, xen, etc.)
|
||||
if modifiers.get('hypervisor_type'):
|
||||
ht = modifiers['hypervisor_type']
|
||||
if isinstance(ht, list):
|
||||
# Multiple hypervisor types
|
||||
for h in ht:
|
||||
if h:
|
||||
parts.append(h)
|
||||
elif ht:
|
||||
# Single hypervisor type
|
||||
parts.append(ht)
|
||||
|
||||
# Add desktop
|
||||
desktop = self._get_modifier(modifiers, 'desktop')
|
||||
if desktop:
|
||||
parts.append(desktop)
|
||||
|
||||
# Add security suffix (devel only, since secure is default)
|
||||
# Security defaults to 'secure', so only 'devel' gets noted
|
||||
security = self._get_modifier(modifiers, 'security')
|
||||
if security == 'off':
|
||||
parts.append('devel')
|
||||
|
||||
# Add storage suffix (encrypted only, since standard is default)
|
||||
# Standard storage is default, encrypted gets noted
|
||||
storage = self._get_modifier(modifiers, 'storage')
|
||||
if storage == 'encrypted':
|
||||
parts.append('encrypted')
|
||||
|
||||
# Add hardware_support suffix (for True only)
|
||||
# Hardware support detection is optional
|
||||
hardware_support = self._get_modifier(modifiers, 'hardware_support')
|
||||
if hardware_support is True:
|
||||
parts.append('hardware-support')
|
||||
|
||||
# Add initial_setup suffix (non-server values)
|
||||
# Server is default, other setup types get noted
|
||||
initial_setup = self._get_modifier(modifiers, 'initial_setup')
|
||||
if initial_setup == 'server':
|
||||
# Server is the default for non-desktop, non-hypervisor
|
||||
parts.append('server')
|
||||
elif initial_setup and initial_setup != 'server':
|
||||
parts.append(f'{initial_setup}-setup')
|
||||
|
||||
# Add bootloader suffix (systemd-boot only)
|
||||
# Default bootloader doesn't get noted
|
||||
bootloader = self._get_modifier(modifiers, 'bootloader')
|
||||
if bootloader == 'systemd-boot':
|
||||
parts.append('systemd-boot')
|
||||
|
||||
# Add version - always included
|
||||
parts.append(str(version))
|
||||
|
||||
# Join all parts with underscores and add .cfg extension
|
||||
return '_'.join(parts) + '.cfg'
|
||||
|
||||
def expand_variants(self, variants: List[Dict]) -> List[Dict]:
|
||||
"""Expand variants with list values into individual variants.
|
||||
|
||||
This method enables batch generation by converting compact manifest
|
||||
entries with list values into all possible combinations.
|
||||
|
||||
Example input:
|
||||
[
|
||||
{
|
||||
'version': ['43', 'rawhide'],
|
||||
'storage': ['standard', 'encrypted'],
|
||||
'desktop': 'gnome'
|
||||
}
|
||||
]
|
||||
|
||||
Example output (cartesian product = 2×2×1 = 4 variants):
|
||||
[
|
||||
{'version': '43', 'storage': 'standard', 'desktop': 'gnome'},
|
||||
{'version': '43', 'storage': 'encrypted', 'desktop': 'gnome'},
|
||||
{'version': 'rawhide', 'storage': 'standard', 'desktop': 'gnome'},
|
||||
{'version': 'rawhide', 'storage': 'encrypted', 'desktop': 'gnome'}
|
||||
]
|
||||
|
||||
This uses itertools.product to generate the cartesian product of all
|
||||
list-valued keys, while preserving scalar values across all combinations.
|
||||
|
||||
Args:
|
||||
variants: List of variant dictionaries, where some values may be lists
|
||||
|
||||
Returns:
|
||||
Expanded list where each variant has only scalar (non-list) values
|
||||
"""
|
||||
from itertools import product as itertools_product
|
||||
|
||||
expanded = []
|
||||
|
||||
for variant in variants:
|
||||
# Separate list-valued keys from scalar keys
|
||||
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:
|
||||
# No lists to expand, keep as-is
|
||||
expanded.append(variant)
|
||||
continue
|
||||
|
||||
# Get cartesian product of all list values
|
||||
keys = list(list_keys.keys())
|
||||
values_product = itertools_product(*[list_keys[k] for k in keys])
|
||||
|
||||
# Create a new variant for each combination
|
||||
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
|
||||
|
||||
# === VALIDATION METHODS ===
|
||||
# These are convenience wrappers that delegate to the validators module.
|
||||
# They provide a unified API so callers can validate through the generator.
|
||||
|
||||
def validate_template(self, template: Dict) -> List[str]:
|
||||
"""Validate template structure and fragment existence.
|
||||
|
||||
Checks that:
|
||||
- Required keys are present (description, required)
|
||||
- All referenced ingredient files actually exist on disk
|
||||
- Versioned, conditional, and flag paths are valid
|
||||
|
||||
Args:
|
||||
template: Template dictionary to validate
|
||||
|
||||
Returns:
|
||||
List of validation error strings (empty if valid)
|
||||
"""
|
||||
validator = TemplateValidator(self.project_root)
|
||||
return validator.validate(template)
|
||||
|
||||
def validate_manifest(self, manifest: Dict) -> List[str]:
|
||||
"""Validate manifest structure.
|
||||
|
||||
Checks that the manifest has the required 'recipes' key and that
|
||||
each recipe has required fields (name, variants with version).
|
||||
|
||||
Args:
|
||||
manifest: Manifest dictionary to validate
|
||||
|
||||
Returns:
|
||||
List of validation error strings (empty if valid)
|
||||
"""
|
||||
return validate_manifest(manifest)
|
||||
|
||||
def validate_recipe(self, content: str) -> List[str]:
|
||||
"""Validate recipe content.
|
||||
|
||||
Checks that:
|
||||
- No duplicate %include directives
|
||||
- All referenced ingredient files exist
|
||||
|
||||
Args:
|
||||
content: Recipe content string to validate
|
||||
|
||||
Returns:
|
||||
List of validation error strings (empty if valid)
|
||||
"""
|
||||
validator = ContentValidator(self.project_root)
|
||||
return validator.validate(content)
|
||||
|
||||
def validate_recipe_semantic(self, content: str, version: str) -> List[str]:
|
||||
"""Validate recipe using pykickstart parser.
|
||||
|
||||
Uses the official pykickstart library to parse the recipe and check
|
||||
for syntax errors, invalid directives, or semantic issues.
|
||||
|
||||
Args:
|
||||
content: Recipe content string to validate
|
||||
version: Fedora version for version-specific validation rules
|
||||
|
||||
Returns:
|
||||
List of validation error strings (empty if valid)
|
||||
"""
|
||||
validator = SemanticValidator()
|
||||
return validator.validate(content, version)
|
||||
|
||||
def get_ksversion(self, version: str) -> Optional[str]:
|
||||
"""Map Phyllome OS version to pykickstart version string.
|
||||
|
||||
Pykickstart uses Fedora version naming (F42, F43, etc.).
|
||||
This method converts Phyllome OS versions to the corresponding
|
||||
kickstart version string.
|
||||
|
||||
Args:
|
||||
version: Phyllome OS version (e.g., '43' or 'rawhide')
|
||||
|
||||
Returns:
|
||||
Pykickstart version string (e.g., 'F42' for version 43)
|
||||
or None for rawhide (uses latest development version)
|
||||
"""
|
||||
return SemanticValidator().get_ksversion(version)
|
||||
|
||||
def extract_version(self, content: str, filename: str) -> Optional[str]:
|
||||
"""Extract Fedora version from recipe content or filename.
|
||||
|
||||
Uses multiple heuristics to determine which Fedora version a recipe
|
||||
targets:
|
||||
1. Check filename for version patterns (e.g., _43_, -rawhide.cfg)
|
||||
2. Check content for version-specific repository paths
|
||||
|
||||
Args:
|
||||
content: Recipe content string
|
||||
filename: Recipe filename
|
||||
|
||||
Returns:
|
||||
Version string ('43' or 'rawhide') or None if undetermined
|
||||
"""
|
||||
import re
|
||||
|
||||
# Try to extract from filename first
|
||||
filename_match = re.search(r'(?:_|-)(43|rawhide)(?:_|-|.cfg|.yaml|$)', filename)
|
||||
if filename_match:
|
||||
return filename_match.group(1)
|
||||
|
||||
# Fall back to content inspection
|
||||
for line in content.split('\n'):
|
||||
if 'core-fedora-repo-43' in line:
|
||||
return '43'
|
||||
elif 'core-fedora-repo-rawhide' in line:
|
||||
return 'rawhide'
|
||||
if 'generic-43/repo' in line:
|
||||
return '43'
|
||||
elif 'generic-rawhide/repo' in line:
|
||||
return 'rawhide'
|
||||
|
||||
return None
|
||||
|
||||
def extract_version_from_file(self, recipe_path: str, filename: str) -> Optional[str]:
|
||||
"""Extract version from recipe file.
|
||||
|
||||
Convenience wrapper that reads the file and delegates to extract_version.
|
||||
|
||||
Args:
|
||||
recipe_path: Path to the recipe file
|
||||
filename: Filename (used for pattern matching)
|
||||
|
||||
Returns:
|
||||
Version string or None
|
||||
"""
|
||||
content = Path(recipe_path).read_text(encoding='utf-8')
|
||||
return self.extract_version(content, filename)
|
||||
|
||||
def validate_recipe_content(self, recipe_path: str) -> List[str]:
|
||||
"""Validate recipe content from file path.
|
||||
|
||||
Reads a recipe file and validates its content for ingredient existence
|
||||
and duplicate includes.
|
||||
|
||||
Args:
|
||||
recipe_path: Path to the recipe file
|
||||
|
||||
Returns:
|
||||
List of validation error strings
|
||||
"""
|
||||
content = Path(recipe_path).read_text(encoding='utf-8')
|
||||
return self.validate_recipe(content)
|
||||
|
||||
def validate_recipe_semantic_from_file(self, recipe_path: str, version: str) -> List[str]:
|
||||
"""Validate recipe from file path using pykickstart.
|
||||
|
||||
Reads a recipe file and validates it with the pykickstart parser.
|
||||
|
||||
Args:
|
||||
recipe_path: Path to the recipe file
|
||||
version: Fedora version for validation rules
|
||||
|
||||
Returns:
|
||||
List of validation error strings
|
||||
"""
|
||||
content = Path(recipe_path).read_text(encoding='utf-8')
|
||||
return self.validate_recipe_semantic(content, version)
|
||||
@@ -0,0 +1,96 @@
|
||||
# Recipe Templates for Phyllome OS Kickstart Generator
|
||||
# Each template defines the structure for a recipe type
|
||||
# Fragment paths use relative paths from project root
|
||||
|
||||
templates:
|
||||
# Install recipe - for desktop, server, or hypervisor
|
||||
install:
|
||||
description: "An install recipe for desktop, server, or hypervisor"
|
||||
base: core
|
||||
required:
|
||||
- core: core/base.ks
|
||||
- { path: repo/fedora-43-mirrors.ks, replaceable: true }
|
||||
- { path: storage/standard.ks, replaceable: true }
|
||||
- { path: bootloader/grub.ks, replaceable: true }
|
||||
- core/locale.ks
|
||||
- core/services.ks
|
||||
- core/network.ks
|
||||
- packages/core-group.ks
|
||||
- packages/fedora-remix.ks
|
||||
- packages/hand-picked.ks
|
||||
- { path: core/security/enabled.ks, replaceable: true }
|
||||
- { path: initial-setup/server/config.ks, replaceable: true }
|
||||
modifiers:
|
||||
version:
|
||||
"43": repo/fedora-43-mirrors.ks
|
||||
"rawhide": repo/rawhide-mirrors.ks
|
||||
storage:
|
||||
standard: storage/standard.ks
|
||||
encrypted: storage/encrypted.ks
|
||||
desktop:
|
||||
gnome:
|
||||
- desktop/gnome/config.ks
|
||||
- desktop/gnome/packages.ks
|
||||
- desktop/gnome/post-scripts.ks
|
||||
labwc:
|
||||
- desktop/labwc/config.ks
|
||||
security:
|
||||
secure: core/security/enabled.ks
|
||||
"off": core/security/disabled.ks
|
||||
initial-setup:
|
||||
server: initial-setup/server/config.ks
|
||||
desktop: initial-setup/desktop/config.ks
|
||||
gnome: initial-setup/gnome/config.ks
|
||||
generic-wayland: initial-setup/generic-wayland/config.ks
|
||||
hypervisor_type:
|
||||
amdcpu: hypervisor/amdcpu.ks
|
||||
intelcpu: hypervisor/intelcpu.ks
|
||||
intelgpu: hypervisor/intelgpu.ks
|
||||
hypervisor:
|
||||
base:
|
||||
- hypervisor/base/packages.ks
|
||||
- hypervisor/base/services.ks
|
||||
- hypervisor/base/post-scripts.ks
|
||||
desktop:
|
||||
- packages/virtual-machine-manager/packages.ks
|
||||
- packages/virtual-machine-manager/post-scripts.ks
|
||||
bootloader:
|
||||
grub: bootloader/grub.ks
|
||||
systemd-boot: bootloader/systemd-boot.ks
|
||||
optional:
|
||||
hardware-support: packages/hardware-support.ks
|
||||
guest-agents: guest-agents/base.ks
|
||||
|
||||
# Live recipe - for live-desktop or live-server
|
||||
live:
|
||||
description: "A live recipe for live-desktop or live-server"
|
||||
base: live-core
|
||||
required:
|
||||
- live-core: live/core/base.ks
|
||||
- { path: repo/fedora-43-mirrors.ks, replaceable: true }
|
||||
- { path: live/core/storage.ks, replaceable: true }
|
||||
- { path: live/core/bootloader/grub.ks, replaceable: true }
|
||||
- core/locale.ks
|
||||
- core/services.ks
|
||||
- core/network.ks
|
||||
- live/core/packages.ks
|
||||
- live/post/base.ks
|
||||
- live/post/session.ks
|
||||
- repo/rpmfusion-nonfree.ks
|
||||
modifiers:
|
||||
version:
|
||||
"43": repo/fedora-43-mirrors.ks
|
||||
"rawhide": repo/rawhide-mirrors.ks
|
||||
storage:
|
||||
standard: live/core/storage.ks
|
||||
encrypted: live/core/storage.ks
|
||||
bootloader:
|
||||
grub: live/core/bootloader/grub.ks
|
||||
systemd-boot: live/core/bootloader/systemd-boot.ks
|
||||
optional:
|
||||
hardware-support: packages/hardware-support.ks
|
||||
guest-agents: guest-agents/base.ks
|
||||
hypervisor: live/hypervisor.ks
|
||||
security:
|
||||
secure: core/security/enabled.ks
|
||||
"off": core/security/disabled.ks
|
||||
@@ -0,0 +1,25 @@
|
||||
# __ ____ ____ _____
|
||||
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
|
||||
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
|
||||
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
|
||||
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
|
||||
# /_/ /____/
|
||||
|
||||
# An install recipe for desktop, server, or hypervisor
|
||||
|
||||
%include core/base.ks
|
||||
%include repo/fedora-43-mirrors.ks
|
||||
%include storage/standard.ks
|
||||
%include bootloader/grub.ks
|
||||
%include core/locale.ks
|
||||
%include core/services.ks
|
||||
%include core/network.ks
|
||||
%include packages/core-group.ks
|
||||
%include packages/fedora-remix.ks
|
||||
%include packages/hand-picked.ks
|
||||
%include core/security/enabled.ks
|
||||
%include initial-setup/server/config.ks
|
||||
%include desktop/gnome/config.ks
|
||||
%include desktop/gnome/packages.ks
|
||||
%include desktop/gnome/post-scripts.ks
|
||||
%include storage/encrypted.ks
|
||||
@@ -0,0 +1,26 @@
|
||||
# __ ____ ____ _____
|
||||
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
|
||||
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
|
||||
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
|
||||
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
|
||||
# /_/ /____/
|
||||
|
||||
# An install recipe for desktop, server, or hypervisor
|
||||
|
||||
%include core/base.ks
|
||||
%include repo/fedora-43-mirrors.ks
|
||||
%include storage/standard.ks
|
||||
%include bootloader/grub.ks
|
||||
%include core/locale.ks
|
||||
%include core/services.ks
|
||||
%include core/network.ks
|
||||
%include packages/core-group.ks
|
||||
%include packages/fedora-remix.ks
|
||||
%include packages/hand-picked.ks
|
||||
%include core/security/enabled.ks
|
||||
%include initial-setup/server/config.ks
|
||||
%include desktop/gnome/config.ks
|
||||
%include desktop/gnome/packages.ks
|
||||
%include desktop/gnome/post-scripts.ks
|
||||
%include storage/encrypted.ks
|
||||
%include repo/rawhide-mirrors.ks
|
||||
@@ -0,0 +1,25 @@
|
||||
# __ ____ ____ _____
|
||||
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
|
||||
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
|
||||
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
|
||||
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
|
||||
# /_/ /____/
|
||||
|
||||
# An install recipe for desktop, server, or hypervisor
|
||||
|
||||
%include core/base.ks
|
||||
%include repo/fedora-43-mirrors.ks
|
||||
%include storage/standard.ks
|
||||
%include bootloader/grub.ks
|
||||
%include core/locale.ks
|
||||
%include core/services.ks
|
||||
%include core/network.ks
|
||||
%include packages/core-group.ks
|
||||
%include packages/fedora-remix.ks
|
||||
%include packages/hand-picked.ks
|
||||
%include core/security/enabled.ks
|
||||
%include initial-setup/server/config.ks
|
||||
%include desktop/gnome/config.ks
|
||||
%include desktop/gnome/packages.ks
|
||||
%include desktop/gnome/post-scripts.ks
|
||||
%include storage/encrypted.ks
|
||||
@@ -0,0 +1,26 @@
|
||||
# __ ____ ____ _____
|
||||
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
|
||||
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
|
||||
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
|
||||
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
|
||||
# /_/ /____/
|
||||
|
||||
# An install recipe for desktop, server, or hypervisor
|
||||
|
||||
%include core/base.ks
|
||||
%include repo/fedora-43-mirrors.ks
|
||||
%include storage/standard.ks
|
||||
%include bootloader/grub.ks
|
||||
%include core/locale.ks
|
||||
%include core/services.ks
|
||||
%include core/network.ks
|
||||
%include packages/core-group.ks
|
||||
%include packages/fedora-remix.ks
|
||||
%include packages/hand-picked.ks
|
||||
%include core/security/enabled.ks
|
||||
%include initial-setup/server/config.ks
|
||||
%include desktop/gnome/config.ks
|
||||
%include desktop/gnome/packages.ks
|
||||
%include desktop/gnome/post-scripts.ks
|
||||
%include storage/encrypted.ks
|
||||
%include repo/rawhide-mirrors.ks
|
||||
@@ -0,0 +1,24 @@
|
||||
# __ ____ ____ _____
|
||||
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
|
||||
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
|
||||
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
|
||||
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
|
||||
# /_/ /____/
|
||||
|
||||
# An install recipe for desktop, server, or hypervisor
|
||||
|
||||
%include core/base.ks
|
||||
%include repo/fedora-43-mirrors.ks
|
||||
%include storage/standard.ks
|
||||
%include bootloader/grub.ks
|
||||
%include core/locale.ks
|
||||
%include core/services.ks
|
||||
%include core/network.ks
|
||||
%include packages/core-group.ks
|
||||
%include packages/fedora-remix.ks
|
||||
%include packages/hand-picked.ks
|
||||
%include core/security/enabled.ks
|
||||
%include initial-setup/server/config.ks
|
||||
%include desktop/gnome/config.ks
|
||||
%include desktop/gnome/packages.ks
|
||||
%include desktop/gnome/post-scripts.ks
|
||||
@@ -0,0 +1,25 @@
|
||||
# __ ____ ____ _____
|
||||
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
|
||||
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
|
||||
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
|
||||
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
|
||||
# /_/ /____/
|
||||
|
||||
# An install recipe for desktop, server, or hypervisor
|
||||
|
||||
%include core/base.ks
|
||||
%include repo/fedora-43-mirrors.ks
|
||||
%include storage/standard.ks
|
||||
%include bootloader/grub.ks
|
||||
%include core/locale.ks
|
||||
%include core/services.ks
|
||||
%include core/network.ks
|
||||
%include packages/core-group.ks
|
||||
%include packages/fedora-remix.ks
|
||||
%include packages/hand-picked.ks
|
||||
%include core/security/enabled.ks
|
||||
%include initial-setup/server/config.ks
|
||||
%include desktop/gnome/config.ks
|
||||
%include desktop/gnome/packages.ks
|
||||
%include desktop/gnome/post-scripts.ks
|
||||
%include repo/rawhide-mirrors.ks
|
||||
@@ -0,0 +1,24 @@
|
||||
# __ ____ ____ _____
|
||||
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
|
||||
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
|
||||
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
|
||||
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
|
||||
# /_/ /____/
|
||||
|
||||
# An install recipe for desktop, server, or hypervisor
|
||||
|
||||
%include core/base.ks
|
||||
%include repo/fedora-43-mirrors.ks
|
||||
%include storage/standard.ks
|
||||
%include bootloader/grub.ks
|
||||
%include core/locale.ks
|
||||
%include core/services.ks
|
||||
%include core/network.ks
|
||||
%include packages/core-group.ks
|
||||
%include packages/fedora-remix.ks
|
||||
%include packages/hand-picked.ks
|
||||
%include core/security/enabled.ks
|
||||
%include initial-setup/server/config.ks
|
||||
%include desktop/gnome/config.ks
|
||||
%include desktop/gnome/packages.ks
|
||||
%include desktop/gnome/post-scripts.ks
|
||||
@@ -0,0 +1,25 @@
|
||||
# __ ____ ____ _____
|
||||
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
|
||||
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
|
||||
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
|
||||
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
|
||||
# /_/ /____/
|
||||
|
||||
# An install recipe for desktop, server, or hypervisor
|
||||
|
||||
%include core/base.ks
|
||||
%include repo/fedora-43-mirrors.ks
|
||||
%include storage/standard.ks
|
||||
%include bootloader/grub.ks
|
||||
%include core/locale.ks
|
||||
%include core/services.ks
|
||||
%include core/network.ks
|
||||
%include packages/core-group.ks
|
||||
%include packages/fedora-remix.ks
|
||||
%include packages/hand-picked.ks
|
||||
%include core/security/enabled.ks
|
||||
%include initial-setup/server/config.ks
|
||||
%include desktop/gnome/config.ks
|
||||
%include desktop/gnome/packages.ks
|
||||
%include desktop/gnome/post-scripts.ks
|
||||
%include repo/rawhide-mirrors.ks
|
||||
@@ -0,0 +1,25 @@
|
||||
# __ ____ ____ _____
|
||||
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
|
||||
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
|
||||
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
|
||||
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
|
||||
# /_/ /____/
|
||||
|
||||
# An install recipe for desktop, server, or hypervisor
|
||||
|
||||
%include core/base.ks
|
||||
%include repo/fedora-43-mirrors.ks
|
||||
%include storage/standard.ks
|
||||
%include bootloader/grub.ks
|
||||
%include core/locale.ks
|
||||
%include core/services.ks
|
||||
%include core/network.ks
|
||||
%include packages/core-group.ks
|
||||
%include packages/fedora-remix.ks
|
||||
%include packages/hand-picked.ks
|
||||
%include core/security/enabled.ks
|
||||
%include initial-setup/server/config.ks
|
||||
%include hypervisor/base/packages.ks
|
||||
%include hypervisor/base/services.ks
|
||||
%include hypervisor/base/post-scripts.ks
|
||||
%include hypervisor/amdcpu.ks
|
||||
@@ -0,0 +1,25 @@
|
||||
# __ ____ ____ _____
|
||||
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
|
||||
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
|
||||
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
|
||||
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
|
||||
# /_/ /____/
|
||||
|
||||
# An install recipe for desktop, server, or hypervisor
|
||||
|
||||
%include core/base.ks
|
||||
%include repo/fedora-43-mirrors.ks
|
||||
%include storage/standard.ks
|
||||
%include bootloader/grub.ks
|
||||
%include core/locale.ks
|
||||
%include core/services.ks
|
||||
%include core/network.ks
|
||||
%include packages/core-group.ks
|
||||
%include packages/fedora-remix.ks
|
||||
%include packages/hand-picked.ks
|
||||
%include core/security/enabled.ks
|
||||
%include initial-setup/server/config.ks
|
||||
%include hypervisor/base/packages.ks
|
||||
%include hypervisor/base/services.ks
|
||||
%include hypervisor/base/post-scripts.ks
|
||||
%include hypervisor/intelcpu.ks
|
||||
@@ -0,0 +1,25 @@
|
||||
# __ ____ ____ _____
|
||||
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
|
||||
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
|
||||
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
|
||||
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
|
||||
# /_/ /____/
|
||||
|
||||
# An install recipe for desktop, server, or hypervisor
|
||||
|
||||
%include core/base.ks
|
||||
%include repo/fedora-43-mirrors.ks
|
||||
%include storage/standard.ks
|
||||
%include bootloader/grub.ks
|
||||
%include core/locale.ks
|
||||
%include core/services.ks
|
||||
%include core/network.ks
|
||||
%include packages/core-group.ks
|
||||
%include packages/fedora-remix.ks
|
||||
%include packages/hand-picked.ks
|
||||
%include core/security/enabled.ks
|
||||
%include initial-setup/server/config.ks
|
||||
%include desktop/gnome/config.ks
|
||||
%include desktop/gnome/packages.ks
|
||||
%include desktop/gnome/post-scripts.ks
|
||||
%include storage/encrypted.ks
|
||||
@@ -0,0 +1,26 @@
|
||||
# __ ____ ____ _____
|
||||
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
|
||||
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
|
||||
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
|
||||
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
|
||||
# /_/ /____/
|
||||
|
||||
# An install recipe for desktop, server, or hypervisor
|
||||
|
||||
%include core/base.ks
|
||||
%include repo/fedora-43-mirrors.ks
|
||||
%include storage/standard.ks
|
||||
%include bootloader/grub.ks
|
||||
%include core/locale.ks
|
||||
%include core/services.ks
|
||||
%include core/network.ks
|
||||
%include packages/core-group.ks
|
||||
%include packages/fedora-remix.ks
|
||||
%include packages/hand-picked.ks
|
||||
%include core/security/enabled.ks
|
||||
%include initial-setup/server/config.ks
|
||||
%include desktop/gnome/config.ks
|
||||
%include desktop/gnome/packages.ks
|
||||
%include desktop/gnome/post-scripts.ks
|
||||
%include storage/encrypted.ks
|
||||
%include repo/rawhide-mirrors.ks
|
||||
@@ -0,0 +1,25 @@
|
||||
# __ ____ ____ _____
|
||||
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
|
||||
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
|
||||
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
|
||||
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
|
||||
# /_/ /____/
|
||||
|
||||
# An install recipe for desktop, server, or hypervisor
|
||||
|
||||
%include core/base.ks
|
||||
%include repo/fedora-43-mirrors.ks
|
||||
%include storage/standard.ks
|
||||
%include bootloader/grub.ks
|
||||
%include core/locale.ks
|
||||
%include core/services.ks
|
||||
%include core/network.ks
|
||||
%include packages/core-group.ks
|
||||
%include packages/fedora-remix.ks
|
||||
%include packages/hand-picked.ks
|
||||
%include core/security/enabled.ks
|
||||
%include initial-setup/server/config.ks
|
||||
%include desktop/gnome/config.ks
|
||||
%include desktop/gnome/packages.ks
|
||||
%include desktop/gnome/post-scripts.ks
|
||||
%include storage/encrypted.ks
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user