标签 pxe 下的文章

一般我们在执行系统安装过程,可能会定制安装ISO, 在ISO中集成我们自定义的一些软件包或者源码代码等等,需要在Kickstart中从cdrom中加载该内容,以便完成后续的系统配置或者软件包的安装.

一般我们会在 %post 部分来定义自定义配置逻辑, 但是在该环节,无法访问cdrom, 因为已经 chroot 到目标OS.

%post --log=/tmp/ks-post.log

yum -y update
yum -y upgrade

%end

- 阅读剩余部分 -

物理机一般都有专用的带外管理模块, 提供web管理页, 同时提供基于IPMI协议的远程管理接口.
相对来说, web管理页提供的功能更丰富, 但是不便于远程管理.而基于IPMI协议的远程管理接口更能满足这种需求.

在linux上实现该协议的工具是ipmitool命令,可以控制物理机的:

  • 开机
  • 关机
  • 重启
  • 查看机器当前的通电状态
  • 修改IPMI的网络和IP地址
  • 修改bios设置

安装 ipmitool

REHL/CentOS

yum -y install ipmitool

Debian/Ubuntu

apt -y install ipmitool

- 阅读剩余部分 -

通过前面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

- 阅读剩余部分 -

在前面的文章中, 我们已经提到, 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

- 阅读剩余部分 -

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

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

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

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

- 阅读剩余部分 -

最近开始准备整理一份完整的Linux/FreeBSD的PXE安装教程,先从基础设施VirtualBox安装开始,便于我们模拟在真实场景下远程装机的功能.

1.下载软件

建议直接从官网下载软件,下载软件的同时可以关注下官方一些文档,以及最近的版本情况,甚至你还可以关注下目前版本对PXE的支持情况

(1).Windows下载地址

https://download.virtualbox.org/virtualbox/6.0.4/VirtualBox-6.0.4-128413-Win.exe

安装过程没太多需要注意的,一步一步确认就好了.

VirtualBox安装

(2).Linux下载地址

https://www.virtualbox.org/wiki/Linux_Downloads

- 阅读剩余部分 -