自动化运维之kickstart自动化部署安装操作系统
第1章 简介
1.1 PXE简介
q PXE是预启动执行环境,全名是Pre-boot Execution Environment
q 通过网络接口启动计算机,不需要依赖本地存储设备或本地已安装的操作系统
q 由Intel和Systemsoft公司于1999年9月20日公布的技术
q C/S的工作模式
q PXE客户端会调用网际协议(IP)、用户数据协议(UDP)、动态主机分配协议(DHCP)、小型文件传输协议(TFTP)等网络协议
1.2 kickstart简介
kickstart是一种无人值守的安装方式 ,他的工作原理就是在安装的过程中记录人工干预填写的各种参数,并会生成一个名为ks.cfg的文件,如果在自动化安装的过程中出现需要填写参数的情况,安装程序就会去找ks.cfg程序,如果找到合适的参数,就采用所找到的参数,若找不到则需要人工进行填写,所以如果ks.cfg文件中涵盖了所有需要填写的参数,那么安装者完全可以只需告诉安装程序从何处下载ks.cfg文件,然后就可以等待安装完毕,然后会根据ks.cfg
文件设置重启/安装系统,最后结束安装。
1.3 Cobbler简介
Cobbler集中和简化了通过网络安装操作系统需要使用的DHCP、TFTP、和DNS服务的配置,Cobbler不仅有一个命令行界面,还提供了一个web界面,大大降低了使用者的入门水平。Cobbler内置了一个轻量级的配置管理系统,但也支持和其他配置管理系统集成,例如Puppet,但是暂时还不支持SaltStack
1.4 Kickstart与Cobbler的区别
简单的说就是Cobbler是对Kickstart的封装,简化了安装步骤、使用流程、降低了使用者的门槛
1.5 PXE+Kickstart装机流程图
第2章 环境准备
2.1 系统环境
[root@kisckstart ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@kisckstart ~]# uname -m
x86_64
[root@kisckstart ~]# uname -r
2.6.32-696.el6.x86_64
[root@kisckstart ~]# ifconfig eth0|awk -F "[ :]+" 'NR==2{print $4}'
10.33.1.2
[root@kisckstart ~]# hostname
kisckstart
2.2 关闭安装机制
[root@kisckstart ~]# /etc/init.d/iptables stop
[root@kisckstart ~]# chkconfig iptables off
[root@kisckstart ~]# setenforce 0
[root@kisckstart ~]# sed "s#SELINUX=enforcing#SELINUX=disabled#g" /etc/sysconfig/selinux
第3章 部署kickstart
3.1 安装DHCP服务
[root@kisckstart ~]# yum install -y dhcp
[root@kisckstart ~]# rpm -ql dhcp|grep "dhcpd.conf" ==》查找配置文件的位置
/etc/dhcp/dhcpd.conf
[root@kisckstart ~]# cat /etc/dhcp/dhcpd.conf
subnet 10.33.0.0 netmask 255.255.0.0 {
range 10.33.1.100 10.33.1.200; ##分配的IP地址范围
option subnet-mask 255.255.0.0; ##设定netmask
default-lease-time 21600; ##设置默认的IP租用期
max-lease-time 43200; ##设置最大的IP最大的IP租用期
next-server 10.33.1.2; ##TFTP服务器的IP地址
filename "/pxelinux.0"; ##告诉客户端从根目录下载pxelinux.0文件
}
[root@kisckstart ~]# /etc/init.d/dhcpd start
[root@kisckstart ~]# netstat -tunlp |grep dhcpd ==》查看端口
3.2 安装TFTP服务
[root@kisckstart ~]# yum install -y tftp-server
[root@kisckstart ~]# cat /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = no ##由原来的yes变为no
per_source = 11
cps = 100 2
flags = IPv4
}
[root@kisckstart ~]# /etc/init.d/xinetd start
[root@kisckstart ~]# netstat -tnulp|grep "xinetd"
3.3 配置HTTP服务
[root@kisckstart ~]# yum install -y httpd
[root@kisckstart ~]#sed -i "277i ServerName 127.0.0.1:80" /etc/httpd/conf/httpd.conf
[root@kisckstart conf]# /etc/init.d/httpd start
3.4 上传镜像
[root@kisckstart ~]# mkdir /var/www/html/centos-6.9 ==》创建镜像存放目录
[root@kisckstart ~]# mount /dev/cdrom /var/www/html/centos-6.9/ ==》挂载
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@kisckstart ~]# df -h ==》检查
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.8G 16G 10% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 35M 146M 19% /boot
/dev/sr0 3.7G 3.7G 0 100% /var/www/html/centos-6.9
注意:只要将镜像通过web发布即可,所以不管你怎么弄都行!!!
3.5 浏览器访问测试
3.6 配置支持PXE的启动程序
3.6.1 PXE引导配置
q syslinux是一个功能强大的引导加载程序,并且兼容各种介质
q syslinux是一个小型的linux操作系统,目的是简化linux首次安装的时间,并建立维护或其他特殊用途的启动盘
q 如果没有找到pxelinux.0这个文件,可以安装下syslinux
[root@kisckstart ~]# yum install -y syslinux
[root@kisckstart ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
[root@kisckstart ~]# cp -a /var/www/html/centos-6.9/isolinux/* /var/lib/tftpboot/
[root@kisckstart ~]# ls /var/lib/tftpboot/
boot.cat grub.conf isolinux.bin memtest splash.jpg vesamenu.c32
boot.msg initrd.img isolinux.cfg pxelinux.0 TRANS.TBL vmlinuz
[root@kisckstart ~]# mkdir /var/lib/tftpboot/pxelinux.cfg ==》创建一个pxelinux.cfg目录,存放客户端的配置文件
[root@kisckstart ~]# cp /var/www/html/centos-6.9/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
3.6.2 半自动安装
3.6.2.1 新建一个虚拟机然后开机
3.6.2.2 然后选择第一项
3.6.2.3 选择英语
3.6.2.5 选择美式英语
3.6.2.6 选择URL安装
3.6.2.7 禁用IPv6
3.6.2.8 输入http地址
3.6.2.9 最后和U盘或光盘安装的步骤一样
3.6.3 创建ks.cfg文件
3.6.3.1 生成配置文件的方式
【法1】
每安装好一台Centos机器,Centos就会创建一个名字为anaconda-ks.cfg的kickstart文件,位于/root目录下面,记录你的真实安装配置,如果希望实现和某系统类似的安装,可以基于该系统的kickstart配置文件来生成你自己的kickstart配置文件
【法2】
阅读kickstart配置文件手册,用文本编辑器就可以创建属于自己的kickstart文件
【法3】
Centos提供了一个图形化的kickstart配置工具。在任何一个安装好的Linux系统上运行该工具,就可以很容易地创建你自己的kickstart配置文件。kickstart配置工具命令为redhat-config-kickstart(RHEL3)或system-config-kickstart(RHEL4,RHEL5).网上有很多用CentOS桌面版生成ks文件的文章,如果有现成的系统就没什么可说。但没有现成的,也没有必要去用桌面版,命令行也很简单
3.6.3.2 编写ks.cfg文件
mkdir -p /var/www/html/ks_config
cat /var/www/html/ks_config/CentOS-6.9-ks.cfg
#Kickstart Configurator for CentOS 6.9 by liuzhonghhe
install
url --url="http://172.16.1.200/centos-6.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
rootpw --iscrypted $6$4/LtE7Epu9PGKS7B$FkjCppxcjDxfYJ6RAFU52W0JzPWYDjQmyt2sa8lydljECLrhGH6YwtKBNQtXqF59bDs2CSfSiFPLEzgy2EfPz0
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://172.16.1.200/ks_config/optimization.sh &>/dev/null
/bin/sh /tmp/optimization.sh
%end
3.6.3.3 开机优化脚本
vim /var/www/html/ks_config/optimization.sh
cat /var/www/html/ks_config/optimization.sh
#!/bin/bash
##############################################################
# File Name: /var/www/html/ks_config/optimization.sh
# Version: V1.0
# Author: Liu Zhonghe
# Description: Linux system initialization
##############################################################
. /etc/init.d/functions
Ip=172.16.1.200
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-eth1 <<-END
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=172.16.1.$Suffix
PREFIX=24
GATEWAY=172.16.1.61
DNS1=10.0.0.2
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth1"
END
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/CentOS-Base.repo http://$Ip:$Port/$ConfigDir/CentOS-Base.repo &>/dev/null &&\
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"
}
# Defined OPEN FILES Functions
function openfiles(){
[ -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 System Startup Services Functions
function boot(){
for oldboy in `chkconfig --list|grep "3:on"|awk '{print $1}'|grep -vE "crond|network|rsyslog|sshd|sysstat"`
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 time.nist.gov &>/dev/null' >>/var/spool/cron/root
Msg "Time Synchronization"
}
# Defined main Functions
function main(){
ConfigIP
yum
HideVersion
openfiles
kernel
boot
Time
}
main
default ks
prompt 0
label ks
kernel vmlinuz
append initrd=initrd.img ks=http://172.16.1.200/ks_config/CentOS-6.7-ks.cfg ksdevice=eth1
3.6.3.4 整合配置文件
vim /var/lib/tftpboot/pxelinux.cfg/default
default ks
prompt 0
label ks
kernel vmlinuz
append initrd=initrd.img ks=http://172.16.1.200/ks_config/CentOS-6.7-ks.cfg ksdevice=eth1
3.6.4 无人值守自动安装
过程截图
第4章 ks.cfg文件详解
4.1 Centos6官方参考文档
https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s1-kickstart2-options.html
4.2 ks.cfg文件可以分为3段
q 命令段
用来配置键盘类型、语言、安装方式等系统的配置,有必选项和可选项,若缺少必须项,在安装的过程中会暂定,需手动指定
q 软件包段
² %packages
² @groupname:指定安装的包组
² package_name:指定安装的包
² -package_name:指定不安装的包
q 脚本段
² %pre:安装系统前执行的命令或脚本(由于只依赖于启动镜像,支持的命令很少)
² %post:安装系统后执行的命令或脚本(基本支持所有命令)
4.3 详细解释
关键字 |
含义 |
install |
告知安装程序,这是一次全新安装,而不是升级upgrade。 |
url --url=" " |
通过FTP或HTTP从远程服务器上的安装树中安装。 |
nfs |
从指定的NFS服务器安装。 |
text |
使用文本模式安装。 |
lang |
设置在安装过程中使用的语言以及系统的缺省语言。lang en_US.UTF-8 |
keyboard |
设置系统键盘类型。keyboard us |
zerombr |
清除mbr引导信息。 |
bootloader |
系统引导相关配置。 |
network |
为通过网络的kickstart安装以及所安装的系统配置联网信息。 |
timezone |
设置系统时区。timezone --utc Asia/Shanghai |
authconfig |
系统认证信息。authconfig --enableshadow --passalgo=sha512 |
rootpw |
root密码 |
clearpart |
清空分区。clearpart --all --initlabel |
part |
磁盘分区。 |
firstboot |
负责协助配置redhat一些重要的信息。 |
selinux |
关闭selinux。selinux --disabled |
firewall |
关闭防火墙。firewall --disabled |
logging |
设置日志级别。logging --level=info |
reboot |
设定安装完成后重启,此选项必须存在,不然kickstart显示一条消息,并等待用户按任意键后才重新引导,也可以选择halt关机 |
转载于:https://blog.51cto.com/lzhnb/2117618
自动化运维之kickstart自动化部署安装操作系统相关推荐
- kickstart自动化系统安装_自动化运维之kickstart自动化部署安装操作系统
第1章 简介 1.1 PXE简介 qPXE是预启动执行环境,全名是Pre-boot Execution Environment q通过网络接口启动计算机,不需要依赖本地存储设备或本地已安装的操作系统 ...
- 自动化运维工具SaltStack详细部署
2019独角兽企业重金招聘Python工程师标准>>> 自动化运维工具SaltStack详细部署 2014-12-28 17:30:34 标签:saltstack 原创作品,允许转载 ...
- Ansible自动化运维工具介绍与部署
ansible自动化运维工具介绍与部署 文章目录 一.什么是自动化运维? 二.常用的自动化运维工具 2.1 Ansible 2.2 SaltStack 2.3 Puppet 2.4 三种自动化工具特点 ...
- 自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客
自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客 自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客 自动化运维工具Ansib ...
- 自动化运维工具Ansible详细部署
一.基础介绍 ================================================================================= 1.简介 ansibl ...
- ansible(自动化运维上)——ansible部署,添加主机组,连通性测试
ansible简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef. func.fabric)的优点.实现了批量系统配置.批 ...
- 自动化运维之ansible-安装部署与基础命令篇
一.Ansible简介 Ansible基于Python语言开发,集合了众多优秀运维工具的优点,实现了批量运行命令.部署程序.配置系统等功能. 二.安装部署Ansible服务 Ansible自动化运维环 ...
- python自动化运维:python环境的安装
python自动化运维 第一章 python环境的安装 一.准备工作 1.聘通外网 ping 114.114.114.114 清理yum源 yum repolist 3.安装阿里云的镜像 sudo y ...
- python实现自动化运维项目_Python自动化运维项目开发最佳实战
下载地址:五号服务器---VIP资料下载七区\VIP专题教程二区 游客,如果您要查看本帖隐藏内容请回复 Python 自动化运维项目开发最佳实战 这个远比什么老男孩的python好的多 2017-1- ...
最新文章
- WINCE5.0+2443 camera中断不能进来的原因
- C++文件流:myfstream,fstream,文件读写,随机文件读写【C++文件流】(59)
- 安徽省二级c语言笔试样题,安徽省二级C语言程序设计笔试样题1
- Go 从入门到精通(三)字符串,时间,流程控制,函数
- JMeter 教程汇总链接
- 【渝粤教育】电大中专电商运营实操 (23)作业 题库
- [电脑问题解决]在windows 8.1升级后,电脑重启时不显示ubuntu的系统引导界面,而总是直接进入windows
- 深圳职业技术学院计算机专业组代码,深圳职业技术学院代码是多少 有哪些优势专业...
- 使用Spring Task轻松完成定时任务
- IE6-IE9使用JSON、table.innerHTML 问题
- 一加手机高德位置服务器,高德地图在线导航悬浮窗闪亮一加手机
- 杭州住房公积金提取说明
- QT QTextEdit添加文字的方式
- 厘米换算英尺英寸 (15 分)
- 2016年关总结 让爱更有力量
- Vue.js安装教程
- php exec 执行php脚本
- C++PrimerPlus 第五章 循环和关系表达式 - 5.1 for循环
- 推荐系统冷启动问题及解决
- 编写一个函数,用来删除字符串中的空格字符:
热门文章
- 1 Linux下ps aux下的各种进程状态
- 详解 MySQL 基准测试和 sysbench 工具
- openStack常见报错
- 文本导入ORACLE快速,Oracle批量导入文本文件快速的方法(sqlldr实现)
- 【PostgreSQL-9.6.3】函数(3)--日期和时间函数
- 【问题解决方案】visudo: /etc/sudoers is busy, try again later
- [转]html导出到excel数据格式不正确解决方法
- MacOS~jenkins里解决docker执行权限问题
- 异常:Software caused connection abort: socket write error
- Exception in thread “main“ java.lang.IllegalStateException: Failed to read 问题解决