Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3046093
  • 博文数量: 535
  • 博客积分: 15788
  • 博客等级: 上将
  • 技术积分: 6507
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-07 09:11
文章分类

全部博文(535)

文章存档

2016年(1)

2015年(1)

2014年(10)

2013年(26)

2012年(43)

2011年(86)

2010年(76)

2009年(136)

2008年(97)

2007年(59)

分类: LINUX

2012-02-08 14:21:05

参考:
网络上关于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地址等信息。
  1. ddns-update-style interim;
  2. ignore client-updates;


  3. next-server 172.18.1.1;
  4. filename "pxelinux.0";

  5. host host1 {
  6. hardware ethernet 00:1a:a0:2b:38:81;
  7. fixed-address 192.168.2.101;
  8. }
  9. host host2 {
  10. hardware ethernet 00:1a:a0:2b:38:82;
  11. fixed-address 192.168.2.102;
  12. }
centos6.4
  1. ddns-update-style interim;
  2.     ignore client-updates;

  3. deny unknown-clients;

  4. subnet 192.168.0.0 netmask 255.255.255.0 {
  5.    authoritative;
  6.    #range 192.168.0.22 192.168.0.22;
  7.    default-lease-time 3600;
  8.    max-lease-time 3600;
  9.    option subnet-mask 255.255.255.0;
  10.    option routers 192.168.0.1;
  11.    option domain-name-servers 202.106.196.115;

  12.    group{
  13.      next-server 192.168.0.180;
  14.     filename "pxelinux.0";
  15.     host host1 {
  16.         hardware ethernet 20:68:9D:28:AF:12;
  17.         fixed-address 192.168.0.56;
  18.     }
  19.    }


  20. }




在这里,限制了允许使用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目录:
  1. rpm -ql syslinux | grep 'pxelinux.0'
  2. /usr/lib/syslinux/pxelinux.0
  3. 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
  1. cp isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default
  2. 对于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也可能是这里造成的。

精简的配置文件:
  1. #默认启动的是 'label linux' 中标记的内核
  2. default linux

  3. # 显示 'boot: ' 提示符。
  4. # 为 '0' 时则不提示,将会直接启动 'default' 参数中指定的内容。
  5. prompt 1

  6. # 在用户输入之前的超时时间,单位为 1/10 秒。
  7. timeout 600

  8. # 显示某个文件的内容,注意文件的路径。默认是在 /tftpboot 目录下。
  9. # 也可以指定位类似 'centos6/boot.msg' 这样的,路径+文件名。
  10. display boot.msg

  11. # 'label' 指定你在 'boot:' 提示符下输入的关键字。
  12. # 比如:
  13. # boot: linux[ENTER]
  14. # 这个会启动 'label linux' 下标记的 kernel 和 initrd.img 文件。
  15. # 这里还定义了其它几个关键字:
  16. # boot: text
  17. # boot: ks
  18. #
  19. # kernel 参数指定要启动的内核。同样要注意路径,默认是 /tftpboot 目录。
  20. # append 指定追加给内核的参数,能够在 gurb 里使用的追加给内核的参数,在这里也
  21. # 都可以使用。
  22. #
  23. #ksdevice=eth0,当我们有多块网卡的时候,要实现自动化需要设置从eth0安装,不指定的话,安装的时候系统会让你选择。
  24. label linux
  25. menu label ^Install or upgrade an existing system
  26. menu default
  27. kernel vmlinuz
  28. #append initrd=initrd.img ks= ksdevice=eth0 ip=172.18.6.199
  29. append initrd=initrd.img ks= ksdevice=eth0 ip=dhcp

用于ubuntu

  1. default install
  2. prompt 0
  3. timeout 600

  4. label install
  5. menu default
  6. kernel vmlinuz
  7. 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 搜索的文件的顺序是:
  1. /tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd
  2. /tftpboot/pxelinux.cfg/C000025B
  3. /tftpboot/pxelinux.cfg/C000025
  4. /tftpboot/pxelinux.cfg/C00002
  5. /tftpboot/pxelinux.cfg/C0000
  6. /tftpboot/pxelinux.cfg/C000
  7. /tftpboot/pxelinux.cfg/C00
  8. /tftpboot/pxelinux.cfg/C0
  9. /tftpboot/pxelinux.cfg/C
  10. /tftpboot/pxelinux.cfg/default


五、kickstart配置文件
再gnome环境下,使用system-config-kickstart GUI工具来生成kickstart的配置文件。

用于ubuntu的kickstart文件,因为bug,所以hostname需要在post里修改才可以生效。

  1. lang en_US
  2. langsupport en_US
  3. keyboard us
  4. mouse
  5. timezone --utc Asia/Shanghai
  6. rootpw --disabled
  7. user moz --fullname="test" --password 1234567890
  8. reboot
  9. install
  10. url --url http://10.21.5.180/ubuntu12042
  11. bootloader --location=mbr
  12. zerombr yes
  13. clearpart --all --initlabel

  14. #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
  15. auth
  16. --useshadow
  17. --enablemd5
  18. network --hostname=autoubuntu --noipv6 --bootproto=dhcp --device=eth0
  19. firewall --service=ssh --port=8002:tcp
  20. skipx
  21. %packages
  22. openssh-server
  23. openssh-client
  24. #mysql-server-5.5
  25. #apache2
  26. #nginx
  27. %post
  28. (
  29.         sed -i 's/kickseed/autoubuntu/g' /etc/hostname
  30.         sed -i 's/kickseed/autoubuntu/g' /etc/hosts

  31.         wget -O /etc/iptables.rules http://10.21.5.180/kickstart/iptables.rules
  32.         wget -O /opt/init-system_for_ubuntu1204.sh http://10.21.5.180/kickstart/init-system_for_ubuntu1204.sh
  33.         chmod u+x /opt/init-system_for_ubuntu1204.sh
  34. ) 1>/root/post_install.log 2>&1



更多kickstart信息,查看

生成的kickstart文件,新磁盘仍然询问是否初始化标签?
clearpart --all --initlabel
--initlabel,根据不同体系结构把磁盘标签初始化为缺省设置(例如,msdos用于x86而gpt用于Itanium).当
安装到一个崭新的硬盘时,这很有用,安装程序不会询问是否应该初始化磁盘标签

安装后自动重启
ks.cfg任意位置添加reboot
对于RHEL5 kvm83上启动的虚拟机,不要添加reboot,因为需要先改成从磁盘启动,否则自动重启后又从网卡启动,又开始装系统了。

启动级别改为3
%end之前添加:
  1. %post
  2. (
  3. sed -i 's/id:5:initdefault:/id:3:initdefault:/g' /etc/inittab
  4. 1>/root/post_install.log 2>&1
kvm,创建了两个磁盘,一个装系统,一个装数据,为了将usr安装到单独的磁盘
  1. part /boot --ondisk=vda --fstype="ext4" --size=300
  2. part swap --ondisk=vda --fstype="swap" --size=4096
  3. part / --ondisk=vda --asprimary --fstype="ext4" --grow --size=1
  4. part /usr --ondisk=vdb --asprimary --fstype="ext4" --grow --size=1
lvm

  1. part /boot --ondisk=sda --fstype="ext4" --size=200
  2. part swap --ondisk=sda --fstype="swap" --size=8192
  3. part pv.01 --grow --size=1
  4. volgroup myvg pv.01
  5. logvol / --vgname=myvg --size=30720 --fstyp="ext4" --name=lv_root
  6. logvol /usr --vgname=myvg --size=1 --grow --fstyp="ext4" --name=lv_usr

六、HTTP
可以使用http,nfs,ftp等提供安装介质,在这里,我使用http
  1. mount -o loop -t iso9660 /data/CentOS-6.2-x86_64-bin-DVD1.iso /data/centos6
nginx:
  1. location /centos6/ {
  2. alias /data/centos6/;
  3. }
kickstart:
  1. url --url=""

如果需要第二张光盘中的内容,将第二张光盘中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"
阅读(4374) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~