1. PXE安装原理和流程介绍
在安装RedHat Linux的过程中,允许通过NFS、HTTP或FTP协议来进行网络安装。但是在一般情况下我们需要有一个安装引导介质(引导光盘、引导软盘、U盘等),有没有一种方法不通过引导光盘方式来安装呢,而直接通过网络来进行安装?答案是有,即通过kickstart + pxe技术来实现。
1.1 什么是Kickstart
KickStart是一种无人职守安装方式。KickStart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为ks.cfg的文件;在其后的安装过程中(不只局限于生成KickStart安装文件的机器)当出现要求填写参数的情况时,安装程序会首先去查找KickStart生成的文件,当找到合适的参数时,就采用找到的参数,当没有找到合适的参数时,才需要安装者手工干预。这样,如果KickStart文件涵盖了安装过程中出现的所有需要填写的参数时,安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中设置的重启选项来重启系统,并结束安装。
1
1.1
1.2 什么是PXE
严格来说,PXE 并不是一种安装方式,而是一种引导的方式。进行 PXE 安装的必要条件是要安装的计算机中包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 PXE Client。PXE (Pre-boot Execution Environment)协议使计算机可以通过网络启动。协议分为 client 和 server 端,PXE client 在网卡的 ROM 中,当计算机引导时,BIOS 把 PXE client 调入内存执行,由 PXE client 将放置在远端的文件通过网络下载到本地运行。运行 PXE 协议需要设置 DHCP 服务器和 TFTP 服务器。DHCP 服务器用来给 PXE client(将要安装系统的主机)分配一个 IP 地址,由于是给 PXE client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 设置。此外,在 PXE client 的 ROM 中,已经存在了 TFTP Client。PXE Client 通过 TFTP 协议到 TFTP Server 上下载所需的文件。
1.3 kickstart+pxe网络安装OS流程
第一步:PXE Client向DHCP发送请求
首先,将支持PXE的网络接口卡(NIC)的客户端的BIOS设置成为网络启动,通过PXE BootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,向网络中的DHCP服务器索取IP地址等信息。
第二步:DHCP服务器提供信息
DHCP服务器收到客户端的请求,验证是否来至合法的PXE Client的请求,验证通过它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置。
第三步:PXE客户端请求下载启动文件
客户端收到服务器的“回应”后,会回应一个帧,以请求传送启动所需文件。这些启动文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。
第四步:Boot Server响应客户端请求并传送文件
当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答, 用以决定启动参数。BootROM 由 TFTP 通讯协议从Boot Server下载启动安装程序所必须的文件(pxelinux.0、pxelinux.cfg/default)。default文件下载完成后,会根据该文件中定义的引导顺序,启动Linux安装程序的引导内核。
第五步:请求下载自动应答文件
客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS, FTP, HTTP),则会在这个时候初始化网络,并定位安装源位置。或许你会说,刚才PXE不是已经获取过IP地址了吗?为什么现在还需要一次?这是由于PXE获取的是安装用的内核以及安装程序等,而安装程序要获取的是安装系统所需的二进制包以及配置文件。由于它们需要的内容不同造成PXE模块和安装程序是相对独立的,PXE的网络配置并不能传递给安装程序。从而进行两次获取IP地址过程。
接着会读取该文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。
第六步:客户端安装操作系统
将ks.cfg文件下载回来后,通过该文件找到OS Server,并按照该文件的配置请求下载安装过程需要的软件包。
OS Server和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。这个时候注意,在重新引导的过程中一定要将BIOS修改回从硬盘启动,不然的话又会重复的自动安装操作系统。
在上面介绍中PXE client是需要安装Linux的计算机,TFTP Server、DHCP Server和NFS Server运行在另外一台Linux Server上。Bootstrap文件、配置文件、Linux内核都放置在Linux Server上TFTP服务器的根目录下。而Linux根文件系统存放于NFS Server的共享目录中。
PXE client在工作过程中,需要三个二进制文件:bootstrap、Linux 内核和Linux根文件系统。Bootstrap文件是可执行程序,它向用户提供简单的控制界面,并根据用户的选择,下载合适的Linux内核以及Linux根文件系统。
1.4 kickstart优势
l 标准化自动化的安装
l 快速大量的裸机部署
l 强制建立的一致性(软件包,分区,配置,监控,安全性)
l 减少人为的部署失误
2. 安装要求l 网络安装服务器:需关闭iptables 和Selinux
l 网络安装服务器:需安装Dhcp TFTPNFS VSFTPD服务
l 客户机:网卡需要有pxe功能,现在pc server都会有这个功能
3. 配置过程 配置PXE安装,要进行如下步骤:
l 配置DHCP,用于给客户端提供IP地址及其它信息
l 配置TFTP服务器,用于提供客户端PXE引导所必须的文件
l 配置NFS服务器,用于存放安装树
l 配置VSFTPD服务器,用于存放kickstart文件(使用NFS的话此步可跳过)
l 配置Kickstart,用于自动应答安装
l 使用PXE功能引导客户机
2
3
3.1 DHCP和TFTP的安装与配置
在PXE引导安装过程中,PXE客户端通过DHCP获取PXE服务器地址,PXE引导文件名称;然后客户机在使用TFTP协议从TFTP服务器下载引导文件并执行,从而启动计算机安装程序。引导文件执行后,接着下载安装程序启动安装。
安装DHCP软件包
[root@ PXE-TEST Packages]# rpm -ivh dhcp-4.1.1-38.P1.el6.x86_64.rpm
Preparing... ########################################### [100%]
1:dhcp ########################################### [100%]
配置DHCP
接下来我们需要配置相关信息。为了满足我们的安装需求,假设PXE服务器、DHCP服务器、TFTP服务器全部安装在一台为192.168.6.1的计算机上。我们需要进行如下操作:
(1)修改/etc/dhcpd/dhcpd.conf'文件,指定 IP 地址等信息。
(2)在 '''/etc/dhcpd/dhcpd.conf''' 中增加 tftp-server 需要推送给客户端的启动文件(bootstrap):filename "pxelinux.0";因为 tftp 的默认目录是 /tftpboot,所以文件的绝对路径就是: /tftpboot/pxelinux.0";当然也可以指定为其它的路径。
(3)range dynamic-bootp指定客户端自动获取ip的范围
(4)另外需要指定 next-server 参数,告诉客户端在获取到 pxelinux.0 文件之后去哪里获取其余的启动文件: next-server 192.168.6.1;
最终的配置文件结果如下所示:
ddns-update-style interim;
#dhcpd服务的全局设置,缺少此项服务无法启动。
ignore client-updates;
# ignore client-updates为忽略客户端更新
subnet 192.168.6.0 netmask 255.255.255.0 {
range dynamic-bootp 192.168.6.180 192.168.6.195;
default-lease-time 21600;
max-lease-time 43200;
filename "pxelinux.0";
next-server 192.168.6.1;
}
#subnet声明一个dhcp地址范围,ip为网络地址,子网掩码必须写成255.255.255.0
#range dynamic-bootp 设置客户机获取IP地址的范围
#default-lease-time为客户机获取网络参数的默认租约时间
#max-lease-time 为客户机获取网络参数之后的最大租约时
#filename需要推送给客户端的启动文件pxelinux.0
#next-server 参数,告诉客户端在获取到 pxelinux.0 文件之后去哪里获取其余的启动文件
配置完成后,重启DHCP服务,并将它设为开机自启动。
[root@ PXE-TEST Packages]# /etc/init.d/dhcpd start
启动 dhcpd: [确定]
[root@ PXE-TEST Packages]# chkconfig --level 35 dhcpd on
3.2 安装配置TFTP服务器
在PXE安装过程中,客户机在使用TFTP协议从TFTP服务器下载引导文件并执行。我们主要通过配置TFTP服务器和PXE的引导配置完成这个过程。
(1)安装配置TFTP服务器
首先,安装TFTP服务器软件包:
[root@ PXE-TEST Packages]# rpm -ivh tftp-server-0.49-7.el6.x86_64.rpm
Preparing... ########################################### [100%]
1:tftp-server ########################################### [100%]
(2)配置tftp服务
tftp 服务由xinetd服务管理。编辑 '''/etc/xinetd.d/tftp''' 文件,将 '''disable = yes''' 改为:disable = no,server_args改为相应的目录。
[root@ PXE-TEST Packages]# vi /etc/xinetd.d/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
{
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
}
从这里看出,默认选择/tftpboot为TFTP服务器的根目录位置,配置完成后重启xinetd服务,使TFTP服务器生效。
[root@ PXE-TEST Packages]# /etc/init.d/xinetd restart
可以通过下面命名查看tftp端口是否打开:
[root()@PXE-TEST ftp]# lsof -i:69
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
xinetd 3139 root 5u IPv4 30170 0t0 UDP *:tftp
3.3 PXE引导配置(bootstrap)
PXE启动映像文件由syslinux软件包提供,RedHat Enterprise Linux光盘中已提供。
syslinux是一个功能强大的引导加载程序,而且兼容各种介质。更加确切地说:SYSLINUX是一个小型的Linux操作系统,它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。我们只要安装了syslinux,就会生成一个pxelinux.0,将 pxelinux.0 这个文件复制到 '''/tftpboot''' 目录即可:
[root@ PXE-TEST Packages]# rpm -ql syslinux |grep "pxelinux.0"
/usr/lib/syslinux/pxelinux.0
[root@ PXE-TEST Packages]# cp /usr/lib/syslinux/pxelinux.0 /tftpboot/
如果没有安装syslinux,挂载光盘镜像也可以从isolinux目录中找到该文件。
3.4 用于网络启动的内核文件
将 RedHat 安装光盘目录中的 '''images/pxeboot/{vmlinuz,initrd.img}''' 启动文件复制到某个安装目录/tftpboot。如果使用图形界面引导安装(目前使用此种办法),还需要将splash.jpg和vesamenu.c32也一起复制到/tftpboot/。
由于多个客户端可以从一个PXE服务器引导,PXE引导映像使用了一个复杂的配置文件搜索方式来查找针对客户机的配置文件。如果客户机的网卡的MAC地址为'''88:99:AA:BB:CC:DD''',对应的IP地址为192.168.1.195,那么客户机首先尝试以MAC地址为文件名匹配的配置文件,如果不存在就以IP地址来查找。根据上述环境针对这台主机要查找的以一个配置文件就是 /tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd。如果该文件不存在,就会根据IP地址来查找配置文件了,这个算法更复杂些,PXE映像查找会根据IP地址16进制命名的客户机配置文件。例如:192.168.1.195对应的16进制的形式为C0A801C3。(可以通过syslinux软件包提供的gethostip命令将10进制的IP转换为16进制)
如果C0A801C3文件不存在,就尝试查找C0A801C文件,如果C0A801C也不存在,那么就尝试C0A801文件,依次类推,直到查找C文件,如果C也不存在的话,那么最后尝试default文件。
总体来说,pxelinux 搜索的文件的顺序是:
/tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd
/tftpboot/pxelinux.cfg/ C0A801C3
/tftpboot/pxelinux.cfg/ C0A801C
/tftpboot/pxelinux.cfg/ C0A801
/tftpboot/pxelinux.cfg/ C0A80
/tftpboot/pxelinux.cfg/ C0A8
/tftpboot/pxelinux.cfg/ C0A
/tftpboot/pxelinux.cfg/ C0
/tftpboot/pxelinux.cfg/C
/tftpboot/pxelinux.cfg/default
对于一台需要支持很多安装机器的安装服务器来说,将配置写在与IP地址对应的文件里很不灵活。把所有配置都集中在default文件中是个不错的主意,可以减轻配置文件维护负担。接下来创建/tftpboot/pxelinux.cfg/ 目录,该目录用于存放客户端的配置文件。
[root@ PXE-TEST Packages]# mkdir /tftpboot/pxelinux.cfg
将光盘中的isolinux/isolinux.cfg文件复制为/tftpboot/pxelinux.cfg/default
[root@ PXE-TEST Packages]# cp /media/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default
查看default文件内容:
以下内容根据原文件略加修改并做了注释(注:该文件中的空行和以 '''#''' 开头的行都将被忽略)
#设置所要加载的菜单模块default vesamenu.c32
default vesamenu.c32
# 显示 'boot: ' 提示符。为 '0' 时则不提示,将会直接启动 'default' 参数中指定的内容。
prompt 1
# 在用户输入之前的超时时间,单位为 1/10 秒。
timeout 60
#显示某个文件的内容,注意文件的路径。默认是在 /tftpboot 目录下。也可以指定路径+文件名。
display boot.msg
#menu可以设置背景、标题、欢迎画面等
# 'label' 指定你在 'boot:' 提示符下输入的关键字。
# 比如:
# boot: linux[ENTER]
# 这个会启动 'label linux' 下标记的 kernel 和 initrd.img 文件。
# 这里还定义了其它几个关键字:
# boot: text
# boot: ks
# kernel 参数指定要启动的内核。同样要注意路径,默认是 /tftpboot 目录。
# append 指定追加给内核的参数,能够在 gurb 里使用的追加给内核的参数,在这里也都可以使用。
# 使用 kickstart 安装:可以在 ks 参数后直接指定 kickstart 文件的位置。
下面是具体的配置范例,指定了多个label可供选择,如果有多个版本或者多个定制化的ks脚本,可以按需配置。
default vesamenu.c32
#prompt 1
timeout 6000
display boot.msg
menu background splash.jpg
menu title Welcome to redhat6.5 !
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
menu color scrollbar 0 #ffffffff #00000000
label redhat6.5 for Oracle
menu label ^Redhat6.5 for Oracle
menu default
kernel vmlinuz
append initrd=initrd.img ksdevice=em1 ks=ftp://192.168.6.1/redhat6_5.cfg
#此处ksdevice指定从哪个网卡获取配置文件进行安装,由于服务器一般是两个以上的网卡,#不配置此项会在安装时让你指定网卡,不够自动化。
#ks文件此处我使用FTP方式获取,也可以使用nfs
label VMWARE redhat6.5 for Oracle
menu label ^VMWARE Redhat6.5 for Oracle
menu default
kernel vmlinuz
append initrd=initrd.img ksdevice=eth0 ks=ftp://192.168.6.1/redhat6_5_VM.cfg
label vesa
menu label Install system with ^basic video driver
kernel vmlinuz
append initrd=initrd.img xdriver=vesa 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 –
3.5 安装配置NFS服务器
安装介质存储在服务器上的一个目录中,可以使用各种网络协议访问它,比如 HTTP,FTP,和NFS。也就是我们前面提到的OS Server。这里使用 NFS 服务来提供安装介质,只需要将系统光盘内容拷贝放到共享目录下即可。
创建共享目录,并将光盘内容拷贝到共享目录中:
[root@ PXE-TEST Packages]#mkdir /home/redhat6.5
[root@ PXE-TEST Packages]#cp–a /media/* /home/redhat6.5
安装NFS并将共享目录发布出去
[root@ PXE-TEST Packages]# vi /etc/exports
/home/redhat6.5 *(ro,sync)
重启服务使配置生效。
[root@ PXE-TEST Packages]# service portmap restart
停止 portmap: [确定]
启动 portmap: [确定]
[root@ PXE-TEST Packages]# service nfs start
启动 NFS 服务: [确定]
关掉 NFS 配额: [确定]
启动 NFS 守护进程: [确定]
启动 NFS mountd: [确定]
检查是否被正确共享:
[root@ PXE-TEST Packages]# shoumount –e locahost
Export list for localhost:
/home/redhat6.5 *
[root@ PXE-TEST Packages]# chkconfig --level 35 nfs on
3.6 配置VSFTPD
(1) 安装VSFTPD软件包
[root@ PXE-TEST Packages]# rpm -ivh vsftpd-2.2.2-11.el6_4.1.x86_64.rpm
Preparing... ########################################### [100%]
1:vsftpd ########################################### [100%]
(2) 配置VSFTPD服务
需要将/etc/vsftpd/user_list和/etc/vsftpd/ftpusers文件中的root的注释掉,即允许root使用ftp服务:
cat >> /etc/vsftpd/user_list << END
#root
bin
daemon
adm
lp
sync
shutdown
halt
news
uucp
operator
games
nobody
END
cat >> /etc/vsftpd/ftpusers << END
#root
bin
daemon
adm
lp
sync
shutdown
halt
news
uucp
operator
games
nobody
END
重启服务使配置生效。
service vsftpd restart
3.7 配置Kickstart安装
通常,我们在安装操作系统的过程需要大量的人机交互过程,减少交互过程,为了提高安装效率Red Hat Linux 开始支持一个称为 kickstart 的功能。使用这种方法,只需事先定义好一个Kickstart自动应答配置文件(通常存放在安装服务器上),并让安装程序知道该配置文件的位置,在安装过程中安装程序就可以自己从该文件中读取安装配置,这样就避免了繁琐的人机交互,实现无人值守的自动化安装。
创建kickstart配置文件有两种方式:
(一) 文本编辑器编辑生成
(二) 用图形化界面配置:system-config-kickstat(需要安装相应的rpm包)
无论使用哪种方法无非就是创建一个应答文件,当你安装好一台Red Hat Linux机器,Red Hat Linux 安装程序都会创建一个 kickstart 配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安装,可以基于该系统的kickstart配置文件来生成你自己的kickstart配置文件。该文件位于/root/anaconda-ks.cfg。
这里我直接使用该文件,拷贝本文件到/mnt/install下。
[root@ PXE-TEST Packages]# cp /root/anaconda-ks.cfg /var/ftp/redhat6_5.cfg
下面以配置文件为例,
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
nfs --server=192.168.6.1 --dir=/home/redhat6.5
#配置安装方式,这里是使用nfs,目录是之前在nfs配置的共享
lang en_US.UTF-8
keyboard us
#选择安装时的语言和键盘语言
network --onboot yes --device em1 --mtu=1500 --bootproto dhcp
network --onboot no --device em2 --noipv4 --noipv6
#network --onboot no --device eth2 --noipv4 --noipv6
#network --onboot no --device eth3 --noipv4 --noipv6
#设置网卡的参数,目前只将前两个网口设置为开机启动
rootpw --iscrypted $6$8jLMp4aLQTmSrt9.$CWm0edJcHknIboEz2mjNJr6397zsZ4CCzqDJVH3JIwQJvjHsPNo8cvFEr76X6ah2Zx1xT1l01D1470rQ58gp7.
#设置root密码,这个是加密过的,明文为111111
# Reboot after installation
reboot
#安装完自动重启
firewall –disabled
#关闭防火墙
authconfig --useshadow --passalgo=sha512
#设置密码认证的加密方式
selinux –disabled
#关闭selinux
timezone Asia/Shanghai
#选择时区
bootloader --location=mbr --driveorder=sda --append=" rhgb crashkernel=auto quiet"
#选择bootloader程序的存放位置
zerombr yes
#清除mbr
# 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 –initlabel
#清除所有分区
part /boot --fstype=ext4 --size=103
part / --fstype=ext4 --size=30000
part /u01 --fstype=ext4 --size=30000
part swap --size=20000
part /home --fstype=ext4 --size=10000
part /u02 --fstype=ext4 --grow --size=1
#分区方式写死,boot 103M,根分区30G,u01 30G,swap 16G,home 10G,u02使用剩#余#空间
repo --name="Red Hat Enterprise Linux" --baseurl=nfs:192.168.6.1:/home/redhat6.5 --cost=100
#设置软件包安装源
%packages
@additional-devel
@base
@client-mgmt-tools
@compat-libraries
@console-internet
@core
@debugging
@basic-desktop
@desktop-platform-devel
@development
@hardware-monitoring
@large-systems
@legacy-x
@network-file-system-client
@network-tools
@performance
@perl-runtime
@server-policy
@system-admin-tools
@x11
httpd-devel
pcre-devel
libcap-devel
libXinerama-devel
openmotif-devel
net-snmp-devel
libgudev1-devel
kdelibs-apidocs
xz-devel
libtopology-devel
freeglut-devel
kdegraphics-devel
libibverbs-devel
libuuid-devel
kdepimlibs-devel
libblkid-devel
papi-devel
libXmu-devel
unique-devel
xorg-x11-proto-devel
gmp-devel
kdepim-devel
sane-backends-devel
perl-Test-Pod
kdemultimedia-devel
startup-notification-devel
libudev-devel
cups-devel
gstreamer-plugins-base-devel
unixODBC-devel
tcl-devel
numactl-devel
libgnomeui-devel
libbonobo-devel
perl-Test-Pod-Coverage
libtiff-devel
junit
SDL-devel
libXau-devel
tcp_wrappers-devel
PyQt4-devel
kdenetwork-devel
kdelibs-devel
libgcrypt-devel
popt-devel
gnome-python2-desktop
hunspell-devel
iptables-devel
libdrm-devel
libXrandr-devel
snappy-devel
libxslt-devel
kdebase-devel
tk-devel
libnl-devel
libXpm-devel
mpfr-devel
expat-devel
e2fsprogs-devel
kdebase-workspace-devel
libglade2-devel
libaio-devel
libusb-devel
gnutls-devel
kdesdk-devel
fuse-devel
libXaw-devel
libhugetlbfs-devel
mtools
pax
python-dmidecode
sgpio
device-mapper-persistent-data
systemtap-client
tigervnc-server
desktop-file-utils
systemtap-sdt-devel
dejagnu
ElectricFence
ant
libstdc++-docs
gcc-gnat
expect
mod_dav_svn
perltidy
cmake
imake
babel
ksc
kdewebdev
rpmdevtools
compat-gcc-34
systemtap-server
cvs-inetd
gcc-java
compat-gcc-34-g77
jpackage-utils
bzr
mercurial
chrpath
gcc-objc
rpmlint
gcc-objc++
compat-gcc-34-c++
python-docs
nasm
xorg-x11-twm
openmotif
xorg-x11-fonts-ISO8859-1-75dpi
xterm
xorg-x11-fonts-cyrillic
xorg-x11-xdm
xorg-x11-fonts-ISO8859-9-100dpi
xorg-x11-fonts-ISO8859-14-100dpi
xorg-x11-fonts-75dpi
xorg-x11-fonts-ISO8859-9-75dpi
libXmu
xorg-x11-fonts-ISO8859-15-75dpi
libXp
openmotif22
xorg-x11-fonts-ISO8859-14-75dpi
xorg-x11-fonts-ISO8859-2-75dpi
xorg-x11-fonts-ethiopic
xorg-x11-fonts-ISO8859-2-100dpi
iptraf
papi
perl-DBD-SQLite
screen
expect
lsscsi
-mcelog
%end
#从%post到%end之间的部分是定制的软件包
%post --interpreter=/bin/bash
#开始安装后脚本,使用bash shell
#1.configure network bonding
#首先设置网卡bonding
/bin/cat > /etc/sysconfig/network-scripts/ifcfg-bond0 < DEVICE=bond0 IPADDR=`ifconfig em1 | sed -e 's/^.*addr:\([^ ]*\).*/\1/p' -e d` NETMASK=`ifconfig em1|sed -e 's/^.*Mask:\([^ ]*\)$/\1/p' -e d` GATEWAY=`netstat -rn|grep em1|awk '{print $2}' | grep -v 0.0.0.0` ONBOOT=yes BOOTPROTO=none USERCTL=no EOF #Modify the /etc/sysconfig/networ-scripts/ifcfg-em1 /bin/cat > /etc/sysconfig/network-scripts/ifcfg-em1 < DEVICE=em1 BOOTPROTO=none ONBOOT=yes MASTER=bond0 SLAVE=yes USERCTL=no EOF #Modify the /etc/sysconfig/networ-scripts/ifcfg-em2 /bin/cat > /etc/sysconfig/network-scripts/ifcfg-em2 < DEVICE=em2 BOOTPROTO=none ONBOOT=yes MASTER=bond0 SLAVE=yes USERCTL=no EOF echo "alias bond0 bonding" > /etc/modprobe.d/bond0.conf echo "options bond0 miimon=100 mode=1" >> /etc/modprobe.d/bond0.conf ifconfig bond0 down ifconfig bond0 up #2.stop NetWorkManager service /etc/init.d/NetworkManager stop chkconfig NetworkManager off /etc/init.d/network restart #3.configure DNS #Modify the /etc/resolv.conf #修改dns配置 > /etc/resolv.conf #4.Modify swap config file #修改swap配置 echo "vm.swappiness=0" >> /etc/sysctl.conf #5.add ntp params #配置时间同步参数 > /etc/sysconfig/ntpd cat >> /etc/sysconfig/ntpd << END OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid" END #配置ntpd服务(以横浜机房为例) /bin/cat > /etc/ntp.conf < restrict default nomodify notrap noquery restrict 127.0.0.1 server ntp-hb1.99bill.com iburst prefer server ntp-hb2.99bill.com iburst server ntp-idx1.99bill.com iburst server ntp-idx2.99bill.com iburst server 127.127.1.0 # local clock fudge 127.127.1.0 stratum 10 driftfile /var/lib/ntp/drift broadcastdelay 0.008 keys /etc/ntp/keys logconfig =all EOF #增加开机自动同步时间(以横浜机房为例) /bin/cat >> /etc/rc.local < ntpdate 172.16.50.181 EOF #6.enable sar for per minutes record #sar记录频率设置为分钟级 > /etc/cron.d/sysstat cat >> /etc/cron.d/sysstat << END # run system activity accounting tool every 10 minutes */1 * * * * root /usr/lib64/sa/sa1 1 1 # generate a daily summary of process accounting at 23:53 53 23 * * * root /usr/lib64/sa/sa2 -A END #将sar记录保留时间修改为1个月 #keep sar record for 1 month sed -i 's/HISTORY=7/HISTORY=30/g' /etc/sysconfig/sysstat #7.create oracle users and groups #创建oracle用户及相关组 groupadd oinstall groupadd dba groupadd oper groupadd asmadmin useradd -g oinstall -G dba,oper,asmadmin oracle passwd oracle << EOF oracle oracle EOF #8.configure oracle entervironment #修改oracle安装的内核限制 #--8.1 modify sysctl.conf cat >> /etc/sysctl.conf << END kernel.shmmni = 4096 kernel.sem = 2048 65536 1024 256 fs.file-max = 6815744 fs.aio-max-nr = 1048576 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 END sysctl -p #--8.2 modify linux shell limit #修改shell限制 >/etc/security/limits.conf cat >> /etc/security/limits.conf << END oracle soft nproc 65536 oracle hard nproc 65536 oracle soft nofile 65536 oracle hard nofile 65536 oracle - memlock unlimited END #--8.3 modify login pam #增加pam模块 cat >> /etc/pam.d/login << END session required pam_limits.so END #--8.4 create soft directory #创建软件安装目录 mkdir -p /u01/app/oracle mkdir -p /u01/tmp mkdir -p /u02/archive mkdir -p /u02/oradata mkdir -p /u01/app/oracle/product/11.2.0/db mkdir -p /u01/app/11.2.0/grid mkdir -p /home/oracle/sqlpath chown -R oracle:oinstall /u01 /u02 /home/oracle/sqlpath #--8.5 #创建环境变量,sid需要另行设置 cat >> /home/oracle/.bash_profile << END export ORACLE_BASE=/u01/app/oracle #export GG_HOME=/u02/ogg/ggs export ORACLE_HOME=\$ORACLE_BASE/product/11.2.0/db export PATH=\$PATH:\$HOME/bin:\$ORACLE_HOME/bin export TMP=/u01/tmp export TMPDIR=/u01/tmp export LD_LIBRARY_PATH=\$ORACLE_BASE/product/11.2.0/db/lib:/usr/lib export LC_TYPE=en_US.UTF-8 export NLS_LANG=AMERICAN_AMERICA.UTF8 export SQLPATH=/home/oracle/sqlpath #alias jdb='export ORACLE_HOME=\$ORACLE_BASE/product/11.2.0/db;export ORACLE_SID=storedb1' #alias jgrid='export ORACLE_HOME=/u01/app/11.2.0/grid;export ORACLE_SID=+ASM1' alias sql='sqlplus / as sysdba' alias dbs='cd /u01/app/oracle/product/11.2.0/db' #alias jggsci='OLD_PWD=\$pwd;cd \$GG_HOME;./ggsci;cd \$OLD_PWD' alias jlsnrctl='ORACLE_OLD=\$ORACLE_HOME; export ORACLE_HOME=/u01/app/11.2.0/grid;lsnrctl status;ORACLE_HOME=\$ORACLE_OLD;ORACLE_OLD=' END #--8.6 configure sqlplus hint #配置sqlplus环境 cat > /home/oracle/sqlpath/login.sql << END set TERM OFF define loginname=idle column global_name new_value loginname select lower(USER||'@' ||substr(global_name,1,decode(dot,0,length(global_name),dot-1))) global_name from (select global_name, instr(global_name,'.') dot from global_name); set sqlprompt '&loginname> ' alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss'; SET TIMING ON SET TIME ON SET SERVEROUTPUT ON SET LINESIZE 130 SET TERM ON SET NUMWIDTH 13 SET PAGESIZE 1000 SET ECHO ON END #9.modify snmp params #修改snmp参数 sed -e 's/\(^com2sec.*\)public/\199billsnmp/' \ -e 's/\(^access.*\)systemview\([^ ]*\)/\1all\2/' \ -e 's/^#\(view all.*\)/\1/' \ -e 's/^#\(view mib2.*\)/\1/' /etc/snmp/snmpd.conf > ./snmpdtmp && mv -f ./snmpdtmp /etc/snmp/snmpd.conf service snmpd start chkconfig --level 12345 snmpd on #10.modify root profile #配置登录提示符 echo "export PS1='[\t \u(\${ORACLE_HOME##*/})@\h \W]\\$ '" >> /etc/profile #modify init level #修改启动的level级别 sed -i 's/id:5/id:3/g' /etc/inittab %end 4. 网络安装测试要求客户端服务器和pxe服务器在同一个网段,插上网线加电后,会出现下面的界面: 选择合适的版本回车后既可以实现自动化安装。