kickstart自动化安装系统

第1章 自动安装系统
1.1 以往安装操作系统的方式
1.1.1 手动
1.1.2 光盘(ISO镜像)
1.1.3 U盘
1.1.4 网络安装
1.2 自动安装操作系统(http://blog.oldboyedu.com/autoinstall-kickstart/ )
面向硬件服务器安装操作系统---减少重复劳动
目标:批量安装操作系统
1.2.1 自动装系统的软件
先有kickstart    Linux:Redat  Centos  Ubutu Esxi
后有cobbler


windows   ---WDS


1.2.2 kickstart 只是一个解决方案。这不是它的软件名称
 
 
面试:cobbler(kickstart)服务组成:dhcp服务、tftp服务和http服务


1.3 环境准备
[root@m01 ~]# cat /etc/redhat-release 
CentOS release 6.9 (Final)
[root@m01 ~]# uname -r
2.6.32-696.el6.x86_64
[root@m01 ~]# uname -m 
x86_64


1.3.1.1 第一步:安装DHCP服务
1. 安装dhcp服务
yum  -y  install  dhcp
2. 编写dhcp服务配置文件
vim /etc/dhcp/dhcpd.conf
subnet 172.16.1.0 netmask  255.255.255.0{ #subnet子网
range 172.16.1.120  172.16.1.200;
option subnet-mask  255.255.255.0;
default-lease-time 21600; #租期
max-lease-time 43200;
next-server 172.16.1.61;
filename "/pxelinux.0"; #表示tftp服务器的根下
}
注意:以上红色部分都是不固定,都是可以根据实际情况更改的
# 注释
range 10.0.0.100 10.0.0.200;         # 可分配的起始IP-结束IP
option subnet-mask 255.255.255.0;    # 设定netmask
default-lease-time 21600;            # 设置默认的IP租用期限
max-lease-time 43200;                # 设置最大的IP租用期限
next-server 10.0.0.7;                # 告知客户端TFTP服务器的ip
filename "/pxelinux.0";              # 告知客户端从TFTP根目录下载pxelinux.0文件
 
#查看日志
tailf /var/log/messages
3. 开启服务
/etc/init.d/dhcpd start 
[root@linux-node1 ~]# netstat -tunlp|grep dhcp
udp        0      0 0.0.0.0:67                  0.0.0.0:*                               1573/dhcpd
4. 测试
创建一台新的虚拟机。如果第二块网卡不在一个LAN区段,就会导致如下错误
 
如果以上都是正确的会出现如下情况:
获取到IP地址证明你的DHCP正常
但是还要确认获取的地址信息正常,比如说IP地址是不是172.16.1.0网段,如果不是,后面就无法正常从tftp服务下载文件
 
 
关键字:TFTP open timeout
原因:TFTP超时
解决:有可能dhcp告诉你的地址不对;还有可能TFTP没装,或者TFTP没有启动,网络不同;防火墙,selinux.
1.3.1.2 第二步:安装TFTP服务----是一个简单的传输协议
1. 下载软件
yum -y install  tftp-server
2. 让xinetd.d来管理tftp服务
[root@test_web01 /]# cat /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 /var/lib/tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4  
}
3. 开启tftp服务
/etc/init.d/xinetd start
[root@linux-node1 ~]# netstat -tunlp|grep 69
udp        0      0 0.0.0.0:69                  0.0.0.0:*                               1106/xinetd
 
原因:文件没有找到pxelinux.0文件
tftp工作目录/var/lib/tftpboot/
解决:见下面4
4. 下载syslinux软件,tftp的作用就是提供一个可以下载的启动文件"pexlinux.0" 但是该文件在syslinux软件中才有。
yum install -y syslinux
cp /usr/share/syslinux/pxelinux.0  /var/lib/tftpboot/
这样做了,在安装系统中的表现如图:
 
但是这样还是会报告一个问题:“Unable to locate configuration file(一个本地配置文件找不到)”。此时我们需要做如下操作:
接下来就找启动配置文件default
第一步:创建目录
mkdir  -p  /var/www/html/CentOS6.9
第二步:挂载
mount /dev/cdrom  /var/www/html/CentOS6.9 (关机重启后记得挂载)
mount: block device /dev/sr0 is write-protected, mounting read-only  
df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       9.3G  1.5G  7.3G  17% /
tmpfs           238M     0  238M   0% /dev/shm
/dev/sda1       190M   35M  146M  19% /boot
/dev/sr0        3.7G  3.7G     0 100% /var/www/html/CentOS6.9
第三步:复制
cp -a /var/www/html/CentOS6.9/isolinux/* /var/lib/tftpboot/
第四步:创建目录
mkdir -p /var/lib/tftpboot/pxelinux.cfg
第五步:配置文件default
cp /var/www/html/CentOS6.9/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default   
如果不复制到该目录下还会出现如下问题:
 


以上配置都没有问题但是出现如下问题:
 
可能是因为selinux没关导致的
上面步骤操作完后,成功的结果是:
 
如果没有出现上面的结果,表明操作不成功,则重复之前的操作。


1.3.1.3 第三步HTTP配置
1. 下载软件
yum install -y httpd
2. 检查80端口是否被其他服务所占用(nginx等web服务除外)。有则干掉,没有则进行下一步
netstat -lntup|grep 80
3. /etc/init.d/httpd start
4. 服务端查看curl http://172.16.1.61/CentOS6.9/
5. 通过浏览器查看站点目录
 
6. 网络系统安装时。在配置时,网站一定要检查是否正确
 




1.4 总结
1. 安装DHCP,正常配置启动
2. 安装TFTP,正常配置启动
3. 安装HTTP,正常配置启动
4. 新建空白虚拟机。打开电源,然后从网络安装(默认是从硬盘启动的,但是硬盘没有数据的时候就会轮到网卡启动。这个顺序可以通过BIOS进行调整)
更详细的总结请看:http://blog.oldboyedu.com/autoinstall-kickstart/ 




1.5 kickstart语句
ks文件
 


1.5.1.1 编写/var/www/html/ks_config
# 最精简配置
default ks
prompt 0
label ks
  kernel vmlinuz
  append initrd=initrd.img ks=http://172.16.1.102/ks_config/CentOS-6.9-ks.cfg ksdevice=eth1


########append initrd=initrd.img ks=http://172.16.1.102/ks_config/CentOS-6.9-ks.cfg
#告诉安装程序ks.cfg文件在哪里  (注意IP地址根据实际情况进行变化)


########ksdevice=eth1
#ksdevice=eth0代表当客户端有多块网卡的时候,要实现自动化需要设置从eth1安装,不指定的话,安装的时候系统会让你选择,那就不叫全自动化了。


1.5.1.2 编写ks文件:/var/www/html/ks_config/CentOS-6.9-ks.cfg
# kickstart Configurator for CentOS 6.9 by yao zhang
install
url --url="http://172.16.1.102/CentOS6.9/"
text
lang en_US.UTF-8
keyboard us
zerombr
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS6
timezone --utc Asia/Shanghai
authconfig --enableshadow --passalgo=sha512
clearpart --all --initlabel
part /boot --fstype=ext4 --asprimary --size=200
part swap --size=1024
part / --fstype=ext4 --grow --asprimary --size=200
firstboot --disable
selinux --disabled
firewall --disabled
logging --level=info
reboot
%packages
@base
@compat-libraries
@debugging
@development
tree
nmap
sysstat
lrzsz
dos2unix
telnet


%post
# wget -O /tmp/optimization.sh http:/ 102/ks_config/optimization.sh &>/dev/null
# /bin/sh /tmp/optimization.sh/172.16.1.
/etc/init.d/network restart
%end                 




说明:
1. 在第一个红色部分的IP地址根据实际情况而定。(为什么是内网的IP地址?难道没有其他方法利用外网进行访问吗?因为刚配置新的主机,无法利用外网访问,所以就利用内网进行访问!)
2. 第二个共色部分的IP地址根据实际情况而定,与上保持一致。
3. 记住这两部分一定要在被的机器上curl一下,确保地址的无误!!
或者F:\运维39期\39期课堂笔记\第十一周笔记\自动化安装内的文件上传到服务端,并
tar xfP ks_config20170905.tar.gz


1.5.1.3 编写优化脚本
#!/bin/bash
##############################################################
# File Name: /var/www/html/ks_config/optimization.sh
# Version: V1.0
# Author: yao zhang
# Organization: www.zyops.com
# Created Time : 2015-12-03 15:23:08
# Description: Linux system initialization
##############################################################
. /etc/init.d/functions
Ip=172.16.1.102
Port=80
ConfigDir=ks_config
# Judge Http server is ok?
PortNum=`nmap $Ip  -p $Port 2>/dev/null|grep open|wc -l`
[ $PortNum -lt 1 ] && {
        echo "Http server is bad!"
        exit 1
}


# Defined result function
function Msg(){
        if [ $? -eq 0 ];then
          action "$1" /bin/true
        else
          action "$1" /bin/false
        fi
}


# Defined IP function
function ConfigIP(){
Suffix=`ifconfig eth1|awk -F "[ .]+" 'NR==2 {print $6}'`
cat >/etc/sysconfig/network-scripts/ifcfg-eth0 < DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=10.0.0.$Suffix
PREFIX=24
GATEWAY=10.0.0.254
DNS1=223.5.5.5
DNS2=223.6.6.6
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
EOF


function ConfigIP1(){
Suffix=`ifconfig eth1|awk -F "[ .]+" 'NR==2 {print $6}'`
cat >/etc/sysconfig/network-scripts/ifcfg-eth1 <<-END
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=172.16.1.$Suffix
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth1"
END
/etc/init.d/network restart  &>/dev/null
Msg "config eth1"
}


# Defined Yum source Functions
function yum(){
        YumDir=/etc/yum.repos.d
        [ -f "$YumDir/CentOS-Base.repo" ] && cp $YumDir/CentOS-Base.repo{,.ori}
        wget -O $YumDir/epel.repo http://$Ip:$Port/$ConfigDir/epel.repo &>/dev/null &&\
        Msg "YUM source"
}


# Defined Hide the system version number Functions
function HideVersion(){
        [ -f "/etc/issue" ] && >/etc/issue
        Msg "Hide issue"
        [ -f "/etc/issue.net" ] && > /etc/issue.net
        Msg "Hide issue.net"
}


        [ -f "/etc/security/limits.conf" ] && {
        echo '*  -  nofile  65535' >> /etc/security/limits.conf
        Msg "open files"
        }
}


# Defined Kernel parameters Functions
function kernel(){
        KernelDir=/etc
        [ -f "$KernelDir/sysctl.conf" ] && /bin/mv $KernelDir/sysctl.conf{,.ori}
        wget -O $KernelDir/sysctl.conf http://$Ip:$Port/$ConfigDir/sysctl.conf &>/dev/null
        Msg "Kernel config"
}


# Defined hosts file Functions
function hosts(){
        HostsDir=/etc
        [ -f "$HostsDir/hosts" ]  && /bin/mv $HostsDir/hosts{,.ori}
        wget -O $HostsDir/hosts  http://$Ip:$Port/$ConfigDir/hosts &>/dev/null
        Msg "Hosts config"
}


# Defined System Startup Services Functions
function boot(){
          do
           chkconfig $oldboy off
        done
        Msg "BOOT config"
}


# Defined Time Synchronization Functions
function Time(){
        echo "#time sync by zhangyao at $(date +%F)" >>/var/spool/cron/root
        echo '*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >>/var/spool/cron/root
        Msg "Time Synchronization"
}


# Defined main Functions
function main(){
        ConfigIP
        ConfigIP1
        yum
        #AddUser
        #ssh
        HideVersion
        openfiles
        kernel
        hosts
        boot
        Time
}
main
# rz上传CentOS-Base.repo、epel.repo、sysctl.conf




说明:
1. 删除标红色的地方乃四处大坑。
第一个红色标记(Ip=172.16.1.102):指定另外一台配置的主机内网IP(为什么要用内网?难道不能使用外网吗?因为刚安装完系统,还没有指定eth0的地址,系统只配置eth1的地址,因此新机器只能通过内网来访问该局域网内的其他机器)
第二个红色标记(eth1):因为新装系统的主机只配置了内外IP地址,所以就根据内网IP来配置外网IP地址。
第三个红色标记(eth1):同上(内网可以不用配置)
第四个红色标记(/etc/init.d/network restart  &>/dev/null):配置好了网卡需要重新启动


1.5.1.4 准备脚本中对应的文件(/etc/hosts、/etc/sysctl.conf、/etc/yum.repos.d/CentOS-Base.repo、epel.repo)
根据自身情况准备。一般/etc/yum.repos.d/CentOS-Base.repo、epel.repo、/etc/sysctl.conf都是固定的。/etc/hosts可能会根据自身的情况有变化
1.6 安装Cobbler
1. 环境准备
[root@linux-node1 ~]# cat /etc/redhat-release
CentOS release 6.7 (Final)
[root@linux-node1 ~]# uname -r
2.6.32-573.el6.x86_64
[root@linux-node1 ~]# getenforce
Disabled
[root@linux-node1 ~]# /etc/init.d/iptables status
iptables: Firewall is not running.
[root@linux-node1 ~]# ifconfig eth0|awk -F "[ :]+" 'NR==2 {print $4}'
10.0.0.7
[root@linux-node1 ~]# hostname
linux-node1.example.com
# 配置阿里云的epel源
[root@linux-node1 ~]# wget -O /etc/yum.repos.d/epel.repo
http://mirrors.aliyun.com/repo/epel-6.repo


2. 安装
yum -y install cobbler cobbler-web dhcp tftp-server pykickstart httpd

你可能感兴趣的:(kickstart自动化安装系统)