Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
vm-reactor:start [01.11.2026 19:39] – VM Reactor 0.13 ariavm-reactor:start [07.11.2026 19:51] (current) – stratum-core instead of stratum-init aria
Line 12: Line 12:
  
 <WRAP centeralign> <WRAP centeralign>
-**VM Reactor 0.13 – Technical Preview** · Debian 13 (trixie) and Debian 14 (forky) · amd64 and arm64 · free software (GPL-3+) · package ''vm-reactor'' in the Stratum repository (component //contrib//)+**VM Reactor 0.24 – Technical Preview** · Debian 13 (trixie) and Debian 14 (forky) · amd64 and arm64 · free software (GPL-3+) · package ''vm-reactor'' in the Stratum repository (component //contrib//)
 </WRAP> </WRAP>
  
Line 20: Line 20:
  
 <WRAP center round info 80%> <WRAP center round info 80%>
-**A contrib package of the Stratum repository.** VM Reactor is published in the component //contrib// of the Stratum repository, next to the Stratum modules in //main//. It builds on Stratum – it needs ''stratum-init'' and works together with the Stratum modules – but it enjoys a certain independence from them: its own versions and release cycle, its own web interface, its own handbook and this page of its own.+**A contrib package of the Stratum repository.** VM Reactor is published in the component //contrib// of the Stratum repository, next to the Stratum modules in //main//. It builds on Stratum – it needs ''stratum-core'' and works together with the Stratum modules – but it enjoys a certain independence from them: its own versions and release cycle, its own web interface, its own handbook and this page of its own.
 </WRAP> </WRAP>
  
Line 49: Line 49:
 <grid cols="1fr 1fr 1fr"> <grid cols="1fr 1fr 1fr">
 <col> <col>
-<card header="Storage" subtitle="Directory · LVM thin pool · NFS share" shadow="small"> +<card header="Storage" subtitle="Directory · Btrfs pool · LVM thin pool · NFS share" shadow="small"> 
-Guests, ISO images, LXC templates and backups in the storage you choose: a directory, an LVM thin pool – thin volumes with instant snapshots – or an NFS share.+Guests, ISO images, LXC templates and backups in the storage you choose: a directory, a btrfs pool on one or more disks – RAID 0, 1, 1C3 or 10, snapshots, compression and checksums – an LVM thin pool or an NFS share. Disks of the pools are added, removed and replaced while the guests keep running.
 </card> </card>
 </col> </col>
Line 73: Line 73:
 <col> <col>
 <card header="Memory" subtitle="on by default · deduplication · compression · ballooning" shadow="small"> <card header="Memory" subtitle="on by default · deduplication · compression · ballooning" shadow="small">
-A page of its own and switched on by default: deduplication (ksm), compression (zram with ''stratum-zram'', zstd) and ballooning (virtio-balloon with free page reporting and an automatic balloon) – tuned for a hypervisor. The Overview shows in real time how much RAM each of them saves.+A page of its own and switched on by default: deduplication (ksm), compression (zram, zstd) and ballooning (virtio-balloon with free page reporting and an automatic balloon) – tuned for a hypervisor, managed by ''stratum-memory''. The Overview shows in real time how much RAM each of them saves.
 </card> </card>
 </col> </col>
Line 121: Line 121:
  
 <WRAP centeralign> <WRAP centeralign>
-**More guests in the same memory – an advanced feature of VM Reactor.** **Memory** – a page of the main menu – brings three techniques together, always in this order: **deduplication** keeps identical memory pages of the virtual machines only once (ksm), **compression** keeps idle guest memory compressed in RAM (zram, typically 3:1 and more), and **ballooning** returns memory the machines do not use to the host (virtio-balloon). VM Reactor switches them on at the installation with values recommended for a virtualization host, and the panel **Memory management** on the **Overview** shows in real time – one curve each – how much RAM they save.+**More guests in the same memory – an advanced feature of VM Reactor.** **Memory** – a page of the main menu – brings three techniques together, always in this order: **deduplication** keeps identical memory pages of the virtual machines only once (ksm), **compression** keeps idle guest memory compressed in RAM (zram, typically 3:1 and more), and **ballooning** returns memory the machines do not use to the host (virtio-balloon). VM Reactor switches them on at the installation with values recommended for a virtualization host (''stratum-memory'', type //VM Reactor host//), and the panel **Memory management** on the **Overview** shows in real time – one curve each – how much RAM they save.
 </WRAP> </WRAP>
  
Line 159: Line 159:
 | System | **Debian 13 (trixie)** or **Debian 14 (forky)**, ''amd64'' or ''arm64'' – a physical computer or a virtual machine with nested virtualization | | System | **Debian 13 (trixie)** or **Debian 14 (forky)**, ''amd64'' or ''arm64'' – a physical computer or a virtual machine with nested virtualization |
 | Virtualization | **VT-x / AMD-V** switched on in the firmware for KVM machines; without it, machines run emulated and slowly (containers and applications do not need it) | | Virtualization | **VT-x / AMD-V** switched on in the firmware for KVM machines; without it, machines run emulated and slowly (containers and applications do not need it) |
-| Stratum | ''stratum-init'' 0.40 or newer and the Stratum repository with the components ''main'' **and** ''contrib'' – see [[stratum:start#quick_setup|Stratum – quick setup]] |+| Stratum | ''stratum-core'' 0.49 or newer (the Stratum core, written in Go) and the Stratum repository with the components ''main'' **and** ''contrib'' – see [[stratum:start#quick_setup|Stratum – quick setup]] |
 | Memory and disk | Enough for the host and all guests; memory compression, deduplication and the balloon help when it gets tight | | Memory and disk | Enough for the host and all guests; memory compression, deduplication and the balloon help when it gets tight |
 | Browser | Any current browser; the web interface uses HTTPS on port ''8443'' | | Browser | Any current browser; the web interface uses HTTPS on port ''8443'' |
Line 174: Line 174:
 </card> </card>
  
-Sources written by older versions of ''stratum-archive-keyring'' have only ''main''; installing the current ''stratum-archive-keyring'' (or ''stratum-init'') adds ''contrib'' and ''non-free'' by itself.+Sources written by older versions of ''stratum-archive-keyring'' have only ''main''; installing the current ''stratum-archive-keyring'' (or ''stratum-core'') adds ''contrib'' and ''non-free'' by itself.
  
 ==== 2. Install the package ==== ==== 2. Install the package ====
Line 185: Line 185:
 </card> </card>
  
-APT brings everything VM Reactor needs from Debian – libvirt and QEMU, LXC, nftables, dnsmasq, noVNC – together with ''ksmtuned'' and ''stratum-zram'' for the memory setup, and recommends ''stratum-firewall''. The installation asks one question – **Install Docker from Docker's repository?** (yes by default): VM Reactor then sets up Docker's key and repository and installs Docker as soon as APT has finished, as a task you can follow under **Tasks**. At the end, the installation prints the address of the web interface and where the first password is:+APT brings everything VM Reactor needs from Debian – libvirt and QEMU, LXC, nftables, dnsmasq, noVNC – together with the Stratum modules it works with: ''stratum-memory'' for the memory setup, ''stratum-firewall'', ''stratum-security'', ''stratum-watchdog'', ''stratum-software'', ''stratum-support'' and ''stratum-wireguard''. The installation asks one question – **Install Docker from Docker's repository?** (yes by default): VM Reactor then sets up Docker's key and repository and installs Docker as soon as APT has finished, as a task you can follow under **Tasks**. At the end, the installation prints the address of the web interface and where the first password is:
  
 <card header="Output" shadow="small"> <card header="Output" shadow="small">
Line 247: Line 247:
 | **NAT** (bridge ''vmnat0'', ''10.10.10.0/24'' by default) | a private address from the host's DHCP, names ''<name>.vm-reactor.lan''; reachable from outside through **published ports**. Fixed addresses below the DHCP range. | | **NAT** (bridge ''vmnat0'', ''10.10.10.0/24'' by default) | a private address from the host's DHCP, names ''<name>.vm-reactor.lan''; reachable from outside through **published ports**. Fixed addresses below the DHCP range. |
 | **Local network** | its own address in your LAN (machines: macvtap, containers: macvlan) – the host itself cannot reach these guests | | **Local network** | its own address in your LAN (machines: macvtap, containers: macvlan) – the host itself cannot reach these guests |
-| **Bridge** | a bridge on a network card (''vmbrN'') – guests are like computers next to the host; the change of ''/etc/network/interfaces'' must be confirmed, otherwise it is rolled back after 2 minutes |+| **Bridge** | a bridge on a network card (''vmbrN'') – guests are like computers next to the host; the change of ''/etc/network/interfaces'' must be confirmed within 60 seconds, otherwise it is rolled back |
 | **Internal bridge** | a bridge without a network card – guests talk only to each other | | **Internal bridge** | a bridge without a network card – guests talk only to each other |
 | **Applications** | the front service of a Docker application joins the NAT network (Docker network ''vmnat'' on ''vmnat0'', addresses ''.64''–''.95'' by default, ''NAT_DOCKER''): a fixed address, ''<name>.vm-reactor.lan'', published ports and the firewall of the guest; its other services (e.g. a database) stay in the application's own network. New applications join by themselves, existing ones under **Network** of the application. | | **Applications** | the front service of a Docker application joins the NAT network (Docker network ''vmnat'' on ''vmnat0'', addresses ''.64''–''.95'' by default, ''NAT_DOCKER''): a fixed address, ''<name>.vm-reactor.lan'', published ports and the firewall of the guest; its other services (e.g. a database) stay in the application's own network. New applications join by themselves, existing ones under **Network** of the application. |
  
 Every guest also has its own **firewall** (nftables on the bridge): policies, rules and protection against address spoofing. With ''stratum-wireguard'' the NAT network can be **announced in the mesh** – the other members then reach the guests directly; when several hosts share a mesh, give each one its own NAT network (the guests keep the host part of their address). Every guest also has its own **firewall** (nftables on the bridge): policies, rules and protection against address spoofing. With ''stratum-wireguard'' the NAT network can be **announced in the mesh** – the other members then reach the guests directly; when several hosts share a mesh, give each one its own NAT network (the guests keep the host part of their address).
 +
 +**Protection against lock-out.** A change of the NAT network, of a bridge on a network card or of the access to the web interface (port, address, allowed networks under **Settings – General**) must be kept within **60 seconds**: a banner with the countdown and **Keep the change** appears on every page. Confirm it from the browser over the new configuration; when the host can no longer be reached, the previous configuration comes back by itself (a systemd timer, ''vm-reactor settings-rollback'').
  
 ==== Storage ==== ==== Storage ====
Line 260: Line 262:
 <code> <code>
 local dir /var/lib/vm-reactor guests,iso,templates,backup local dir /var/lib/vm-reactor guests,iso,templates,backup
 +data btrfs /var/lib/vm-reactor/storage/data guests,iso,templates,backup source=<uuid> options=compress=zstd:1
 thin lvmthin /var/lib/vm-reactor/storage/thin guests source=vmr-thin/data thin lvmthin /var/lib/vm-reactor/storage/thin guests source=vmr-thin/data
 </code> </code>
 </card> </card>
  
-Types: ''dir'' (Directory), ''lvmthin'' (LVM thin pool: thin volumes and snapshots) and ''nfs'' (NFS share). Add them in **Storage**; the web interface checks the tools and can format a new disk.+**Add storage** offers four types; the dialog checks your entries at once and shows what is wrong: 
 + 
 +  * **Directory** – any mounted directory: a second disk, an existing btrfs file system or an NFS share the host mounts itself. VM Reactor recognises the file system: on btrfs the guests get subvolumes and snapshots, on an NFS share the storage is offline while the share is not there. 
 +  * **Btrfs pool** – a new btrfs file system on one or more empty disks or partitions: **single**, **RAID 0**, **RAID 1** (2+ disks), **RAID 1C3** (3 copies, 3+ disks) or **RAID 10** (4+ disks). RAID 5/6 are not offered – their write hole can lose data. The metadata always have two copies at least. Compression zstd, checksums with self-repair from the copies, instant snapshots of every guest (its own subvolume), clones as reflinks; disks of machines are raw files (optionally without copy-on-write). **Disks** on the card adds, removes and replaces disks – also a failed or missing one – converts the profile, starts a scrub or a balance and mounts a pool with a missing disk degraded, all while the guests keep running. VM Reactor watches the pools (missing disks, device errors, scrub results) and runs a scrub every 30 days. 
 +  * **LVM thin pool** – a new thin pool on one or more empty disks (or an existing one such as ''pve/data''): thin volumes for disks of machines and file systems of containers, instant snapshots; disks can be added and taken out later. A thin pool cannot shrink – to take a disk out, the other disks need room for its data. 
 +  * **NFS share** – an export (''server:/path''), mounted by VM Reactor through ''/etc/fstab''; the server must answer on port 2049. 
 + 
 +<card header="Terminal — root@host" shadow="large"> 
 +<code bash> 
 +vm-reactor storage list                                     # all storages: type, state, size, free space 
 +vm-reactor storage add data btrfs /dev/sdb /dev/sdc --profile raid1 --yes   # a btrfs pool, RAID 1 
 +vm-reactor storage disk add data /dev/sdd --yes              # one more disk, the data are spread 
 +vm-reactor storage profile data raid1c3                      # three copies 
 +vm-reactor storage disk replace data /dev/sdb /dev/sde --yes # replace a disk (devid:N: a missing one) 
 +vm-reactor storage scrub data                                # check every block, repair from the copies 
 +vm-reactor storage disk list data                            # disks, errors, the last scrub 
 +vm-reactor storage add thin lvmthin --new /dev/sdf --yes     # an LVM thin pool 
 +vm-reactor storage add share nfs 10.0.0.5:/srv/vm            # an NFS export 
 +</code> 
 +</card>
  
 ==== Backups and restore ==== ==== Backups and restore ====
Line 323: Line 345:
   * **Start with the host**: guests with autostart start in their **start order** with delays (''vm-reactor-guests.service''); at host shutdown they are shut down in reverse order, each with a timeout (''SHUTDOWN_TIMEOUT'').   * **Start with the host**: guests with autostart start in their **start order** with delays (''vm-reactor-guests.service''); at host shutdown they are shut down in reverse order, each with a timeout (''SHUTDOWN_TIMEOUT'').
   * **Watchdog**: every ''WATCHDOG_INTERVAL'' seconds it checks the components (libvirt, LXC, Docker, the NAT network, the firewall rules, the storages) and the guests. A guest that should run but stopped or crashed is started again when its option //restart// is on – at most three times an hour; a machine whose guest agent stops answering is reset. With ''stratum-watchdog'', VM Reactor itself is watched too.   * **Watchdog**: every ''WATCHDOG_INTERVAL'' seconds it checks the components (libvirt, LXC, Docker, the NAT network, the firewall rules, the storages) and the guests. A guest that should run but stopped or crashed is started again when its option //restart// is on – at most three times an hour; a machine whose guest agent stops answering is reset. With ''stratum-watchdog'', VM Reactor itself is watched too.
-  * **Memory** (main menu): deduplication (ksm with ''ksmtuned''; ksm belongs to the physical host – inside a virtual machine ''ksmtuned'' does not start), compression (stratum-zram with the profile //VM Reactor host//, zstd or lz4, and the recommended kernel values for a hypervisor) and ballooning (virtio-balloon: free page reporting, and an automatic balloon that never takes a machine below its minimum memory – half its memory by default, //Hardware//). All of it is switched on at the installation; ''vm-reactor memory-defaults --force'' applies it again.+  * **Memory** (main menu): deduplication (ksm with ''ksmtuned''; ksm belongs to the physical host – inside a virtual machine ''ksmtuned'' does not start), compression (zram with zstd or lz4 and the recommended kernel values for a hypervisor) and ballooning (virtio-balloon: free page reporting, and an automatic balloon that never takes a machine below its minimum memory – half its memory by default, //Hardware//). All of it is done by ''stratum-memory'' with the type of computer //VM Reactor host// – VM Reactor shows it and changes its settings; it is switched on at the installation, ''vm-reactor memory-defaults --force'' applies it again.
  
 ==== Stratum modules ==== ==== Stratum modules ====
Line 332: Line 354:
 | stratum-wireguard | the NAT network is announced in the mesh; the members reach the guests | Network | | stratum-wireguard | the NAT network is announced in the mesh; the members reach the guests | Network |
 | stratum-support | support sessions; ''vm-reactor report'' is part of the diagnostic report | Settings → Support | | stratum-support | support sessions; ''vm-reactor report'' is part of the diagnostic report | Settings → Support |
-| stratum-zram | memory compression for VM hosts (zstd or lz4) | Memory |+| stratum-memory | compression (zram), deduplication (ksm) and the automatic ballooning of the machines | Memory |
 | stratum-ansible | dynamic inventory of the machines and containers | ''vm-reactor inventory'' | | stratum-ansible | dynamic inventory of the machines and containers | ''vm-reactor inventory'' |
  
Line 364: Line 386:
  
 VM Reactor is updated with APT like every other package (''apt-get upgrade''). Restarting the web interface does not touch the guests – they keep running. VM Reactor is updated with APT like every other package (''apt-get upgrade''). Restarting the web interface does not touch the guests – they keep running.
 +
 +**Optional packages** (**Settings – Packages**, one click each): ''vm-reactor-virtio-win'' – the VirtIO drivers for Windows machines (the virtio-win ISO image 0.1.302 of the Fedora project, BSD licence): it appears in the storage ''local'' among the ISO images as ''virtio-win-0.1.302.iso'' – attach it to a Windows machine as a second CD drive and load the drivers during the Windows setup (''viostor'' or ''vioscsi'') or install them all afterwards with ''virtio-win-guest-tools.exe''; ''vm-reactor-handbook'' – the VM Reactor Handbook as PDF.
 +
 +VM Reactor is written in **Go** – the server, the API and the command line are one Go program; the web interface uses Vue.js.
  
 ===== VM Reactor Handbook ===== ===== VM Reactor Handbook =====
Line 388: Line 414:
 <card header="Download" shadow="small"> <card header="Download" shadow="small">
 **[[https://www.skraba.net/stratum-apt/handbook/vm-reactor-handbook.pdf|VM Reactor Handbook (PDF, A4, 28 pages, 0.7 MB)]]** \\ **[[https://www.skraba.net/stratum-apt/handbook/vm-reactor-handbook.pdf|VM Reactor Handbook (PDF, A4, 28 pages, 0.7 MB)]]** \\
-Draft · November 2026 · VM Reactor 0.08 · Stratum Project \\ +Draft · November 2026 · VM Reactor 0.24 · Stratum Project \\ 
-On a VM Reactor host: ''apt install vm-reactor-handbook'' – the book is then at ''/usr/share/vm-reactor/handbook/vm-reactor-handbook.pdf''.+On a VM Reactor host: ''apt install vm-reactor-handbook'' (or **Settings – Packages**) – the book is then at ''/usr/share/vm-reactor/handbook/vm-reactor-handbook.pdf'', with a link in ''/root/vm-reactor-handbook.pdf''.
 </card> </card>
 </col> </col>