Mark blog

知行合一 划水归档

运维自动化-系统部署(一)

安装Linux系统

CentOS系统安装系统启动流程:
bootloader–>kernel(initramfs)–>rootfs–>/sbin/init

anaconda: 系统安装程序
gui:图形窗口
tui: 基于图形库curses的文本窗口

安装程序启动过程

MBR:isolinux/boot.cat
stage2: isolinux/isolinux.bin
配置文件:isolinux/isolinux.cfg
每个对应的菜单选项:
加载内核:isolinuz/vmlinuz
向内核传递参数:append initrd=initrd.img …
装载根文件系统,并启动anaconda
默认启动GUI接口
若是显式指定使用TUI接口:向内核传递text参数即可
(1)按tab键,在后面增加text
(2)按ESC键:boot: linux text

anaconda工作过程

Anaconda安装系统分成三个阶段:
安装前配置阶段
安装过程使用的语言键盘类型
安装目标存储设备
Basic Storage:本地磁盘
特殊设备:iSCSI
设定主机名
配置网络接口时区
管理员密码
设定分区方式及MBR的安装位置
创建一个普通用户
选定要安装的程序包

安装阶段
在目标磁盘创建分区,执行格式化操作等
将选定的程序包安装至目标位置
安装bootloader和initramfs

图形模式首次启动
iptables
selinux
core dump

系统安装

启动安装过程一般应位于引导设备;后续的anaconda及其安装用到的程序包等可来自下面几种方式:
本地光盘
本地硬盘
NFS
URL:
ftp server: yum repository
http server: yum repostory
如果想手动指定安装源:
boot: linux askmethod

指定安装源

centos6
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

centos7
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

系统安装

anaconda的配置方式:
(1) 交互式配置方式
(2) 通过读取事先给定的配置文件自动完成配置按特定语法给出的配置选项kickstart文件

安装boot引导选项:boot:
text: 文本安装方式
askmethod: 手动指定使用的安装方法

与网络相关的引导选项:
ip=IPADDR
netmask=MASK
gateway=GW
dns=DNS_SERVER_IP
ifname=NAME:MAC_ADDR

与远程访问功能相关的引导选项:
vnc
vncpassword=’PASSWORD’

指明kickstart文件的位置: ks=
DVD drive: ks=cdrom:/PATH/TO/KICKSTART_FILE
Hard drive: ks=hd:device:/directory/KICKSTART_FILE
HTTP server: ks=http://host:port/path/to/KICKSTART_FILE
FTP server: ks=ftp://host:port/path/to/KICKSTART_FILE
HTTPS server: ks=https://host:port/path/to/KICKSTART_FILE
NFS server:ks=nfs:host:/path/to/KICKSTART_FILE

启动紧急救援模式:
rescue

官方文档:《Installation Guide》

kickstart文件的格式

命令段:指明各种安装前配置,如键盘类型等
程序包段:指明要安装的程序包组或程序包,不安装的程序包等
%packages
@group_name
package
-package
%end

脚本段:
%pre: 安装前脚本
运行环境:运行于安装介质上的微型Linux环境

%post: 安装后脚本
运行环境:安装完成的系统

命令段中的命令:
必备命令
authconfig: 认证方式配置
authconfig –useshadow –passalgo=sha512
bootloader:bootloader的安装位置及相关配置
bootloader –location=mbr –driveorder=sda – append=”crashkernel=auto rhgb quiet”
keyboard: 设定键盘类型
lang: 语言类型
part: 创建分区
rootpw: 指明root的密码
timezone: 时区

可选命令
install OR upgrade
text: 文本安装界面
network
firewall
selinux
halt
poweroff
reboot
repo
user:安装完成后为系统创建新用户
url: 指明安装源
key –skip 跳过安装号码,适用于rhel版本

创建kickstart文件的方式
直接手动编辑
依据某模板修改
可使用创建工具:system-config-kickstart
依据某模板修改并生成新配置
/root/anaconda-ks.cfg
检查ks文件的语法错误:ksvalidator
ksvalidator /PATH/TO/KICKSTART_FILE

系统光盘中isolinux目录列表
solinux.bin:光盘引导程序,在mkisofs的选项中需要明确给出文件路径,这个文件属于SYSLINUX项目
isolinux.cfg:isolinux.bin的配置文件,当光盘启动后(即运行isolinux.bin),会自动去找isolinux.cfg文件
vesamenu.c32:是光盘启动后的安装图形界面,也属于SYSLINUX项目,menu.c32版本是纯文本的菜单
Memtest:内存检测,这是一个独立的程序
splash.jgp:光盘启动界面的背景图
vmlinuz是内核映像
initrd.img是ramfs (先cpio,再gzip压缩)

制作引导光盘和U盘

创建引导光盘:
mkdir –pv /app/myiso
cp -r /misc/cd/isolinux/ /app/myiso/
vim /app/myiso/isolinux/isolinux.cfg initrd=initrd.img text ks=cdrom:/myks.cfg
cp /root/myks.cfg /app/myiso/
mkisofs -R -J -T -v –no-emul-boot –boot-load-size 4 –boot-info-table -V “CentOS 6.9 x86_64 boot” -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso /app/myiso/
注意:以上相对路径都是相对于光盘的根,和工作目录无关

创建U盘启动盘
dd if=/dev/sr0 of=/dev/sdb

mkisofs选项
-o 指定映像文件的名称。
-b 指定在制作可开机光盘时所需的开机映像文件。
-c 制作可开机光盘时,会将开机映像文件中的 no-eltorito-catalog 全部内容作成一个文件。
-no-emul-boot 非模拟模式启动。
-boot-load-size 4 设置载入部分的数量
-boot-info-table 在启动的图像中现实信息
-R 或 -rock   使用 Rock RidgeExtensions
-J 或 -joliet   使用 Joliet 格式的目录与文件名称
-v 或 -verbose   执行时显示详细的信息
-T 或 -translation-table 建立文件名的转换表,适用于不支持 Rock Ridge Extensions 的系统上

DHCP服务

网络配置
静态指定
动态获取: bootp:boot protocol MAC与IP一一静态对应dhcp:增强的bootp,动态

DHCP: (Dynamic Host Configuration Protocol)
动态主机配置协议
局域网协议,UDP协议

主要用途:
用于内部网络和网络服务供应商自动分配IP地址给用户
用于内部网络管理员作为对所有电脑作集中管理的手段

使用场景
自动化安装系统
解决IPV4资源不足问题

DHCP共有八种报文
DHCP DISCOVER:客户端到服务器
DHCP OFFER :服务器到客户端
DHCP REQUEST:客户端到服务器
DHCP ACK :服务器到客户端
DHCP NAK:服务器到客户端,通知用户无法分配合适的IP地址
DHCP DECLINE :客户端到服务器,指示地址已被使用
DHCP RELEASE:客户端到服务器,放弃网络地址和取消剩余的租约时间
DHCP INFORM:客户端到服务器, 客户端如果需要从DHCP服务器端获取更为详细的配置信息,则发送Inform报文向服务器进行请求,极少用到

续租
50% :租赁时间达到50%时来续租,刚向DHCP服务器发向新的DHCPREQUEST请求。如果dhcp服务没有拒绝的理由,则回应DHCPACK信息。当DHCP客户端收到该应答信息后,就重新开始新的租用周期
87.5%:如果之前DHCP Server没有回应续租请求,等到租约期的7/8时,主机会再发送一次广播请求

DHCP服务简介

同网段多DHCP服务
DHCP服务必须基于本地
先到先得的原则

跨网段
RFC 1542 Compliant Routers
dhcrelay: 中继

相关协议
Arp
rarp

DHCP实现

Linux DHCP协议的实现程序:dhcp, dnsmasq(dhcp,dns)

Dhcp Server
/usr/sbin/dhcpd
/etc/dhcp/dhcpd.conf –> /etc/rc.d/init.d/dhcpd
/etc/dhcp/dhcpd6.conf–> /etc/rc.d/init.d/dhcpd6
/usr/sbin/dhcrelay
/etc/rc.d/init.d/dhcrelay
dhcp server:67/udp
dhcp client: 68/udp
dhcpv6 client:546/udp

Dhcp client
dhclient
自动获取的IP信息: /var/lib/dhclient

DHCP配置文件

dhcpd.conf:
帮助参考:man 5 dhcpd.conf
全局配置
subnet {

}
host {

​ }

地址分配记录
/var/lib/dhcpd/dhcpd.leases

dhcpd.conf示例

option domain-name “magedu.com”;
option domain-name-servers 192.168.0.1,8.8.8.8;
default-lease-time 86400;
max-lease-time 86400;
subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.1 192.168.100.200;
option routers 192.168.100.1;
}

其它配置选项:
filename: 指明引导文件名称
next-server:提供引导文件的服务器IP地址
示例:
filename “pxelinux.0”;
next-server 192.168.100.100;
检查语法
service dhcpd configtest

PXE介绍

PXE:
Preboot Excution Environment 预启动执行环境
Intel公司研发
基于Client/Server的网络模式,支持远程主机通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统
PXE可以引导和安装Windows,linux等多种操作系统

PXE工作原理
Client向PXE Server上的DHCP发送IP地址请求消息,DHCP检测Client是否合法(主要是检测Client的网卡MAC地址),如果合法则返回Client的IP地址,同时将启动文件pxelinux.0的位置信息一并传送给Client
Client向PXE Server上的TFTP发送获取pxelinux.0请求消息,TFTP接收到消息之后再向Client
发送pxelinux.0大小信息,试探Client是否满意,当TFTP收到Client发回的同意大小信息之后,正式向Client发送pxelinux.0
Client执行接收到的pxelinux.0文件
Client向TFTP Server发送针对本机的配置信息文件(在TFTP 服务的pxelinux.cfg目录下),
TFTP将配置文件发回Client,继而Client根据配置文件执行后续操作。
Client向TFTP发送Linux内核请求信息,TFTP接收到消息之后将内核文件发送给Client
Client向TFTP发送根文件请求信息,TFTP接收到消息之后返回Linux根文件系统
Client启动Linux内核
Client下载安装源文件,读取自动化安装脚本

PXE自动化安装CentOS 7

安装前准备:关闭防火墙和SELINUX,DHCP服务器静态IP
安装软件包
httpd tftp-server dhcp syslinux system-config-kickstart
配置文件共享服务:
systemctl enable httpd
systemctl start httpd
mkdir /var/www/html/centos/7
mount /dev/sr0 /var/www/html/centos/7
准备kickstart文件
/var/www/html/ks/centos7.cfg 注意:权限
配置tftp服务
systemctl enable tftp.socket
systemctl start tftp.socket
配置DHCP服务
vim /etc/dhcp/dhcpd.conf
option domain-name “example.com”;
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.1 192.168.100.200;
filename “pxelinux.0”;
next-server 192.168.100.100;
}
systemctl enable dhcpd
systemctl start dhcpd

准备相关文件
mkdir /var/lib/tftpboot/pxelinux.cfg/
cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot/
cp /misc/cd/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/
cp /misc/cd/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

文件列表如下:

/var/lib/tftpboot/
├── initrd.img
├── menu.c32
├── pxelinux.0
├── pxelinux.cfg
│ └── default
└── vmlinuz

准备启动菜单
Vim /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
timeout 600
menu title PXE INSTALL MENU
label auto
menu label Auto Install CentOS 7
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.100.100/ks/centos7.cfg
label manual
menu label Manual Install CentOS 7
kernel vmlinuz
append initrd=initrd.img inst.repo=http://192.168.100.100/centos/7
label local
menu default
menu label ^Boot from local drive
localboot 0xffff

安装前准备:关闭防火墙和SELINUX,DHCP服务器静态IP

1 安装相应软件包
yum install dhcp httpd tftp-server syslinux chkconfig tftp on
chkconfig xinetd on 
chkconfig httpd on 
chkconfig dhcpd on 
service httpd start 
service xneted start
2 准备Yum 源和相关目录
mkdir -pv /var/www/html/centos/{6,ks} 
mount /dev/sr0 /var/www/html/centos/6
3 准备kickstart文件
/var/www/html/centos/ks/centos6.cfg

注意权限:
chmod 644 /var/www/html/centos/ks/centos6.cfg

4 准备相关的启动文件
mkdir /var/lib/tftpboot/pxelinux.cfg/
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ 
cd /misc/cd/images/pxeboot/
cp vmlinuz initrd.img /var/lib/tftpboot 
cd /misc/cd/isolinux/
cp boot.msg vesamenu.c32 splash.jpg /var/lib/tftpboot
5 准备启动菜单文件
cp /misc/cd/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
vim /var/lib/tftpboot/pxelinux.cfg/default 
default vesamenu.c32 指定菜单风格 
#prompt 1
timeout 600 
display boot.msg
menu background splash.jpg
menu title Welcome to wang CentOS 6 
menu color border 0 #ffffffff #00000000 
menu color sel 7 #ffffffff #ff000000 
menu color title 0 #ffffffff #00000000 
menu color tabmsg 0 #ffffffff #00000000 
menu color unsel 0 #ffffffff #00000000 
menu color hotsel 0 #ff000000 #ffffffff 
menu color hotkey 7 #ffffffff #ff000000 
menu color scrollbar 0 #ffffffff #00000000
label auto
    menu label ^Automatic Install Centos6
    kernel vmlinuz
    append initrd=initrd.img ks=http://192.168.100.100/centos/ks/centos6.cfg
label manual
    menu label ^Manual Install Centos
    kernel vmlinuz
    append initrd=initrd.img inst.repo=http://192.168.100.100/centos/6
label local
    menu default
    menu label Boot from ^local drive
    localboot 0xffff

目录结构如下:
tree /var/lib/tftpboot/
/var/lib/tftpboot/
├── boot.msg
├── initrd.img
├── pxelinux.0
├── pxelinux.cfg
│ └── default
├── splash.jpg
├── vesamenu.c32
└── vmlinuz

​ 1 directory, 7 files

6 配置dhcp服务

​ cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
vim /etc/dhcp/dhcpd.conf
option domain-name “magedu.com”;
option domain-name-servers 192.168.100.1;
subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.1 192.168.100.200;
option routers 192.168.100.1;
filename “pxelinux.0”;
next-server 192.168.100.100;
}

​ service dhcpd start