Збірка VyOS

передумови

Ви можете створити VyOS різними способами.

Збірка за допомогою контейнера Докер, хоч і не єдиний спосіб, є найпростішим шляхом, оскільки всі залежності керуються за вас. Однак ви також можете налаштувати власну машину збирання та запустити Рідна збірка.

Примітка

Починаючи з VyOS 1.2 модель випуску VyOS змінилася. VyOS тепер вільний, як у мові, але не як у пиві. Це означає, що хоча VyOS все ще є проектом з відкритим вихідним кодом, випуски ISO більше не є безкоштовними, і їх можна отримати лише через підписку або шляхом участі в спільноті.

Вихідний код залишається загальнодоступним, і ISO можна створити за допомогою процесу, описаного в цьому розділі.

The following includes the build process for VyOS 1.2 to the latest version.

Це проведе вас через процес створення VyOS ISO за допомогою Docker. Цей процес перевірено на чистих інсталяціях Debian Jessie, Stretch і Buster.

Рідна збірка

Щоб зібрати VyOS нативно, вам потрібен правильно налаштований хост збірки з такими встановленими версіями Debian:

  • Debian Jessie для VyOS 1.2 (суть)

  • Debian Buster для VyOS 1.3 (equuleus)

  • Debian Bookworm for VyOS 1.4 (sagitta)

  • Debian Bookworm for the upcoming VyOS 1.5/circinus/current (subject to change) - aka the rolling release

Для початку клонуйте репозиторій на локальну машину:

# For VyOS 1.2 (crux)
$ git clone -b crux --single-branch https://github.com/vyos/vyos-build

# For VyOS 1.3 (equuleus)
$ git clone -b equuleus --single-branch https://github.com/vyos/vyos-build

# For VyOS 1.4 (sagitta)
$ git clone -b sagitta --single-branch https://github.com/vyos/vyos-build

# For VyOS 1.5 (circinus,current)
$ git clone -b current --single-branch https://github.com/vyos/vyos-build

$ cd vyos-build

# For VyOS 1.2 (crux) and VyOS 1.3 (equuleus)
$ ./configure --architecture amd64 --build-by "[email protected]"
$ sudo make iso

# For VyOS 1.4 (sagitta) and VyOS 1.5 (circinus,current)
$ sudo make clean
$ sudo ./build-vyos-image iso --architecture amd64 --build-by "[email protected]"

Для отримання необхідних пакетів ви можете звернутися до файлу docker/Dockerfile у repository. Сценарій ./build-vyos-image також попередить вас, якщо будь-які залежності відсутні.

This will guide you through the process of building a VyOS ISO using Docker. This process has been tested on clean installs of Debian Bullseye (11) and Bookworm (12).

Докер

Встановлення Docker і передумови:

Підказка

Due to the updated version of Docker, the following examples may become invalid.

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Щоб мати можливість використовувати Docker без sudo, поточного користувача без root необхідно додати до групи docker, викликавши: sudo usermod -aG docker yourusername.

Підказка

Це надає привілеї, еквівалентні користувачам root! Рекомендується видалити некоренева користувача з групи docker після створення VyOS ISO. Дивіться також Docker як non-root.

Примітка

Процес збірки має бути побудований на локальній файловій системі, збірка на спільних ресурсах SMB або NFS призведе до того, що контейнер не збиратиметься належним чином! VirtualBox Drive Share також не доступний, оскільки операції з блоковими пристроями не реалізовані, а диск завжди монтується як "nodev"

Побудувати контейнер

Контейнер можна створити вручну або отримати попередньо зібраний з DockerHub. Використання попередньо зібраних контейнерів від організації VyOS DockerHub гарантує, що контейнер завжди буде актуальним. Відновлення запускається після зміни контейнера (зауважте, що це займе 2-3 години після надсилання до репозиторію vyos-build).

Dockerhub

Щоб вручну завантажити контейнер із DockerHub, виконайте:

$ docker pull vyos/vyos-build:crux     # For VyOS 1.2
$ docker pull vyos/vyos-build:equuleus # For VyOS 1.3
$ docker pull vyos/vyos-build:sagitta  # For VyOS 1.4
$ docker pull vyos/vyos-build:current  # For VyOS 1.5 rolling release
Збірка з джерела

Контейнер також можна створити безпосередньо з джерела:

# For VyOS 1.2 (crux)
$ git clone -b crux --single-branch https://github.com/vyos/vyos-build
# For VyOS 1.3 (equuleus)
$ git clone -b equuleus --single-branch https://github.com/vyos/vyos-build
# For VyOS 1.4 (sagitta)
$ git clone -b sagitta --single-branch https://github.com/vyos/vyos-build
# For VyOS 1.5 (circinus,current)
$ git clone -b current --single-branch https://github.com/vyos/vyos-build

$ cd vyos-build
$ docker build -t vyos/vyos-build:crux docker           # For VyOS 1.2
$ docker build -t vyos/vyos-build:equuleus docker       # For VyOS 1.3
$ docker build -t vyos/vyos-build:sagitta docker        # For VyOS 1.4
$ docker build -t vyos/vyos-build:current docker        # For VyOS 1.5 rolling release

Примітка

VyOS has switched to Debian (12) Bookworm in its current branch, Due to software version updates, it is recommended to use the official Docker Hub image to build VyOS ISO.

Поради та підказки

Ви можете створити собі кілька зручних псевдонімів Bash, щоб завжди запускати найновіший контейнер для кожного випуску («current» або «crux»). Додайте наступне до свого файлу .bash_aliases:

alias vybld='docker pull vyos/vyos-build:current && docker run --rm -it \
    -v "$(pwd)":/vyos \
    -v "$HOME/.gitconfig":/etc/gitconfig \
    -v "$HOME/.bash_aliases":/home/vyos_bld/.bash_aliases \
    -v "$HOME/.bashrc":/home/vyos_bld/.bashrc \
    -w /vyos --privileged --sysctl net.ipv6.conf.lo.disable_ipv6=0 \
    -e GOSU_UID=$(id -u) -e GOSU_GID=$(id -g) \
    vyos/vyos-build:current bash'

alias vybld_crux='docker pull vyos/vyos-build:crux && docker run --rm -it \
    -v "$(pwd)":/vyos \
    -v "$HOME/.gitconfig":/etc/gitconfig \
    -v "$HOME/.bash_aliases":/home/vyos_bld/.bash_aliases \
    -v "$HOME/.bashrc":/home/vyos_bld/.bashrc \
    -w /vyos --privileged --sysctl net.ipv6.conf.lo.disable_ipv6=0 \
    -e GOSU_UID=$(id -u) -e GOSU_GID=$(id -g) \
    vyos/vyos-build:crux bash'

Тепер у вас є два нові псевдоніми vybld і vybld_crux для створення ваших контейнерів розробки у вашому поточному робочому каталозі.

Примітка

Деякі пакунки VyOS (а саме vyos-1x) постачаються з тестами під час збирання, які перевіряють, що деякі внутрішні виклики бібліотеки працюють належним чином. Ці тести виконуються за допомогою модуля Python Unittest. Якщо ви хочете створити пакет vyos-1x (який є нашим основним пакетом розробки), вам потрібно запустити свій контейнер Docker за допомогою такого аргументу: ``–sysctl net.ipv6.conf.lo.disable_ipv6=0 ``, інакше ці тести будуть невдалими.

Збірка ISO

Тепер, коли ви знаєте про передумови, ми можемо продовжити і створювати власний ISO з початкового коду. Для цього нам потрібно отримати останній вихідний код з GitHub. Зауважте, що це буде різним для current і crux.

# For VyOS 1.2 (crux)
$ git clone -b crux --single-branch https://github.com/vyos/vyos-build

# For VyOS 1.3 (equuleus)
$ git clone -b equuleus --single-branch https://github.com/vyos/vyos-build

# For VyOS 1.4 (sagitta)
$ git clone -b sagitta --single-branch https://github.com/vyos/vyos-build

# For VyOS 1.5 (circinus,current)
$ git clone -b current --single-branch https://github.com/vyos/vyos-build

Тепер можна почати нову збірку VyOS ISO. Змініть каталог на каталог vyos-build і запустіть:

$ cd vyos-build
# For VyOS 1.2 (crux)
$ docker run --rm -it --privileged -v $(pwd):/vyos -w /vyos vyos/vyos-build:crux bash

# For VyOS 1.3 (equuleus)
$ docker run --rm -it --privileged -v $(pwd):/vyos -w /vyos vyos/vyos-build:equuleus bash

# For VyOS 1.4 (sagitta)
$ docker run --rm -it --privileged -v $(pwd):/vyos -w /vyos vyos/vyos-build:sagitta bash

# For VyOS 1.5 (current)
$ docker run --rm -it --privileged -v $(pwd):/vyos -w /vyos vyos/vyos-build:current bash
# For MacOS (crux, equuleus, sagitta)
$ git clone https://github.com/vyos/vyos-utils-misc
$ cd build-tools/macos-build

# For VyOS 1.2 (crux)
$ os=jessie64 branch=crux make build

# For VyOS 1.3 (equuleus)
$ os=buster64 branch=equuleus make build

# For VyOS 1.4 (sagitta)
$ os=buster64 branch=sagitta make build

Почніть збірку:

# For VyOS 1.2 (crux) and VyOS 1.3 (equuleus)
vyos_bld@8153428c7e1f:/vyos$ ./configure --architecture amd64 --build-by "[email protected]"
vyos_bld@8153428c7e1f:/vyos$ sudo make iso

# For VyOS 1.4 (sagitta) For VyOS 1.5 (circinus,current)
vyos_bld@8153428c7e1f:/vyos$ sudo make clean
vyos_bld@8153428c7e1f:/vyos$ sudo ./build-vyos-image iso --architecture amd64 --build-by "[email protected]"

Коли збірка пройшла успішно, отриманий iso можна знайти в каталозі build як live-image-[architecture].hybrid.iso.

Удачі!

Підказка

Збірка VyOS на Windows WSL2 з Docker, інтегрованим у WSL2, буде працювати як чарівність. Поки що жодних проблем не відомо!

Налаштувати

Цей ISO можна налаштувати за допомогою наступного списку параметрів конфігурації. Повний і поточний список можна створити за допомогою ./build-vyos-image --help:

$ vyos_bld@8153428c7e1f:/vyos$ sudo ./build-vyos-image --help
  I: Checking if packages required for VyOS image build are installed
  usage: build-vyos-image [-h] [--architecture ARCHITECTURE]
  [--build-by BUILD_BY] [--debian-mirror DEBIAN_MIRROR]
  [--debian-security-mirror DEBIAN_SECURITY_MIRROR]
  [--pbuilder-debian-mirror PBUILDER_DEBIAN_MIRROR]
  [--vyos-mirror VYOS_MIRROR] [--build-type BUILD_TYPE]
  [--version VERSION] [--build-comment BUILD_COMMENT] [--debug] [--dry-run]
  [--custom-apt-entry CUSTOM_APT_ENTRY] [--custom-apt-key CUSTOM_APT_KEY]
  [--custom-package CUSTOM_PACKAGE]
      [build_flavor]

  positional arguments:
  build_flavor          Build flavor

  optional arguments:
  -h, --help            show this help message and exit
  --architecture ARCHITECTURE
                          Image target architecture (amd64 or arm64)
  --build-by BUILD_BY   Builder identifier (e.g. [email protected])
  --debian-mirror DEBIAN_MIRROR
                          Debian repository mirror
  --debian-security-mirror DEBIAN_SECURITY_MIRROR
                          Debian security updates mirror
  --pbuilder-debian-mirror PBUILDER_DEBIAN_MIRROR
                          Debian repository mirror for pbuilder env bootstrap
  --vyos-mirror VYOS_MIRROR
                          VyOS package mirror
  --build-type BUILD_TYPE
                          Build type, release or development
  --version VERSION     Version number (release builds only)
  --build-comment BUILD_COMMENT
                          Optional build comment
  --debug               Enable debug output
  --dry-run             Check build configuration and exit
  --custom-apt-entry CUSTOM_APT_ENTRY
                          Custom APT entry
  --custom-apt-key CUSTOM_APT_KEY
                          Custom APT key file
  --custom-package CUSTOM_PACKAGE
                          Custom package to install from repositories

Проблеми збірки ISO

Бувають (рідкісні) ситуації, коли створення ISO-образу взагалі неможливе через несправний канал пакетів у фоновому режимі. APT не дуже добре повідомляє про першопричину проблеми. Ваша збірка ISO, ймовірно, завершиться невдачею з більш-менш схожим на вигляд повідомленням про помилку:

The following packages have unmet dependencies:
 vyos-1x : Depends: accel-ppp but it is not installable
E: Unable to correct problems, you have held broken packages.
P: Begin unmounting filesystems...
P: Saving caches...
Reading package lists...
Building dependency tree...
Reading state information...
Del frr-pythontools 7.5-20210215-00-g8a5d3b7cd-0 [38.9 kB]
Del accel-ppp 1.12.0-95-g59f8e1b [475 kB]
Del frr 7.5-20210215-00-g8a5d3b7cd-0 [2671 kB]
Del frr-snmp 7.5-20210215-00-g8a5d3b7cd-0 [55.1 kB]
Del frr-rpki-rtrlib 7.5-20210215-00-g8a5d3b7cd-0 [37.3 kB]
make: *** [Makefile:30: iso] Error 1
(10:13) vyos_bld ece068908a5b:/vyos [current] #

To debug the build process and gain additional information of what could be the root cause, you need to use chroot to change into the build directory. This is explained in the following step by step procedure:

vyos_bld ece068908a5b:/vyos [current] # sudo chroot build/chroot /bin/bash

Тепер нам потрібно змонтувати деякі необхідні енергозалежні файлові системи

(live)root@ece068908a5b:/# mount -t proc none /proc
(live)root@ece068908a5b:/# mount -t sysfs none /sys
(live)root@ece068908a5b:/# mount -t devtmpfs none /dev

Тепер ми можемо виконувати будь-яку команду, яку хочемо використати для налагодження, наприклад, повторне встановлення невдалого пакета після оновлення репозиторію.

(live)root@ece068908a5b:/# apt-get update; apt-get install vyos-1x
Get:1 file:/root/packages ./ InRelease
Ign:1 file:/root/packages ./ InRelease
Get:2 file:/root/packages ./ Release [1235 B]
Get:2 file:/root/packages ./ Release [1235 B]
Get:3 file:/root/packages ./ Release.gpg
Ign:3 file:/root/packages ./ Release.gpg
Hit:4 http://repo.powerdns.com/debian buster-rec-43 InRelease
Hit:5 http://repo.saltstack.com/py3/debian/10/amd64/archive/3002.2 buster InRelease
Hit:6 http://deb.debian.org/debian bullseye InRelease
Hit:7 http://deb.debian.org/debian buster InRelease
Hit:8 http://deb.debian.org/debian-security buster/updates InRelease
Hit:9 http://deb.debian.org/debian buster-updates InRelease
Hit:10 http://deb.debian.org/debian buster-backports InRelease
Hit:11 http://dev.packages.vyos.net/repositories/current current InRelease
Reading package lists... Done
N: Download is performed unsandboxed as root as file '/root/packages/./InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 vyos-1x : Depends: accel-ppp but it is not installable
E: Unable to correct problems, you have held broken packages.

Тепер настав час виправити дзеркало пакета та повторити останній крок, доки інсталяція пакета не вдасться знову!

Ядро Linux

Ядро Linux, яке використовується VyOS, тісно пов’язане з процесом збирання ISO. Файл data/defaults.json містить визначення JSON версії ядра, що використовується kernel_version і kernel_flavor ядра, яке представляє LOCAL_VERSION ядра. Обидва разом утворюють змінну версії ядра в системі:

vyos@vyos:~$ uname -r
6.1.52-amd64-vyos
  • Accel-PPP

  • Драйвери Intel NIC

  • Inter QAT

Кожен із цих модулів залежить від версії ядра, і якщо вам пощастить отримати помилку збірки ISO, яка звучить так:

I: Create initramfs if it does not exist.
Extra argument '6.1.52-amd64-vyos'
Usage: update-initramfs {-c|-d|-u} [-k version] [-v] [-b directory]
Options:
 -k version     Specify kernel version or 'all'
 -c             Create a new initramfs
 -u             Update an existing initramfs
 -d             Remove an existing initramfs
 -b directory   Set alternate boot directory
 -v             Be verbose
See update-initramfs(8) for further details.
E: config/hooks/live/17-gen_initramfs.chroot failed (exit non-zero). You should check for errors.

Найбільш очевидними причинами можуть бути:

  • Сховище vyos-build застаріло, будь ласка git pull, щоб оновити до останньої версії ядра від нас.

  • You have your own custom kernel *.deb packages in the packages folder but neglected to create all required out-of tree modules like Accel-PPP, Intel QAT or Intel NIC drivers

Створення ядра

Збірка ядра досить проста, більшість необхідних кроків можна знайти в vyos-build/packages/linux-kernel/Jenkinsfile, але ми проведемо вас через це.

Клонуйте джерело ядра до vyos-build/packages/linux-kernel/:

$ cd vyos-build/packages/linux-kernel/
$ git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

Перевірте потрібну версію ядра - перегляньте файл vyos-build/data/defaults.json (у прикладі використовується ядро 4.19.146):

$ cd vyos-build/packages/linux-kernel/linux
$ git checkout v4.19.146
Checking out files: 100% (61536/61536), done.
Note: checking out 'v4.19.146'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at 015e94d0e37b Linux 4.19.146

Тепер ми можемо використати допоміжний скрипт build-kernel.sh, який виконує всі необхідні вуду, застосовуючи необхідні патчі з папки vyos-build/packages/linux-kernel/patches, копіюючи нашу конфігурацію ядра ``x86_64_vyos_defconfig` `` у потрібне розташування та, нарешті, збирання пакунків Debian.

Примітка

Створення ядра займе деякий час залежно від швидкості та кількості процесора/ядер і швидкості диска. Очікуйте 20 хвилин (або навіть більше) на нижчому обладнанні.

(18:59) vyos_bld 412374ca36b8:/vyos/vyos-build/packages/linux-kernel [current] # ./build-kernel.sh
I: Copy Kernel config (x86_64_vyos_defconfig) to Kernel Source
I: Apply Kernel patch: /vyos/vyos-build/packages/linux-kernel/patches/kernel/0001-VyOS-Add-linkstate-IP-device-attribute.patch
patching file Documentation/networking/ip-sysctl.txt
patching file include/linux/inetdevice.h
patching file include/linux/ipv6.h
patching file include/uapi/linux/ip.h
patching file include/uapi/linux/ipv6.h
patching file net/ipv4/devinet.c
Hunk #1 succeeded at 2319 (offset 1 line).
patching file net/ipv6/addrconf.c
patching file net/ipv6/route.c
I: Apply Kernel patch: /vyos/vyos-build/packages/linux-kernel/patches/kernel/0002-VyOS-add-inotify-support-for-stackable-filesystems-o.patch
patching file fs/notify/inotify/Kconfig
patching file fs/notify/inotify/inotify_user.c
patching file fs/overlayfs/super.c
Hunk #2 succeeded at 1713 (offset 9 lines).
Hunk #3 succeeded at 1739 (offset 9 lines).
Hunk #4 succeeded at 1762 (offset 9 lines).
patching file include/linux/inotify.h
I: Apply Kernel patch: /vyos/vyos-build/packages/linux-kernel/patches/kernel/0003-RFC-builddeb-add-linux-tools-package-with-perf.patch
patching file scripts/package/builddeb
I: make x86_64_vyos_defconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  YACC    scripts/kconfig/zconf.tab.c
  LEX     scripts/kconfig/zconf.lex.c
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#
I: Generate environment file containing Kernel variable
I: Build Debian Kernel package
  UPD     include/config/kernel.release
/bin/sh ./scripts/package/mkdebian
dpkg-buildpackage -r"fakeroot -u" -a$(cat debian/arch) -b -nc -uc
dpkg-buildpackage: info: source package linux-4.19.146-amd64-vyos
dpkg-buildpackage: info: source version 4.19.146-1
dpkg-buildpackage: info: source distribution buster
dpkg-buildpackage: info: source changed by vyos_bld <[email protected]>
dpkg-buildpackage: info: host architecture amd64
dpkg-buildpackage: warning: debian/rules is not executable; fixing that
 dpkg-source --before-build .
 debian/rules build
make KERNELRELEASE=4.19.146-amd64-vyos ARCH=x86         KBUILD_BUILD_VERSION=1 KBUILD_SRC=
  SYSTBL  arch/x86/include/generated/asm/syscalls_32.h

...

dpkg-shlibdeps: warning: binaries to analyze should already be installed in their package's directory
dpkg-shlibdeps: warning: binaries to analyze should already be installed in their package's directory
dpkg-shlibdeps: warning: binaries to analyze should already be installed in their package's directory
dpkg-shlibdeps: warning: binaries to analyze should already be installed in their package's directory
dpkg-shlibdeps: warning: binaries to analyze should already be installed in their package's directory
dpkg-shlibdeps: warning: binaries to analyze should already be installed in their package's directory
dpkg-shlibdeps: warning: binaries to analyze should already be installed in their package's directory
dpkg-shlibdeps: warning: binaries to analyze should already be installed in their package's directory
dpkg-shlibdeps: warning: binaries to analyze should already be installed in their package's directory
dpkg-shlibdeps: warning: binaries to analyze should already be installed in their package's directory
dpkg-shlibdeps: warning: binaries to analyze should already be installed in their package's directory
dpkg-shlibdeps: warning: binaries to analyze should already be installed in their package's directory
dpkg-shlibdeps: warning: package could avoid a useless dependency if /vyos/vyos-build/packages/linux-kernel/linux/debian/toolstmp/usr/bin/trace /vyos/vyos-build/packages/linux-kernel/linux/debian/toolstmp/usr/bin/perf were not linked against libcrypto.so.1.1 (they use none of the library's symbols)
dpkg-shlibdeps: warning: package could avoid a useless dependency if /vyos/vyos-build/packages/linux-kernel/linux/debian/toolstmp/usr/bin/trace /vyos/vyos-build/packages/linux-kernel/linux/debian/toolstmp/usr/bin/perf were not linked against libcrypt.so.1 (they use none of the library's symbols)
dpkg-deb: building package 'linux-tools-4.19.146-amd64-vyos' in '../linux-tools-4.19.146-amd64-vyos_4.19.146-1_amd64.deb'.
 dpkg-genbuildinfo --build=binary
 dpkg-genchanges --build=binary >../linux-4.19.146-amd64-vyos_4.19.146-1_amd64.changes
dpkg-genchanges: warning: package linux-image-4.19.146-amd64-vyos-dbg in control file but not in files list
dpkg-genchanges: info: binary-only upload (no source code included)
 dpkg-source --after-build .
dpkg-buildpackage: info: binary-only upload (no source included)

Наприкінці вам буде надано бінарні пакети ядра, які потім ви зможете використати у своєму спеціальному процесі збірки ISO, помістивши всі файли *.deb у папку vyos-build/packages, де вони автоматично використовуватимуться під час збирання VyOS, як зазначено вище.

Прошивка

Якщо ви оновлюєте ядро або додаєте нові драйвери, вам може знадобитися нове мікропрограмне забезпечення. Створіть новий пакет vyos-linux-firmware із доданими допоміжними сценаріями.

$ cd vyos-build/packages/linux-kernel
$ git clone https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
$ ./build-linux-firmware.sh
$ cp vyos-linux-firmware_*.deb ../

Це намагається автоматично визначити, які блоби потрібні на основі того, які драйвери були зібрані. Якщо не вдалося знайти правильні файли, ви можете додати їх вручну до vyos-build/packages/linux-kernel/build-linux-firmware.sh:

ADD_FW_FILES="iwlwifi* ath11k/QCA6390/*/*.bin"

Створення позадеревних модулів

Збірка ядра є однією частиною, але тепер вам також потрібно зібрати необхідні модулі поза деревом, щоб усе було вирівняно та відповідали ABI. Щоб зробити це, ви можете ще раз переглянути vyos-build/packages/linux-kernel/Jenkinsfile, щоб побачити всі необхідні модулі та їх вибрані версії. Ми покажемо вам, як створити всі поточні необхідні модулі.

Accel-PPP

Спочатку клонуйте вихідний код і перевірте відповідну версію, виконавши:

$ cd vyos-build/packages/linux-kernel
$ git clone https://github.com/accel-ppp/accel-ppp.git

Ми знову використовуємо допоміжний сценарій і деякі патчі, щоб збірка працювала. Просто запустіть таку команду:

$ ./build-accel-ppp.sh
I: Build Accel-PPP Debian package
CMake Deprecation Warning at CMakeLists.txt:3 (cmake_policy):
  The OLD behavior for policy CMP0003 will be removed from a future version
  of CMake.

  The cmake-policies(7) manual explains that the OLD behaviors of all
  policies are deprecated and that a policy should be set to OLD only under
  specific short-term circumstances.  Projects should be ported to the NEW
  behavior and not rely on setting a policy to OLD.

-- The C compiler identification is GNU 8.3.0

...

CPack: Create package using DEB
CPack: Install projects
CPack: - Run preinstall target for: accel-ppp
CPack: - Install project: accel-ppp
CPack: Create package
CPack: - package: /vyos/vyos-build/packages/linux-kernel/accel-ppp/build/accel-ppp.deb generated.

Після компіляції пакунків ви знайдете щойно згенеровані двійкові файли .deb`» у ``vyos-build/packages/linux-kernel, звідки ви можете скопіювати їх до папки vyos-build/packages для включення під час збірки ISO.

Intel NIC

Драйвери Intel NIC не надходять із сховища Git, натомість ми просто отримуємо tar-файли з нашого дзеркала та компілюємо їх.

Просто використовуйте наш сценарій оболонки, щоб створити всі модулі драйвера.

./build-intel-drivers.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  490k  100  490k    0     0   648k      0 --:--:-- --:--:-- --:--:--  648k
I: Compile Kernel module for Intel ixgbe driver

...

I: Building Debian package vyos-intel-iavf
Doing `require 'backports'` is deprecated and will not load any backport in the next major release.
Require just the needed backports instead, or 'backports/latest'.
Debian packaging tools generally labels all files in /etc as config files, as mandated by policy, so fpm defaults to this behavior for deb packages. You can disable this default behavior with --deb-no-default-config-files flag {:level=>:warn}
Created package {:path=>"vyos-intel-iavf_4.0.1-0_amd64.deb"}
I: Cleanup iavf source

Після компіляції пакунків ви знайдете щойно згенеровані двійкові файли .deb`» у ``vyos-build/packages/linux-kernel, звідки ви можете скопіювати їх до папки vyos-build/packages для включення під час збірки ISO.

Intel QAT

Драйвери Intel QAT (Quick Assist Technology) не надходять зі сховища Git, натомість ми просто отримуємо архівні файли з 01.org, веб-сайту Intel з відкритим кодом.

Просто використовуйте наш сценарій оболонки, щоб створити всі модулі драйвера.

$ ./build-intel-qat.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 5065k  100 5065k    0     0  1157k      0  0:00:04  0:00:04 --:--:-- 1157k
I: Compile Kernel module for Intel qat driver
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes

...

I: Building Debian package vyos-intel-qat
Doing `require 'backports'` is deprecated and will not load any backport in the next major release.
Require just the needed backports instead, or 'backports/latest'.
Debian packaging tools generally labels all files in /etc as config files, as mandated by policy, so fpm defaults to this behavior for deb packages. You can disable this default behavior with --deb-no-default-config-files flag {:level=>:warn}
Created package {:path=>"vyos-intel-qat_1.7.l.4.9.0-00008-0_amd64.deb"}
I: Cleanup qat source

Після компіляції пакунків ви знайдете щойно згенеровані двійкові файли .deb`» у ``vyos-build/packages/linux-kernel, звідки ви можете скопіювати їх до папки vyos-build/packages для включення під час збірки ISO.

Пакети

Якщо у вас достатньо сміливості, щоб самостійно створити образ ISO, який містить будь-який модифікований пакет від нашої організації GitHub – це те місце, щоб бути.

Будь-який «модифікований» пакет може стосуватися зміненої версії, наприклад пакета vyos-1x, який ви хотіли б перевірити перед тим, як подавати запит на отримання на GitHub.

Створення ISO за допомогою будь-якого налаштованого пакету нічим не відрізняється від створення звичайного (налаштованого чи ні) образу ISO. Просто помістіть свій змінений пакет *.deb в папку packages у vyos-build. Після цього процес збірки підбере ваш спеціальний пакет та інтегрує його у ваш ISO.

Вирішення проблем

Debian APT не дуже багатослівний, коли йдеться про помилки. Якщо ваша збірка ISO ламається з будь-якої причини, і ви підозрюєте, що це проблема із залежностями APT або інсталяцією, ви можете додати цей невеликий патч, який збільшує детальність APT під час збірки ISO.

diff --git i/scripts/live-build-config w/scripts/live-build-config
index 1b3b454..3696e4e 100755
--- i/scripts/live-build-config
+++ w/scripts/live-build-config
@@ -57,7 +57,8 @@ lb config noauto \
         --firmware-binary false \
         --updates true \
         --security true \
-        --apt-options "--yes -oAcquire::Check-Valid-Until=false" \
+        --apt-options "--yes -oAcquire::Check-Valid-Until=false -oDebug::BuildDeps=true -oDebug::pkgDepCache::AutoInstall=true \
+                             -oDebug::pkgDepCache::Marker=true -oDebug::pkgProblemResolver=true -oDebug::Acquire::gpgv=true" \
         --apt-indices false
         "${@}"
 """

Платформи віртуалізації

QEMU

Виконайте наступну команду після створення образу ISO.

$ make qemu

VMware

Виконайте наступну команду після створення образу QEMU.

$ make vmware

Пакети

Сама VyOS постачається з купою пакетів, які є специфічними для нашої системи, тому їх неможливо знайти в жодному дзеркалі Debian. Ці пакунки можна знайти в проекті VyOS GitHub у вихідному форматі, який можна легко скомпілювати у спеціальний пакет Debian (*.deb).

Найпростіший спосіб скомпілювати ваш пакунок — за допомогою згаданого вище контейнера Докер, він містить усі необхідні залежності для всіх пакетів, пов’язаних з VyOS.

Припустімо, що ми хочемо створити пакунок vyos-1x самостійно та змінити його відповідно до наших потреб. Спочатку нам потрібно клонувати репозиторій з GitHub.

$ git clone https://github.com/vyos/vyos-1x

Будувати

Запустіть контейнер Docker і створіть пакет

# For VyOS 1.3 (equuleus, current)
$ docker run --rm -it --privileged -v $(pwd):/vyos -w /vyos vyos/vyos-build:current bash

# Change to source directory
$ cd vyos-1x

# Build DEB
$ dpkg-buildpackage -uc -us -tc -b

Через хвилину або дві ви побачите згенеровані пакети DEB поруч із вихідним каталогом vyos-1x:

# ls -al ../vyos-1x*.deb
-rw-r--r-- 1 vyos_bld vyos_bld 567420 Aug  3 12:01 ../vyos-1x_1.3dev0-1847-gb6dcb0a8_all.deb
-rw-r--r-- 1 vyos_bld vyos_bld   3808 Aug  3 12:01 ../vyos-1x-vmware_1.3dev0-1847-gb6dcb0a8_amd64.deb

Встановити

Щоб взяти ваш щойно створений пакет на тест-драйв, ви можете просто перенести його на запущений екземпляр VyOS і встановити новий пакет *.deb поверх поточного запущеного.

Просто встановіть за допомогою таких команд:

vyos@vyos:~$ dpkg --install /tmp/vyos-1x_1.3dev0-1847-gb6dcb0a8_all.deb
(Reading database ... 58209 files and directories currently installed.)
Preparing to unpack .../vyos-1x_1.3dev0-1847-gb6dcb0a8_all.deb ...
Unpacking vyos-1x (1.3dev0-1847-gb6dcb0a8) over (1.3dev0-1847-gb6dcb0a8) ...
Setting up vyos-1x (1.3dev0-1847-gb6dcb0a8) ...
Processing triggers for rsyslog (8.1901.0-1) ...

Ви також можете розмістити згенерований файл *.deb у своєму середовищі збірки ISO, щоб включити його в користувацьку iso, див. Ядро Linux для отримання додаткової інформації.

Попередження

Будь-які пакунки в каталозі пакетів буде додано до iso під час збірки, замінивши вихідні. Переконайтеся, що ви видалили їх (як вихідні каталоги, так і зібрані пакунки deb), якщо ви хочете зібрати iso з чистих пакетів.