生产大规模部署之PXE自动安装linux系统

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自动安装linux系统_第1张图片
 

第一步: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

mail

news

uucp

operator

games

nobody

END

 

cat >> /etc/vsftpd/ftpusers << END

#root

bin

daemon

adm

lp

sync

shutdown

halt

mail

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服务器在同一个网段,插上网线加电后,会出现下面的界面:


 生产大规模部署之PXE自动安装linux系统_第2张图片

 

选择合适的版本回车后既可以实现自动化安装。

 

 

你可能感兴趣的:(生产大规模部署之PXE自动安装linux系统)