参考:
网络上关于pxe+kicksart的文章很多,主要参考了下面这篇文件
一、概述
1、客户通过网卡的PXE功能,从DHCP服务器获取IP。
关于网卡的PXE功能,即网卡中包含PEX Client。
DHCP服务器为PXE Client分配IP地址。
在PXE Client的ROM中,包含TFTP Client,用于通过TFTP协议从TFTP Srver上下载所需要的文件。
2、DHCP服务器在为PXE Client分配IP的同时, "filename "pxelinux.0";" 参数中指定的文件(pxelinux.0)推送给客户端;
3、客户端执行pxelinux.0;
4、pxelinux.0程序读取TFTP服务器上的配置文件(通常是/tftpboot/pxelinux.cfg/default,但是也可以根据客户端的MAC地址单独指定);
二、TFTP
需要安装一下两个包:
tftp-server
tftp
tftp服务由xinetd服务管理.
vi /etc/xinetd.d/tftp
将disable=yes修改为disable=no
重启xinetd。
三 DHCP
vi /etc/dhcpd.conf,指定IP地址等信息。
-
ddns-update-style interim;
-
ignore client-updates;
-
-
-
next-server 172.18.1.1;
-
filename "pxelinux.0";
-
-
host host1 {
-
hardware ethernet 00:1a:a0:2b:38:81;
-
fixed-address 192.168.2.101;
-
}
-
host host2 {
-
hardware ethernet 00:1a:a0:2b:38:82;
-
fixed-address 192.168.2.102;
-
}
centos6.4
-
ddns-update-style interim;
-
ignore client-updates;
-
-
deny unknown-clients;
-
-
subnet 192.168.0.0 netmask 255.255.255.0 {
-
authoritative;
-
#range 192.168.0.22 192.168.0.22;
-
default-lease-time 3600;
-
max-lease-time 3600;
-
option subnet-mask 255.255.255.0;
-
option routers 192.168.0.1;
-
option domain-name-servers 202.106.196.115;
-
-
group{
-
next-server 192.168.0.180;
-
filename "pxelinux.0";
-
host host1 {
-
hardware ethernet 20:68:9D:28:AF:12;
-
fixed-address 192.168.0.56;
-
}
-
}
-
-
-
}
在这里,限制了允许使用dhcp的mac地址,是为了防止已经配置从网卡启动的机器重启后都会安装成linux系统。
另外特别的地方在于增加了tftp-server需要推送给客户端的启动文件:
filename "pxelinux.0";
因为 tftp 的默认目录是 /tftpboot,所以文件的绝对路径就是:
/tftpboot/pxelinux.0"
pxelinux.0文件来源见后面
另外 next-server 参数,告诉客户端在获取到 pxelinux.0 文件之后去哪里获取其余的启动文件:
next-server 192.168.1.1;
注:如果使用的是RHEL5 kvm83的虚拟机,可能会出现无法获取到IP的情况,
Search for server (DHCP)....No IP address
.No IP address
.No IP address
.No IP address
解决的办法:
在物理机的br网卡上添加参数:DELAY=0
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
NM_CONTROLLED=no
IPADDR=
NETMASK=
GATEWAY=
ONBOOT=yes
DELAY=0
RHEL6不存在这样的问题。
Reproducible with RHEL6Server 6.0 (qemu-kvm-0.12.1.2-2.113.el6_0.3.x86_64) :
"brctl setfd bridge_intra 0" is required to PXEboot.
Additional info :
- no DHCP request is retrieved on the DHCP-server, hence no IP-address is
assigned to the DomU ;
- when executing 'dhcp' at the gPXE-prompt within the DomU, a DHCP-request is
retrieved and an IP-address is subsequently assigned to the DomU.
详细信息查看:
四 PXE
安装syslinux
yum -y install syslinux
配置
1、安装好syslinux以后将pxelinux.0这个文件复制到/tftpboot目录:
-
rpm -ql syslinux | grep 'pxelinux.0'
-
/usr/lib/syslinux/pxelinux.0
-
cp /usr/lib/syslinux/pxelinux.0 /tftpboot
对于centos 6.5
yum install syslinux-tftpboot.x86_64
2、用于网络安装的内核文件
将安装光盘中的images/pxeboot/{vmlinuz,initrd.img}文件复制到/tftpboot/目录下
注:也可以拷贝到其他的安装目录,如/tftpboot/centos6,如果不是根目录,则下面的default配置文件也需要做相应的修改。
对于ubuntu
cp /mnt/install/vmlinuz /tftpboot/
cp /mnt/install/netboot/ubuntu-installer/amd64/initrd.gz /tftpboot/
3、客户端配置文件
配置文件存放于: /tftpboot/pxelinux.cfg/
mkdir /tftpboot/pxelinux.cfg/
将光盘中的isolinux/isolinux.cfg文件复制为/tftpboot/pxelinux.cfg/default
-
cp isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default
-
对于ubuntu: cp /mnt/install/netboot/ubuntu-installer/amd64/boot-screens/syslinux.cfg /tftpboot/pxelinux.cfg/default
需要修改几个地方:
default vesamenu.c32
修改为:
default linux
prompt 1
如果重启后,卡在press the key to begin the installation process这里,就是上面的配置文件没有修改。
另外找不到bootloader也可能是这里造成的。
精简的配置文件:
-
#默认启动的是 'label linux' 中标记的内核
-
default linux
-
-
# 显示 'boot: ' 提示符。
-
# 为 '0' 时则不提示,将会直接启动 'default' 参数中指定的内容。
-
prompt 1
-
-
# 在用户输入之前的超时时间,单位为 1/10 秒。
-
timeout 600
-
-
# 显示某个文件的内容,注意文件的路径。默认是在 /tftpboot 目录下。
-
# 也可以指定位类似 'centos6/boot.msg' 这样的,路径+文件名。
-
display boot.msg
-
-
# 'label' 指定你在 'boot:' 提示符下输入的关键字。
-
# 比如:
-
# boot: linux[ENTER]
-
# 这个会启动 'label linux' 下标记的 kernel 和 initrd.img 文件。
-
# 这里还定义了其它几个关键字:
-
# boot: text
-
# boot: ks
-
#
-
# kernel 参数指定要启动的内核。同样要注意路径,默认是 /tftpboot 目录。
-
# append 指定追加给内核的参数,能够在 gurb 里使用的追加给内核的参数,在这里也
-
# 都可以使用。
-
#
-
#ksdevice=eth0,当我们有多块网卡的时候,要实现自动化需要设置从eth0安装,不指定的话,安装的时候系统会让你选择。
-
label linux
-
menu label ^Install or upgrade an existing system
-
menu default
-
kernel vmlinuz
-
#append initrd=initrd.img ks= ksdevice=eth0 ip=172.18.6.199
-
append initrd=initrd.img ks= ksdevice=eth0 ip=dhcp
用于ubuntu
-
default install
-
prompt 0
-
timeout 600
-
-
label install
-
menu default
-
kernel vmlinuz
-
append ks=http://10.21.5.180/ks.cfg preseed/url=http://10.21.5.180/ubuntu12042/preseed/ubuntu-server.seed vga=788 initrd=initrd.gz
提示文件找不到?
打开tftp的日志,查看时哪个文件找不到。
打开日志方法:/etc/xinetd.d/tftp 在下面这一行添加-v参数
server_args = -s /var/lib/tftpboot -v
通过之日看到是找不到pxelinux.0,因为tftp的根路径不对
还有错误tftp erro file not found,都是因为文件找不到造成的。
注意修改
server_args = -s /tftpboot -v 这里指定根目录
关于错误
PXE-T00 Permission deny
PXE-E36 Error received from tftp server
PXE-MOF exiting intel pxe rom
是selinux造成的,可以查看/var/log/audit/audit.log 日志:
type=AVC msg=audit(1373957864.225:17126): avc: denied { read } for pid=5864 comm="in.tftpd" name="pxelinux.0" dev=dm-0 ino=2883586 scontext=unconfined_u:system_r:tftpd_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:default_t:s0 tclass=file
type=SYSCALL msg=audit(1373957864.225:17126): arch=c000003e syscall=2 success=no exit=-13 a0=608e22 a1=0 a2=1b6 a3=4000 items=0 ppid=5833 pid=5864 auid=500 uid=99 gid=99 euid=99 suid=99 fsuid=99 egid=99 sgid=99 fsgid=99 tty=(none) ses=35 comm="in.tftpd" exe="/usr/sbin/in.tftpd" subj=unconfined_u:system_r:tftpd_t:s0-s0:c0.c1023 key=(null)
type=AVC msg=audit(1373957864.227:17127): avc: denied { read } for pid=5865 comm="in.tftpd" name="pxelinux.0" dev=dm-0 ino=2883586 scontext=unconfined_u:system_r:tftpd_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:default_t:s0 tclass=file
type=SYSCALL msg=audit(1373957864.227:17127): arch=c000003e syscall=2 success=no exit=-13 a0=608e22 a1=0 a2=1b6 a3=4000 items=0 ppid=5833 pid=5865 auid=500 uid=99 gid=99 euid=99 suid=99 fsuid=99 egid=99 sgid=99 fsgid=99 tty=(none) ses=35 comm="in.tftpd" exe="/usr/sbin/in.tftpd" subj=unconfined_u:system_r:tftpd_t:s0-s0:c0.c1023 key=(null)
可以通过临时关闭selinux来解决:setenforce 0
或者针对这个denied信息来设置权限,而不关闭selinux
如果不希望所有的系统都使用默认的 /tftpboot/pxelinux.cfg/default 文件,可以以客户端机器的网卡地址命名配置文件。
比如:网卡 MAC 地址是88:99:AA:BB:CC:DD,针对这台主机的配置文件就是:
01-88-99-aa-bb-cc-dd
以01开头,用 -(dash) 分隔,用小写字母表示 MAC 地址。
还可以用16进制数来表示 IP 地址,比如,IP 地址为 192.0.2.91,转换为十六进制数就是:
C000025B
针对IP为192.0.2.91 这个 IP 的主机的配置文件,文件名就是C000025B。
注意:pxelinux 搜索的文件的顺序是:
-
/tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd
-
/tftpboot/pxelinux.cfg/C000025B
-
/tftpboot/pxelinux.cfg/C000025
-
/tftpboot/pxelinux.cfg/C00002
-
/tftpboot/pxelinux.cfg/C0000
-
/tftpboot/pxelinux.cfg/C000
-
/tftpboot/pxelinux.cfg/C00
-
/tftpboot/pxelinux.cfg/C0
-
/tftpboot/pxelinux.cfg/C
-
/tftpboot/pxelinux.cfg/default
五、kickstart配置文件
再gnome环境下,使用system-config-kickstart GUI工具来生成kickstart的配置文件。
用于ubuntu的kickstart文件,因为bug,所以hostname需要在post里修改才可以生效。
-
lang en_US
-
langsupport en_US
-
keyboard us
-
mouse
-
timezone --utc Asia/Shanghai
-
rootpw --disabled
-
user moz --fullname="test" --password 1234567890
-
reboot
-
install
-
url --url http://10.21.5.180/ubuntu12042
-
bootloader --location=mbr
-
zerombr yes
-
clearpart --all --initlabel
#not use lvm
#part /boot --fstype=ext4 --size=200
#part swap --size=8192
#part / --fstype=ext4 --size=51200
#part /data --fstype=ext4 --size=1 --grow
#use lvm
part /boot --fstype=ext4 --size=200
part swap --size=8192
part pv.01 --size=1 --grow
volgroup vg_01 pv.01
logvol / --vgname=vg_01 --size=1 --grow --name=lv_root
-
auth
-
--useshadow
-
--enablemd5
-
network --hostname=autoubuntu --noipv6 --bootproto=dhcp --device=eth0
-
firewall --service=ssh --port=8002:tcp
-
skipx
-
%packages
-
openssh-server
-
openssh-client
-
#mysql-server-5.5
-
#apache2
-
#nginx
-
%post
-
(
-
sed -i 's/kickseed/autoubuntu/g' /etc/hostname
-
sed -i 's/kickseed/autoubuntu/g' /etc/hosts
-
-
wget -O /etc/iptables.rules http://10.21.5.180/kickstart/iptables.rules
-
wget -O /opt/init-system_for_ubuntu1204.sh http://10.21.5.180/kickstart/init-system_for_ubuntu1204.sh
-
chmod u+x /opt/init-system_for_ubuntu1204.sh
-
) 1>/root/post_install.log 2>&1
生成的kickstart文件,新磁盘仍然询问是否初始化标签?
clearpart --all --initlabel
--initlabel,根据不同体系结构把磁盘标签初始化为缺省设置(例如,msdos用于x86而gpt用于Itanium).当
安装到一个崭新的硬盘时,这很有用,安装程序不会询问是否应该初始化磁盘标签
安装后自动重启
ks.cfg任意位置添加reboot
对于RHEL5 kvm83上启动的虚拟机,不要添加reboot,因为需要先改成从磁盘启动,否则自动重启后又从网卡启动,又开始装系统了。
启动级别改为3
%end之前添加:
-
%post
-
(
-
sed -i 's/id:5:initdefault:/id:3:initdefault:/g' /etc/inittab
-
) 1>/root/post_install.log 2>&1
kvm,创建了两个磁盘,一个装系统,一个装数据,为了将usr安装到单独的磁盘
-
part /boot --ondisk=vda --fstype="ext4" --size=300
-
part swap --ondisk=vda --fstype="swap" --size=4096
-
part / --ondisk=vda --asprimary --fstype="ext4" --grow --size=1
-
part /usr --ondisk=vdb --asprimary --fstype="ext4" --grow --size=1
lvm
-
part /boot --ondisk=sda --fstype="ext4" --size=200
-
part swap --ondisk=sda --fstype="swap" --size=8192
-
part pv.01 --grow --size=1
-
volgroup myvg pv.01
-
logvol / --vgname=myvg --size=30720 --fstyp="ext4" --name=lv_root
-
logvol /usr --vgname=myvg --size=1 --grow --fstyp="ext4" --name=lv_usr
六、HTTP
可以使用http,nfs,ftp等提供安装介质,在这里,我使用http
-
mount -o loop -t iso9660 /data/CentOS-6.2-x86_64-bin-DVD1.iso /data/centos6
nginx:
-
location /centos6/ {
-
alias /data/centos6/;
-
}
kickstart:
如果需要第二张光盘中的内容,将第二张光盘中Packages中的rpm包拷贝到第一张光盘中的Packages目录即可。
七、问题
1、如果使用kickstart安装过一次,失败,重启后,boot from hard disk
ctrl + b
autoboot
2、使用convirture管理kvm虚拟机,如何设置从pxe启动?
set boot device to network (PXE).
Select VM --> Edit Settings-> Miscellaneous --> Set boot param to "n"
Select VM --> Edit Settings-> Miscellaneous --> Set nextboot param to "n"