Installing Ubuntu Server 16.04 on PC Engines APU or APU2

Most people use PC Engines APU series (APU1D4, APU2C4) system boards for pfSense firewalls (pfSense is awesome!). However, the Ubuntu Server x86-64 version runs on these boards very well too which can turn them into a lightweight, portable Plex Media Server for instance. The APU series doesn’t have a video port, that’s why the Ubuntu Server 16.04 image requires some modifications in order to use the serial port for console output instead. Since the Ubuntu image is using a read-only CD-ROM filesystem, I’m using UNetbootin to create a bootable Live USB drive which lets me modify files. While UNetbootin is available on Linux and MacOS too, only the Windows version gave me consistent results after formatting the USB drive to FAT32 file format. YMMW, but if you get weird bootloader errors, try formatting/creating the bootable drive on Windows.

To access the APU’s serial port, a RS-232 DB9 null-modem to USB interface is required and some software to connect to it. I’m using a Prolific PL-2303 based interface and minicom on Linux or Serial when I’m on my Mac.

Once the Live USB drive has been successfully prepared by UNetbootin, the following files have to be modified in order to send the console output over the serial port:

In /isolinux/isolinux.cfg, insert the following lines at the top:

serial 0 115200
console 0

In /isolinux/txt.cfg, the replace the first occurrence of the append keyword (in the “install” section) with:

append file=/cdrom/preseed/ubuntu-server.seed vga=off initrd=/install/initrd.gz -- console=ttyS0,115200n8 -

In /syslinux.cfg, insert the following lines at the top:

serial 0 115200
console 0

Again in /syslinux.cfg, replace the first occurrence of the append keyword (in the “unetbootindefault” section) with:

append initrd=/ubninit vga=off console=ttyS0,115200n8 --

Using the serial cable you should now be able to install Ubuntu Server 16.04 on the APU:

apu-ubuntu-serial-console-1apu-ubuntu-serial-console-2

During the installation:

  • Make sure the APU is connected to a router. While configuring the network, always keep in mind that the rightmost network port ist the first port (eth0 or enp1s0)
  • Make sure to include “OpenSSH server” when choosing software to install

Most likely, there won’t be any visible console output (i.e. a login prompt) after the first reboot because the installer didn’t add the necessary parameters to GRUB_CMDLINE_LINUX. This is where the SSH daemon comes in handy (-:

To fix this, use SSH to login to the server and modify /etc/default/grub to include the following line:

GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"

Run update-grub , reboot the APU and eventually there should be a login prompt:

apu-ubuntu-serial-console-3

4 thoughts on “Installing Ubuntu Server 16.04 on PC Engines APU or APU2

  1. Hallo Jan

    I verzichta uf ds’Englisch, weil Du gemäss “About” jo au “Mundart” verstohsch. Und grad ds’erscht a mol as grosses DANKA für Dini Tips! Bin grad dra, an WAN Emulator (konkret: https://code.google.com/archive/p/wansim) uf an APU2C4 ds’installiara und dr’bii uf Diin Blog zum Thema Ubuntu 16.04 ufmerksam worda. As giit siit kurzem (und i weiss nid für wia lang no) uf dr’pcengines Siita a Beschriibig, wia ma das via Tinycore und 3 netboot Dateia no a kli eifacher macha kann: http://pcengines.ch/howto.htm#OS_installation denn ds’Tab “Ubuntu” und dört stoht: Ubuntu 16.04 Xenial
    The unmodified files ‘initrd.gz’ and ‘linux’ from netboot.tar.gz plus a modified ‘syslinux.cfg’ can be found here.
    This allows an easy installation of Ubuntu on apu boards.
    Simply add these three files to the FAT partition of an USB stick previously prepared with the TinyCore USB installer v1.6.
    Dia Varianta isch IMHO a kli eifacher, weil i dr’für kein UNetbootin bruucha und au kei Dateia a-passa muass. Aber au nid grad dramatisch besser … nur a kli eifacher.

    Wünscha Dier no an guata Start in dia neu Wucha!

    Gruass
    Sascha

Leave a Reply

Your email address will not be published. Required fields are marked *