Compare commits
18 Commits
add9bd8a09
...
main
Author | SHA1 | Date | |
---|---|---|---|
e1207278a3 | |||
00f40553b5 | |||
0316eff669 | |||
c458ab4b5c | |||
02f2a131bf | |||
6cfad2d5eb | |||
5c7a5713b9 | |||
63456e0e16 | |||
01326af9d8 | |||
be2f5cf7a2 | |||
66773b8e23 | |||
4bd6294efe | |||
7d9af8f39e | |||
8c1c11fda7 | |||
3fafb78838 | |||
1dfc10b5c9 | |||
6089cb118a | |||
fee6d59831 |
145
README.md
145
README.md
@ -2,6 +2,41 @@
|
|||||||
|
|
||||||
[Phyllome OS](https://wiki.phyllo.me/phyllomeos/context) uses the [kickstart installation method](https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#chapter-1-introduction) to deploy itself to a specific target computer or virtual machine by means of kickstart files.
|
[Phyllome OS](https://wiki.phyllo.me/phyllomeos/context) uses the [kickstart installation method](https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#chapter-1-introduction) to deploy itself to a specific target computer or virtual machine by means of kickstart files.
|
||||||
|
|
||||||
|
Provided that some dependencies are met (`libvirt` is running on your computer, QEMU is installed, etc), one could run the following script to deploy virtual machines, including Phyllome OS itself.
|
||||||
|
|
||||||
|
- Make the script executable:
|
||||||
|
|
||||||
|
```
|
||||||
|
chmod +x deploy-vm.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
- Execute it and pick `virtual-desktop-hypervisor` when prompted:
|
||||||
|
|
||||||
|
```
|
||||||
|
./deploy-vm.sh
|
||||||
|
|
||||||
|
Executing: ./scripts/core-count.sh
|
||||||
|
System has more than 2 core (nproc --all: 6).
|
||||||
|
[...]]
|
||||||
|
10. virtual-desktop-hypervisor
|
||||||
|
[...]
|
||||||
|
Enter the number of the file you want to select: 10
|
||||||
|
You selected: virtual-desktop-hypervisor
|
||||||
|
|
||||||
|
Starting install...
|
||||||
|
Retrieving 'vmlinuz' | 16 MB 00:00:00
|
||||||
|
Retrieving 'initrd.img' | 161 MB 00:00:05
|
||||||
|
Allocating 'virtinst-n0km88yy-vmlinuz' | 16 MB 00:00:00
|
||||||
|
Transferring 'virtinst-n0km88yy-vmlinuz' | 16 MB 00:00:00
|
||||||
|
Allocating 'virtinst-qxr2jxcb-initrd.img' | 161 MB 00:00:00
|
||||||
|
Transferring 'virtinst-qxr2jxcb-initrd.img' | 161 MB 00:00:00
|
||||||
|
Allocating 'virtual-desktop-hypervisor.img' | 10 GB 00:00:00
|
||||||
|
Creating domain...
|
||||||
|
```
|
||||||
|
After a successfull installation, the virtual machine will shutdown and be ready to use when powered on again.
|
||||||
|
|
||||||
|
## Repository structure
|
||||||
|
|
||||||
This repository contains such files broken down as:
|
This repository contains such files broken down as:
|
||||||
|
|
||||||
* `ingredients`🥑 🥥 🥭 🥝 🥦 🥬 🥒 🧄: the basic building blocks for assembling Phyllome OS and other derivatives.
|
* `ingredients`🥑 🥥 🥭 🥝 🥦 🥬 🥒 🧄: the basic building blocks for assembling Phyllome OS and other derivatives.
|
||||||
@ -10,11 +45,22 @@ This repository contains such files broken down as:
|
|||||||
|
|
||||||
* `dishes`🥨 🥐 🥖 🥧 🥞 🥯 🧆 🧁: read-to-consume and standalone kickstart artifacts, which can be used to deploy complete systems
|
* `dishes`🥨 🥐 🥖 🥧 🥞 🥯 🧆 🧁: read-to-consume and standalone kickstart artifacts, which can be used to deploy complete systems
|
||||||
|
|
||||||
|
Each ingredient represents a feature or a set of integrated features, such as a specific Desktop Environment or a storage configuration.
|
||||||
|
- Ingredients prefixed with *live* such as `live-core.cfg` are to be used with live editions only
|
||||||
|
- *core* ingredients are meant be used in all their respective recipes, *base* ingredients, recommended but optional, and extra provides more stuff (sic)
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
Using a pull request, you can suggest a modification to an existing ingredient or create a new ingredient from scratch.
|
Using a pull request, you can suggest a modification to an existing ingredient or create a new ingredient from scratch.
|
||||||
|
|
||||||
### Example: add a new package and include it into a recipe
|
### Requirements
|
||||||
|
|
||||||
|
- `qemu`
|
||||||
|
- `libvirt`
|
||||||
|
- `virt-install`
|
||||||
|
- `pykickstart`
|
||||||
|
|
||||||
|
### Example 1: add a new package and include it into a recipe
|
||||||
|
|
||||||
- Add [Luanti](https://www.luanti.org/), a free and open-source sandbox video game engine formerly known as Minetest, as a standalone ingredient, using the `echo` command
|
- Add [Luanti](https://www.luanti.org/), a free and open-source sandbox video game engine formerly known as Minetest, as a standalone ingredient, using the `echo` command
|
||||||
|
|
||||||
@ -29,7 +75,7 @@ luanti # Multiplayer infinite-world block sandbox with survival mode
|
|||||||
Instead of creating a recipe from scratch, let's make a copy of the `virtual-desktop.cfg` recipe, which provide a Desktop environment necessary for *luanti* to function
|
Instead of creating a recipe from scratch, let's make a copy of the `virtual-desktop.cfg` recipe, which provide a Desktop environment necessary for *luanti* to function
|
||||||
|
|
||||||
```
|
```
|
||||||
$ cp recipes/virtual-desktop.cfg recipes/virtual-desktop-luanti.cfg
|
cp recipes/virtual-desktop.cfg recipes/virtual-desktop-luanti.cfg
|
||||||
```
|
```
|
||||||
|
|
||||||
- Add the extra ingredient to the new recipe:
|
- Add the extra ingredient to the new recipe:
|
||||||
@ -38,53 +84,40 @@ $ cp recipes/virtual-desktop.cfg recipes/virtual-desktop-luanti.cfg
|
|||||||
echo "%include ../ingredients/extra-luanti.cfg # Sandbox video game engine" >> recipes/virtual-desktop-luanti.cfg
|
echo "%include ../ingredients/extra-luanti.cfg # Sandbox video game engine" >> recipes/virtual-desktop-luanti.cfg
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Flatten
|
||||||
|
|
||||||
- Prepare the dish by following the recipe, a process called 'flattening'
|
- Prepare the dish by following the recipe, a process called 'flattening'
|
||||||
|
|
||||||
```
|
```
|
||||||
$ ksflatten -c recipes/virtual-desktop-luanti.cfg -o dishes/virtual-desktop-luanti.cfg
|
ksflatten -c recipes/virtual-desktop-luanti.cfg -o dishes/virtual-desktop-luanti.cfg
|
||||||
```
|
```
|
||||||
|
|
||||||
> If any errors are detected, go back and fix them.
|
> If any errors are detected, go back and fix them.
|
||||||
|
|
||||||
It is time to test the new dish!
|
It is time to test the new dish!
|
||||||
|
|
||||||
- Navigate inside the `dishes` folder:
|
#### Kickstart
|
||||||
|
|
||||||
|
- Make the `deploy-vm.sh` script executable
|
||||||
|
|
||||||
```
|
```
|
||||||
$ cd dishes/
|
chmod +x deploy-vm.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
* You can then kickstart your own installation:
|
- Execute the script
|
||||||
|
|
||||||
```
|
```
|
||||||
# virt-install \
|
./deploy-vm.sh
|
||||||
--connect qemu:///system \
|
```
|
||||||
--metadata description="Virtual desktop with Luanti" \
|
|
||||||
--os-variant fedora41 \
|
- Select the new dish, *virtual-desktop-luanti*
|
||||||
--virt-type kvm \
|
|
||||||
--arch x86_64 \
|
```
|
||||||
--machine q35 \
|
[...]
|
||||||
--name virtual-desktop-luanti \
|
Available files:
|
||||||
--boot uefi \
|
1. desktop-hypervisor-amdcpu
|
||||||
--cpu host-model,topology.sockets=1,topology.cores=2,topology.threads=1 \
|
[...]
|
||||||
--vcpus 2 \
|
14. virtual-desktop-luanti
|
||||||
--memory 4096 \
|
|
||||||
--video virtio \
|
|
||||||
--graphics spice,listen=none \
|
|
||||||
--channel spicevmc \
|
|
||||||
--autoconsole none \
|
|
||||||
--console pty,target.type=virtio \
|
|
||||||
--sound none \
|
|
||||||
--network type=user,model=virtio \
|
|
||||||
--controller type=virtio-serial \
|
|
||||||
--controller type=usb,model=none \
|
|
||||||
--controller type=scsi,model=virtio-scsi \
|
|
||||||
--input type=keyboard,bus=virtio \
|
|
||||||
--input type=tablet,bus=virtio \
|
|
||||||
--rng /dev/urandom,model=virtio \
|
|
||||||
--disk path=/var/lib/libvirt/images/virtual-desktop-luanti.img,format=raw,bus=virtio,cache=writeback,size=10 \
|
|
||||||
--location=https://download.fedoraproject.org/pub/fedora/linux/releases/42/Everything/x86_64/os/ \
|
|
||||||
--initrd-inject virtual-desktop-luanti.cfg --extra-args "inst.ks=file:virtual-desktop-luanti.cfg"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
- When the installation is done, the machine will shut down
|
- When the installation is done, the machine will shut down
|
||||||
@ -93,6 +126,48 @@ $ cd dishes/
|
|||||||
|
|
||||||
That's it !
|
That's it !
|
||||||
|
|
||||||
|
### Example 2: Create a new recipe from the existing list of ingredients
|
||||||
|
|
||||||
|
The file `recipes/_list-of-ingredients.cfg` can be copied and edited to create your own remix of Phyllome OS, which itself is a remix of Fedora.
|
||||||
|
|
||||||
|
```
|
||||||
|
cp recipes/_list-of-ingredients.cfg recipes/my-new-distro.cfg
|
||||||
|
```
|
||||||
|
|
||||||
|
Then edit the said file to include your favorite ingredient
|
||||||
|
|
||||||
|
```
|
||||||
|
nano recipes/my-new-distro.cfg
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
# __ ____ ____ _____
|
||||||
|
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
|
||||||
|
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
|
||||||
|
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
|
||||||
|
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
|
||||||
|
# /_/ /____/
|
||||||
|
|
||||||
|
# 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
|
||||||
|
[...]
|
||||||
|
```
|
||||||
|
|
||||||
|
- Once you are done, you can [flatten](#flatten) the file and [kickstart](#kickstart) it as explained in the previous section.
|
||||||
|
|
||||||
## FAQ
|
## FAQ
|
||||||
|
|
||||||
If multiple dishes are affected by your ingredient, you can flatten them all
|
If multiple dishes are affected by your ingredient, you can flatten them all
|
||||||
@ -109,7 +184,7 @@ cd recipes
|
|||||||
for filename in *.cfg; do ksflatten -c "$filename" -o "../dishes/$filename"; done
|
for filename in *.cfg; do ksflatten -c "$filename" -o "../dishes/$filename"; done
|
||||||
```
|
```
|
||||||
|
|
||||||
The following message can be discarded:
|
The following message can safetly be ignored:
|
||||||
|
|
||||||
```
|
```
|
||||||
/usr/lib/python3.13/site-packages/pykickstart/commands/partition.py:461: KickstartParseWarning: A partition with the mountpoint / has already been defined.
|
/usr/lib/python3.13/site-packages/pykickstart/commands/partition.py:461: KickstartParseWarning: A partition with the mountpoint / has already been defined.
|
||||||
|
26
deploy-vm.sh
Executable file
26
deploy-vm.sh
Executable file
@ -0,0 +1,26 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Function to execute a script
|
||||||
|
execute_script() {
|
||||||
|
local script_to_execute="$1"
|
||||||
|
echo "Executing: $script_to_execute"
|
||||||
|
"$script_to_execute" || {
|
||||||
|
echo "Script failed: $script_to_execute"
|
||||||
|
return 1 # Indicate failure
|
||||||
|
}
|
||||||
|
return 0 # Indicate success
|
||||||
|
}
|
||||||
|
|
||||||
|
# Array of scripts
|
||||||
|
scripts=(
|
||||||
|
"./scripts/core-count.sh"
|
||||||
|
"./scripts/system-memory.sh"
|
||||||
|
"./scripts/deploy-distro.sh"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Iterate through the scripts and execute them
|
||||||
|
for script in "${scripts[@]}"; do
|
||||||
|
execute_script "$script"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "All scripts executed."
|
@ -223,7 +223,7 @@ mkdir /mnt/sysimage/var/lib/libvirt/isos # Create a directory to store iso image
|
|||||||
|
|
||||||
%end
|
%end
|
||||||
|
|
||||||
%post --nochroot --logfile=/mnt/sysimage/opt/base-hypervisor-amdcpu.log
|
%post --nochroot --logfile=/mnt/sysimage/root/base-hypervisor-amdcpu.log
|
||||||
|
|
||||||
sed -i 's/\(quiet\)/\1 iommu=pt rd.driver.pre=vfio-pci/i' /mnt/sysimage/etc/default/grub # Load kernel modules in GRUB.
|
sed -i 's/\(quiet\)/\1 iommu=pt rd.driver.pre=vfio-pci/i' /mnt/sysimage/etc/default/grub # Load kernel modules in GRUB.
|
||||||
|
|
||||||
@ -265,6 +265,7 @@ generic-release-common
|
|||||||
generic-release-notes
|
generic-release-notes
|
||||||
glibc
|
glibc
|
||||||
gnome-backgrounds.noarch
|
gnome-backgrounds.noarch
|
||||||
|
gnome-control-center
|
||||||
gnome-initial-setup
|
gnome-initial-setup
|
||||||
gnome-shell
|
gnome-shell
|
||||||
gnome-terminal
|
gnome-terminal
|
||||||
@ -299,6 +300,9 @@ openssh-clients
|
|||||||
openssh-server
|
openssh-server
|
||||||
parted
|
parted
|
||||||
pciutils
|
pciutils
|
||||||
|
pipewire-alsa
|
||||||
|
pipewire-jack-audio-connection-kit
|
||||||
|
pipewire-pulseaudio
|
||||||
plymouth
|
plymouth
|
||||||
policycoreutils
|
policycoreutils
|
||||||
prefixdevname
|
prefixdevname
|
||||||
|
@ -223,7 +223,7 @@ mkdir /mnt/sysimage/var/lib/libvirt/isos # Create a directory to store iso image
|
|||||||
|
|
||||||
%end
|
%end
|
||||||
|
|
||||||
%post --nochroot --logfile=/mnt/sysimage/opt/base-hypervisor-intelcpu.log
|
%post --nochroot --logfile=/mnt/sysimage/root/base-hypervisor-intelcpu.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.
|
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.
|
||||||
|
|
||||||
@ -275,6 +275,7 @@ generic-release-common
|
|||||||
generic-release-notes
|
generic-release-notes
|
||||||
glibc
|
glibc
|
||||||
gnome-backgrounds.noarch
|
gnome-backgrounds.noarch
|
||||||
|
gnome-control-center
|
||||||
gnome-initial-setup
|
gnome-initial-setup
|
||||||
gnome-shell
|
gnome-shell
|
||||||
gnome-terminal
|
gnome-terminal
|
||||||
@ -309,6 +310,9 @@ openssh-clients
|
|||||||
openssh-server
|
openssh-server
|
||||||
parted
|
parted
|
||||||
pciutils
|
pciutils
|
||||||
|
pipewire-alsa
|
||||||
|
pipewire-jack-audio-connection-kit
|
||||||
|
pipewire-pulseaudio
|
||||||
plymouth
|
plymouth
|
||||||
policycoreutils
|
policycoreutils
|
||||||
prefixdevname
|
prefixdevname
|
||||||
|
@ -223,7 +223,7 @@ mkdir /mnt/sysimage/var/lib/libvirt/isos # Create a directory to store iso image
|
|||||||
|
|
||||||
%end
|
%end
|
||||||
|
|
||||||
%post --nochroot --logfile=/mnt/sysimage/opt/base-hypervisor-intelcpu.log
|
%post --nochroot --logfile=/mnt/sysimage/root/base-hypervisor-intelcpu.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.
|
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.
|
||||||
|
|
||||||
@ -265,6 +265,7 @@ generic-release-common
|
|||||||
generic-release-notes
|
generic-release-notes
|
||||||
glibc
|
glibc
|
||||||
gnome-backgrounds.noarch
|
gnome-backgrounds.noarch
|
||||||
|
gnome-control-center
|
||||||
gnome-initial-setup
|
gnome-initial-setup
|
||||||
gnome-shell
|
gnome-shell
|
||||||
gnome-terminal
|
gnome-terminal
|
||||||
@ -299,6 +300,9 @@ openssh-clients
|
|||||||
openssh-server
|
openssh-server
|
||||||
parted
|
parted
|
||||||
pciutils
|
pciutils
|
||||||
|
pipewire-alsa
|
||||||
|
pipewire-jack-audio-connection-kit
|
||||||
|
pipewire-pulseaudio
|
||||||
plymouth
|
plymouth
|
||||||
policycoreutils
|
policycoreutils
|
||||||
prefixdevname
|
prefixdevname
|
||||||
|
@ -257,6 +257,7 @@ generic-release-common
|
|||||||
generic-release-notes
|
generic-release-notes
|
||||||
glibc
|
glibc
|
||||||
gnome-backgrounds.noarch
|
gnome-backgrounds.noarch
|
||||||
|
gnome-control-center
|
||||||
gnome-initial-setup
|
gnome-initial-setup
|
||||||
gnome-shell
|
gnome-shell
|
||||||
gnome-terminal
|
gnome-terminal
|
||||||
@ -291,6 +292,9 @@ openssh-clients
|
|||||||
openssh-server
|
openssh-server
|
||||||
parted
|
parted
|
||||||
pciutils
|
pciutils
|
||||||
|
pipewire-alsa
|
||||||
|
pipewire-jack-audio-connection-kit
|
||||||
|
pipewire-pulseaudio
|
||||||
plymouth
|
plymouth
|
||||||
policycoreutils
|
policycoreutils
|
||||||
prefixdevname
|
prefixdevname
|
||||||
|
224
dishes/desktop.cfg
Normal file
224
dishes/desktop.cfg
Normal file
@ -0,0 +1,224 @@
|
|||||||
|
# Generated by pykickstart v3.62
|
||||||
|
#version=DEVEL
|
||||||
|
# Use text mode install
|
||||||
|
text
|
||||||
|
# Firewall configuration
|
||||||
|
firewall --disabled
|
||||||
|
# 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-$releasever&arch=$basearch
|
||||||
|
repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f$releasever&arch=$basearch
|
||||||
|
# Root password
|
||||||
|
rootpw --iscrypted --lock locked
|
||||||
|
# SELinux configuration
|
||||||
|
selinux --disabled
|
||||||
|
# System services
|
||||||
|
services --enabled="NetworkManager,systemd-resolved"
|
||||||
|
# System timezone
|
||||||
|
timezone Europe/Paris --utc
|
||||||
|
# Use network installation
|
||||||
|
url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch"
|
||||||
|
# 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=1024 --fsoptions="umask=0077,shortname=winnt" --label=efi
|
||||||
|
part /boot --fstype="ext4" --size=512 --label=boot
|
||||||
|
part / --fstype="ext4" --grow --label=root
|
||||||
|
|
||||||
|
%post --logfile=/mnt/sysimage/root/post.log
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
%post --nochroot --logfile=/mnt/sysimage/root/base-initial-setup-gnome.log
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
%post --nochroot --logfile=/mnt/sysimage/root/base-desktop-gnome.log
|
||||||
|
|
||||||
|
# cat >> /mnt/sysimage/usr/share/glib-2.0/schemas/org.gnome.desktop.background.gschema.override<< EOF
|
||||||
|
# [org.gnome.desktop.background]
|
||||||
|
# picture-uri='file:///usr/share/backgrounds/elementary/Morskie Oko.jpg'
|
||||||
|
# EOF
|
||||||
|
|
||||||
|
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
|
||||||
|
audible-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-files=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
|
||||||
|
NetworkManager
|
||||||
|
NetworkManager-config-connectivity-fedora
|
||||||
|
NetworkManager-wifi
|
||||||
|
alsa-sof-firmware
|
||||||
|
amd-gpu-firmware
|
||||||
|
atheros-firmware
|
||||||
|
audit
|
||||||
|
b43-fwcutter
|
||||||
|
b43-openfwwf
|
||||||
|
basesystem
|
||||||
|
bash
|
||||||
|
brcmfmac-firmware
|
||||||
|
cirrus-audio-firmware
|
||||||
|
coreutils
|
||||||
|
curl
|
||||||
|
dejavu-sans-mono-fonts
|
||||||
|
dhcp-client
|
||||||
|
dnf5
|
||||||
|
dnf5-plugins
|
||||||
|
dracut
|
||||||
|
dracut-config-rescue
|
||||||
|
e2fsprogs
|
||||||
|
fedora-remix-logos
|
||||||
|
filesystem
|
||||||
|
firefox
|
||||||
|
firewalld
|
||||||
|
fwupd
|
||||||
|
generic-logos
|
||||||
|
generic-release
|
||||||
|
generic-release-common
|
||||||
|
generic-release-notes
|
||||||
|
glibc
|
||||||
|
gnome-backgrounds.noarch
|
||||||
|
gnome-control-center
|
||||||
|
gnome-initial-setup
|
||||||
|
gnome-shell
|
||||||
|
gnome-terminal
|
||||||
|
hostname
|
||||||
|
intel-audio-firmware
|
||||||
|
intel-gpu-firmware
|
||||||
|
intel-vsc-firmware
|
||||||
|
iproute
|
||||||
|
iputils
|
||||||
|
iwlegacy-firmware
|
||||||
|
iwlwifi-dvm-firmware
|
||||||
|
iwlwifi-mvm-firmware
|
||||||
|
kbd
|
||||||
|
kernel
|
||||||
|
less
|
||||||
|
libertas-firmware
|
||||||
|
libusb
|
||||||
|
man-db
|
||||||
|
mesa-dri-drivers
|
||||||
|
mozilla-ublock-origin.noarch
|
||||||
|
mt7xxx-firmware
|
||||||
|
nano
|
||||||
|
ncurses
|
||||||
|
nvidia-gpu-firmware
|
||||||
|
nxpwireless-firmware
|
||||||
|
openssh-clients
|
||||||
|
openssh-server
|
||||||
|
parted
|
||||||
|
pciutils
|
||||||
|
pipewire-alsa
|
||||||
|
pipewire-jack-audio-connection-kit
|
||||||
|
pipewire-pulseaudio
|
||||||
|
plymouth
|
||||||
|
policycoreutils
|
||||||
|
prefixdevname
|
||||||
|
procps-ng
|
||||||
|
realtek-firmware
|
||||||
|
rootfiles
|
||||||
|
rpm
|
||||||
|
selinux-policy-targeted
|
||||||
|
setup
|
||||||
|
shadow-utils
|
||||||
|
sssd-common
|
||||||
|
sssd-kcm
|
||||||
|
sudo
|
||||||
|
systemd
|
||||||
|
systemd-resolved
|
||||||
|
tiwilink-firmware
|
||||||
|
usbutils
|
||||||
|
util-linux
|
||||||
|
vim-minimal
|
||||||
|
wget
|
||||||
|
wpa_supplicant
|
||||||
|
zram-generator-defaults
|
||||||
|
-gnome-tour
|
||||||
|
|
||||||
|
%end
|
@ -317,6 +317,7 @@ generic-release-notes
|
|||||||
glibc
|
glibc
|
||||||
glibc-all-langpacks
|
glibc-all-langpacks
|
||||||
gnome-backgrounds.noarch
|
gnome-backgrounds.noarch
|
||||||
|
gnome-control-center
|
||||||
gnome-initial-setup
|
gnome-initial-setup
|
||||||
gnome-shell
|
gnome-shell
|
||||||
gnome-terminal
|
gnome-terminal
|
||||||
@ -354,6 +355,9 @@ openssh-clients
|
|||||||
openssh-server
|
openssh-server
|
||||||
parted
|
parted
|
||||||
pciutils
|
pciutils
|
||||||
|
pipewire-alsa
|
||||||
|
pipewire-jack-audio-connection-kit
|
||||||
|
pipewire-pulseaudio
|
||||||
plymouth
|
plymouth
|
||||||
policycoreutils
|
policycoreutils
|
||||||
prefixdevname
|
prefixdevname
|
||||||
|
@ -224,6 +224,7 @@ generic-release-notes
|
|||||||
glibc
|
glibc
|
||||||
glibc-all-langpacks
|
glibc-all-langpacks
|
||||||
gnome-backgrounds.noarch
|
gnome-backgrounds.noarch
|
||||||
|
gnome-control-center
|
||||||
gnome-initial-setup
|
gnome-initial-setup
|
||||||
gnome-shell
|
gnome-shell
|
||||||
gnome-terminal
|
gnome-terminal
|
||||||
@ -256,6 +257,9 @@ openssh-clients
|
|||||||
openssh-server
|
openssh-server
|
||||||
parted
|
parted
|
||||||
pciutils
|
pciutils
|
||||||
|
pipewire-alsa
|
||||||
|
pipewire-jack-audio-connection-kit
|
||||||
|
pipewire-pulseaudio
|
||||||
plymouth
|
plymouth
|
||||||
policycoreutils
|
policycoreutils
|
||||||
prefixdevname
|
prefixdevname
|
||||||
|
@ -250,6 +250,7 @@ generic-release-common
|
|||||||
generic-release-notes
|
generic-release-notes
|
||||||
glibc
|
glibc
|
||||||
gnome-backgrounds.noarch
|
gnome-backgrounds.noarch
|
||||||
|
gnome-control-center
|
||||||
gnome-initial-setup
|
gnome-initial-setup
|
||||||
gnome-shell
|
gnome-shell
|
||||||
gnome-terminal
|
gnome-terminal
|
||||||
@ -274,6 +275,9 @@ openssh-clients
|
|||||||
openssh-server
|
openssh-server
|
||||||
parted
|
parted
|
||||||
pciutils
|
pciutils
|
||||||
|
pipewire-alsa
|
||||||
|
pipewire-jack-audio-connection-kit
|
||||||
|
pipewire-pulseaudio
|
||||||
plymouth
|
plymouth
|
||||||
policycoreutils
|
policycoreutils
|
||||||
prefixdevname
|
prefixdevname
|
||||||
|
@ -157,6 +157,7 @@ generic-release-common
|
|||||||
generic-release-notes
|
generic-release-notes
|
||||||
glibc
|
glibc
|
||||||
gnome-backgrounds.noarch
|
gnome-backgrounds.noarch
|
||||||
|
gnome-control-center
|
||||||
gnome-initial-setup
|
gnome-initial-setup
|
||||||
gnome-shell
|
gnome-shell
|
||||||
gnome-terminal
|
gnome-terminal
|
||||||
@ -176,6 +177,9 @@ openssh-clients
|
|||||||
openssh-server
|
openssh-server
|
||||||
parted
|
parted
|
||||||
pciutils
|
pciutils
|
||||||
|
pipewire-alsa
|
||||||
|
pipewire-jack-audio-connection-kit
|
||||||
|
pipewire-pulseaudio
|
||||||
plymouth
|
plymouth
|
||||||
policycoreutils
|
policycoreutils
|
||||||
prefixdevname
|
prefixdevname
|
||||||
|
@ -4,6 +4,7 @@ xconfig --startxonboot --defaultdesktop=GNOME # Start the display session on boo
|
|||||||
|
|
||||||
gnome-shell # the version 3 of the GNOME desktop environment, without any presintalled applications
|
gnome-shell # the version 3 of the GNOME desktop environment, without any presintalled applications
|
||||||
gnome-terminal # install the default terminal for GNOME Shell
|
gnome-terminal # install the default terminal for GNOME Shell
|
||||||
|
gnome-control-center # Utilities to configure the GNOME desktop
|
||||||
-gnome-tour # delete GNOME Tour so it doesn't automatically launch on boot
|
-gnome-tour # delete GNOME Tour so it doesn't automatically launch on boot
|
||||||
mesa-dri-drivers # add mesa drivers otherwise there is a blank screen when first booting a desktop-based kickstart without virtualization tools
|
mesa-dri-drivers # add mesa drivers otherwise there is a blank screen when first booting a desktop-based kickstart without virtualization tools
|
||||||
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
|
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
|
||||||
@ -12,6 +13,9 @@ wpa_supplicant # WPA Supplicant for Linux. It is not packaged by default in GNOM
|
|||||||
NetworkManager-wifi # Provides the plugin to manage Wireless networking within GNOME Shell
|
NetworkManager-wifi # Provides the plugin to manage Wireless networking within GNOME Shell
|
||||||
firefox # Internet browser
|
firefox # Internet browser
|
||||||
mozilla-ublock-origin.noarch # An efficient ad blocker for Firefox
|
mozilla-ublock-origin.noarch # An efficient ad 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
|
%end # End of the packagages section
|
||||||
|
|
||||||
|
@ -7,19 +7,6 @@
|
|||||||
|
|
||||||
# The list of ingredients for composing Phyllome OS
|
# The list of ingredients for composing Phyllome OS
|
||||||
# Uncomment lines with "%include" to enable ingredient
|
# Uncomment lines with "%include" to enable ingredient
|
||||||
Each ingredient represents a feature or a set of integrated features, such as a specific Desktop Environment or a storage configuration.
|
|
||||||
- Ingredients prefixed with live such as live-core.cfg are to be used with live editions only
|
|
||||||
- *core* ingredients are meant be used in all their respective recipes, *base* ingredients, recommended but optional, and extra, extra stuff (sic)
|
|
||||||
|
|
||||||
`cat ingredients/core-storage.cfg`
|
|
||||||
|
|
||||||
```
|
|
||||||
[...]
|
|
||||||
part /boot/efi --fstype="efi" --size=128 --fsoptions="umask=0077,shortname=winnt" --label=efi # Will create an EFI system partitition of 128 MiB (vda1)
|
|
||||||
part /boot --fstype="ext4" --size=512 --label=boot # Create a boot partition of 512 MiB using the ext4 filesystem (vda2)
|
|
||||||
part / --fstype="ext4" --grow --label=root # The remaining space will be used for root (vda3)
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
# Installation method
|
# Installation method
|
||||||
# Exactly one option has to be picked
|
# Exactly one option has to be picked
|
||||||
@ -76,7 +63,7 @@ part / --fstype="ext4" --grow --label=root # The remaining space will be used fo
|
|||||||
# Documentation: https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#chapter-9-package-selection
|
# Documentation: https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#chapter-9-package-selection
|
||||||
|
|
||||||
# Pre- and post-installation sections
|
# Pre- and post-installation sections
|
||||||
# Optional
|
# Optional
|
||||||
# All options can be picked
|
# All options can be picked
|
||||||
# %include ../ingredients/pre.cfg # Triggered just after the kickstart file has been parsed
|
# %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
|
# Documentation: https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#chapter-4-pre-installation-script
|
||||||
@ -95,7 +82,7 @@ part / --fstype="ext4" --grow --label=root # The remaining space will be used fo
|
|||||||
# %include ../ingredients/core-desktop-initial-setup.cfg # Ensures that GNOME initial setup will launch on the first system start-up
|
# %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
|
# %include ../ingredients/core-server-initial-setup.cfg # For headless systems
|
||||||
|
|
||||||
# A GNOME Shell-based desktop environment.
|
# A GNOME Shell-based desktop environment
|
||||||
# Optional
|
# Optional
|
||||||
# %include ../ingredients/base-desktop-gnome.cfg # A GNOME Shell-based desktop environment
|
# %include ../ingredients/base-desktop-gnome.cfg # A GNOME Shell-based desktop environment
|
||||||
# Documentation: https://fedoraproject.org/wiki/InitialSetup
|
# Documentation: https://fedoraproject.org/wiki/InitialSetup
|
23
recipes/desktop.cfg
Normal file
23
recipes/desktop.cfg
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# __ ____ ____ _____
|
||||||
|
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
|
||||||
|
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
|
||||||
|
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
|
||||||
|
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
|
||||||
|
# /_/ /____/
|
||||||
|
|
||||||
|
# A recipe for a generic desktop hypervisor
|
||||||
|
|
||||||
|
%include ../ingredients/core.cfg # Text mode
|
||||||
|
%include ../ingredients/core-storage.cfg # ext4-based storage configuration
|
||||||
|
%include ../ingredients/core-bootloader-grub.cfg # GNU GRUB
|
||||||
|
%include ../ingredients/core-locale.cfg # System locale set to Swiss French as keyboard layout and English as language
|
||||||
|
%include ../ingredients/core-security-off.cfg # Lock root account, disable firewall and SELinux
|
||||||
|
%include ../ingredients/core-services.cfg # Required systemd services
|
||||||
|
%include ../ingredients/core-network.cfg # Network configuration
|
||||||
|
%include ../ingredients/core-packages-mandatory.cfg # Mandatory packages
|
||||||
|
%include ../ingredients/core-packages-default.cfg # Default but not necessary packages
|
||||||
|
%include ../ingredients/core-packages-hardware-support.cfg # Extended hardware support
|
||||||
|
%include ../ingredients/core-fedora-repo.cfg # Offical repositories for Fedora
|
||||||
|
%include ../ingredients/core-post.cfg # Triggered after the installation
|
||||||
|
%include ../ingredients/core-initial-setup-desktop.cfg # OEM setup for GNOME Shell
|
||||||
|
%include ../ingredients/base-desktop-gnome.cfg # A GNOME Shell-based desktop environment
|
13
scripts/core-count.sh
Executable file
13
scripts/core-count.sh
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Get the core count using nproc --all
|
||||||
|
core_count=$(nproc --all)
|
||||||
|
|
||||||
|
# Check if nproc --all returns a numerical value greater than 2
|
||||||
|
if (( core_count > 2 )); then
|
||||||
|
echo "System has more than 2 core (nproc --all: $core_count)."
|
||||||
|
else
|
||||||
|
echo "Warning: System has only $core_count core)."
|
||||||
|
echo "The script requires at least four cores"
|
||||||
|
exit 1 # Exit with an error code to indicate the condition is not met
|
||||||
|
fi
|
122
scripts/deploy-distro.sh
Executable file
122
scripts/deploy-distro.sh
Executable file
@ -0,0 +1,122 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Default values
|
||||||
|
DEFAULT_MEMORY=4096
|
||||||
|
DEFAULT_DISK_SIZE=10
|
||||||
|
|
||||||
|
# Prompt user for VM memory size
|
||||||
|
read -r -p "Provide memory desired VM memory in MB or press Enter to keep default value of $DEFAULT_MEMORY): " memory_size
|
||||||
|
memory_size=${memory_size:-$DEFAULT_MEMORY}
|
||||||
|
|
||||||
|
# Validate memory size
|
||||||
|
if ! [[ "$memory_size" =~ ^[0-9]+$ ]] || (( memory_size < 2048 )); then
|
||||||
|
echo "Invalid memory size. Must be a number greater than or equal to 2048. Using default value of $DEFAULT_MEMORY."
|
||||||
|
memory_size=$DEFAULT_MEMORY
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Prompt user for VM disk size
|
||||||
|
read -r -p "Provide desired disk size of VM in GB or press Enter to use default disk size of $DEFAULT_DISK_SIZE: " disk_size
|
||||||
|
disk_size=${disk_size:-$DEFAULT_DISK_SIZE}
|
||||||
|
|
||||||
|
# Validate disk size
|
||||||
|
if ! [[ "$disk_size" =~ ^[0-9]+$ ]] || (( disk_size < 10 )); then
|
||||||
|
echo "Invalid disk size. Must be a number greater than or equal to 10 GiB. Using default value of $DEFAULT_DISK_SIZE."
|
||||||
|
disk_size=$DEFAULT_DISK_SIZE
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Define URI options for qemu
|
||||||
|
uri_options=("qemu:///system" "qemu:///session")
|
||||||
|
|
||||||
|
# Prompt user to select URI
|
||||||
|
select uri in "${uri_options[@]}"; do
|
||||||
|
if [[ -n "$uri" ]]; then
|
||||||
|
break # Exit the select loop if a valid option is chosen
|
||||||
|
else
|
||||||
|
echo "Invalid selection. Please choose a valid URI."
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
case "$uri" in
|
||||||
|
qemu:///session)
|
||||||
|
disk_path="$HOME/.local/share/libvirt/images/"
|
||||||
|
;;
|
||||||
|
qemu:///system)
|
||||||
|
disk_path="/var/lib/libvirt/images/"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Invalid URI selected. Exiting."
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$uri" in
|
||||||
|
qemu:///session)
|
||||||
|
network_type="user"
|
||||||
|
;;
|
||||||
|
qemu:///system)
|
||||||
|
network_type="default"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Invalid URI selected. Exiting."
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Get a list of files in "dishes" directory, restricted to those starting with "virtual"
|
||||||
|
mapfile -t dish_name < <(find "dishes/" -maxdepth 1 -type f -printf "%f\n" | sed 's/\.[^.]*$//')
|
||||||
|
|
||||||
|
# Check if there are any files
|
||||||
|
if [ ${#dish_name[@]} -eq 0 ]; then
|
||||||
|
echo "No files found in the directory ../dishes."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Display the files with numbered options
|
||||||
|
echo "Available files:"
|
||||||
|
for i in "${!dish_name[@]}"; do
|
||||||
|
echo "$((i + 1)). ${dish_name[$i]}"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Prompt the user to select a file
|
||||||
|
read -r -p "Enter the number of the file you want to select: " choice
|
||||||
|
|
||||||
|
# Validate the user's choice
|
||||||
|
if ! [[ "$choice" =~ ^[0-9]+$ ]] || (( choice < 1 )) || (( choice > ${#dish_name[@]} )); then
|
||||||
|
echo "Invalid choice. Please enter a number from 1 to ${#dish_name[@]}."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Get the selected filename
|
||||||
|
vm_name="${dish_name[$((choice - 1))]}"
|
||||||
|
|
||||||
|
# Output the selected filename
|
||||||
|
echo "You selected: $vm_name"
|
||||||
|
|
||||||
|
# virt-install command with user-defined VM name
|
||||||
|
virt-install \
|
||||||
|
--connect "$uri" \
|
||||||
|
--os-variant fedora41 \
|
||||||
|
--virt-type kvm \
|
||||||
|
--arch x86_64 \
|
||||||
|
--machine q35 \
|
||||||
|
--name "$vm_name" \
|
||||||
|
--boot uefi \
|
||||||
|
--cpu host-model,topology.sockets=1,topology.cores=2,topology.threads=2 \
|
||||||
|
--vcpus 4 \
|
||||||
|
--memory "$memory_size" \
|
||||||
|
--video virtio \
|
||||||
|
--channel unix,target.type=virtio,target.name=org.qemu.guest_agent.0 \
|
||||||
|
--autoconsole none \
|
||||||
|
--console pty,target.type=virtio \
|
||||||
|
--sound virtio \
|
||||||
|
--network type="$network_type",model=virtio \
|
||||||
|
--controller type=virtio-serial \
|
||||||
|
--controller type=usb,model=none \
|
||||||
|
--controller type=scsi,model=virtio-scsi \
|
||||||
|
--input type=keyboard,bus=virtio \
|
||||||
|
--input type=mouse,bus=virtio \
|
||||||
|
--rng /dev/urandom,model=virtio \
|
||||||
|
--disk path="${disk_path}/${vm_name}.img",format=raw,bus=virtio,cache=writeback,size="$disk_size" \
|
||||||
|
--location=https://download.fedoraproject.org/pub/fedora/linux/releases/42/Everything/x86_64/os/ \
|
||||||
|
--initrd-inject ./dishes/"$vm_name".cfg \
|
||||||
|
--extra-args "inst.ks=file:/$vm_name.cfg"
|
||||||
|
|
||||||
|
echo "virt-install command executed with VM name: $vm_name"
|
14
scripts/system-memory.sh
Executable file
14
scripts/system-memory.sh
Executable file
@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Read the total memory from /proc/meminfo in MiB
|
||||||
|
total_memory=$(awk '/MemTotal/ {print $2}' /proc/meminfo)
|
||||||
|
|
||||||
|
# Convert to MiB by dividing by 1024 (since MemTotal is in KiB)
|
||||||
|
total_memory_mb=$(( total_memory / 1024 ))
|
||||||
|
|
||||||
|
if [[ "$total_memory_mb" -lt "4096" ]]; then
|
||||||
|
echo "Not enough RAM: The system has only ${total_memory_mb}MiB of RAM, but at least 4096 is required."
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "Sufficient memory available. System has ${total_memory_mb}MiB of RAM."
|
||||||
|
fi
|
Reference in New Issue
Block a user