分类 debian 下的文章

Debian/Ubuntu系列发行版, 自动化安装技术使用proseed file来定义安装过程的选项,这块内容在前面的文章中,也详细介绍过, 可以参见 PXE系列文章(6)-TFTP 工作目录配置.

而当你有一个存储设备已经分区,并格式化的存储设备, 在这样的设备安装启动 Ubuntu Installer 按照 preseed file的选项一步一步完成安装的过程中, 出现下面选项提示

following disks have mounted partitions

- 阅读剩余部分 -

在常规的网络环境中,大量使用DHCP,比如我们家用的路由器,办公网络的无限AP,我们在这样的网络环境中,仅需将网卡配置为动态获取IP地址即可。而在生产环境,我们需要将IP地址分配到特定的资源,以便让环境的使用保持固定,这样我们就需要配置服务器的固定IP地址。因为Windows环境基于图形操作相对较简单,这里我们介绍下 Linux 各个发行版本的网卡配置流程。

实验环境准备了一台虚拟机,有两个网卡enp0s3/enp0s8, 这里我们选择 enp0s8 作为我们的实验网卡来操作, 在配置网卡之前, 我们还要知道网络的一些信息,我这里的网络网段是 192.168.56.0/24, 可分配的IP地址范围为 192.168.56.2~192.168.56.254, 去掉头尾网关地址和广播地址, 网络的掩码地址为 255.255.255.0, 网关为 192.168.56.1, 我们从可用IP范围中选择 192.168.56.10 作为我们的虚拟机的网卡 IP 地址, 目标配置的网卡为 enp0s8.

REHL/CentOS

REHL/CentOS 的网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-enp0s8, 该文件如果不存在, 创建该文件即可.

- 阅读剩余部分 -

维基百科 Filesystem Hierarchy Standard 有一段介绍 /run 和 /var/run 目录的说明

Modern Linux distributions include a /run directory as a temporary filesystem (tmpfs) which stores volatile runtime data, following the FHS version 3.0. According to the FHS version 2.3, such data were stored in /var/run but this was a problem in some cases because this directory is not always available at early boot. As a result, these programs have had to resort to trickery, such as using /dev/.udev, /dev/.mdadm, /dev/.systemd or /dev/.mount directories, even though the device directory isn't intended for such data.[23] Among other advantages, this makes the system easier to use normally with the root filesystem mounted read-only. For example, below are the changes Debian made in its 2013 Wheezy release:[24]

/run 目录是一个临时文件系统, 存储是启动以来的信息.当系统重启时,这个目录下的文件应该被删掉或清除.如果你的系统上有/var/run目录,应该让它指向run.

- 阅读剩余部分 -

通过前面13篇文章,我们已经完全准备好了PXE的装机环境, 按PXE系列文章(9)- 优化 PXE 装机流程系统架构,我们需要实现带外管理的Driver以及带内执行逻辑的Agent.

  • Driver 负责带外功能的实现,功能包括 开机关机重启PXE启动Disk启动Ping ILO Host等等功能、主要是基于 ipmitool 命令来实现, 也提供了可插拔的机制来实现其他带外管理的能力,比如 iDRAC、Redfish、SNMP等,目前我们使用 ipmitool 能满足使用需求, 所以从实现上来讲仅实现 ipmitool 的支持就足够了。

- 阅读剩余部分 -

我们前面几节已经详细介绍了基于 UbuntuCentOS 构建内存镜像的方案,其中 ~/work/initramfs/init 脚本内容大致如下:

#!/bin/busybox sh

# Dump to sh if something fails
error() {
    echo "Jumping into the shell..."
    setsid cttyhack sh
}

# Populate /bin with binaries from busybox
/bin/busybox --install /bin

mkdir -p /proc
mount -t proc proc /proc

mkdir -p /sys
mount -t sysfs sysfs /sys

mkdir -p /sys/dev
mkdir -p /var/run
mkdir -p /dev

mkdir -p /dev/pts
mount -t devpts devpts /dev/pts

# Populate /dev
echo /bin/mdev > /proc/sys/kernel/hotplug
mdev -s

echo "mount rootfs... "
mkdir -p /newroot
mount -t tmpfs -o size=80% tmpfs /newroot || error

xz -d -c -f rootfs.tar.xz | tar -x -f - -C /newroot || error

mount --move /sys /newroot/sys
mount --move /proc /newroot/proc
mount --move /dev /newroot/dev

exec switch_root /newroot /sbin/init || error

- 阅读剩余部分 -

在前面, 我们已经使用 debootstrap 构建基于Ubuntu的内存OS, 但是业界常用的更多的是CentOS,所以一直在尝试使用CentOS来构建内存OS.
CentOS 7 root filesystem on tmpfs这篇文章中的方案可行, 我们不使用的原因是流程构建太长, 外部依赖太多,冗余的内容太多,也不够精简.
所以我们希望尝试的方案是类似 Ubuntudebootstrap 的工具. yum 本身是可以将对应包安装到指定目录,直到看到下面这篇日本同行写的文章,让这个过程更加清晰了.

宿主环境中,我们需要有 yum rpm 等工具命令的支持,在各个发行版中均可以安装这两个包, 当然宿主机器本身就是CentOS那就不需要在独立安装了.

- 阅读剩余部分 -

其实前面我们是在虚拟网络中的虚拟服务器上部署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

- 阅读剩余部分 -