Copy and paste. Every explanation, every caveat and every
troubleshooting entry is in INSTALL.md, whose section
numbers are cited here as INSTALL.md § n.
| Your machine | Go to |
|---|---|
| Debian, Ubuntu and derivatives | § 1 |
| Fedora, RHEL family (Rocky, AlmaLinux), openSUSE | § 2 |
| anything else | § 3 |
| you intend to modify Marionnet | § 9 |
Then § 4 (images), § 5 (sudoers rule, required) and § 6 (launch), whichever you took.
Archive signing key, used by § 1 and § 2 — compare it with a source
that is not this page (INSTALL.md § 2):
Marionnet Archive Signing Key <loddo@lipn.univ-paris13.fr>
4A65 3434 0BF9 7733 E74C 9DFC 12E4 6000 225F 0E56
sudo apt update && sudo apt install ca-certificates curlsudo install -d /etc/apt/keyrings
sudo curl -o /etc/apt/keyrings/marionnet.asc \
https://git.launchpad.net/marionnet/plain/marionnet-archive-keyring.asc
echo 'deb [signed-by=/etc/apt/keyrings/marionnet.asc] https://www.marionnet.org/download/apt/ ./' \
| sudo tee /etc/apt/sources.list.d/marionnet.list
sudo apt update
sudo apt install marionnetNever add -L to that curl
(INSTALL.md § 2).
sudo apt install gnupg
gpg --show-keys /etc/apt/keyrings/marionnet.asc # must print the fingerprint abovesudo apt install marionnet-kernels # 64-bit kernel -- apt brought it already (Recommends:); ask for it under dnf
sudo apt install marionnet-fs-guignol # the only ROUTER filesystem: without it, no routerA router needs marionnet-fs-guignol AND the
32-bit kernel below: guignol does not run on the 64-bit one.
That kernel also carries every .mar project made before
2026, and it needs a foreign architecture enabled:
sudo dpkg --add-architecture i386 && sudo apt update
sudo apt install marionnet-kernels-i386A filesystem whose supported kernel is not installed is not
offered at all — nothing fails, it is simply absent from the
list (INSTALL.md § 2).
sudo apt install -o Dpkg::Options::=--force-confold marionnetsudo dnf install epel-release# 1. the key — fetched, LOOKED AT, and only then imported
sudo install -d /etc/pki/rpm-gpg
sudo curl -o /etc/pki/rpm-gpg/RPM-GPG-KEY-marionnet \
https://git.launchpad.net/marionnet/plain/marionnet-archive-keyring.asc
gpg --show-keys /etc/pki/rpm-gpg/RPM-GPG-KEY-marionnet # must print the fingerprint of § 2
sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-marionnet
# 2. the repository, and the application
sudo curl -o /etc/yum.repos.d/marionnet.repo \
https://www.marionnet.org/download/rpm/marionnet.repo
sudo dnf install marionnet # zypper install marionnet, on openSUSESame three names as § 1.4, needed for the same things.
marionnet-kernels-i386 is not installable on RHEL 10 (no
32-bit multilib there at all), and with it go guignol, wheezy and
therefore the router (temporary: a 64-bit router image is planned).
wget https://www.marionnet.org/download/marionnet-install.sh/marionnet-install.sh
bash marionnet-install.sh --binary --with-depsSee what is published, and what is refused and why, before installing anything:
bash marionnet-install.sh --binary --fetch-only --listmarionnet-get-imagesNever pass --prefix here after
installing from a package: the images would land where the application
does not look (INSTALL.md § 5).
Classroom with no internet access — mirror the release directory once, then:
marionnet-install.sh --fetch-only --from /srv/marionnet-mirrorOne account, or several:
sudo marionnet-sudoers.sh install <user>...A whole classroom, before the students have logins:
sudo groupadd marionnet # if the site has no group of its own
sudo gpasswd -a <login> marionnet # (or use the LDAP/AD group you already have)
sudo marionnet-sudoers.sh install %marionnetThat grants block (a) alone — taps, and the X11 road by which
wireshark and xterm reach your display. Blocks
(b) NAT bridge and (c) LAN bridge are asked for at run time, with the
user's own sudo password. Read INSTALL.md § 7.2
before granting (c): it reconfigures the host's own network
card.
Grant the NAT bridge in advance, without (c) ever entering the picture:
sudo marionnet-sudoers.sh install --enable-natbridge %marionnetForbid a block on this machine, for everybody and for good:
sudo marionnet-sudoers.sh deny --lanbridge # or --natbridge, or --bridgesmarionnet-sudoers.sh policy # exit 0 if allowed, 3 if denied; says whichTake it all back:
sudo marionnet-sudoers.sh uninstallmarionnet # or: marionnet -r lab.mar, marionnet --exam, marionnet --helpmarionnet -v # version and revision
marionnet --paths # where this installation looks for images, kernels and scriptsMarionnet needs an X display, and gives the guests access to it with
xhost.
sudo apt purge marionnet marionnet-kernels marionnet-kernels-i386 marionnet-fs-guignolsudo dnf remove marionnet marionnet-kernels marionnet-kernels-i386 marionnet-fs-guignolTarball: the README inside it lists what to delete. In
all cases the sudoers rule stays until
sudo marionnet-sudoers.sh uninstall.
| Symptom | Read |
|---|---|
server down, no route, wrong URL? while the site is
up |
INSTALL.md § 1 — no certificate store |
apt ignores the repository, apt-get update still exits
0 |
INSTALL.md § 9 |
Missing key,
signature verification failed,
Failed to import OpenPGP keys |
INSTALL.md § 2, § 3 — fetch the key again,
check the fingerprint |
| the tarball is refused, naming a glibc | INSTALL.md § 4 — your distribution is older than the
build floor |
| Marionnet starts, the guest images do not appear | INSTALL.md § 5, then
marionnet --paths |
| a virtual machine will not start, or nothing opens from a guest | INSTALL.md § 7 — the sudoers rule |
git clone https://git.launchpad.net/marionnet && cd marionnet
make dependencies # apt packages (build + run time), opam switch, opam packages
dune build # a fresh clone needs nothing else: camlp4 preprocessors, C stubs,
# version.ml and meta.ml are all built by dune
make install-final-as-root # it calls sudo itself, for the one step which needs it