// file : doc/manual.cli // copyright : Copyright (c) 2014-2017 Code Synthesis Ltd // license : MIT; see accompanying LICENSE file "\name=build2-buildos-manual" "\subject=buildos" "\title=Operating System" // NOTES // // - Maximum
line is 70 characters. // " \h0#preface|Preface| This document describes \c{buildos}, the \c{build2} operating system. \h1#intro|Introduction| \c{buildos} is a GNU/Linux(Debian)-based in-memory network-booted operating system specialized for autonomous building of software using the \c{build2} toolchain. It's primary purpose is to run the \c{build2} build bot (\c{bbot}), build slave (\c{bslave}), or both. A machine that run an instance of \c{buildos} is called a \i{build host}. A build host runs the \c{bbot} and/or \c{bslave} in the \i{agent mode}. The actual building is performed in the virtual machines and/or containers. For \c{bbot} it is normally one-shot virtual machines and for \c{bslave} it is normally containers but can also be long-running virtual machines. Inside virtual machines/containers, \c{bbot} and \c{bslave} run in the \i{worker mode} and receive \i{build tasks} from their respective agents. \h1#boot|Booting| \c{buildos} is normally booted from the network using PXE but can also be booted locally from initrd directly. \h2#boot-net|Network| Here we assume that you have already established your PXE setup using PXELINUX. That is, you have configured a TFTP server that hosts the \c{pxelinux} initial bootstrap program (NBP) and configured a DHCP server to direct PXE client to this server/NBP. To setup PXE boot of \c{buildos}, perform the following steps: \ol| \li|Copy the kernel image and initrd to the TFTP server. For example: \ # mkdir -p /var/lib/tftpboot/buildos # cp buildos-image buildos-initrd /var/lib/tftpboot/buildos/ \ | \li|Assuming the host has MAC address \c{de:ad:be:ef:b8:da}, create a host-specific configuration file (or use \c{default} as the last path component for a configuration that applies to all the hosts): \ # cat </var/lib/tftpboot/pxelinux.cfg/01-de-ad-be-ef-b8-da default buildos prompt 1 timeout 50 label buildos menu label buildos kernel /buildos/buildos-image append initrd=/buildos/buildos-initrd EOF \ | \li|You can test the setup using QEMU/KVM, for example: \ $ sudo kvm \ -m 8G \ -netdev tap,id=net0,script=./qemu-ifup \ -device e1000,netdev=net0,mac=de:ad:be:ef:b8:da \ -boot n \ || \h2#boot-local|Local| During testing it is often useful to boot \c{buildos} directly from the kernel image and initrd files. As an example, here is how this can be done using QEMU/KVM: \ sudo kvm \ -m 8G \ -netdev tap,id=net0,script=./qemu-ifup \ -device e1000,netdev=net0,mac=de:ad:be:ef:b8:da \ -kernel buildos-image -initrd buildos-initrd \ \h1#config|Configuration| \h2#config-net|Network| Network is configured via DHCP. Initially, all Ethernet interfaces that have carrier are tried in (some) order and the first interface that is successfully configured via DHCP is used. Hostname is configured from the DHCP information. Failed that, a name is generated based on the MAC address, in the form \c{build-xxxxxxxxxx}. @@ Maybe also kernel cmdline? Based on the discovery of the Ethernet interface, two bridge interfaces are configured: \c{br0} is a public bridge that includes the Ethernet interface and is configured via DHCP. \c{br1} is a private interface with NAT to \c{br0} with \c{dnsmasq} configured as a DHCP on this interface. Normally, \c{br0} is used for \c{bslave} virtual machines/container (since they may need to be accessed directly) and \c{br1} \- for \c{bbot} virtual machines. You can view the bridge configuration on a booted \c{buildos} instance by examining \c{/etc/network/interfaces}. @@ TODO: private network parameters. "