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 21:21] – VM Reactor 0.16 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.16 – 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 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 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 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>