Wheelhouse docs

Serial consoles#

On a live boot the installer takes over the first video console and nothing else. A serial console keeps a normal login prompt, and its banner tells you what to do about it: log in as vyos / vyos and run sudo wheelhouse-install. It is the same walk-through, drawn by dialog in 80 columns, which is what every screen and banner in the installer is sized for.

Running the installer#

bash
sudo wheelhouse-install

The waiting screen comes first — VyOS loading its configuration and the agent starting, which takes a couple of minutes on a slow box — and then the same welcome menu a video console shows. From there the screens are identical: Every installer question.

If you started the installer before the agent was ready you will see a plain counter rather than a dialog box:

waiting for the agent (35s)

That is the same wait, printed instead of drawn, because a hand-run installer has a shell to print to.

Why the installer does not take the serial console#

A systemd generator makes getty@tty1.service run the installer on a live boot. It touches tty1 and nothing else, so serial-getty@ttyS0.service and every other console keep their login prompt.

That is deliberate on two counts. A serial console is often a lights-out management port that something else is already watching, and taking it over would be rude. And the video console needed a generator rather than a competing unit because two units wanting the same tty in one boot transaction are resolved in an order that is not ours to choose — a fight the competing-unit version lost on real hardware.

The banner on a serial line#

The console banner is written to /etc/issue and shown above every login prompt, on every console. On a live image it ends with:

  Console:   vyos / vyos on the live image; the installer sets yours
  Install:   on the first console; elsewhere run: sudo wheelhouse-install

The banner is rewritten every 20 seconds, and when the text changes it restarts the login prompts nobody is sitting at so the new text is drawn immediately — including serial-getty@* units. Two exceptions keep that from being annoying: a console with someone logged in is left alone, and tty1 is left alone while the installer holds its lock file, because restarting it mid-install would throw the person at the keyboard back to the welcome screen. That last one was found on real hardware.

The installed system keeps the console you installed from#

The installer reads the kernel command line. If it finds console=ttyS it tells VyOS' image installer to make the serial console the default on the installed system, so a headless box stays reachable the way you installed it. On a video boot it answers the same question with the keyboard console instead.

That answer is passed to the base installer as its What console should be used by default? prompt, so it is the base installer's own setting rather than something layered on top.

Getting a shell without a console at all#

There is none by default. SSH is off on a freshly installed router: neither the image's default configuration nor the installer writes service ssh. On a genuinely headless machine there are two ways to arrange access before you need it:

  • Put a public key on the console account during the install. The unattended installer does this from a seed, so the box is reachable the moment it boots — Installing without a keyboard. You still have to turn SSH on; the keys are placed, the service is not.
  • Give a management source at install time on a box with a WAN and no LAN, so the web UI is reachable from a prefix you name — Boxes with one port.

See also#


Checked against packaging/wheelhouse-install, packaging/wheelhouse-live-installer, packaging/console-banner.sh, packaging/install-driver.py, docs/hardware.md, docs/install.md, docs/security.md.

Updated 2026-09-02 serial console headless