1. 什么是kickstart安装?


kickstart是RedHat/CentOS/Fedora等系统实现无人值守自动化安装的一种安装方式,系统管理员可将安装过程中需要配置的所有参数集成于一个kickstart文件中,而后在系统安装时,安装程序通过读取事先给定的这个kickstart文件自动化地完成配置并安装完成。


anaconda的配置方式有以下两种:

(1)交互式配置

(2)通过读取事先给定的配置文件事先自动完成配置,这个配置文件就是kickstart文件,它遵循特定的语法格式。


在前面一篇博客--《CentOS系统安装(上):图形/文本界面安装》已经介绍了使用anaconda应用程序来实现交互式安装CentOS系统,接下来要介绍的是通过kickstart这个配置文件来实现无人值守安装系统。在介绍之前需要先了解一下anaconda程序的安装引导选项。



2. anaconda安装引导选项


anaconda的安装引导选项可在boot界面(即bootloader引导时的菜单界面)由用户给定,由bootloader传递把参数传递给内核,再由内核把参数传递给anaconda应用程序;也可以直接在bootloader的配置文件中写入参数直接传递给内核,以光盘引导为例,可以在isolinux/isolinux.cfg配置文件中通过"append"的方式把参数追加给label中定义的内核。


anaconda的安装引导选项有:

text:文本安装方式;

method:手动指定使用的安装方法;

与网络相关的引导选项:安装时的网络属性配置;

ip=IPADDR:安装时的ip地址;

netmask=MASK:子网掩码;

gateway=GW:默认网关;

dns=DNS_SERVER_IP:安装过程需要解析主机名时会用到;

ifname=NAME:MAC_ADDR:指定以上网络属性配置应用于哪个网络接口之上;

远程访问功能相关的引导选项

vnc:可以让远程用户帮助配置各个安装选项;

vncpassword:设置vnc密码;

指明kickstart文件的位置

ks=


需要注意的是,kickstart文件可以来自光盘(镜像)、硬盘或网络,因此其指定方式各有不同。

光盘:

ks=cdrom:/PATH/TO/KICKSTART_FILE

硬盘:

ks=hd:/DEVICE/PATH/TO/KICKSTART_FILE

网络:

HTTP服务器:ks=http://HOST[:PORT]/PATH/TO/KICKSTART_FILE

HTTPS服务器:ks=https://HOST[:PORT]/PATH/TO/KICKSTART_FILE

FTP服务器:ks=ftp://HOST[:PORT]/PATH/TO/KICKSTART_FILE



3. kickstart文件的格式


kickstart文件包括三个部分:

(1)命令段

(2)程序包段

(3)脚本段


(1)命令段:

作用:指定各种安装前的配置选项,如键盘类型等。

选项类型必备命令+可选命令


必备命令:

authconfig:认证方式配置

示例:
authconfig--enableshadow--passalgo=sha512


bootloader:定义bootloader的安装位置及相关配置

示例:
bootloader--location=mbr--driveorder=sda--append="crashkernel=autorhgbquiet"


keyboard:设置键盘类型

示例:
keyboardus


lang:设置语言类型

示例:
langen_US.UTF-8


part:分区布局

示例:
part/boot--fstype=ext4--size=500
partpv.008002--grow--size=1


分区相关的其他命令:

clearpart:清除分区

示例:
clearpart--none--drives=sda


volgroup:创建卷组

示例:
volgroupVolGroup--pesize=4096pv.008002


logvol:创建逻辑卷

示例:
logvol/--fstype=ext4--name=lv_root--vgname=VolGroup--grow--size=1024--maxsize=5120
0


rootpw:设置管理员密码

示例:
rootpw--iscrypted$6$2V70fZkSFMrqldev$Qf950j2Ip5vxhEoOmlZgKHnySkBBMA6T5tBQz5jPiAurItpei
663xVkRfrdWZPESgQu33q3E.CShfkY4MCtjK.

生成加密密码的方式:
~]#opensslpasswd-1-salt`opensslrand-hex4`


timezone:时区

示例:
timezoneAsia/Shanghai


可选命令:

install或upgrade:安装或升级


text:安装界面类型,text为TUI,默认为GUI


network:配置网络接口

示例:
network--onbootyes--deviceeth0--bootprotodhcp--noipv6


firewall:防火墙

示例:
firewall--disabled


selinux:SELinux

示例:
selinux--disabled


halt、poweroff或reboot:定义安装完成之后的行为,如关机、重启


user:安装完成后为系统创建新用户


repo:指明安装时使用的repository(安装源)

示例:
repo--name="CentOS"--baseurl=cdrom:sr0--cost=100


url:指明安装时使用的repository(安装源),但为url格式

示例:
url--url=http://172.16.0.1/cobbler/ks_mirror/CentOS-6.7-x86_64/

注意:要配置好相关网络属性,例如局域网通信需要ip和netmask,如果要访问互联网还需要gateway
和dns。



(2)程序包段

作用:指定要安装的程序包、包组以及不安装的程序包。

表示方式

%packages:程序包段的开始;

@group_name:要安装的包组;

package:要安装的程序包;

-package:不安装的程序包;

%end:程序包段的结束;


需要注意的是,如果一个程序包被其他指定要安装的程序包所依赖,那么就算指明该程序不安装,系统也会自动安装这个程序包。



(3)脚本段


包括安装前要执行的脚本安装后要执行的脚本


①安装前要执行的脚本:%pre

脚本格式:

%pre
...
%end

运行环境:运行于安装介质上的微型Linux系统环境。



②安装后要执行的脚本:%post

脚本格式:

%post
...
%end

运行环境:安装完成后的系统。



4. 制作kickstart文件的方式


(1)直接手动编辑,可以依据某个模板来进行修改;

(2)使用kickstart文件创建工具:system-config-kickstart进行配置,同样可以导入某个模板并修改之。


这里介绍使用kickstart文件创建工具:system-config-kickstart来定制kickstart:

首选确保system-config-kickstart已经安装,如果没有安装可以使用yum安装:

[root@localhost~]#rpm-qsystem-config-kickstart
system-config-kickstart-2.8.6.6-1.el6.noarch//显示已安装;


在命令行上运行system-config-kickstart命令即可启动窗口界面:

[root@localhost~]#system-config-kickstart&

打开窗口如图:

wKioL1jGXcizlYO-AANsUq4qc9A313.png


这里直接进行配置(不使用模板),首先完成基本配置(如图),这里可设置语言类型、键盘类型、时区、管理员密码(加密)以及安装的平台类型等选项:

wKiom1jGbXSixPKYAAPsjR4vaa0191.png


选择安装方式,这里通过网易镜像网站(mirrors.163.com)安装程序包:

wKiom1jGbXWQn8SaAAKtbCgkPdk152.png


选择安装类型、MBR的安装位置以及向内核传递的参数等:

wKioL1jGbXfiHhClAAMJ_6ro5xI327.png


设置分区信息:

wKiom1jGbXjzZeDgAAOwR-NzqeA867.png


网卡配置,可以静态指定也可以使用dhcp动态获取网络属性配置:

wKioL1jGbXqgjrZJAAJCC7-phAQ957.png


认证方式配置:

wKioL1jGbXvS3aVFAAK7eYrzak8654.png


设定是否开启防火墙和selinux功能:

wKiom1jGbXyAOHVuAAJqYUOf-vE621.png


设定是否安装图形界面:

wKiom1jGbXzAhATiAAH6JiQSRJ8050.png


选定要安装的程序包:

wKioL1jGbX-DnVFbAAQ9r22GsHk955.png


安装前要执行的脚本,注意运行环境是安装介质之上的微型Linux系统环境:

wKiom1jGbYLCftGaAANTrMaaR4I084.png


安装后要执行的脚本:

wKioL1jGbYHBSCuJAAWjtvHRQXc303.png


完成配置之后进行保存:

wKiom1jGbYfQpiJiAAV9LzcR8dQ530.png


指定保存目录:

wKioL1jGbYWxvBPcAAXWwjflgwA527.png


使用ls查看:

[root@localhost~]#ls-1
anaconda-ks.cfg
Desktop
Documents
Downloads
ks.cfg//此文件即为kickstart文件;
Music
...(以下省略)...


可用ksvalidator命令检查kickstart文件语法错误:

[root@localhost~]#ksvalidatorks.cfg
[root@localhost~]#//没有任何信息显示,说明语法无错误;

一般直接手动编辑kickstart文件方式比较需要使用ksvalidator检查语法错误。



5. 制作引导镜像


在上一篇博客中提到过,一般bootloader、Kernel及initrd等文件由安装系统的引导设备提供,例如通过光盘、U盘或网络引导;后续的anaconda及其安装用到的程序包可以来自程序包仓库,此仓库可以为本地光盘、本地硬盘、ftp/http/https/nfs服务器上的yum仓库等。

如果要实现自动化安装则还需要kickstart文件,kickstart文件同样可以来自本地光盘、本地硬盘、ftp/http/https/nfs服务器等。本次实验中,采用将bootloader、Kernel、initrd及kickstart文件制作成光盘镜像方式以实现本地光盘镜像引导安装CentOS系统,其中anaconda应用程序位于initrd提供的rootfs中。而后续安装用到的程序包来自网易镜像站点(mirrors.163.com),刚才在制作kickstart文件时已经手动指定。


制作引导镜像步骤:

(1)在当前目录下创建myboot目录(名称可自定义):

[root@localhost~]#mkdirmyboot


(2)查看光盘是否已挂载:

[root@localhost~]#df
Filesystem1K-blocksUsedAvailableuse%Mountedon
/dev/mapper/VolGroup-lv_root
366137203115284316318929%/
tmpfs9531402249529161%/dev/shm
/dev/sda1487652406584213949%/boot
/dev/sr0382448438244840100%/media/cdrom
//最后一行是光盘镜像的挂载信息,说明已经挂载;


(3)将光盘中的isolinux目录复制到刚才创建的myboot目录,同时也把刚才制作的kickstart文件复制进myboot目录:

[root@localhost~]#cp-r/media/cdrom/isolinux./myboot
[root@localhost~]#cpks.cfg./myboot


(4)因为原有光盘镜像是只读挂载的,因此复制过来的文件均只有只读权限,需要先将之修改为可写权限:

[root@localhost~]#cd./myboot/isolinux/
[root@localhostisolinux]#ll
total44436
-r--r--r--.1rootroot2048Mar513:12boot.cat
-r--r--r--.1rootroot84Mar513:12boot.msg
-r--r--r--.1rootroot321Mar513:12grub.conf
-r--r--r--.1rootroot40688737Mar513:12initrd.img
-r--r--r--.1rootroot24576Mar513:12isolinux.bin
-r--r--r--.1rootroot923Mar513:12isolinux.cfg
-r--r--r--.1rootroot183012Mar513:12memtest
-r--r--r--.1rootroot151230Mar513:12splash.jpg
-r--r--r--.1rootroot2215Mar513:12TRANS.TBL
-r--r--r--.1rootroot163728Mar513:12vesamenu.c32
-r-xr-xr-x.1rootroot4264528Mar513:12vmlinuz
[root@localhostisolinux]#chmodu+w*
[root@localhostisolinux]#ll
total44436
-rw-r--r--.1rootroot2048Mar513:12boot.cat
-rw-r--r--.1rootroot84Mar513:12boot.msg
-rw-r--r--.1rootroot321Mar513:12grub.conf
-rw-r--r--.1rootroot40688737Mar513:12initrd.img
-rw-r--r--.1rootroot24576Mar513:12isolinux.bin
-rw-r--r--.1rootroot923Mar513:12isolinux.cfg
-rw-r--r--.1rootroot183012Mar513:12memtest
-rw-r--r--.1rootroot151230Mar513:12splash.jpg
-rw-r--r--.1rootroot2215Mar513:12TRANS.TBL
-rw-r--r--.1rootroot163728Mar513:12vesamenu.c32
-rwxr-xr-x.1rootroot4264528Mar513:12vmlinuz


(5)修改myboot/isolinux/isolinux.cfg配置文件,向默认启动的label所定义的内核传递参数,执行kickstart文件的存放位置:

[root@localhostisolinux]#vimisolinux.cfg


wKiom1jGh2uDDcAzAAEPiDtq2OE856.png

注意:无论kickstart文件是存放在待制作的光盘镜像中的哪个路径下,都可以在此处通过向内核追加参数的方式指明kickstart文件位置。


(5)为了节约等待光盘镜像引导安装时的时间,可修改default参数:

wKiom1jGiGDB7jonAAOf97v4Q3U321.png


(6)到此为此所有的准备工作已经完成,接下来需要退出myboot目录,并为myboot目录及其目录中的所有文件制作成光盘引导镜像,而myboot目录作为光盘镜像中的根目录:

[root@localhost~]#mkisofs-R-J-T-v--no-emul-boot--boot-load-size4--boot-info-tabl
e-V"CentOS6x86_64boot"-cisolinux/boot.cat-bisolinux/isolinux.bin-o/root/boot.iso
./myboot/


创建光盘镜像的命令稍微有点复杂,这里给其中的一部分做出说明:

"CentOS6x86_64boot"//光盘卷标;
isolinux/boot.cat//MBR中的bootloader;
isolinux/isolinux.bin//bootloader的第二阶段;
/root/boot.iso//指定存放在哪里,并命名之;
./myboot///指定某个目录为“根”创建光盘镜像;


(7)创建完成之后使用ls查看:

[root@localhost~]#ls-1
anaconda-ks.cfg
boot.iso//这就是刚刚创建的光盘镜像文件!
Desktop
Documents
Downloads
ks.cfg
Music
myboot
myboot1
Pictures
Public
Templates
Videos


(8)在远程终端软件Xshell上新建文件传输,把CentOS上的引导镜像boot.iso拷贝至Windows系统桌面上:

wKioL1jGjKrhGFWCAAMosf0OVXw702.png

wKiom1jGjW7g77i4ABLzY1KGJSo395.png

可直接拖拽过去。


然后就可以在Windows桌面上看到这个镜像文件了。

wKioL1jGjdzAd_3pAAEG-2xQwRg151.png


(9)接着创建新的虚拟机,将其引导设备指明为boot.iso镜像,然后点击启动即可实现自动安装:

wKiom1jGkRCBAq5YAAasTbEQzS4005.png

过了5s之后会自动选择默认菜单项(即第一项)。


接下来的自动安装过程:

wKioL1jGkQziD-ECAAA9ycDvkNo366.png


wKiom1jGkRDgeMxwAAA87yo7CVA759.png


wKioL1jGkQzhmxASAABDIEfOLhY788.png


wKiom1jGkQ3DbyWxAAA_XEp2j9o714.png


wKioL1jGkQ2RGKOOAABHYObJEZ4651.png


说明:

CentOS开始安装时,由光盘镜像上的bootloader引导加载内核,第二阶段的bootloader(isolinux.bin)会去读取配置文件isolinux.cfg并把其中的initrd、ks等参数传递给内核,内核再传递给anaconda程序,由于在安装过程中使用dhcp协议动态获取ip/netmask、gateway及dns等网络属性配置,因此在后续的程序包安装过程中主机能访问互联网上的资源(本实验中kickstart文件指明在网易镜像站点上下载安装程序包)。

CentOS系统安装(下):kickstart文件及引导镜像的制作的更多相关文章

  1. ios – Xcode警告:“没有处理文件的规则”和“找不到目录”

    重命名我的项目文件夹后,我收到以下错误消息:什么可能出错?解决方法关于第一个警告,您可以在项目设置中的“构建阶段”中检查XCode,即头文件不会出现在“编译源”列表中.

  2. 你如何将xcode项目转换为cocoapod?

    我有一段代码,我发现我在多个不同的项目中重复使用,所以我想把它变成一个cocoapod并使用私人cocoapod仓库.我的问题是如何将xcode项目设置为cocoapod?它应该是一个静态库还是一个带有appdelegate的空“项目”?

  3. ios – 如何将文件添加到主包的/ Library / Sounds目录中?

    根据Apple’sdocumentation,/Library/Sounds中的声音文件将在尝试播放声音时由系统搜索.如何将声音文件添加到此文件夹?适用于iOS的正确文档应为here总之,您只需将声音文件作为应用程序包的非本地化资源添加到项目中.

  4. ios – 资产目录与文件夹参考:何时使用其中一个?

    我可以将文件放入Assets.xcassets,或者我可以将文件放入文件夹引用.我何时会选择一个而不是另一个?

  5. ios – 从icloud备份中限制sqlite-wal和sqlite-shm

    我是第一次使用coredata,我必须从文档目录中的iCloud备份限制sqlitedb文件,我使用下面的代码完成了它//阻止iCloud备份文档目录文件夹现在我不明白的是,我们还需要从icloud备份中限制sqlite-wal和sqlite-shm文件,如果是,那么如何从icloud备份限制sqlite-wal和sqlite-shm文件我想要一个解决方案,而无需从文档目录文件夹中更改sqlitedb位置…

  6. iOS:如何从文档目录中删除具有特定扩展名的所有现有文件?

    当我更新我的iOS应用程序时,我想删除Documents目录中的任何现有sqlite数据库.现在,在应用程序更新时,我将数据库从软件包复制到文档目录,并通过附加软件包版本来命名它.因此,在更新时,我还想删除可能存在的任何旧版本.我只是希望能够删除所有sqlite文件,而无需循环浏览并查找以前版本的文件.是否有任何方法可以对removeFileAtPath:方法进行通配符?解决方法那么,你想要删除所有*.sqlite文件?

  7. .dylib在Debug中链接,在XCode中找不到适用于iPhone的版本

    所以我已经将libxml2.2.dylib库包含在我的iPhoneXCode项目中,以创建一些Xml和XPath解析实用程序.当我编译并运行在模拟器和设备的调试模式时,我没有问题,但是,当我切换到发布模式我得到…

  8. ios – 从文件目录加载UIImage

    我正在尝试从文件目录加载一个UIImage,并将其设置为UIImageView,如下所示:但是,每当我尝试以上,图像从不加载.该图像在Documents/MyAppCustomDirectory/school.png中.以上是否正确从该目录加载?我也尝试了其他几个:UIImageimageWithContentsOfFile,以及基于SO响应的其他方法.解决方法要获取您应该使用的文档目录:我不太清

  9. Xcode 6 / iOS 8模拟器数据和软件包文件夹脚本

    随着xcode6的最新更改,它看起来像.app文件和文档文件夹不再驻留在iPhone模拟器目录中的同一个文件夹中.以前,我们可以访问目录和.app文件但在Xcode6中,模拟器目录是完全不同的:和其中CryptNumber1,2和3都不同.有没有办法找到包含.app文件的文件夹后,我可以得到相应的文件夹?我有这个麻烦.为什么…?

  10. ios – 上传符号文件

    我该如何解决?

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部