You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pikvm/building_os.md

5.0 KiB

Building the OS

The Pi-KVM OS is based on Arch Linux ARM and contains all the required packages and configs for it to work. To build the OS you will need any Linux machine with a recent version of Docker (>= 1:19) with privileged mode enabled. (used for fdisk and some other commands, have a look through our Makefiles if you don't trust us :) )

  1. When starting with a clean OS (Like Ubuntu 18) you need to install and configure docker (after adding your user to the docker group you must log out and log back in), as well as git and make.

    [user@localhost ~]$ sudo apt-get install git make curl binutils -y
    [user@localhost ~]$ curl -fsSL https://get.docker.com -o get-docker.sh
    [user@localhost ~]$ sudo sh get-docker.sh
    [user@localhost ~]$ sudo usermod -aG docker $USER
    

    Re-login to apply the changes.

  2. Git checkout the build toolchain:

    [user@localhost ~]$ git clone https://github.com/pikvm/os
    [user@localhost ~]$ cd os
    
  3. Determine the target hardware configuration (platform):

  • Choose the board: BOARD=rpi4 for Raspberry Pi 4 or BOARD=zerow, BOARD=rpi2, BOARD=rpi3 for other options.
  • Choose the platform:
    • PLATFORM=v2-hdmi for RPi4 or ZeroW with HDMI-CSI bridge.
    • PLATFORM=v0-hdmi for RPi 2 or 3 with HDMI-CSI bridge and Arduino HID.
    • PLATFORM=v2-hdmiusb for RPi4 with HDMI-USB dongle.
    • PLATFORM=v0-hdmiusb for RPi 2 or 3 with HDMI-USB dongle and Arduino HID.
    • Other options are for legacy or specialized Pi-KVM boards (WIP).
  1. Create the config file config.mk for the target system. You must specify the path to the SD card on your local computer (this will be used to format and install the system) and the version of your Raspberry Pi and platform. You can change other parameters as you wish. Please note: if your password contains the # character, you must escape it using a backslash like ROOT_PASSWD = pass\#word.

    [user@localhost os]$ cat config.mk
    # rpi3 for Raspberry Pi 3; rpi2 for the version 2, zerow for ZeroW
    BOARD = rpi4
    
    # Hardware configuration
    PLATFORM = v2-hdmi
    
    # Target hostname
    HOSTNAME = pikvm
    
    # ru_RU, etc. UTF-8 only
    LOCALE = en_US
    
    # See /usr/share/zoneinfo
    TIMEZONE = Europe/Moscow
    
    # For SSH root user
    ROOT_PASSWD = root
    
    # Web UI credentials: user=admin, password=<this>
    WEBUI_ADMIN_PASSWD = admin
    
    # IPMI credentials: user=admin, password=<this>
    IPMI_ADMIN_PASSWD = admin
    
    # SD card device
    CARD = /dev/mmcblk0
    

    If you want to configure wifi (for ZeroW board for example) you must add these lines to config.mk:

    WIFI_ESSID = "my-network"
    WIFI_PASSWD = "P@$$word"
    
  2. Build the OS. It may take about one hour depending on your Internet connection:

    [user@localhost os]$ make os
    
  3. Put SD card into card reader and install OS (you should disable automounting beforehand: systemctl stop udisk2 or something like that):

    [user@localhost os]$ make install
    
  4. After installation remove the SD card and insert it into your RPi. Turn on the power. The RPi will try to get an IP address using DHCP on your LAN. It will then be available via SSH.

  5. If you can't find the device's address, try using the following command:

    [user@localhost os]$ make scan
    
  6. Only for v0: Flash the Arduino HID.

  7. Congratulations! Your Pi-KVM will be available via SSH (ssh root@<addr> with password root by default) and HTTPS (try to open in a browser the URL https://<IP addr>, use login admin and password admin). For HTTPS a self-signed certificate is used by default.

  8. Security note: To change root password use command passwd via SSH or webterm. To change Pi-KVM web password use kvmd-htpasswd set admin.

  9. Security note for v2 platform before 31.07.2020 and KVMD < 1.83: After installation, Pi-KVM was available via USB OTG from the managed server via the virtual serial console port. This was very helpful if SSH is unavailable (and you don't have a UART cable), so you could login to the device using something like mingetty or PuTTY and find out what's wrong. The login was protected by the same password that is used for the root login.

    For all build, in some cases (if different networks are used for servers and KVM for security reasons) you may want to disable this feature. To do this:

    • Switch device to RW-mode:
      [root@pikvm ~]# rw
      
    • Edit file /etc/securetty and remove line ttyGS0.
    • Add these lines to /etc/kvmd/override.yaml (remove {} in the file before):
      otg:
          acm:
              enabled: false
      
    • Execute:
      [root@pikvm ~]# systemctl enable getty@ttyGS0.service
      [root@pikvm ~]# rm -rf /etc/systemd/system/getty@ttyGS0.service.d
      [root@pikvm ~]# reboot
      

If you have any problems or questions, contact us using Discord: https://discord.gg/bpmXfz5