Thursday, September 24, 2026

State-Isolated KVM Hypervisor Architecture on openSUSE Tumbleweed bare metal case (Assisted by Google AI)

Advantages of the YaST Installer
Extreme Customization During Setup: Unlike many rigid Linux installers that force you to accept default software or partitioning, YaST lets you modify virtually every parameter - including  complicated BTRFS/XFS disk layout, provides builtin interface for additional subvolumes decouple if it appears to be required, adding or removing specific software packages, desktop environments, and multimedia codecs before the installation even begins.

Centralized System Control: It acts as a single, unified control center for hardware configuration, partitioning, bootloader options, user accounts, and network setups. Reduced Need for CLI Knowledge: It bridges the gap for users who prefer a graphical interface (GUI) or text-based menu (ncurses) over manually editing low-level configuration files in the terminal.
YaST stands for Yet another Setup Tool, and it functions as both the primary operating system installer and the central system
configuration utility for SUSE Linux distributions 

******************
Final disk layout
******************
localhost:~ # hostnamectl
Transient hostname: localhost
   Static hostname: (unset)
         Icon name: computer-desktop
           Chassis: desktop 🖥
 Chassis Asset Tag: To be filled by O.E.M.
        Machine ID: 90c6a130b51143a285a54496a71901d8
           Boot ID: 5cefbc13c5004fe39cc1edf4a2422e05
      Product UUID: af95be8a-eace-8515-aaa1-00d861d9318b
  Operating System: openSUSE Tumbleweed
       CPE OS Name: cpe:2.3:o:opensuse:tumbleweed:20260922:*:*:*:*:*:*:*
            Kernel: Linux 7.2.6-1-default
      Architecture: x86-64
   Hardware Vendor: Micro-Star International Co., Ltd.
    Hardware Model: MS-7C37
   Hardware Serial: To be filled by O.E.M.
  Hardware Version: 3.0
  Firmware Version: H.60
     Firmware Date: Wed 2019-11-06
      Firmware Age: 6y 10month 2w 4d


localhost:~ # findmnt -t btrfs
TARGET              SOURCE                                    FSTYPE OPTIONS
/                   /dev/nvme1n1p4[/@/.snapshots/19/snapshot] btrfs  rw,relatime,seclabel,ssd,discard=async,space_cache=v2,subvolid=283,subvol=/@/.snapshots/19/snapshot
├─/.snapshots       /dev/nvme1n1p4[/@/.snapshots]             btrfs  rw,relatime,seclabel,ssd,discard=async,space_cache=v2,subvolid=263,subvol=/@/.snapshots
├─/etc/libvirt/qemu /dev/nvme1n1p4[/@/etc/libvirt/qemu]       btrfs  rw,relatime,seclabel,ssd,discard=async,space_cache=v2,subvolid=257,subvol=/@/etc/libvirt/qemu
├─/root             /dev/nvme1n1p4[/@/root]                   btrfs  rw,relatime,seclabel,ssd,discard=async,space_cache=v2,subvolid=261,subvol=/@/root
├─/home             /dev/nvme1n1p4[/@/home]                   btrfs  rw,relatime,seclabel,ssd,discard=async,space_cache=v2,subvolid=262,subvol=/@/home
├─/srv              /dev/nvme1n1p4[/@/srv]                    btrfs  rw,relatime,seclabel,ssd,discard=async,space_cache=v2,subvolid=260,subvol=/@/srv
├─/usr/local        /dev/nvme1n1p4[/@/usr/local]              btrfs  rw,relatime,seclabel,ssd,discard=async,space_cache=v2,subvolid=259,subvol=/@/usr/local
└─/var              /dev/nvme1n1p4[/@/var]                    btrfs  rw,relatime,seclabel,ssd,discard=async,space_cache=v2,subvolid=258,subvol=/@/var

localhost:~ # df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/nvme1n1p4 btrfs     291G   14G  276G   5% /
devtmpfs       devtmpfs   16G     0   16G   0% /dev
tmpfs          tmpfs      16G     0   16G   0% /dev/shm
efivarfs       efivarfs  128K   28K   96K  23% /sys/firmware/efi/efivars
tmpfs          tmpfs     6.3G  1.9M  6.3G   1% /run
tmpfs          tmpfs      16G   20K   16G   1% /tmp
none           tmpfs     1.0M     0  1.0M   0% /run/credentials/systemd-journald.service
/dev/nvme1n1p4 btrfs     291G   14G  276G   5% /.snapshots
/dev/nvme1n1p4 btrfs     291G   14G  276G   5% /etc/libvirt/qemu
/dev/nvme1n1p4 btrfs     291G   14G  276G   5% /root
/dev/nvme1n1p4 btrfs     291G   14G  276G   5% /home
/dev/nvme1n1p4 btrfs     291G   14G  276G   5% /srv
/dev/nvme1n1p4 btrfs     291G   14G  276G   5% /usr/local
/dev/nvme1n1p4 btrfs     291G   14G  276G   5% /var
/dev/nvme1n1p2 ext4      2.0G  105M  1.7G   6% /boot
/dev/nvme1n1p3 xfs       185G   16G  169G   9% /opt
/dev/nvme1n1p1 vfat      511M  281M  231M  55% /boot/efi
tmpfs          tmpfs     3.2G   72K  3.2G   1% /run/user/1000
none           tmpfs     1.0M     0  1.0M   0% /run/credentials/getty@tty1.service


********************************************************
Decouple of @/etc/libvirt/qemu was performed during
YaST Installer partition phase
**********************************************************
Suse Tumbleweed  redefining location of libvirt default pool
**********************************************************
# 1. Stop the modular QEMU daemon and its active socket
sudo systemctl stop virtqemud.service virtqemud.socket
sudo mkdir -p /opt/libvirt/images

# 2. Migrate existing images (if you have any)
if [ -d /var/lib/libvirt/images ] && [ "$(ls -A /var/lib/libvirt/images 2>/dev/null)" ]; then
   sudo mv /var/lib/libvirt/images/* /opt/libvirt/images/
fi

# 3. Configure folder permissions and SELinux contexts for Tumbleweed
sudo chown root:root /opt/libvirt/images
sudo chmod 0711 /opt/libvirt/images
sudo semanage fcontext -a -t virt_image_t "/opt/libvirt/images(/.*)?"
sudo restorecon -R -v /opt/libvirt/images

# 4. Restart the modular service/socket and reassign the default pool via virsh
sudo systemctl start virtqemud.socket virtqemud.service
sudo virsh pool-destroy default 2>/dev/null
sudo virsh pool-undefine default 2>/dev/null
sudo virsh pool-define-as default dir --target "/opt/libvirt/images"
sudo virsh pool-start default
sudo virsh pool-autostart default

# 5. Verify the configuration
sudo virsh pool-dumpxml default | grep path


**********************
Proof of concept
**********************
localhost:~ # df -Th /opt/libvirt/images
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/nvme0n1p3 xfs   185G  7.8G  177G   5% /opt

localhost:~ # ls -Zl /opt/libvirt/images
total 4394808
-rw-------. 1 qemu qemu system_u:object_r:svirt_image_t:s0:c421,c703 32217432064 Sep 24 07:22 ArchCosmic0924.qcow2
localhost:~ # ls -Zl /etc/libvirt/qemu
total 8
-rw-------. 1 root root system_u:object_r:virt_etc_rw_t:s0 8118 Sep 24 06:54 ArchCosmic0924.xml
drwx------. 1 root root system_u:object_r:virt_etc_rw_t:s0    0 Sep 16 17:09 autostart
drwx------. 1 root root system_u:object_r:virt_etc_rw_t:s0   40 Sep 24 06:17 networks  

***********************

Snapshot tracking                                    

***********************
localhost:~ # snapper -c root list |tail -5
 8  │ post   │     5 │ Thu 24 Sep 2026 06:10:49 AM EDT │ root │ 352.00 KiB │ number  │                           │
 9  │ pre    │       │ Thu 24 Sep 2026 06:22:47 AM EDT │ root │  28.00 MiB │ number  │ zypp(zypper)              │ important=no
10  │ post   │     9 │ Thu 24 Sep 2026 06:22:59 AM EDT │ root │  15.80 MiB │ number  │                           │ important=no
11  │ single │       │ Thu 24 Sep 2026 06:49:14 AM EDT │ root │  16.00 KiB │         │ KVM Setup.No vms deployed │
12  │ single │       │ Thu 24 Sep 2026 06:50:26 AM EDT │ root │  16.00 KiB │         │ KVM Setup. Arch ISO extracted    

ArchCosmic0924 deployed as L1 Guest.

localhost:~ # snapper rollback 12
Ambit is classic.
Creating read-only snapshot of current system. (Snapshot 13.)
Creating read-write snapshot of snapshot 12. (Snapshot 14.)
Setting default subvolume to snapshot 14.

System rebooted into /@/.snapshots/14/snapshot

boris@localhost:~> sudo su -
[sudo] password for root:
localhost:~ # mount | grep 'on / '
/dev/nvme1n1p4 on / type btrfs (rw,relatime,seclabel,ssd,discard=async,space_cache=v2,subvolid=278,subvol=/@/.snapshots/14/snapshot)

localhost:~ # virsh list --all
 Id   Name             State
--------------------------------
 1    ArchCosmic0924   running


No comments:

Post a Comment