系统部署
本文最后更新于:2023年12月5日 晚上
系统安装过程
Linux 安装过程
- 加载 boot loader
- 加载启动安装菜单
- 加载内核和 initrd 文件
- 加载根系统
- 运行 anaconda 的安装向导
isolinux 目录下安装相关文件
- boot.cat: 相当于 grub 的第一阶段
- isolinux.bin:光盘引导程序,在 mkisofs 的选项中需要明确给出文件路径,这个文件属于 SYSLINUX 项目
- isolinux.cfg:启动菜单的配置文件,当光盘启动后(即运行 isolinux.bin),会自动去找 isolinux.cfg 文件
- vesamenu.c32:是光盘启动后的启动菜单图形界面,也属于 SYSLINUX 项目,menu.c32 提供纯文本的菜单
- memtest:内存检测程序
- splash.png:光盘启动菜单界面的背景图
- vmlinuz:是内核映像
- initrd.img:ramfs 文件
安装菜单的内核参数
安装光盘的启动菜单配置文件:isolinux/isolinux.cfg,每个 label 就是一个菜单项,主菜单或者二级菜单。
isolinux.cfg 中部分内容:
常见内核参数
text:指定文本方式的安装界面
rescue:进入救援模式
inst.repo=path:指定安装源文件的路径,可以是以下格式
Centos 6:
- DVD drive repo=cdrom :device
- Hard Drive repo=hd:device/path
- HTTP Server repo=http://host/path
- HTTPS Server repo=https://host/path
- FTP Server repo=ftp://username:password@host/path
- NFS Server repo=nfs:server:/path
- ISO images on an NFS Server repo=nfsiso:server:/path
Centos 7: - Any CD/DVD drive inst.repo=cdrom
- Hard Drive inst.repo=hd:device:/path
- HTTP Server inst.repo=http://host/path
- HTTPS Server inst.repo=https://host/path
- FTP Server inst.repo=ftp://username:password@host/path
- NFS Server inst.repo=nfs:[options:]server:/path
inst.ks=path:指定自动化安装应答文件路径,例如
- inst.ks=http://192.168.8.8/ksdir/ks8.cfg
- DVD drive:inst.ks=cdrom:/PATH/TO/KICKSTART_FILE
- Hard drive:inst.ks=hd:device:/directory/KICKSTART_FILE
- HTTP server:inst.ks=http://host:port/path/to/KICKSTART_FILE
- FTP server:inst.ks=ftp://host:port/path/to/KICKSTART_FILE
- HTTPS server:inst.ks=https://host:port/path/to/KICKSTART_FILE
- NFS server:inst.ks=nfs:host:/path/to/KICKSTART_FILE
ip= : 指定 IP 地址信息,例如
- ip=dhcp 自动获取
- id=eth0:dhcp 指定网卡接口
- ip=ip::gateway:netmask:hostname:interface:none 静态 IP
注意:安装程序的引导参数都使用 inst. 作为前缀。目前这个前缀是可选的,例如 inst.ks= 和 ks= 的效果完全一样。但预期在未来会强制使用 inst. 前缀。
自动安装的应答文件
实现自动化安装前,需要制作对应的应答文件,称为 kickstart 文件,用于保存安装过程中的需要指定的选项
如果是图形化手动一步步安装,系统会自动生成应答文件:/root/anaconda-ks.cfg
kickstart 文件格式的官方说明:centos6、centos7、centos8
kickstart 文件格式说明
kickstart 文件主要包括三个部分:命令段、程序包段、脚本段
命令段
指明各种安装前配置,如键盘类型等
命令 | 说明 |
---|---|
keyboard | 设定键盘类型 |
lang | 语言类型 |
zerombr | 清除 mbr |
clearpart | 清除分区 |
part | 创建分区 |
rootpw | 指明 root 的密码 |
timezone | 时区 |
text | 文本安装界面 |
network | 指定网络设置 |
firewall | 设置防火墙设置 |
selinux | 设置 selinux 设置 |
reboot | 安装完自动重启 |
user | 安装完成后为系统创建新用户 |
url | 指明安装源 |
… | … |
程序包段
%packages:指定要安装的程序包组或程序包、指定不安装的程序包等。以%end 结尾。范例:
脚本段
- %pre: 安装前脚本,%end 结尾
- %post: 安装后脚本,%end 结尾
范例:
其他
%addon:安装插件,%end 结尾,范例:
%anaconda:控制安装系统的用户界面的行为。此部分必须放在 kickstart 文件的末尾。目前,在%anaconda 部分中,pwplicy 是唯一可以使用的命令,范例:
注意:CentOS6、7、8 的 kickstart 文件格式不尽相同,不可混用
kickstart 文件创建
- 可使用创建工具:system-config-kickstart ,注意:此方法 CentOS 8 不再支持
- CentOS 安装完后,会根据当前系统的安装过程,自动生成一个 kickstart 文件:/root/anaconda-ks.cfg,可以根据此文件修改并生成新配置
推荐使用第二种方式,手动编辑,最后使用 ksvalidator(来自于 pykickstart 包) 工具检查一下文件格式是否有语法错误。
制作引导 U 盘
制作应答文件、修改 iso 的启动菜单配置文件 isolinux.cfg,然后把 iso 制作成引导 U 盘,就可以实现半自动化安装。
应答文件可以放在 iso 中,也可以放在 http 服务器,只需要在 isolinux.cfg 中配置好 ks=path 即可。
DHCP
主机获取网络配置可以通过两种方式:
- 静态指定
- 动态获取
- bootp:boot protocol,IP 与 MAC 一一静态对应
- dhcp:增强的 bootp,IP 与 MAC 既可以静态绑定,也可以动态分配
DHCP 工作原理
DHCP: Dynamic Host Configuration Protocol,动态主机配置协议。基于 UDP 协议,DHCP Server 默认 67 端口号,DHCP Client 默认 68(ipv4)和 546(ipv6)端口号。
主要用途:
- 用于内部网络和网络服务供应商自动分配 IP 地址给用户
- 用于内部网络管理员作为对所有电脑作集中管理的手段
- 自动化安装系统
- 解决 IPV4 资源不足问题
DHCP 实现
实现 DHCP 服务的软件:
- dhcp(centos7) 或 dhcp server(centos8)
- dnsmasq:小型服务软件,可以提供 dhcp 和 dns 服务
DHCP 相关文件组成
dhcp 或 dhcp server 包文件组成:
- /usr/sbin/dhcpd:dhcp 服务主程序
- /etc/dhcp/dhcpd.conf:dhcp 服务配置文件
- /usr/share/doc/dhcp-server/dhcpd.conf.example:dhcp 服务配置范例文件
- /usr/lib/systemd/system/dhcpd.service:dhcp 服务 service 文件
- /var/lib/dhcpd/dhcpd.leases:DHCP 服务器日志,记录了地址分配记录
dhcp-client 客户端包:
- /usr/sbin/dhclient:客户端程序
- /var/lib/dhclient/dhclient.leases:DHCP 客户端日志,
DHCP 服务器配置文件
帮助参考:man 5 dhcpd.conf
dhcpd.conf 配置信息: subnet 网段设置; host 主机设置。 范例:
dhclient 命令
TFTP
OpenSSH 服务中,我们学习了 SFTP 是安全版的 FTP,而 TFTP 是简化版的 FTP:
FTP 基于 TCP、TFTP 基于 UDP
FTP 支持账号登录,TFTP 不支持账号登录
FTP 使用 2 个端口:TCP 端口 21,是个侦听端口;TCP 端口 20 或更高 TCP 端口 1024 以上用于源连接。
FTP 仅使用一个具有停止和等待模式的端口:端口:69/udp
FTP 有许多可以执行的命令(get,put,ls,dir,lcd)并且可以列出目录等
TFTP 只有 5 个指令可以执行(rrq,wrq,data,ack,error)
安装和使用 TFTP
服务器包 tftp-server:
客户端包 tftp:
利用 PXE 实现自动化安装部署
PXE:Preboot Excution Environment,预启动执行环境,是由 Intel 公司研发,基于 Client/Server 的网络模式。
Intel PXE 规范定义了一些机制和协议,可让 PXE 设备使用其网络接口卡 (NIC) 来查找位于网络服务器上的引导程序。在 PXE 规范中,这些程序被称为“网络引导程序”(NBP)。
复习:MBR 硬盘的 0 号扇区的前 446 个字符是主引导程序 BootLoader,作用是查找和装载可引导的操作系统。
NBP 类似 BootLoader,只不过 NMP 是在网络中查找配置文件,根据配置文件引导系统。
syslinux 是一个启动加载器集合,支持从硬盘、光盘或通过 PXE 的网络引导启动系统,支持 ext4、FAT 等文件系统。Server 安装 syslinux 后,会在/usr/share/syslinux 目录下生成很多文件,其中 pxelinux.0 就是 NBP,pxelinux.cfg 就是配置文件。
PXE 启动工作原理:
在 CentOS8 上实现 PXE 自动化安装 CentOS6、7、8
安装前准备:
- 关闭 Vmware 软件中的 DHCP 服务,设置为基于 NAT 模式
- 关闭 CentOS 8 的防火墙和 SELINUX
- 确保 CentOS 8 的 IP 是静态指定,不是 DHCP 获取
- 使用 1G 以下内存的主机安装 CentOS 7,8 会提示空间不足,建议 2G 以上
- 安装相关软件包并启动
- 配置 DHCP 服务
- 配置 TFTP 服务,参考上文
- 准备 yum 源和相关目录
- 准备应答文件
centos6:
centos7:
centos8:
- 准备 PXE 启动相关文件
准备启动菜单文件
修改/var/lib/tftpboot/pxelinux.cfg/default
新准备一台主机,设置网卡引导,可看到看启动菜单,并实现自动安装
安装成功: