概述
废话就不多说了,直接上干货。
关于{#mainpage}
FreeNOS(Free Niek 的操作系统)是一个实验性的基于微内核的操作系统,用于学习目的,用 C++ 编写。 您可以根据 GPLv3 的条款随意使用代码。
访问项目网站 http://www.FreeNOS.org 了解更多信息。
特征
- Intel x86 (PC) 和 ARMv6/ARMv7 架构(Raspberry Pi 1,2,3, Allwinner H2+/H3)
- 虚拟内存
- 简单的任务调度
- 进程间通信 (IPC)
- 支持 MPI 的对称多处理(通过控制台和以太网)
- 设备:
- VGA/键盘控制台(也支持 Ed 的 libteken http://80386.nl/projects/libteken/)
- i8250串行UART
- PCI主机控制器
- CMOS RTC 时钟
- ATA主机控制器
- 全志H2+/H3以太网控制器
- 环回以太网控制器
- 文件系统:
- 虚拟文件系统 (VFS)
- 临时文件系统 (TmpFS)
- Linnenbank 文件系统 (LinnFS)
- 网络(IP、UDP、ICMP、ARP)
- POSIX、ANSI C 库
- 动态和共享内存
- 全自动自动测试仪
- 使用 jenkins (http://www.jenkins.io) 和 Vagrant (http://www.vagrantup.com) 进行自动化持续集成
- Doxygen 记录的所有来源 (http://www.doxygen.org/)
- 用 C++ 从头开始编写的用户和内核代码
- 非常小的微内核(约 2K 行 C++ 代码,包括汇编中的一小部分)
- 在 POSIX 系统上使用最新的 GCC (http://gcc.gnu.org/)、LLVM (http://www.llvm.org/) 和 SCons (http://www.scons.org/) 版本构建
主机设置
首先安装所有必需的构建依赖项。 FreeNOS 需要 SCons,一个 C++ 编译器,而英特尔则需要一个生成 ISO 映像的工具。 按照以下说明在您的主机操作系统上安装构建依赖项。
Ubuntu
使用以下命令更新系统存储库缓存并安装所需的开发工具:
$ sudo apt-get update
$ sudo apt-get install build-essential scons genisoimage xorriso qemu-system binutils-multiarch u-boot-tools liblz4-tool
如果你的 Ubuntu 主机是 64 位的,你需要安装 GCC multilib 包来交叉编译 32 位架构:
$ sudo apt-get install gcc-multilib g++-multilib
或者,您也可以安装 LLVM/Clang 编译器:
$ sudo apt-get install clang
FreeBSD
使用以下命令更新系统存储库缓存并安装所需的开发工具:
% su -
# pkg update
# pkg install qemu scons cdrkit-genisoimage xorriso gcc u-boot-tools liblz4
在 FreeBSD 上,确保使用最新版本的 GNU 链接器(来自 pkg):
# mv /usr/bin/ld.bfd /usr/bin/ld.bfd.orig
构建 FreeNOS
要在您的主机操作系统上下载并提取已发布的源代码,请运行以下命令。 将 ‘x.x.x’ 替换为 FreeNOS 的版本:
$ wget http://www.FreeNOS.org/pub/FreeNOS/source/FreeNOS-x.x.x.tar.gz
$ tar zxf FreeNOS-x.x.x.tar.gz
要获取最新的开发源,您可以克隆 GIT 存档:
$ git clone https://github.com/nieklinnenbank/FreeNOS
要使用默认设置(Intel,使用 GCC 并启用调试)构建 FreeNOS,请运行:
$ scons
要使用控制台上打印的所有完整构建命令构建 FreeNOS,请将 VERBOSE 构建变量设置为 True:
$ scons VERBOSE=True
要在启用编译器优化的情况下构建 FreeNOS,请将 DEBUG 设置为 False。 请注意,这将使使用 GDB 进行调试更加困难:
$ scons DEBUG=False
除了在命令行上提供构建变量,您还可以更改目标的“build.conf”配置文件。 构建配置文件包含构建变量,例如目标的编译器标志和参数。 同样,“build.host.conf”文件包含主机操作系统程序的构建变量。 有关更多详细信息,请参阅示例 build.conf 和 build.host.conf 文件。
此外,在运行 scons 时,shell 中设置的任何环境变量都将自动转换为相同的构建变量。
要为 Raspberry Pi 2 构建,请复制示例构建配置文件并运行 SCons:
$ cp config/arm/raspberry2/build.conf .
$ scons
要清理构建目录,请使用:
$ scons -c
或者使用以下命令来删除临时 SCons 文件:
$ rm -rf build .sconf_temp .sconsign.dblite
Running FreeNOS
要在主机操作系统上运行 FreeNOS 的自动测试器,请运行:
$ scons test
要在 Qemu 下的 FreeNOS 上运行相同的自动测试器,请运行:
$ scons qemu_test
要在带有串行控制台的 Qemu 虚拟机中启动 FreeNOS,请使用以下命令:
$ scons qemu
要使用 GDB 调试 FreeNOS,您需要使用构建变量 DEBUG=True 进行构建。 调试符号必须在已编译的程序中可用,调试器需要在源代码、CPU 指令之间进行转换,反之亦然。 使用 DEBUG=True 禁用编译器优化,这会降低性能但改善调试体验。 默认情况下,DEBUG 构建变量已设置为 True。
如果您已将 build.conf 配置为 DEBUG=False,则可以在命令行上传递它(或编辑 build.conf 以将 DEBUG 设置为 True):
$ scons DEBUG=True
确保您的主机操作系统具有可用于调试目标架构(Intel 或 ARM)的 GDB。 对于 Ubuntu:
$ sudo apt-get install gdb-multiarch
打开两个终端。 在第一个终端中,在启用了内部 gdbserver 的 Qemu 中启动 FreeNOS:
$ scons qemu_debug
在第二个终端中,启动 GDB 并使用以下命令连接到 Qemu 内部 gdbserver:
$ gdb-multiarch ./build/intel/pc/kernel/intel/pc/kernel
(gdb) target remote localhost:1234
您现在可以使用标准 GDB 命令以交互方式调试英特尔的 FreeNOS 内核。 同样,您也可以调试用户程序 (./build/intel/pc/bin/XXX)。 请注意,在调试用户程序时,映射的虚拟内存会因调度而频繁更改。 当您在虚拟内存地址(例如函数)上设置断点时,可能会发生另一个程序被调度并在同一虚拟地址上执行而错误地触发断点。 为了只触发选定用户程序的断点,您可以在与进程名称匹配的断点上设置条件:
(gdb) condition 1 $_streq((char *)0xe0000000, "./server/datastore/server")
上面的命令在索引号为 1 的断点上设置了一个条件,表示它应该只在程序名称字符串等于“./server/datastore/server”时停止执行。
intel/pc
对于 Intel 目标,您还可以使用图形 VGA 控制台(使用 SDL)启动 Qemu:
$ scons qemu_sdl
要在真实硬件上测试 FreeNOS,请将引导 ISO 写入可引导设备,例如 USB 磁盘。 将 USB 磁盘插入主机操作系统并找到相应的设备名称:
$ fdisk -l
或者,使用 dmesg 命令查找设备名称。 使用以下命令写入引导 ISO,其中 sdX 是 USB 磁盘设备的名称。 注意:确保选择正确的设备以防止数据丢失:
$ sudo dd if=build/intel/pc/boot.iso of=/dev/sdX
$ sudo sync
将 USB 磁盘设备插入目标系统,并确保在计算机启动时选择它作为引导设备(例如通过 BIOS)。 您应该会看到 FreeNOS VGA 控制台。
arm/raspberry
要构建 FreeNOS 以在 Raspberry Pi 1 上运行,请使用提供的 build.conf 文件并重建系统:
$ cp config/arm/raspberry/build.conf .
$ scons
要在 Qemu 下为 raspberry pi 1 测试 FreeNOS,请将 QEMU_BUILD 构建变量设置为 True 来重建系统:
$ scons QEMU_BUILD=True
$ scons qemu
要使用 SD 卡在真正的 Raspberry Pi 上进行测试,请从 https://www.raspberrypi.org/downloads/raspbian/ 下载最新的 Raspbian ‘Lite’ 映像并解压缩。 将 SD 卡插入主机操作系统上的读卡器/写入器插槽,并使用以下命令找到适当的设备名称:
$ fdisk -l
或者,使用 dmesg 命令查找设备名称。 使用以下命令将 Raspbian 映像写入 SD 卡,其中 sdX 是 SD 卡设备的名称。 注意:确保选择正确的设备以防止数据丢失:
$ sudo dd if=/path/to/raspbian/image.img of=/dev/sdX
$ sudo sync
重新插入 SD 卡以将其自动安装在您的主机操作系统上。 使用(在 Ubuntu 上)将 FreeNOS raspberry pi 内核可执行文件复制到 Raspbian 映像上的“/boot”分区:
$ sudo cp build/arm/raspberry/kernel.img /media/boot/kernel.img
$ sudo sync
$ sudo umount /media/boot
您需要一根 USB 转 TTL 串行电缆来连接到 Raspberry Pi UART。 任何 USB 转 TTL 串行电缆都可以使用,例如 Adafruit USB 转 TTL 串行电缆:
https://www.adafruit.com/product/954
使用 GPIO 引脚将 USB 转串行电缆连接到 Raspberry Pi:
[ ] [ ]
[ ] [X] Pin 4 (V5) <--- Red (only needed if powered via USB)
[ ] [X] Pin 6 (Ground) <--- Black
[ ] [X] Pin 8 (RX) <--- White
[ ] [X] Pin 10 (TX) <--- Green
[ ] [ ]
[ ] [ ]
[ ] [ ]
[ ] [ ]
[ ] [ ]
另请参阅 Adafruit 关于将串行电缆连接到 Raspberry Pi 的以下教程:
https://learn.adafruit.com/adafruits-raspberry-pi-lesson-5-using-a-console-cable/connect-the-lead
将您的 Raspberry Pi 连接到主机以通过 USB 或使用外部电源适配器为其供电。 在主机操作系统上,启动一个串行控制台客户端程序,例如 minicom 并将其连接到 USB 串行设备(波特率 115200):
$ minicom -D /dev/ttyUSB0
您现在应该看到 FreeNOS 控制台输出。
arm/raspberry2
遵循与上述 Raspberry Pi 1 相同的说明,但使用 Raspberry Pi 2 配置文件来构建 FreeNOS:
$ cp config/arm/raspberry2/build.conf .
$ scons
将内核可执行文件复制到 SD 卡“/boot”分区时,使用“kernel7.img”文件名确保 Raspberry Pi 引导加载程序正确启动内核(ARMv7):
$ cp build/arm/raspberry/kernel.img /media/boot/kernel7.img
此外,对于 raspberry pi 2 和更新版本,将以下内容添加到 /boot/config.txt 文件中,以确保第一个 UART 在 GPIO 引脚 8 和 10 上可用:
dtoverlay=pi3-miniuart-bt
enable_uart=1
arm/sunxi-h3
SD卡上的U-Boot
FreeNOS 支持带有 Allwinner H3 片上系统的 ARM 板,例如 Orange Pi PC 和 Orange Pi Zero(H2+ 是 H3 变体)。 要为 Allwinner H3 构建 FreeNOS,请复制提供的配置文件:
$ cp config/arm/sunxi-h3/build.conf .
$ scons
可以将 U-Boot 格式的内核映像复制到安装了 U-Boot 的 SD 卡:
$ cp build/arm/sunxi-h3/kernel/arm/sunxi-h3/kernel.ub /media/sdcard/kernel.ub
要在 SD 卡上安装 U-Boot 主线,请克隆源并为您的板选择正确的配置(Orange Pi PC:orangepi_pc_defconfig,Orange Pi zero:orangepi_zero_defconfig):
$ git clone https://gitlab.denx.de/u-boot/u-boot u-boot-git
$ cd u-boot-git
$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make mrproper
$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make orangepi_pc_defconfig
要更改默认配置,请使用以下命令进入 Kconfig 交互式编辑器:
$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make menuconfig
在构建之前,您需要选择以下配置项:
Device Tree Control > Provider for DTB for DT Control > Embedded DTB
要构建 U-Boot 二进制文件,只需使用不带任何参数的 make:
$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make
文件 u-boot-sunxi-with-spl.bin 现在可以写入 SD 卡:
$ sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdXXX bs=1024 seek=8 conv=notrunc
将 SD 卡插入目标板并连接 UART 控制台,在 U-Boot 交互式控制台中输入以下命令加载并启动 FreeNOS:
=> setenv bootm_boot_mode sec
=> fatload mmc 0:1 0x400fffc0 kernel.ub
14757888 bytes read in 670 ms (21 MiB/s)
=> bootm 0x400fffc0
You may also choose to download the FreeNOS kernel image via the network. To use a static IP address and server use:
=> setenv image kernel.ub
=> setenv image_addr 0x400fffc0
=> setenv bootm_boot_mode sec
=> setenv ipaddr 172.16.10.120
=> setenv serverip 172.16.10.1
=> tftp $image_addr $serverip:$image
=> bootm $image_addr
要使用 DHCP 检索 IP 地址,请在下载和引导之前使用“dhcp”命令:
=> setenv bootm_boot_mode sec
=> dhcp
=> tftp 0x400fffc0 kernel.ub
=> bootm 0x400fffc0
U-Boot on SPI Flash
或者,Orange Pi Zero 板包含一个小型 SPI 闪存,也可用于安装 U-Boot。 这可以通过 USB 的特殊 FEL 模式使用 Allwinner Sunxi 工具来完成。 首先克隆并构建 sunxi-tools:
$ git clone https://github.com/linux-sunxi/sunxi-tools
$ cd sunxi-tools
通过 USB 电缆将您的开发板连接到您的 PC 并验证 FEL 模式是否有效:
$ sunxi-fel ver
使用前面的步骤构建 U-Boot 后,将 U-Boot 二进制文件写入闪存:
$ ./sunxi-fel -v -p spiflash-write 0 ../u-boot/u-boot-sunxi-with-spl.bin
通过此更改,板将不再进入 FEL 模式。 为了重新写入 SPI 闪存,您可以使用 Armbian 擦除闪存。 在 https://www.armbian.com/orange-pi-zero/ 下载 Orange Pi Zero 的最新 Armbian 映像。 挂载映像并编辑文件 /boot/armbianEnv.txt。 添加以下条目以启用 /dev/mtd0:
spi-jedec-nor
param_spinor_spi_bus=0
从修改后的 Armbian 映像启动板并运行以下命令以擦除 SPI 闪存:
$ sudo apt-get install mtd-utils
$ sudo flash_erase /dev/mtd0 0 0200000
U-Boot on Qemu/TFTP
使用 U-Boot 测试引导过程的另一种方法是使用 Qemu。 您可以通过 Qemu 启动 U-Boot 作为要使用 -kernel 加载的内核,并为 -netdev 提供 tftp= 参数以启用 Qemu 中的集成 TFTP 服务器。 以下命令可用于通过 TFTP 下载 FreeNOS 映像并启动它:
$ qemu-system-arm -M orangepi-pc -kernel /path/to/u-boot/u-boot -nographic
-net nic,id=net0 -netdev user,id=hub0port0,tftp=/path/to/FreeNOS/
...
=> setenv bootm_boot_mode sec
=> dhcp
=> tftp 0x400fffc0 build/arm/sunxi-h3/kernel/arm/sunxi-h3/kernel.ub
=> bootm 0x400fffc0
Using FreeNOS
当 FreeNOS 启动时,系统将打印启动输出并显示系统登录提示。 目前登录将接受任何用户名值并且不要求输入密码。 FreeNOS 交互式控制台提示符如下所示:
(localhost) / #
FreeNOS 具有类似 UNIX 的界面,您可以输入 /bin 目录中的任何可用命令:
(localhost) / # ls bin
例如,“ps”命令打印系统中运行的所有进程的列表:
(localhost) / # ps
您还可以使用以下命令在 Qemu 或真实硬件上运行全自动自动测试器:
(localhost) / # /test/run
要查看有关 FreeNOS 版本和硬件设置的一些信息,您可以使用“sysinfo”命令:
(localhost) / # sysinfo
提示符中的“/”表示当前活动目录。 使用 ‘cd’ 内置 shell 命令更改它:
(localhost) / # cd /tmp
(localhost) /tmp #
FreeNOS shell 有几个内置命令,使用 ‘help’ 命令查看所有内置 shell 命令:
(localhost) / # help
Allwinner H2+/H3 板上的 FreeNOS 支持联网。 您可以通过以下方式查看网络堆栈的当前状态:
(localhost) / # netctl
要分配静态 IP 地址,您可以在相应设备中写入 IPV4 地址文件:
(localhost) / # write /network/sun8i/ipv4/address 172.16.10.90
要通过 DHCP 获取地址,您可以使用以下命令启动 DHCP 客户端:
(localhost) / # dhcpc sun8i
当设备具有有效的 IPV4 地址时,您可以使用以下方式发送 ICMP ping:
(localhost) / # netping -i sun8i 172.16.10.1
用于计算素数的示例应用程序是 /bin/prime 命令。 要让它计算最多 1024 的所有素数并输出素数结果,请使用:
(localhost) / # prime --stdout 1024
prime 命令还有一个称为“mpiprime”的多核变体变体,它使用消息传递接口 (MPI) 库。 mpiprime 程序可以使用多个内核并行计算素数。 要通过控制台运行它并让 shell 测量所用时间:
(localhost) / # time mpiprime 2000000
您可以将时间结果与计算相同数量素数的单核程序的时间进行比较:
(localhost) / # time prime 2000000
此外,可以在 Allwinner H2+/H3 (arm/sunxi-h3) 目标上通过网络在运行 FreeNOS 的多个节点上启动 MPI 程序。 您可以通过启动相应的 MPI 程序来做到这一点,该程序在您的主机操作系统上编译并使用 MPI 库主机代码通过以太网与远程节点进行通信。 您需要提供指定 IP 地址和核心标识符列表的配置文件。 例如,查看配置为使用本地 Qemu 程序进行测试的文件 config/host/mpihosts.txt。 使用以下命令启动启用 MPI 的 QEMU 实例:
$ scons qemu_mpi
在另一个终止中,启动与 Qemu 实例通信的 MPI ping 测试程序:
$ ./build/host/bin/mpiping/mpiping ./config/host/mpihosts.txt
您还可以通过网络启动主程序的 MPI 变体:
$ ./build/host/bin/mpiprime/mpiprime ./config/host/mpihosts.txt 3000000
为您自己的配置文件提供任意 IP 地址列表,以便在您自己的计算集群上运行 MPI 程序。
Jenkins持续集成
用 Vagrant 自动化
FreeNOS 持续集成的安装和配置使用 Vagrant (https://www.vagrantup.com/) 完全自动化。 Vagrant 是一个开源程序,它可以自动创建和配置各种后端的虚拟机,例如 Virtual Box 和 libvirt / KVM。 FreeNOS 提供了一些脚本文件,Vagrant 可以使用这些文件自动创建 Jenkins 主节点和从节点,配置它们并开始构建作业。
从官方网站 https://www.vagrantup.com/ 或通过您的操作系统包管理器安装 Vagrant。 例如,在 Ubuntu Linux 上:
$ sudo apt-get install vagrant
Vagrant 必须有一个后端虚拟机管理程序来运行实际的虚拟机。 这可以使用任何支持的后端来完成,例如 VirtualBox 或 libvirt/KVM。 有关如何为您的 VM 后端设置 Vagrant 的完整详细信息,请访问:https://www.vagrantup.com/docs/installation/。
要在 Ubuntu Linux 上使用 Vagrant 安装和使用 libvirt / KVM,首先确保在计算机的 BIOS 中启用了处理器的硬件虚拟化扩展。 之后,使用以下命令安装 libvirt、KVM 和 Vagrant libvirt 支持:
$ sudo apt-get install vagrant-libvirt libvirt-bin libvirt-dev qemu-kvm qemu-utils qemu
On Ubuntu 20.04:
$ sudo apt-get install libvirt-clients libvirt-daemon-system qemu-kvm vagrant-libvirt
将自己添加到 libvirt 用户组以使用 libvirt 安装:
$ sudo usermod -a -G libvirt my_userid
测试带有 KVM 的 libvirt 是否正常工作:
$ virsh list
如果您没有收到任何错误,则说明带有 KVM 的 libvirt 应该可以正常工作。
要启动主机,安装它并启动 jenkins,使用:
$ cd /path/to/FreeNOS
$ cd support/jenkins
$ vagrant up master
安装完成后,在 http://localhost:8888/ 打开您的网络浏览器以使用 Jenkins。 默认用户名和密码为:admin、admin。
要启动 Ubuntu 从站,请使用:
$ vagrant up ubuntu1804
同样,使用以下命令启动 FreeBSD 12.0 从站:
$ vagrant up freebsd12
当您希望自动启动所有机器、安装和配置它们并自动运行作业时,只需使用以下命令。 请注意,这将消耗大量 CPU 和 RAM:
$ vagrant up
对 FreeNOS 代码进行更改后,可以通过再次配置从属服务器来重新运行 jenkins 作业:
$ vagrant provision freebsd12
$ vagrant provision ubuntu1804
这将确保从站完全更新到最新的操作系统和编译器,并为所有可用配置运行 Jenkins 作业。
使用 Vagrant 的 windows 用户注意:不要在 git 中将 core.autocrlf 设置为 true,否则源文件将添加 rn 字符,导致 bash 脚本出错。
Jenkins Master (Manual Install)
以下部分描述了如何在您的主机操作系统上手动安装 Jenkins 以实现 FreeNOS 的持续集成。 使用您最喜欢的包管理器或从官方网站 (https://jenkins.io/) 在您的主机操作系统上安装 Jenkins。 按照安装向导的说明进行操作,安装后转到 Jenkins Web 界面:http://localhost:8080
安装后,导航到: 管理 Jenkins > 管理插件 确保安装了以下插件。 从“可用”选项卡中选择插件以查找尚未安装的插件:
- Matrix Project Plugin (https://wiki.jenkins-ci.org/display/JENKINS/Matrix+Project+Plugin)
- Matrix Combinations Plugin (https://wiki.jenkins-ci.org/display/JENKINS/matrix+combinations+plugin)
- Node and Label Parameter Plugin (https://wiki.jenkins-ci.org/display/JENKINS/NodeLabel+Parameter+Plugin)
- Libvirt Slaves Plugin (https://wiki.jenkins.io/display/JENKINS/Libvirt+Slaves+Plugin)
- SSH Plugin (https://wiki.jenkins-ci.org/display/JENKINS/SSH+plugin)
- Workspace Cleanup Plugin (https://wiki.jenkins-ci.org/display/JENKINS/Workspace+Cleanup+Plugin)
完成 Jenkins 配置后,在您的主机操作系统上安装 KVM 和 Libvirt。 对于 Ubuntu 使用:
$ sudo apt-get install qemu-kvm libvirt-bin virtinst
通过 SSH 将 Jenkins 连接到 libvirt,导航到:Manage Jenkins > Configure System 选择“添加新云”并选择“Hypervisor Type”:QEMU,“Hypervisor Host”:localhost 并选择所需的 SSH 用户名。
按“高级”选择身份验证参数并按“测试连接”以验证 Jenkins 可以通过 SSH 访问 libvirt。 对于 Ubuntu,您需要确保 SSH 用户位于“kvm”和“libvirtd”组中:
$ sudo usermod -a -G kvm,libvirtd jenkins
Jenkins 需要通过主机名找到 KVM 来宾。 您可以在 /etc/hosts 文件中手动配置 DNS 主机名到 IP 转换,也可以使用内部 libvirt DNSMasq 服务器自动配置。
要在 KVM 中设置自动 DNS 转换,首先编辑 ‘default’ libvirt 网络接口以添加 ‘.kvm’ 仅限本地域:
$ virsh net-edit default
在 … 标签内添加以下行:
<domain name='kvm' localOnly='yes'/>
要在您的主机上使用 libvirt 内部 DNSMasq 服务器,您可以更改 /etc/resolv.conf 文件以添加以下内容:
nameserver 192.168.122.1
如果您的主机操作系统使用 NetworkManager 进行联网,请添加以下文件:
$ sudo -s
# cat > /etc/NetworkManager/conf.d/localdns.conf
[main]
dns=dnsmasq
# cat > /etc/NetworkManager/dnsmasq.d/libvirt_dnsmasq.conf
server=/kvm/192.168.122.1
确保所有 KVM 来宾都在 .kvm 域中设置了主机名(例如 someguest.kvm)。 重新启动 libvirt 和可选的 NetworkManager 以应用更改:
$ sudo /etc/init.d/libvirt-bin restart
$ sudo /etc/init.d/NetworkManager restart
您现在应该能够在 .kvm 域中的来宾启动后解析它们的主机名,例如:
$ virsh start ubuntu-1804
$ host ubuntu-1804.kvm
另请访问以下页面,了解有关 KVM 自动 DNS 设置的更多详细信息:https://liquidat.wordpress.com/2017/03/03/howto-automated-dns-resolution-for-kvmlibvirt-guests-with-a-local-domain/
FreeBSD 12.0 Slave (Manual Install)
从 FreeNOS 源运行 ./support/jenkins/freebsd-12.sh 中的示例安装脚本,以使用 FreeBSD 12.0 设置 KVM 来宾。 另请参阅安装脚本中的注释以获取更多信息:
jenkins@host$ cd support/jenkins
jenkins@host$ ./freebsd-12.sh
要在 Jenkins 中配置 FreeBSD 12.0 从站以构建 FreeNOS,首先需要确保 Jenkins 用户可以使用 SSH 登录到从站。 或者,您可以使用公钥身份验证对其进行配置:
jenkins@host$ virsh start freebsd-12
jenkins@host$ ssh-keygen
jenkins@host$ ssh-copy-id jenkins@freebsd-12.kvm
测试 Jenkins 用户是否可以使用 SSH(通过密码或密钥)登录到 FreeBSD KVM 来宾:
jenkins@host$ ssh jenkins@freebsd-12.kvm
将示例节点配置 XML 文件复制到 Jenkins 安装目录:
jenkins@host$ mkdir /var/lib/jenkins/nodes/freebsd-12-test
jenkins@host$ cp freebsd-12.node.xml /var/lib/jenkins/nodes/freebsd-12-test/config.xml
还将作业配置 XML 文件复制到 Jenkins 安装目录:
jenkins@host$ mkdir /var/lib/jenkins/jobs/FreeNOS-freebsd12-test
jenkins@host$ cp freebsd-12.job.xml /var/lib/jenkins/jobs/FreeNOS-freebsd12-test/config.xml
重启 Jenkins 服务器以使用新的配置文件:
$ sudo /etc/init.d/jenkins restart
Jenkins 仍然需要身份验证凭据才能连接到从站。 导航:
Manage Jenkins > Manage Nodes > freebsd-12 > Configure
在子菜单“辅助启动方法”中,在“通过 SSH 启动代理”下,选择现有的 SSH 凭据让 jenkins 使用它来登录从节点或使用“添加”按钮添加新凭据。 如果您在主机操作系统上为 jenkins 用户生成了 SSH 密钥,请插入 SSH 私钥或提供用户名/密码。
按“保存”按钮完成并使用“启动代理”测试连接。
您现在可以按“FreeNOS-freebsd12”构建作业上的“调度构建”按钮进行测试。
Ubuntu 18.04 Slave
遵循与上述 FreeBSD 12.0 Slave 相同的说明,只需将 slave 名称替换为 ‘ubuntu-1804’。
Authors
The FreeNOS code has been written from scratch by Niek Linnenbank. People who contributed to FreeNOS are:
- Dan Rulos (AmayaOS)
- Coen Bijlsma (libparse, srv/time)
- Ed Schouten (libteken)
- Alexander Schrijver (OpenBSD patches)
最后
以上就是潇洒蜜蜂为你收集整理的FreeNOS--项目的README关于{#mainpage}特征主机设置构建 FreeNOSRunning FreeNOSintel/pcarm/raspberryarm/raspberry2arm/sunxi-h3Using FreeNOSJenkins持续集成Authors的全部内容,希望文章能够帮你解决FreeNOS--项目的README关于{#mainpage}特征主机设置构建 FreeNOSRunning FreeNOSintel/pcarm/raspberryarm/raspberry2arm/sunxi-h3Using FreeNOSJenkins持续集成Authors所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复