注意:linux中提供dhcp功能的程序不只是dhcpd还有dnsmasq(在嵌入式环境中,同时提供dns和dhcp服务)
注意:基于网卡引导的主要目的,是为了在客户机上安装操作系统,dhcp、tftp仅完成了开头部分,dhcp能给客户端分配地址了,也能加载pxe文件,接下来还要去加载一个能够启动操作系统安装过程的安装程序anaconda(是一个应用程序,需要运行在内核空间和另外一个可选的组件ramdisk上边),anaconda启动之前,客户端还需要启动一个kernel和一个ramdisk,加载并展开kernel的是bootloader(boot.cat,isolinux.bin,isolinux.cfg,这三个文件联合起来扮演grub的作用),bootloader会加载光盘上的kernel和ramdisk(以光盘为例),最终启动安装过程,这些文件都需要fileserver来提供
PXE:
其他配置选项:
filename:指明引导文件名称;
next-server:提供引导文件的服务器IP地址;

    filename "pxelinux.0";
    next-server 172.16.100.67;

PXE:preboot execute environment,Intel
    dhcp,tftp,file server(yum repository)

CentOS 6 PXE:
    yum -y install syslinux tftp-server

    cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
    cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
    cp /media/cdrom/isolinux/{boot.msg,vesamenu.c32,splash.jpg} /var/lib/tftpboot/
    mkdir /var/lib/tftpboot/pxelinux.cfg/
    cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

CentOS 7 PXE:
    yum -y install syslinux tftp-server

    cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
    cp /media/cdrom/images/pxelinux/{vmlinuz,initrd.img} /var/lib/tftp/boot/
    cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot/
    mkdir /var/lib/tftpboot/pxelinux.cfg/

    创建/var/lib/tftpboot/pxelinux.cfg/default---给pxelinux.0加载完以后,提供一个配置文件,根据这个配置文件决定后续如何加载其他文件
        内容类似如下:

        default menu.c32---使用menu.c32这个程序来提供一个菜单给客户端,展示一个文本的菜单,vesamenu.c32提供图形化的菜单
            prompt 5---提供一个可编辑的提示服务
            timeout 30---提示服务超时时间
            MENU TITLE CentOS 7 PXE Menu---全局菜单

            LABEL linux
            MENU LABEL Install CentOS 7 x86_64
            KERNEL vmlinuz---使用KERNEL指明使用的内核文件
            APPEND initrd=initrd.img inst.repo=http://172.16.100.67/centos7 ks=http://172.16.100.67/centos7.cfg---向内核传递的参数,ramdisk的相对路径,安装过程中使用的yum仓库路径,自动安装需要的kickstart文件

Cobbler:
pxe的二次封装,能将多种系统糅合在一块,python语言开发的,cobbler的某些配置还需要依赖互联网环境
pxe:
dhcp:dhcpd,dnsmasq
tftp:tftp-server
程序包:cobbler (属于epel仓库)
服务:
centos7:
systemctl start cobblerd.service
#cobbler check
主配置文件:/etc/cobbler/settings
server
next_server
default_password_crypted
概念:
distro,profile,system

视频中演示:
172.16.100.67
lftp http://172.16.0.1/cobbler
cd ks_mirror/
cd CentOS-7-X86_64-1503/
cd images/pxeboot/---可以看到vmlinuz和initrd.img
lcd /var/lib/tftpboot/---lcd切换本地目录
mget vmlinuz initrd.img---把vmlinuz和initrd.img下载到/var/lib/tftpboot目录下
cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk.c32} /var/lib/tftpboot/
cd /var/lib/tftpboot/
mkdir pxelinux.cfg
cd pxelinux.cfg/
vim default----这个配置文件和isolinux.cfg类似(安装光盘上的isolinux目录)
default menu.c32---使用menu.c32这个程序来提供一个菜单给客户端,展示一个文本的菜单,vesamenu.c32提供图形化的菜单
prompt 5---提供一个可编辑的提示服务
timeout 30---提示服务超时时间
MENU TITLE CentOS 7 PXE Menu---全局菜单

LABEL linux---引用时的label
MENU LABEL Install CentOS 7 x86_64---真正显示的label
KERNEL vmlinuz---使用KERNEL指明使用的内核文件
APPEND initrd=initrd.img inst.repo=http://172.16.100.67/centos7 ks=http://172.16.100.67/centos7.cfg---向内核传递的参数,ramdisk的相对路径,安装过程中使用的yum仓库路径,自动安装需要的kickstart文件

视频中是挂载的cd光盘
mkdir /media/cdrom
mount -r /dev/cdrom /media/cdrom---以只读形式挂载
yum install httpd
mkdir /var/www/html/centos7
mount --bind /media/cdrom /var/www/html/centos7---绑定在这个目录上,可以不用复制文件了,绑定关系存在于内存中,重启失效
vim centos7.cfg
install
xconfig --startxonboot
keyboard --vckeymap=cn --xlayouts='cn'
reboot---安装后重启
rootpw --iscrypted $1$HDHf2v4i$LMo.xGHfxQDOf8e043C.g/---安装时的密码
timezone Asia/Shanghai
url --url="http://172.16.100.67/centos7/"
lang zh_CN
user --groups=wheel --name=mageedu --password=$6$1eWrOetY$DfLZgqu --iscrypted --gecos="MageEdu"---添加一个用户
firewall --disabled---关闭防火墙
network --bootproto=dhcp---引导协议
auth --useshadow --passalgo=sha512---认证方式为sha512
text---文本模式安装
firstboot --disable---第一次启动时不给用户提供一个配置
selinux --permissive
ignoredisk --only-use=sda---忽略硬盘,如果有多块硬盘,安装过程中只适配sda这一块硬盘
bootloader --location=mbr --boot-drive=sda---bootloader安装在哪
zerombr---清空mbr
clearpaart --all --initlabel---清空所有分区
part /boot --asprimary --fstype="xfs" --size=512---分区配置
part swap --fstype="swap" --size=2048---分区配置
part /usr --fstype="xfs" --size=20480---分区配置
part / --fstype="xfs" --size=20480---分区配置

%packages---表示要装哪些包br/>@base
@core
lftp
screen
vget
tree

%end

%post---安装完以后还要执行一些脚本,视频中把这些脚本删除了
systemctl set-default multi-user.target
rm -f /etc/yum.repos.d/CentOS-Base.repo
vget -q -O /etc/yum.repos.d/CentOS-Base.repo http://172.16.0.1/repos/CentOS-Base.repo
vget -q -O /etc/yum.repos.d/epel.repo http://172.16.0.1/repos/epel.repo
echo -e 'Mage Education Learning Services\nhttp://www.magedu.com\n' >> /etc/issue
%end
cp centos7.cfg /var/www/html/---复制到这个目录,通过http服务可以访问到

vim /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
prompt 5
timeout 30
MENU TITLE CentOS7 PXE Menu

LABEL linux
MENU LABEL Install CentOS 7 x86_64
KERNEL vmlinuz
APPEND initrd=initrd.img inst.repo=http://172.16.100.67/centos7 ks=http://172.16.100.67/centos7.cfg

systemctl start httpd.service---启动web服务
ss -tnl---80端口
到此处为止,pxe环境就搭建好了,客户端开机启动时,会提示
Trying to load:pxelinux.cfg/default ok
boot:---意思是现在引导哪一个,如果输入linux(就是default中的LABEL),如果不给的话就是默认的MENU LABEL Install CentOS 7 x86_64


centos6.7的演示过程 172.16.100.6
yum install -y dhcp
cd /etc/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 172.16.0.1;

default-lease-time 3600;
max-lease-time 7200;

log-facility local7;

subnet 172.16.0.0 netmask 255.255.0.0 {
range 172.16.200.101 172.16.200.110;
option routers 172.16.100.6;
filename "pxelinux.0";
next-server 172.16.100.6;
}
service dhcpd configtest---测试语法
service dhcpd start
ss -unl---查看67号端口

接下来是安装tftp服务
yum -y install tftp-server tftp
chkconfig tftp on---启动服务或者编辑
vim /etc/xinetd.d/tftp
service tftp
{
socket_type =dgram
protocol =udp
wait =yes
user =root
server =/usr/sbin/in.tftpd
server_args =-s /var/lib/tftpboot
disable =yes---这里改为no
per_source =11
cps =100 2
flags =IPv4
}
可以使用chkconfg --list---可以列出所有的服务
service xinetd restart
chkconfig xinetd on---如果想让tftp开机自动启动还需要xinetd服务开机自动启动
ss -unl---查看69号端口

yum -y install syslinux
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cd /tmp
tftp 172.16.100.6---测试tftp服务,tftp本地测试成功不代表远程连接就能成功,因为有iptables,以后配置服务,先禁用iptables,配置完成后,再去开启相应的端口即可
get pxelinux.0---如果get成功,tftp服务就安装成功了
quit
ls---就能看到pxelinux.0文件了

接下来准备yum仓库
先挂载光盘
mkdir /media/cdrom
mount -r /dev/cdrom /media/cdrom
rpm -q httpd---确保http服务安装好
mkdir /var/www/html/centos6
mount --bind /media/cdrom /var/www/html/centos6/---绑定目录

接下来是kickstart文件
vim centos6.cfg
firewall --disabled
install
url -url="http://172.16.100.6/centos6"
rootpw --iscrypted $1$1RHppr42$VMesh73wBqhUTjKp6OYOD.
auth --useshadow --passalgo=sha512
text
firstboot --disable
keyboard us
lang en_US
selinux --disabled
logging --level=info --host=172.16.100.6
reboot
timezone Asia/Shanghai
bootloader --qppend="rhgb crashkernel=auto quiet" --location=mbr --deiveorder="sda"
zerombr
clearpart --all
part /boot --fstype="ext4" --size=200
part pv.008 --size=61440

volgroup vg0 --pesize=8192 pv.008
logvol / --fstype=ext4 --name=root --vgname=vg0 --size=20480
logvol swap --name=swap --vgname=vg0 --size=2048
logvol /usr --fstype=ext4 --name=usr --vgname=vg0 --size=10240
logvol /var --fstype=ext4 --name=var --vgname=vg0 --size=20480

%end

%packagesbr/>@base
@basic-desktopbr/>@core
%end
cp centos6.cfg /var/www/html/
service httpd start
ss -tnl---查看80端口
cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
cp /media/cdrom/isolinux/{boot.msg,vesamenu.c32,splash.jpg} /var/lib/tftpboot/
mkdir /var/lib/tftpboot/pxelinux.cfg/
cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default---centos6可以直接复制
vim /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32
timeout 600
display boot.msg
menu background splash.jpg
menu title Welcome to CentOS 6.7!---全局菜单项
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

label linux
menu label Install or upgrade an existing system
menu default
kernel vmlinuz
append initrd=initrd.img
label vesa
menu label
Install system with basic video driver
kernel vmlinuz
append initrd=initrd.img nomodeset
label rescue
menu label Rescue installed system
kernel vmlinuz
append initrd=initrd.img rescue
label local
menu label Boot from
local drive
localboot 0xffff
label memtest86
menu label `Memory test
kernel memtest
append ~


安装cobbler---在epel源中
yum info cobbler---查询属于哪个仓库
yum -y install cobbler---安装程序包
rpm -ql cobbler | less---查看安装了哪些文件
systemctl start cobblerd.service---启动服务
systemctl status cobblerd.service---查看服务状态
collber check---检查cobbler环境是不是正常的,web服务绑定目录会有影响
vim /etc/cobbler/settings---安装完以后,编辑配置文件

简单了解一下cobbler
对于cobbler而言,它要同时管理多个系统安装环境,就要引入更多抽象的概念来实现管理
使用同一个yum仓库,不同的kickstart文件就可以部署出不同的系统环境(虽然系统发行版一样,但是系统环境不一样),同时同一个kickstart文件可以部署多个系统(基于IP地址,多个相同的)
cobbler有很多层次:第一个层次:distro(发行版)(仓库)(也可以告诉distro一个kickstart,来生一个默认的profile,不给kickstart也可以生成默认的profile只不过不能完成自动化安装),第二个层次:profile(不同的配置),第三个层次:system

如何创建distro:1、create:创建一个yum仓库2、import:导入安装光盘
视频中使用cobbler check命令出现了9个问题
第一个问题:
vim /etc/cobbler/settings
server: 172.16.100.67---把127.0.0.1改为外网地址,指提供服务的本机地址
修改完以后必须重启
systemctl restart cobblerd.service
cobbler check---会发现只剩下8个问题了
第二个问题:
vim /etc/cobbler/settings
next_server: 172.16.100.67---指向tftp server的地址
或者使用cobbler sync同步一下配置
第三个问题:
关闭selinux
第四个问题:
有一些network boot-loader不存在,运行cobbler-get-loaders会自动下载(这个不重要)
boot-loader要放在/var/lib/cobbler/loaders/下
第五个问题:
/etc/xinetd.d/rsync没有安装(centos7的rsync并不依靠守护进程来运行,这里是按照centos6的方式来检测的)
视频中只要确保rsync服务能启动就可以
systemctl start rsyncd.socket
第六个问题:
没有安装debmirror包---可以忽略
yum install debmirror
第七个问题:
默认为超级用户设定的密码不安全
useradd user1
echo "mageedu" | passwd --stdin user1
tail -1 /etc/shadow---显示最后一行信息,复制这行信息
vim settings
找到default password_crypted:"复制到这里"
systemctl restart cobblerd
cobbler check