机房经常需要安装系统, 之前搭了个Windows上运行的tftpd32+httpd的网络安装环境, 可以用; 但是需要我的PC经常开着tftpd程序. 于是今天改进了一下, 将网络安装服务器搭在某个常年运行的Linux服务器上...
先介绍一下, 我们使用的网络安装服务器的IP是192.168.1.14, 系统是32位Redhat5. 准备安装的系统是64位Redhat6.4; 安装64位CentOS6.3也是可以的, 测试过了. 服务器需要用到的软件包有dnsmasq, syslinux, httpd. 可以通过yum或者系统盘安装.
以下是操作步骤:
1. 用httpd共享安装盘.
我们的安装盘是/home/rhel-server-6.4-x86_64-dvd.iso, 要挂载到/var/www/html/rhel6.4方便共享.
mkdir /var/www/html/rhel6.4
mount -o loop,mode=0555 /home/rhel-server-6.4-x86_64-dvd.iso /var/www/html/rhel6.4
弄完测试一下:
curl http://192.168.1.14/rhel6.4/GPL
2. 配置DHCP. 打开并按照下面的样例编辑/etc/dnsmasq.conf:
dhcp-range=192.168.1.170,192.168.1.240,255.255.255.0,12h
dhcp-boot=pxelinux.0
enable-tftp
tftp-root=/var/tftpd
tftp-secure
其中dhcp-range需要根据自己的网段修改. 修改完执行service dnsmasq restart使配置生效.
3. 准备启动文件
mkdir /var/tftpd
cd /var/tftpd
cp /var/www/html/rhel6.4/images/pxeboot/initrd.img .
cp /var/www/html/rhel6.4/images/pxeboot/vmlinuz .
cp /usr/lib/syslinux/pxelinux.0 .
mkdir pxelinux.cfg
新建一个文件pxelinux.cfg/default, 内容如下:
prompt 1
default linux
timeout 100
label linux
kernel vmlinuz
append initrd=initrd.img ramdisk_size=9216 noapic acpi=off ide0=noprobe ide1=noprobe
里面添加ide0=noprobe ide1=noprobe是因为经常遇到找不到驱动而无法安装的情况.
最后改下权限:
chown -R nobody /var/tftpd
好了, 可以开始网络安装了.
直接按Enter继续.
选择URL.
直接选OK就行, 由DHCP服务分配IP.
这里填之前通过httpd共享的安装盘的网址. 之后就跟光盘安装一样了.
比如上面刚刚手工安装的机器, 或者192.168.1.14, 一般存放路径是/root/anaconda-ks.cfg.
首先将它复制到192.168.1.14的/var/www/html目录下, 命名为ks.cfg. 然后检查这个文件:
1. 安装源. 需要确保install下面一行是
url --url http://192.168.1.14/rhel6.4
2. 分区指令. 我拿到的ks.cfg, 分区指令全被注释掉了, 需要自己修改. 可以参考下面这段:
zerombr
part /boot --fstype=ext4 --size=500 --ondisk=sda
part swap --size=4096 --ondisk=sda
part / --fstype=ext4 --size=1 --grow --ondisk=sda
意思是在硬盘sda上面初始化MBR, 划出500M boot分区, 4G swap分区, 其它空间为根分区.
3. 在%packages后面可以添加需要自动安装的软件包.
4. 文件改好之后设置权限
chown nobody /var/www/html/ks.cfg
最后在启动文件/var/tftpd/pxelinux.cfg/default添加Kickstart参数
label linux
kernel vmlinuz
append initrd=initrd.img ramdisk_size=9216 noapic acpi=off ide0=noprobe ide1=noprobe ks=http://192.168.1.14/ks.cfg
大功告成, 可以享受全自动网络安装了! 我用虚拟机反复测试, 已经装了并且删过无数个系统了.