linuxcoming 发布的文章

其实前面我们是在虚拟网络中的虚拟服务器上部署PXE Server,完整走了一遍PXE Server的初始化流程,这个和生产环境的初始化构建流程是一致的,所以不能省去。而对于我们使用VirtualBox而言, 它其实提供了更加便捷的方式, 因为VirtualBox 本身就提供虚拟网络的DHCP功能,完全有能力同时集成TFTP的功能。那这样我们就依赖VirtualBox天然提供的PXE Server,将极大的简化我们调试的过程。

VirtualBox安装后,其用户级别配置目录在Linux系统上是在 ~/.VirtualBox,根据官方资料,在该目录内创建 TFTP 目录, 目录中,需要将 pxelinux.0 重命名为 "VM Name".pxe 文件。我们要实验的话, 直接将 Ubuntu 的镜像 ubuntu-16.04.6-server-amd64.iso 挂载到 /mnt, 拷贝到 ~/.VirtualBox/TFTP 中即可。

- 阅读剩余部分 -

在前面的文章中, 我们已经提到, initrd 本身就是精简版的根盘文件系统, 主要目的是用于内核启动后 OS 环境的初始化, 比如你是 Soft Raid,需要在这个时候读取 /etc/fstab 文件,比如根盘文件在特定的 Raid 设备卷中的分区上, 需要预加载指定 Raid 驱动等等.总之这个环境主要用于真正用户 OS 启动之前的准备.

通常在各个发行版本都有各自的 initrd 的构建工具,各自的目的呢, 也仅限于我们上述提到的功能. 而我们是需要将整个 OS 塞到这个内存镜像中,所以稍微还是有区别,调研了下一些业界的实现, 这里的几个链接供参考:

上述链接可以看到, 一般是使用 https://virt-manager.org/和http://libguestfs.org/ 这两个项目的工具来构建镜像.可以尝试下这个方法, 完全可行, 但是有个问题是这个流程真的太长了, 比如要按上述流程构建的话, 需要用virt-install完整安装一遍目标 OS
, 继续用virt-sysprep对镜像做一遍清理, 将生成的镜像导入到 virt-builder, 继续在 KVM 虚拟机中配置一遍 OS 默认信息, 然后就可以将镜像更新到 virt-builder 基础镜像中, 然后拿到其他地方使用, 比如 Ramdisk boot/Vagrant/OpenStack/Docker中使用.

- 阅读剩余部分 -

上一篇文章 PXE 自动化装机技术回顾 我们详细讨论了下, 标准 PXE 使用流程的一些优缺点.对于现今机房数量的大幅度增加, 物理机数量以及类型的增加, 多样化需求的叠加, 尤其是国内还有大量对裸金属服务的依赖, 都希望将传统的安装过程能平台化/模块化/自动化,以满足不断丰富的业务需求, 满足对资源的交付更加高效/可靠/稳定要求, 以及同时减少整体持续运营的成本, 降低研发人员参与的强度.

其实整个传统的PXE装机过程, 偏向串行化, 流程化的, 如果我们能将大部分内容变成服务化,由业务调度提供执行任务, 要求所有任务有足够原子化的粒度,比如做 Raid, 写镜像, 配置网卡等等, 真正的装机模块负责对任务进行执行, 所有任务支持编排, 提供并行/串行机制, 实时反馈,偶发异常自动重试,系统异常自动提醒.

大多厂商都开始使用 OpenStack Ironic 来解决上述问题, Ironic 架构图如下:

Ironic Arch

- 阅读剩余部分 -

到目前为止, 我们已经按技术标准实现了 Debian/Ubuntu 系列 OS 基于 preseeding 技术的自动化装机流程.其实 CentOS 的 PXE 环境构建也一样,基本是把 CentOS-7-x86_64-DVD-1810.iso 标准镜像中 /images/pxeboot 目录下的 vmlinuz/initrd.img 拷贝到 /var/lib/tftp 下. pxelinux.0 引导程序文件不像 Debian\Ubuntu 在版本 iso 镜像中管理, 而是在 syslinux 包中, 当然 syslinux 包一定是在标准镜像中, 需要单独解开这个包或者是在宿主机器上安装该包然后将内容再拷贝出来, 另外还有一些依赖的内容比如 boot.msg 等等文件还需要标准镜像中拷贝出来, 具体依赖项还需要看你 pxelinux.cfg/default 文件中使用了哪些内容.

- 阅读剩余部分 -

ubuntu-auto.seed 包含我们需要的的主要一些 preseeding 选项.有几个重点选项接下来我们详细梳理下.

设置网络安装使用的网卡

对于不同物理硬件设备识别名可能是不一样, 比如eno1/ens1/enp2s0/eth0等等,网卡名称完全不可预知.通过 https://www.freedesktop.org/wiki/官方网站有个wiki 详细说明了从 systemd v197 版本后, 对网卡命名规则做了一些改变, 优先以 bios 上记录的硬件设备发现的顺利来命名网卡. 详细信息见 Predictable Network Interface Names

- 阅读剩余部分 -

PXE 环境搭建完成后,现在还不能开始自动装机过程, 因为 TFTP 工作目录下的配置还是 Ubuntu 发行版 netboot 的默认配置,需要手动一步一步的完成整个过程的安装, 只能算手摇半自动.在真正开始之前,需要梳理下 Ubuntu 的 netboot 配置方式,以方便我们完成自定义的自动化装机.

初始化 /var/lib/tftpboot 目录

我们是将ubuntu-16.04.6-server-amd64.iso镜像挂载到/mnt, 将/mnt/install/netboot目录下的内容直接拷贝到/var/lib/tftpboot,我们先看看这个目录到底有什么内容:

- 阅读剩余部分 -

上篇文章详细介绍了 Ubuntu 16.04 初次安装之后要做的一些优化建议, 见

Ubuntu 16.04 初次安装之后要做的一些优化建议

经过前面几篇文章的介绍, 一个干净的 Ubuntu 环境搭建完成, 接下来我们要准备下 PXE(Preboot eXecution Environment) 环境的构建.在正式介绍 PXE 之前,我们需要知道 PXE 到底是什么?

PXE(预启动执行环境,也被称为预执行环境)提供了一种使用网络接口(Network Interface)启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统。

- 阅读剩余部分 -

上篇文章详细介绍了,整个 Ubuntu 16.04 的安装过程, 见

Ubuntu 16.04 最小化安装教程

对于 Ubuntu 初次安装好之后, 有一些小的优化建议,会极大的方便后续的使用.

对于安装过程中未选择 SSH Server 的话,安装 SSH Server 是首要的事情,对于虚拟机还好, 对于物理机环境或者远程环境,如果没有这个服务,维护和使用起来比较麻烦.

- 阅读剩余部分 -