实现Kickstart + NFS + DHCP + PXE的全自动远程无人职守安装:
实验环境:C/S结构,服务器采用的操作系统为RHEL 4.0,客户端预装RHEL 4.0。 服务器上的配置如下: 第一步:配置安装树: 在虚拟机中添加新的硬盘,并且实现开机之后的自动挂载。 这个步骤在以前已经总结过,所以在这里我只给出完成之后的结果: 我在虚拟机中添加的为SCSI硬盘,分区格式化之后的文件为/dev/sda1,编辑/etc/fstab文件,将该分区自动挂载于/installing文件夹下,并且在该文件夹下建立目录/var/ftp/pub,那么配置的安装树就在/installing/var/ftp/pub目录下。 挂载第一张光盘: [root@server1 ~]# mount /media/cdrom [root@server1 cdrom]# alias cp=cp 使cp命令在执行的时候直接覆盖已经存在内容而不询问 [root@server1 cdrom]# cp -dpR * /installing/var/ftp/pub/ 拷贝第一张光盘内容到目标 挂载第二张光盘: [root@server1 cdrom]# cp -dpR * /installing/var/ftp/pub/RedHat/RPMS 将所有的安装包集中到一起 按照同样的方法挂载并拷贝第三张和第四张光盘的内容 重启动系统进行检测。 第二步:配置kickstart无人值守安装脚本: 需要安装kickstart工具包: [root@server1 ~]# cd /installing/var/ftp/pub/RedHat/RPMS/ [root@server1 RPMS]# ls *kickstart* system-config-kickstart-2.5.16-2.noarch.rpm [root@server1 RPMS]# rpm -ihv system-config-kickstart-2.5.16-2.noarch.rpm --aid warning: system-config-kickstart-2.5.16-2.noarch.rpm: V3 DSA signature: NOKEY, key ID db42a60e Preparing... ########################################### [100%] 1:system-config-kickstart########################################### [100%] 进入图形界面运行system-config-kickstart命令按照提示进行无人值守脚本配置 *选择的安装方式是通过NFS网络文件系统安装; *选择的分区方法是不管客户机磁盘多大,都分三个必须分区,并指定分区的大小,剩余空间备用; *选择的数据包不能包含图形界面开发工具或者开发工具,否则安装过程中会报错 将生成的ks.cfg文件拷贝到安装树所在路径下/installing/var/ftp/pub 第三步:配置服务器的服务: 1.配置DHCP服务: 从安装树中安装DHCP服务的软件包: [root@server1 ~]# cd /installing/var/ftp/pub/RedHat/RPMS/ [root@server1 RPMS]# ls *dhcp* dhcp-3.0.1-12_EL.i386.rpm dhcpv6-0.10-8.i386.rpm dhcp-devel-3.0.1-12_EL.i386.rpm dhcpv6_client-0.10-8.i386.rpm [root@server1 RPMS]# rpm -ihv dhcp-3.0.1-12_EL.i386.rpm dhcp-devel-3.0.1-12_EL.i386.rpm –aid 配置DHCP服务: [root@server1 ~]# cp /usr/share/doc/dhcp-3.0.1/dhcpd.conf.sample /etc/dhcpd.conf [root@server1 ~]# vi /etc/dhcpd.conf 我的服务器IP地址为192.168.1.170,所以该配置文件的内容如下: 红色的地方为我修改或者需要注意的地方 ddns-update-style interim; ignore client-updates; subnet 192.168.1.0 netmask 255.255.255.0 { # --- default gateway option routers 192.168.1.170; option subnet-mask 255.255.255.0; option nis-domain "RHCE"; option domain-name "example.com"; option domain-name-servers 192.168.1.170; option time-offset -18000; # Eastern Standard Time # option ntp-servers 192.168.1.170; # option netbios-name-servers 192.168.1.170; # --- Selects point-to-point node (default is hybrid). Don't change this unless # -- you understand Netbios very well # option netbios-node-type 2; range dynamic-bootp 192.168.1.128 192.168.1.254; default-lease-time 21600; max-lease-time 43200; filename "/pxelinux.0"; # we want the nameserver to appear at a fixed address host ns { next-server marvin.redhat.com; hardware ethernet 12:34:56:78:AB:CD; fixed-address 207.175.42.254; 保存并且退出,其中NTP服务器、NIS服务器、以及NETBIOS服务器并不是必须,但是一定要注意后面手动添加的一行:filename "/pxelinux.0"; 完成之后启动服务: # service dhcpd restart 在客户端启动之后通过查看文件/var/lib/dhcp/dhcpd.leases可以得知客户端是否正常获得IP地址 2.配置DNS服务: 按照刚才DHCP配置文件中的内容去配置DNS即可,这个步骤不是必须; 3.配置TFTP服务: 这种安装的原理是客户端启动之后通过TFTP服务器获得配置文件信息和安装信息,因此需要开启TFTP服务。 # vi /etc/xi net.d/tftp TFTP服务为非独立服务,更改其中的内容如下: # default: off # description: The tftp server serves files using the trivial file transfer \ # protocol. The tftp protocol is often used to boot diskless \ # workstations, download configuration files to network-aware printers, \ # and to start the installation process for some operating systems. service tftp { disable = no socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /tftpboot per_source = 11 cps = 100 2 flags = IPv4 } 之后重启TFTP服务:/etc/rc.d/init.d/xinetd restart或者干脆chkconfig tftp on即可 4.配置NFS服务: # vi /etc/exports 添加安装树的路径: /installing/var/ftp/pub 192.1681.0/24(ro,async) 保存退出 # service portmap restart # service nfs restart # exportfs –rv # showmount –e # chkconfig nfs on 出现下面内容即可: /installing/var/ftp/pub 192.168.1.0/24 5.配置支持PXE启动: # mkdir /tftp ————>若该文件夹已经存在则不用建立 # cp /usr/lib/syslinux/pxelinux.0 /tftpboot 把Linux第一张安装光盘上/p_w_picpath/pxeboot/initrd.img和vmlinux 以及isolinux/*.msg拷贝到/tftpboot目录下 # cd /tftpboot # mkdir pxelinux.cfg # cd pxelinux.cfg # vi default 配置文件default文件的内容如下: default prompt 1 timeout 30 display boot.msg F1 boot.msg F2 options.msg F3 general.msg F4 param.msg F5 rescue.msg F7 snake.msg label local localboot 0 label linux kernel vmlinuz append initrd=initrd.img devfs=nomount ramdisk_size=9216 label text kernel vmlinuz append initrd=initrd.img text devfs=nomount ramdisk_size=9216 label expert kernel vmlinuz append expert initrd=initrd.img devfs=nomount ramdisk_size=9216 label ks kernel vmlinuz append ks initrd=initrd.img devfs=nomount ramdisk_size=9216 label nofb kernel vmlinuz append initrd=initrd.img devfs=nomount nofb ramdisk_size=9216 label lowres kernel vmlinuz append initrd=initrd.img lowres devfs=nomount ramdisk_size=9216 kernel vmlinuz 如果我们执行的是远程手动安装,这个配置文件就足够了。但是我们执行的是远程无人值守安装,所以还需要对该配置文件进行一定修改,主要在配置文件中添加内容,指定ks.cfg配置文件的位置。 因此经过编辑,最终配置文件的内容如下: default linux prompt 1 timeout 30 display boot.msg F1 boot.msg F2 options.msg F3 general.msg F4 param.msg F5 rescue.msg F7 snake.msg label local localboot 0 label linux kernel vmlinuz append ks=nfs:192.168.1.170:/installing/var/ftp/pub/ks.cfg initrd=initrd.img devfs=nomount ramdisk_size=9216 label text kernel vmlinuz append initrd=initrd.img text devfs=nomount ramdisk_size=9216 label expert kernel vmlinuz append expert initrd=initrd.img devfs=nomount ramdisk_size=9216 label ks kernel vmlinuz append ks initrd=initrd.img devfs=nomount ramdisk_size=9216 label nofb kernel vmlinuz append initrd=initrd.img devfs=nomount nofb ramdisk_size=9216 label lowres kernel vmlinuz append initrd=initrd.img lowres devfs=nomount ramdisk_size=9216 kernel vmlinuz 添加的为红色标注的部分,并且要注意,必须添加在这个位置。而且存储ks.cfg的目录必须是通过NFS共享出来的目录。 完成所有的服务配置之后进行检查。 准备一台客户端,然后更改启动方式为通过带PXE自启动模块的网卡启动,客户端在开启之后会主动向DHCP服务器获取地址,并且从TFTP服务器上获得安装配置以及信息;客户端所做的工作只是开机,剩下的工作由ks.cfg文件控制自动完成。 下面是在上文基础上针对服务器和客户端不同版本时所采用的方法。 老实说,这部分借鉴了天极网上的一篇安装说明,但是主体部分仍然是本人原创! 大多数情况下我们在通过kickstart实现远程无人值守安装的时候所针对的都是同一个版本的服务器,但是有时候如果出现不同版本的服务器比如说:服务器和客户端版本不同,服务器上部署多个不同的安装源并同时安装不同版本客户端等,这个时候在服务器上的配置方法会有不同。 下面通过一个实际的例子来说明以RHEL4U6 ES作为服务器来安装RHEL3U6 WS的方法和过程: 首先前面的步骤以及所需要的软件包和以前是一样的,部署网络,kickstart安装配置文件ks.cfg,DHCP以及TFTP服务器: 配置文件的内容如下: 首先是DHCP的配置文件,红色为修改部分: [root@localhost ~]# cat /etc/dhcpd.conf # ddns-update-style interim; ignore client-updates; subnet 192.168.1.0 netmask 255.255.255.0 { # --- default gateway option routers 192.168.1.120; option subnet-mask 255.255.255.0; # option nis-domain "redhat.com"; # option domain-name "redhat.com"; # option domain-name-servers 192.168.1.120; option time-offset -18000; # Eastern Standard Time # option ntp-servers 192.168.1.120; # option netbios-name-servers 192.168.1.120; # --- Selects point-to-point node (default is hybrid). Don't change this unless # -- you understand Netbios very well # option netbios-node-type 2; range dynamic-bootp 192.168.1.128 192.168.1.130; default-lease-time 21600; max-lease-time 43200; filename "/pxelinux.0"; # we want the nameserver to appear at a fixed address host ns { next-server marvin.redhat.com; hardware ethernet 12:34:56:78:AB:CD; fixed-address 207.175.42.254; } } # DHCP Server Configuration file. # see /usr/share/doc/dhcp*/dhcpd.conf.sample 在DHCP配置文件中指定待安装主机的信息时候也可以这样写: host ns { next-server marvin.redhat.com; hardware ethernet 12:34:56:78:AB:CD; fixed-address 207.175.42.254; } group pxe { filename "pxelinux.0"; host testserver { hardware ethernet 00:0C:29:70:24:5C; fixed-address 192.168.1.130; } 实际上通过这样的写法就可以指定待安装的主机的MAC以及对应IP地址,不过事前要知道该主机MAC地址方可。 该例子中,定义的子网是 192.168.1.0/255.255.255.0。主机定义项testserver指出 IP 地址 192.168.1.30 将分配给以太网卡00:0C:29:70:24:5C(待安装机器)。文件pxelinux.0(在TFTP服务器的根目录中)将作为启动映像被网卡ROM里的PXE客户端载入内存并运行。 每增加一台需安装的机器,则需在dhcpd.conf中增加一条host条目。 完成之后可以启动DHCP服务。 至于tftp服务器配置文件的内容则简单很多: [root@localhost ~]# cat /etc/xinetd.d/tftp service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4 } 启动相关服务: [root@localhost ~]# service dhcpd start [root@localhost ~]# /etc/rc.d/init.d/xinetd restart 现在由于要安装RHEL3U6 WS的客户端,所以需要将RHEL3U6 WS第一张光盘里的一些必须内容拷贝到RHEL4的TFTP服务目录下,内容包括光盘根目录下的: isolinux/vmlinuz isolinux/initrd.img isolinux/*.msg 同时下载RHEL3U6的光盘中的syslinux-2.06-0.3E.i386.rpm包,通过下面命令直接拿到里面的文件: rpm2cpio syslinux-2.06-0.3E.i386.rpm | cpio –vid 解压之后进入/usr/lib/syslinux目录,拿到pxelinux.0文件,将其放到服务器/tftp目录中。 编辑pxelinux.0的配置文件,以使pxelinux可以正确载入Red Hat Linux安装程序。对于每一个要被安装的Red Hat Linux版本,都需要执行一次该操作。 启动镜像pxelinux.0文件在执行过程中,会读取配置文件以确定它应该载入什么Linux内核文件来运行。所有的配置文件都放在启动服务器的 /tftpboot/pxelinux.cfg/目录下。pxelinux.0根据一定的规则来搜索合适的配置文件名。举例来说,对于前面为待安装机器分配的IP地址192.168.138.30(十六进制表示为C0A88A1E),pxelinux.0会按如下次序搜索配置文件: C0A88A1E > C0A88A1 > … > C0 > C > default 就是说,如果C0A88A1E文件存在,它就是pxelinux.0将载入的配置文件。否则,继续往下找。如果C0A88A1文件存在,它就是 pxelinux.0将载入的配置文件。如果前面的以C开头的文件都不存在,那么pxelinux.0将试图从文件default中读取配置。对于一台需要支持很多安装机器的安装服务器来说,将配置写在与IP地址对应的文件里很不灵活。把所有配置都集中在default文件中是个不错的主意,可以减轻配置文件维护负担。 可以将能想到的Red Hat Linux版本的配置都写在default文件里,以便同时支持多种Red Hat Linux版本,如下所示。default文件的内容可以参照光盘中配置文件/isolinux/isolinux.cfg来编写。 那么我需要建立一个default文件: [root@localhost ~]# mkdir /tftpboot/pxelinux.cfg/ [root@localhost ~]# vi /tftpboot/pxelinux.cfg/default 内容为: default linux prompt 1 timeout 30 display boot.msg F1 boot.msg F2 options.msg F3 general.msg F4 param.msg F5 rescue.msg F7 snake.msg label local localboot 0 label linux kernel vmlinuz append ks=nfs:192.168.1.120:/installing/ks.cfg initrd=initrd.img ramdisk_size=9216 label text kernel vmlinuz append initrd=initrd.img text label expert kernel vmlinuz append expert initrd=initrd.img label ks kernel vmlinuz append ks initrd=initrd.img label lowres kernel vmlinuz append initrd=initrd.img lowres 而且对于具体某个RHEL版本,对应default写法可参考安装盘里配置文件 /isolinux/isolinux.cfg,如: DEFAULT rhel4u2-i386 DISPLAY pxelinux.cfg/list PROMPT 1 LABEL rhel3u6-i386 KERNEL vmlinuz-rhel3u6-i386 APPEND initrd=initrd-rhel3u6-i386.img LABEL rhel3u6-x86_64 KERNEL vmlinuz-rhel3u6-x86_64 APPEND initrd=initrd-rhel3u6-x86_64.img devfs=nomount ramdisk_size=9216 LABEL rhel4u2-i386 KERNEL vmlinuz-rhel4u2-i386 APPEND initrd=initrd-rhel4u2-i386.img ramdisk_size=8192 这样用户可以通过输入某种版本的LABEL(例如,rhel4u2-i386)来选择具体的安装版本。为了能在安装时知道有哪些备选,可以让 pxelinux.0提示要户选择之前显示一个列表。这通过在default里指定DISPLAY选项来实现。在上面的样例中,我们将所有备选Red Hat Linux版本列在文件pxelinux.cfg/list中,它的内容会被pxelinux.0显示出来。 如果需要的话这是一个/tftpboot/pxelinux.cfg/list文件的例子,/tftpboot/pxelinux.cfg/list文件内容如下: Choose one of the following Linux distributions for your installation: Name Distribution Arch. Installation media ------------------------------------------------------------------------- rhel3u6-i386 RHEL 3 AS U6 i386 192.168.138.1:/instsvr/i386/rhel3u6 rhel3u6-x86_64 RHEL 3 AS U6 x86_64 192.168.138.1:/instsvr/x86_64/rhel3u6 rhel4u2-i386 RHEL 4 AS U2 i386 192.168.138.1:/instsvr/i386/rhel4u2 现在在服务器上建立一个通过NFS共享的目录,并且将所有的WS的光盘镜像以及ks.cfg文件拷贝到其中,由于只是一个例子,所以我拷的只是第一个光盘镜像: [root@localhost ~]# exportfs -rv exporting *:/installing [root@localhost ~]# cat /etc/exports /installing *(ro,async) [root@localhost ~]# ls /installing/ ks.cfg rhel-3-u6-i386-ws-disc1.iso 到此为止服务器配置基本完成,最后需要根据安装时候的情况定制一下ks.cfg文件,例如在RHEL4上用system-config-kickstart命令可以产生ks.cfg,但是该ks.cfg要在RHEL3上用的话要修改一些选项。比如说至少要取消一些SELinux方面的选项。而且好像@server.cfg这个包组在RHEL3上也无法识别。 这是我的ks.cfg文件内容: [root@localhost ~]# cat /installing/ks.cfg #Generated by Kickstart Configurator #platform=x86, AMD64, or Intel EM64T #System language lang en_US #Language modules to install langsupport zh_CN --default=en_US #System keyboard keyboard us #System mouse mouse #Sytem timezone timezone Asia/Shanghai #Root password rootpw --iscrypted $1$1R.qvJFY$YuZPu0TngEjyRTmjrvdB60 #Reboot after installation reboot #Install OS instead of upgrade install #Use NFS installation Media nfs --server=192.168.1.120 --dir=/installing #System bootloader configuration bootloader --location=mbr #Clear the Master Boot Record zerombr yes #Partition clearing information clearpart --all --initlabel #Disk partitioning information part /boot --fstype ext3 --size 100 part swap --size 512 part / --fstype ext3 --size 1 --grow #System authorization infomation auth --useshadow --enablemd5 #Network information network --bootproto=dhcp --device=eth0 #Firewall configuration firewall --disabled #SELinux configuration #selinux --disabled #Do not configure XWindows skipx #Package install information %packages --resolvedeps @ base-x @ gnome-desktop @ editors @ graphical-internet @ text-internet @ sound-and-video @ graphics #@ server-cfg @ web-server @ mail-server @ smb-server @ dns-server @ ftp-server @ sql-server @ mysql @ news-server @ network-server @ legacy-network-server @ development-tools @ x-software-development @ legacy-software-development @ admin-tools @ system-tools @ printing @ compat-arch-support 另外有一些用户正使用过程中出现这样的问题: 第一,他希望在部署RHEL5的时候在ks.cfg文件中对安装号予以指定; 第二,他希望在部署RHEL各种版本的时候在某一个包组中能够取消和增加某些包 下面我提供一个相对完整的ks.cfg文件用于解决这个问题: # Kickstart file automatically generated by anaconda. install cdrom text key --skip lang en_US.UTF-8 keyboard us network --bootproto=static --ip=10.66.0.101 --netmask=255.255.254.0 --gateway=10.66.1.254 --nameserver=10.66.63.10 rootpw --iscrypted $1$bjcQdYD5$.tXMsXOkWJlIDRPSyUGGa1 firewall --disabled authconfig --enableshadow --enablemd5 selinux --disabled timezone Asia/Shanghai bootloader --location=mbr --driveorder=hda # The following is the partition information you requested # Note that any partitions you deleted are not expressed # here so unless you clear all partitions first, this is # not guaranteed to work clearpart --all part /boot --fstype ext3 --size=100 part swap --size=512 part /bill --fstype ext3 --size=2048 part / --fstype ext3 --size=0 --grow %packages @mysql @base vsftpd gcc gdb tomcat5 -Deployment_Guide-en-US -nss-tools -nss_db -acpid %post /sbin/service mysqld start /usr/sbin/groupadd -g 600 zxuser /usr/sbin/useradd -u 600 -g zxuser -d /home/zxuser zxuser /bin/echo zxsys | /usr/bin/passwd --stdin zxuser /sbin/chkconfig vsftpd on /sbin/chkconfig mysqld on /bin/echo "kernel.msgmni = 512 " >> /etc/sysctl.conf /bin/mkdir -p /zte /bin/mkdir -p /zte/ippbxversion /bin/mkdir -p /zte/ippbxweb /usr/bin/mysqladmin -u root password '@zxippbx/' /usr/sbin/chroot /bin/mount /dev/hdc /mnt /bin/rpm -ivh /mnt/Server/jdk-1_5_0_14-linux-i586.rpm /bin/umount /mnt echo 'export JAVA_HOME=/usr/java/jdk1.5.0_14' >> /etc/profile echo 'export JRE_HOME=/usr/java/jdk1.5.0_14/jre' >> /etc/profile echo 'export CLASSPATH=$JAVA_HOME/libJRE_HOME/libCLASSPATH' >> /etc/profile echo 'export PATH=$JAVA_HOME/binJRE_HOME/binPATH' >> /etc/profile 从上面标注蓝色的地方可以看到: 第一个问题,安装号可以通过key --skip或者key wwwwxxxxyyyyzzzz这种格式来定制; 第二个问题,对于在某些包组中默认没有选但是要添加的包,直接指定包名称即可,不过名称最好是xml标准的名称,这个信息可以在光盘的base/comps.xml文件中找到,不过大多数情况下可以直接是在光盘目录中的包名称;而对于要在包组中默认选上但要求删除的包,可以在包的前面加上-予以指定。 很不错得文章, 补充两点: 1:可以再ks配置里增加pre脚本,这样可以根据按照得系统类型来选择要定制的包 2:pxelinux.cfg下得配置文件不一定要用default得, tftp首先回去找与IP对应得名字得配置文件, 然后再去找与mac地址对应得配置文件, 两个都找不到才会去找default这个文件 举个例子,client得mac为001a0000;从dhcp拿得地址为10.10.10.10 那首先会去找0A0A0A0A(0A为10得十六进制值)这个文件,然后再去找001a0000这个文件, 没这两个文件才去找default这个文件, 这样做有个好处就是: 可以再dhcp里面指定不同得地址,每个地址对应不同得pexlinux配置文件。
实现Kickstart + NFS + DHCP + PXE的全自动远程无人职守安装
转载
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
无人不识又无人不迷糊的this
this的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式。
作用域 显式 调用栈 JavaScript this -
Kickstart+NFS+DHCP+PXE+TFTP全自动化安装linux
Kickstart+NFS+DHCP+PXE+TFTP全自动化安装linux
linux DHCP kickstart 自动化安装 -
PXE+KickStart+DHCP+NFS无人值守linux安装
原理有必要说明一下 (百度偷来的) 原理和概念:1.1 什么是PXE严格来说,PXE 并不是一种安装方式,而是一种引导的方式。进行 PXE 安装的必要条件是要安装的计算机中包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 PXE Client。PXE (Pre-boot Execution Envi
linux系统 KICKSTART 无人值守 无人值守linux安装 PXE+KICKSTART -
PXE+NFS+DHCP+TFTP+KICKSTART自动安装
1需要的软件tftp-server NFS DHCP 三个文件均可yum -y install xxx*安装即可
linux 系统安装 dhcp 休闲 pxe -
kickstart无人值守pxe自动安装
kickstart无人值守pxe自动安装
kickstart 无人值守pxe自动安装