路漫漫其修远兮
吾将上下而求索

kickstart自动安装系统

PXE自动化安装linux操作系统

对于单台主机可以用光盘来安装系统,

对于很多台主机,可以使用自动化安装,安装自动化(kickstart),启动自动化,

完成后要安装各种服务,各种配置文件定制,如何快速部署,包括运行过程中某台主机出现故障,换下来后如何将这台主机快速安装上对应的软件等等。

运维工作稳定压倒一切,安装软件不能盲目追新,只要能用,能满足要求就是好的。

硬件标准化:比如服务器最好同一批次,同一型号,好管理

操作系统标准化:安装的操作系统最好都是统一的,便于配置管理

程序版本标准化:比如httpd-2.4,所有的服务器都是这个软件版本

配置文件标准化:配置文件的位置,命名,都要统一,标准化,便于自动化统一操作 

程序发布:

    人工智能(手动发布)

    通过脚本发布

    发布程序(运维系统)

要求:发布的时候

    1、不能影响用户体验;

    2、系统不能停机;

    3、不能导致系统故障或造成系统完全不可用;

灰度模型:

    主机:一次发布一部分主机,测试没有问题,再发布一部分

    用户:设定条件,根据用户来发布,免费的用户先使用,没有问题再让付费用户使用

发布路径:

/webapps/data/waimai	
#软件所在的目录,设置软链接链接到下面的1.2版本,如果有问题,将软链接再重新指定为1.1版本的软件,查找1.2版本的问题,快速滚回。
/webapps/data/waimai-1.1	#1.1版本软件目录
/webapps/data/waimai-1.2	#1.2软件所在的目录
/webapps/data/waimai-1.3
/webapps/data/waimai-1.4

在调度器上下线一批主机(标记为维护模式)–> 关闭服务 –> 部署新版本 –> 启动服务 –> 在调度器启用这一批主机

BootStraping:系统提供(OS Provision),系统安装和部署

    服务器物理网卡内建有一个程序,这个程序可以作为dhcp服务器的客户端,自动获取一个地址,同时dhcp服务器可以告诉这台主机的网卡去另一个主机(TFTP)请求一个程序,或者叫做bootloader。

    预启动执行环境(PXE)指的是那些使得IBM兼容计算机,不需要硬盘或是启动软盘就能启动的方法

    pxe –> preboot excution environment, Intel

    cobbler –> Cobbler is a network install server. Cobbler supports PXE, ISO virtualized installs, and re-installing existing Linux machines,这个貌似更好用,有空测试下

  pxe:所需要的服务,以及文件

dhcp service 此服务为主机提供(ip/nemask, gw, dns; filename, next-server)
tftp server 此服务为主机提供(bootloader, kernel, initrd)
yum repository 可以用的协议(ftp, http, https, nfs)

    kickstart(系统开始安装的时候需要点很多的下一步来设置具体的参数,kickstart可以将所有需要的配置都事先放到一个配置文件中,调用这个文件就可以实现完全的自动化安装)

BootStraping(OS install):需要网卡支持,有这个功能,现在基本都有这种功能。

    客户端网卡首先通过dhcp获得一个ip地址,包括掩码,以及文件服务器名称,ip;

    客户端的网卡中也有tftp协议的驱动,可以自动和tftp服务器通信,网卡向文件服务器(tftp)加载bootloader,显示给用户一个菜单,当用户选择后,再去加载内核(专用于pxe自动化安装的内核),init程序,内核启动起来后,(anaconda)根据配置(kickstart)去yun仓库所在的服务器去安装所需要的rpm包。

流程说明

对于一个新建的主机,所在的网络里面要有dhcp服务器,网卡先去dhcp服务器(192.168.170.50:67)端口请求一个ip地址,以及tftp服务器的地址(192.168.170.50),bootloader文件名

然后主机A根据指定的地址去TFTP服务器(192.168.170.50:69)去下载所需要的系统安装选项文件,当用户选择要安装的系统后,网卡去TFTP请求所需要的简易的内核镜像以及其他的文件,开始安装

如果系统安装选项中没有自动化安装配置文件,会根据选项配置文件中指定的anconda文件的路径(192.168.170.50)去下载系统镜像进行手动安装,这时就看到了安装的界面,然后选选选,,,

如果系统安装选项中有自动化安装配置文件,则根据指定的路径(192.168.170.50)去下载kickstart文件,再根据kickstart文件中指定的系统镜像路径下载系统镜像进行自动化安装

这里的dhcp服务器和tftp服务器以及ftp服务器(或者http服务器)都是一台主机,为了避免外界的干扰,选择的是虚拟机内部的虚拟网络来进行通信,并关闭该网络中的dhcp服务器

注意:只有要装系统的时候,才将此服务打开,平时关闭此服务。并且开机自动安装有风险,最好将倒计时去掉,默认选项是从本地磁盘开始安装,需要人工确认后才能进行自动化安装。不然某一台有人开机后去个卫生间,回来就是全新的系统,文件都被删除了,要注意!!!   

dhcp服务配置

具体的安装见dhcp相关的博文,新建一个主机,并将这个主机的mac地址填写到dhcp服务的配置文件中,只要是该mac地址请求动态ip地址,分配的ip地址是固定的:00:50:56:22:DD:D0

host abc {
  hardware ethernet 00:50:56:22:DD:D0;
  fixed-address 192.168.170.55;    #固定ip地址为55
  filename "pxelinux.0";    #从tftpd服务器下载的文件名
  server-name "192.168.170.50";    #指定tftpd服务器地址
}

配置好后启动新主机,查看情况

image.png

配置tftp服务器

安装服务端和客户端,客户端用来测试是否可以正常下载文件,监听端口:udp:69

[root@master ~]#yum info tftp-server
[root@master ~]#yi tftp-server tftp
[root@master ~]#rpm -ql tftp-server
/etc/xinetd.d/tftp
/usr/sbin/in.tftpd

#修改配置文件
[root@master ~]#cat /etc/xinetd.d/tftp
service tftp
{
	socket_type		= dgram
	protocol		= udp
	wait			= yes
	user			= root
	server			= /usr/sbin/in.tftpd
	server_args		= -s /data/tftpboot    #修改这里的文件目录,便于统一管理,原来的目录:/var/lib/tftpboot
	disable			= no  #将此处的yes改为no,表示启用这个服务,这样端口才会监听
	per_source		= 11
	cps			= 100 2
	flags			= IPv4
}

[root@master ~]#mkdir /data/tftpboot    #创建root文件路径
[root@master ~]#cp /etc/fstab /data/tftpboot/    #并复制测试文件到该目录

#下面是两种系统不同启动方式
CentOS 7:
    systemctl start xinetd
CentOS 6:
    chkconfig tftp on
    service xinetd restart

[root@master ~]#service xinetd restart
Stopping xinetd:                                           [  OK  ]
Starting xinetd:                                           [  OK  ]
[root@master /etc/xinetd.d]#ss -unlp
State      Recv-Q Send-Q     Local Address:Port       Peer Address:Port 
UNCONN     0      0                *:67            *:*      users:(("dhcpd",1379,7))
UNCONN     0      0                *:68            *:*      users:(("dhclient",1285,6))
UNCONN     0      0                *:69            *:*      users:(("xinetd",1684,5))    #端口成功监听

#测试可以正常获取文件
[root@master ~]#tftp 192.168.170.50
tftp> get fstab
tftp> quit
[root@master ~]#ls
fstab

如果测试不行,将客户端的防火墙关闭再试,服务端防火墙也要放行
经过测试,tftp服务和dhcp服务必须要和客户机在同一个网段,跨网段不行。都是udp广播服务

配置tftp需要的文件

dhcp服务器给新主机配置ip的时候会说明tftp服务器地址,这里就是提供那个文件的服务器配置

[root@master ~]#yum info syslinux syslinux-nonlinux
[root@master ~]#yum install -y  syslinux syslinux-nonlinux

[root@master ~]#rpm -ql syslinux-nonlinux | grep pxelinux
/usr/share/syslinux/gpxelinux.0
/usr/share/syslinux/gpxelinuxk.0
/usr/share/syslinux/pxelinux.0

[root@master ~]#cp /usr/share/syslinux/pxelinux.0 /data/tftpboot/  #bios不同,文件不同

关闭防火墙,重置新主机,就可以看到加载到这个文件了

image.png

然后继续配置需要的文件,将centos6.9系统镜像文件挂载到:192.168.170.50机器的:/mnt目录下面,并将镜像里面的所有文件复制到:/data/ftp/centos6.9目录下面,然后这个镜像文件就可以移除了

centos6.9镜像下载:https://mirrors.aliyun.com/centos/6.9/isos/x86_64/    应该下载:CentOS-6.9-x86_64-bin-DVD1to2.torrent   因为里面的rpm比较全,wget包需要安装上去,才可以使用wget命令下载系统初始化脚本文件

http://mirrors.aliyun.com/centos/6.9/isos/x86_64/CentOS-6.9-x86_64-bin-DVD1.iso

将dvd1挂载,

[root@master ~]#mount /dev/cdrom /mnt
mount: block device /dev/sr0 is write-protected, mounting read-only

[root@master ~]#cd /mnt/
[root@master /mnt]#ls
CentOS_BuildTag  isolinux                  RPM-GPG-KEY-CentOS-Debug-6
EFI              Packages                  RPM-GPG-KEY-CentOS-Security-6
EULA             RELEASE-NOTES-en-US.html  RPM-GPG-KEY-CentOS-Testing-6
GPL              repodata                  TRANS.TBL
images           RPM-GPG-KEY-CentOS-6

[root@master /mnt]#mkdir -p /data/ftp/centos6.9
[root@master /mnt]#cp -r * /data/ftp/centos6.9

[root@master /data/ftp/centos6.9]#ls
CentOS_BuildTag  isolinux                  RPM-GPG-KEY-CentOS-Debug-6
EFI              Packages                  RPM-GPG-KEY-CentOS-Security-6
EULA             RELEASE-NOTES-en-US.html  RPM-GPG-KEY-CentOS-Testing-6
GPL              repodata                  TRANS.TBL
images           RPM-GPG-KEY-CentOS-6

复制其他需要的文件

[root@master /data/ftp/centos6.9/images/pxeboot]#cp vmlinuz /data/tftpboot/
[root@master /data/ftp/centos6.9/images/pxeboot]#cp initrd.img /data/tftpboot/
[root@master /data/ftp/centos6.9/images/pxeboot]#cd

[root@master ~]#cp /usr/share/syslinux/{chain.c32,memdisk,menu.c32,mboot.c32} /data/tftpboot/

[root@master /data/tftpboot]#ls
chain.c32  fstab  initrd.img  mboot.c32  memdisk  menu.c32  pxelinux.0  vmlinuz

[root@master /data/tftpboot]#mkdir pxelinux.cfg
[root@master /data/tftpboot]#cd pxelinux.cfg/

[root@master /data/tftpboot/pxelinux.cfg]#cat default  #编写启动界面选择启动项
default menu.c32
prompt 5
timeout 200    #倒计时20秒
MENU TITLE CentOS PXE

LABEL linux
MENU LABEL Install CentOS 6.9 x86_64
KERNEL vmlinuz
APPEND initrd=initrd.img inst.repo=http://192.168.170.50/centos6.9/

指明anaconda文件所在的目录,当内核启动起来以后,可以从上面的文件引导加载真正的操作系统文件。

安装ftp服务

[root@master ~]#rpm -ql vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/rc.d/init.d/vsftpd
/etc/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/sbin/vsftpd

修改配置文件,将匿名用户家目录更改为:/data/ftp目录

[root@master /etc/vsftpd]#cat vsftpd.conf 
anonymous_enable=YES
anon_root=/data/ftp

[root@master /etc/vsftpd]#service vsftpd restart
Shutting down vsftpd:                                      [FAILED]
Starting vsftpd for vsftpd:                                [  OK  ]

[root@master ~]#ss -tnlp
State      Recv-Q Send-Q    Local Address:Port  Peer Address:Port 
LISTEN     0      32            *:21    *:*     users:(("vsftpd",2009,3))

通过网页访问正常,以后可以继续添加其他系统的镜像文件到这里,多种安装系统的选择,这里的路径和上面tftpd服务器的配置文件相对应

image.png

然后启动新主机

image.png

接下来选择ok, ok, 选择url,ok  ,将系统镜像的地址填为上面的ftp的地址,这里也可以使用http服务器地址

image.png

然后就进入手动安装界面,下一步,下一步,,,

为自动化安装配置kickstart文件

这样新的机器安装,只要打开计算机,就不用再人工干预了

在ftp上配置需要的kickstart文件,这里可以是ftp服务器,也可以是http服务器,http方式经过测试可以正常使用,只要将ftp协议换成http协议就可以,下面的测试使用http方式

说明文档:https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/Installation_Guide/sect-kickstart-syntax.html#sect-kickstart-packages

默认情况下:永远都要选择 Core 和 Base 组,所以并不需要在 %packages 部分指定它们。

[root@master ~]#grub-crypt
Password: redhat
Retype password: 
$6$3Urxi19IkzNn9wO7$GX5UPKMbjTjOMLfFkkgpU02FNGS6pVPLW/Xk9LPXXOEFeij/KSyKuey.prH1AMk9DV3hnctrVLeAn6GPhgwLD1


[root@master /data/ftp]#mkdir kickstart
[root@master /data/ftp]#mkdir system_init
[root@master /data/ftp]#ls
centos6.9  kickstart  system_init

[root@master /data/ftp]#cd kickstart/
[root@master /data/ftp/kickstart]#cat centos6.9.cfg 
# Kickstart Configurator for CentOS 6.9
install

# Use network installation
url --url="http://192.168.170.50/centos6.9"

# Use text mode install
text

# System language
lang en_US.UTF-8

# Keyboard layouts
keyboard us

# Use network installation
network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS6

# System timezone
timezone --utc Asia/Shanghai

authconfig --enableshadow --passalgo=sha512

# Root password user:root passwd:redhat    
rootpw  --iscrypted $6$3Urxi19IkzNn9wO7$GX5UPKMbjTjOMLfFkkgpU02FNGS6pVPLW/Xk9LPXXOEFeij/KSyKuey.prH1AMk9DV3hnctrVLeAn6GPhgwLD1

ignoredisk --only-use=sda

# Clear the Master Boot Record
zerombr

# System bootloader configuration
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"

# Partition clearing information
clearpart --all --initlabel

part /boot --fstype=ext4 --asprimary --size=200
part swap --size=1024
part / --fstype=ext4 --asprimary --size=20480
part /data --fstype=ext4 --grow --size=200

firstboot --disable

# SELinux configuration
selinux --disabled
firewall --ssh
logging --level=info

# Reboot after installation
reboot

%packages

%end

将上面的配置文件路径添加到tftpd目录的配置文件中

[root@master /data/tftpboot/pxelinux.cfg]#cat default
default menu.c32
prompt 5
timeout 200
MENU TITLE CentOS PXE

label local
  menu default   #默认选项
  menu label Boot from local drive
  localboot 0xffff

label linux
  menu label Install CentOS 6.9 x86_64
  kernel vmlinuz
  append initrd=initrd.img inst.repo=http://192.168.170.50/centos6.9/

label linux_auto
  menu label Auto Install CentOS 6.9 x86_64
  kernel vmlinuz
# append initrd=initrd.img ks=http://192.168.170.50/kickstart/centos6.9.cfg
  append initrd=initrd.img ks=http://192.168.170.50/kickstart/centos6.9.cfg ksdevice=eth0
# ksdevice=eth0代表当客户端有多块网卡的时候,要实现自动化需要设置从eth0安装,不指定的话,安装的时候系统会让你选择,那就不叫全自动化了。

不然会出现下面的情况

image.png

然后重置新主机

image.png

选择下面的自动安装

image.png

自动安装就完成了!!!

设置初始化脚本

还可以更自动化一些

1、本来说是在kickstart文件的%post脚本中执行初始化脚本,尝试几次都有错误,然后决定在kickstart的%post里面只设置几个echo到/etc/rc.d/rc.local里面,然后重启新主机,真正的初始化任务等新主机重启后,所有的服务都执行完成,然后执行/etc/rc.d/rc.local里面的初始化脚本,执行完成后,将这里面的语句删除,这样就可以愉快的玩耍了

2、这里的初始化脚本是gitlab上克隆的最新的代码仓库,是一个目录,每次装机的时候,里面的内容也需要根据需求修改,这个账号是只读账号,只可以从gitlab拉取代码

3、当初始化脚本有问题,修改后,提交到gitlab,在192.168.170.50机器上面的初始化脚本目录里面执行

git reset --hard && git pull

来获取最新修改后的代码,然后修改里面的配置文件为需要的,进行装机工作

4、这里必须要sleep 60秒,centos6还好,rc.local是最后执行。但是centos7是并行执行,这里需要等待网卡启动,dhcp启动,获取ip地址后才能执行,不然网络不通

5、这里的wget是递归下载目录,而不是下载压缩包,因为打压缩包麻烦,这种更简单。system_init_6/后面的斜杠不能省略,不然下载的就不是目录了

6、文件:/etc/rc.d/rc.local文件里每条语句后面都要有“#init”注释,这样,最后的sed语句会将其删除,这样脚本只会执行一次

7、日志可以在/var/log/message里面查到

8、https://www.cnblogs.com/lidp/archive/2010/03/02/1696447.html

9、其实可以直接在后面操作:下载,执行安装脚本,而不用放到开机启动里面,更省事,直接

[root@master /data/ftp]#ls
centos6.9  kickstart  system_init
[root@master /data/ftp]#cd kickstart/
[root@master /data/ftp/kickstart]#ls
centos6.9.cfg
[root@master /data/ftp/kickstart]#cat centos6.9.cfg 
...
...
...
# Reboot after installation
reboot

%packages
%end
%post --log=/root/ks-post.log
cat >> /etc/rc.d/rc.local <<EOF
sleep 60  #init
/usr/bin/wget -c -r -np -k -L -p -q http://192.168.170.50/system_init/system_init_6/ -P /root  #init
sh /root/192.168.170.50/system_init/system_init_6/system_init.sh -a #init
sed -i '/#init/d' /etc/rc.d/rc.local
EOF
chmod +x /etc/rc.d/rc.local
%end

下面是具体的执行过程,重启后,有进度条的时候,按esc键,可以看到具体的执行过程

image.png

安装后的文件都符合预期

[root@master ~]#lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   50G  0 disk 
├─sda1   8:1    0  200M  0 part /boot
├─sda2   8:2    0   20G  0 part /
├─sda3   8:3    0    1G  0 part [SWAP]
├─sda4   8:4    0    1K  0 part 
└─sda5   8:5    0 28.8G  0 part /data
sdb      8:16   0   20G  0 disk 
[root@master ~]#df -Th
Filesystem     Type   Size  Used Avail Use% Mounted on
/dev/sda2      ext4    20G 1006M   18G   6% /
tmpfs          tmpfs  491M     0  491M   0% /dev/shm
/dev/sda1      ext4   190M   35M  146M  19% /boot
/dev/sda5      ext4    29G   44M   27G   1% /data

说明

至此,系统一键安装就完成了,如果公司新到了一批服务器,装好服务器后,将每天机器的启动设置为网络启动,调整安装界面默认安装方式,就可以自动安装

为了速度,建议内网设置yum源

新主机唯一确定的是mac地址,需要设置主机的ip,只需将此主机对应的mac地址填入到dhcp服务器上面,该主机获取的ip地址即为特定的ip地址,初始化脚本会将此ip地址写入到配置文件中,设置为永久有效

安照此方法,一上午可以部署100台服务器都可以做到

后续会将saltstack服务添加到初始化脚本文件中,批量控制

小知识点说明

让CentOS 6显示详细启动信息,不显示进度条

一些CentOS等Linux系统启动后可能会出现读进度条等待进入系统的过程,出现错误不易查看,我们可以将它恢复到显示详细启动过程模式。

使用root用户修改 /boot/grub/grub.conf 文件。

sed -i 's#rhgb quiet##g' /boot/grub/grub.conf

其中"rhgb"表示"redhat graphics boot",就是图形进度条模式。而"quiet"表示在启动过程中只显示重要启动信息,类似硬件自检之类的消息不会显示,可以有选择地选用。

下面是思维导图

image.png

kickstart.zip


centos7安装

centos7安装的时候和上面的相同,只是下面的文件不同,前面引导所需要的文件initrd这些文件需要从centos7系统上面找到才可以,centos6的不可以,下面文件是centos7的

yum -y install syslinux
cp -a /usr/share/syslinux/{menu.c32,vesamenu.c32,pxelinux.0}  /临时目录,然后将这个目录下的文件复制到tftp服务器的/data/tftpboot目录

下面是tftp服务器
mkdir /data/tftpboot/pxelinux.cfg
ls -l /data/tftpboot/
-rw-r--r-- 1 root root  61796 Oct 16  2014 menu.c32      # 提供图形化菜单功能
-rw-r--r-- 1 root root  26759 Oct 16  2014 pxelinux.0    # boot loader文件
drwxr-xr-x 2 root root   4096 Feb 24 20:02 pxelinux.cfg  # 开机的菜单设定在这里
-rw-r--r-- 1 root root 163728 Oct 16  2014 vesamenu.c32  # 也是提供图形化菜单功能,但界面和menu.c32不同

要安装Linux系统,必须提供Linux内核文件和initrd文件,这里以64位版本的CentOS 7.2为例。从安装镜像中获取内核相关文件,首先得要挂载镜像到/mnt目录

这里使用CentOS-7-x86_64-DVD-1511.iso镜像文件,不可以使用最小安装版镜像,有问题,其他高版本的系统镜像需要测试,不一定可以用

[root@master ~]#mount /dev/cdrom /mnt
cp /mnt/isolinux/{vmlinuz,initrd.img} /data/tftpboot

[root@master /mnt]#mkdir -p /data/ftp/centos7.2
[root@master /mnt]#cp -r * /data/ftp/centos7.2

其实仅需要vmlinuz和initrd.img两个文件即可,不过这里还将isolinux.cfg这个文件拷贝出来了,这个文件里提供了开机选项,可以以它作为修改开机选项和菜单的模板,这样修改起来比较容易,也更便捷!

在dhcp中配置mac地址

下面是引导文件

[root@master /data/tftpboot/pxelinux.cfg]#cat default 
default menu.c32
prompt 5
timeout 200  #倒计时20秒
MENU TITLE CentOS PXE

label local
  menu default
  menu label Boot from local drive
  localboot 0xffff

label linux_7.2
  menu label Install CentOS 7.2 x86_64
  kernel vmlinuz
  append initrd=initrd.img inst.repo=http://192.168.170.50/centos7.2/

label linux_7.2_auto
  menu label Auto Install CentOS 7.2 x86_64
  kernel vmlinuz
  append initrd=initrd.img inst.repo=http://192.168.170.50/centos7.2 inst.ks=http://192.168.170.50/kickstart/centos7.2.cfg quiet ksdevice=em1

也可以修改为下面的

  append initrd=initrd.img inst.repo=http://192.168.170.50/centos7.2 inst.ks=http://192.168.170.50/kickstart/centos7.2.cfg quiet net.ifnames=0 biosdevname=0

其中"net.ifnames=0 biosdevname=0"这两个内核启动参数是为了让网卡名称为ethN,而不是默认的eno16777728这样的随机名称。

这个根据实际情况来,也可以使用默认的,看具体的机器,如果修改为ethx的话,kvm机器网络初始化会有问题,慎重

image.png

下面是centos7的cfg文件,磁盘空间要大于50G,不然需要修改下面的配置文件里面的磁盘大小

还有不同的地方,这里需要一个单独的分区,必须要加,具体查看下面:part biosboot –fstype=biosboot –size=1     参考https://blog.csdn.net/signmem/article/details/78810678

[root@master ~]#grub-crypt
Password: redhat
Retype password: 
$6$3Urxi19IkzNn9wO7$GX5UPKMbjTjOMLfFkkgpU02FNGS6pVPLW/Xk9LPXXOEFeij/KSyKuey.prH1AMk9DV3hnctrVLeAn6GPhgwLD1

[root@master /data/ftp/kickstart]#cat centos7.2.cfg
# cat /var/www/html/ks.cfg 
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# new format:
keyboard --vckeymap=us --xlayouts='us'
#after install 
reboot
# System authorization information
auth --enableshadow --passalgo=sha512
# Root password user:root passwd:redhat    
rootpw  --iscrypted $6$3Urxi19IkzNn9wO7$GX5UPKMbjTjOMLfFkkgpU02FNGS6pVPLW/Xk9LPXXOEFeij/KSyKuey.prH1AMk9DV3hnctrVLeAn6GPhgwLD1
# Use text mode install
text
#只操作sda盘
ignoredisk --only-use=sda
# System timezone
timezone Asia/Shanghai --isUtc
# Use network installation
url --url="http://192.168.170.50/centos7.2"  #最后面不需要加 /
# System language
lang en_US.UTF-8
# Firewall configuration centos7的firewall不是iptables服务,这里不开启
firewall --disabled
# Network information,这里通过网卡来区分从哪个网卡安装,也可以通过mac地址来区分
network --bootproto=dhcp --device=em1 --onboot=yes --noipv6 --hostname=master
# SELinux configuration
selinux --disabled

# System bootloader configuration
# 新硬盘需要创建mbr
bootloader --location=mbr --boot-drive=sda --append="crashkernel=auto rhgb quiet"
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel 
# Disk partitioning information
part biosboot --fstype=biosboot --size=1
part / --asprimary --fstype="ext4" --size=20480
part /boot --asprimary --fstype="ext4" --size=512
part swap --asprimary --fstype="swap" --size=2048
part /data --asprimary --fstype="ext4" --grow --size=1
# 如果是要LVM分区,则考虑以下分区
# part /boot --fstype ext4 --size=100
# part swap --fstype=swap --size=2048
# part pv26 --size=100 --grow
# volgroup VG00 --pesize=32768 pv26
# logvol / --fstype ext4 --name=LVroot --vgname=VG00 --size=29984
# logvol /data --fstype ext4 --name=LVdata --vgname=VG00 --size=100 --grow

%packages
@core
@Base
%end

image.png

经过测试,centos7必须要指定:@core  @Base才会安装这两个包组,centos6不用指定就可以把这两个包组都安装上,要注意,wget包在@Base包组中

自动安装就完成了!!!

初始化centos7脚本

还可以更自动化一些

具体的介绍看上面centos6的

[root@master /data/ftp]#ls
centos6.9   centos7.2 kickstart  system_init
[root@master /data/ftp]#cd kickstart/
[root@master /data/ftp/kickstart]#ls
centos7.2.cfg centos6.9.cfg
[root@master /data/ftp/kickstart]#cat centos7.2.cfg 
...
...
...
# Reboot after installation
reboot

%packages
@core
@Base
%end
%post --log=/root/ks-post.log
cat >> /etc/rc.d/rc.local <<EOF
sleep 60  #init
/usr/bin/wget -c -r -np -k -L -p -q http://192.168.170.50/system_init/system_init_7/ -P /root #init
sh /root/192.168.170.50/system_init/system_init/system_init_7/system_init.sh -a #init
sed -i '/#init/d' /etc/rc.d/rc.local
EOF
chmod +x /etc/rc.d/rc.local
%end

在centos7中,/etc/rc.d/rc.local的权限被降低了,所以需要执行命令赋予其可执行权限

下面是具体的执行过程,重启后,有进度条的时候,按esc键,可以看到具体的执行过程

如果安装出现错误,可能的原因是环境变量引起的,,,

下面是ftp文件列表,注意防火墙等其他因素

[root@master /data/ftp]#tree -L 2
.
├── centos6.9
│   ├── CentOS_BuildTag
│   ├── EFI
│   ├── EULA
│   ├── GPL
│   ├── images
│   ├── isolinux
│   ├── Packages
│   ├── RELEASE-NOTES-en-US.html
│   ├── repodata
│   ├── RPM-GPG-KEY-CentOS-6
│   ├── RPM-GPG-KEY-CentOS-Debug-6
│   ├── RPM-GPG-KEY-CentOS-Security-6
│   ├── RPM-GPG-KEY-CentOS-Testing-6
│   └── TRANS.TBL
├── centos7.2
│   ├── CentOS_BuildTag
│   ├── EFI
│   ├── EULA
│   ├── GPL
│   ├── images
│   ├── isolinux
│   ├── LiveOS
│   ├── Packages
│   ├── repodata
│   ├── RPM-GPG-KEY-CentOS-7
│   ├── RPM-GPG-KEY-CentOS-Testing-7
│   └── TRANS.TBL
├── kickstart
│   ├── centos6.9.cfg
│   └── centos7.2.cfg
└── system_init
    ├── system_init_6...
    └── system_init_7...

16 directories, 18 files

优化

12、为了便于一台机器可以安装多个服务,这里可以用软链,用哪个服务软链哪个目录,互不干扰

ll /data
total 24
drwxr-xr-x   6 root root 4096 Jul 23 06:09 ftp
lrwxrwxrwx   1 root root   13 Oct 18 14:45 tftpboot -> tftpboot_esxi_5.5/
drwxr-xr-x   5 root root 4096 Oct 18 14:46 tftpboot_esxi_5.5
drwxr-xr-x   5 root root 4096 Oct 18 13:43 tftpboot_esxi_6.5
drwxr-xr-x   3 root root 4096 Jul 23 06:17 tftpboot_centos_6.9
drwxr-xr-x   3 root root 4096 Jul 23 09:18 tftpboot_centos_7.2

参考文档:http://www.zyops.com/autoinstall-kickstart

参考文档:http://www.cnblogs.com/f-ck-need-u/p/7342919.html

参考文档:http://www.cnblogs.com/f-ck-need-u/p/7342022.html

未经允许不得转载:江哥架构师笔记 » kickstart自动安装系统

分享到:更多 ()

评论 抢沙发

评论前必须登录!