定制化属于你的Linux镜像

时间:2021-06-23 16:34:20

一、 需求:
定制化centos系统:汉语,自动化安装,附加FTP服务器,root密码为password

二、 所用工具:
vmware、xmanager、CentOS系统镜像

三、实现:

1、根据需求新建一台虚拟机

系统分区: /boot 500MB 强制为根目录
Swap(交换) 2000MB
/ 其余空间 强制为根目录

2、  挂载镜像
[root@localhost ~]# mount /dev/cdrom /mnt/
mount: block device /dev/sr0 is write-protected, mounting read-only

[root@localhost ~]# cd /mnt/
//查看挂载结果
[root@localhost mnt]# ll
总用量 558
-r--r--r--. 2 root root 14 522 13:52 CentOS_BuildTag
dr-xr-xr-x. 3 root root 2048 522 14:06 EFI
-r--r--r--. 2 root root 212 1127 2013 EULA
-r--r--r--. 2 root root 18009 1127 2013 GPL
dr-xr-xr-x. 3 root root 2048 523 07:51 images
dr-xr-xr-x. 2 root root 2048 522 14:06 isolinux
dr-xr-xr-x. 2 root root 528384 523 07:50 Packages
-r--r--r--. 2 root root 1359 522 05:04 RELEASE-NOTES-en-US.html
dr-xr-xr-x. 2 root root 4096 523 07:51 repodata
-r--r--r--. 2 root root 1706 1127 2013 RPM-GPG-KEY-CentOS-6
-r--r--r--. 2 root root 1730 1127 2013 RPM-GPG-KEY-CentOS-Debug-6
-r--r--r--. 2 root root 1730 1127 2013 RPM-GPG-KEY-CentOS-Security-6
-r--r--r--. 2 root root 1734 1127 2013 RPM-GPG-KEY-CentOS-Testing-6
-r--r--r--. 1 root root 3380 523 07:51 TRANS.TBL

常见文件目录用途说明:
Isolinux目录存放光盘启动时的安装界面信息
Images目录包括了必要的启动映像文件
Packages目录存放了安装软件包及信息
Repodata目录存放了rpm包依赖信息

3、复制RPM包

//创建制作镜像目录
[root@localhost mnt]# mkdir -p /application/CentOS6
//将光盘上的数据同步到CentOS目录中
[root@localhost mnt]# rsync -a /mnt/ /application/CentOS6/
[root@localhost mnt]# cd /application/CentOS6/
[root@localhost CentOS6]# ll
总用量 288
-r--r--r--. 1 root root 14 522 13:52 CentOS_BuildTag
dr-xr-xr-x. 3 root root 4096 522 14:06 EFI
-r--r--r--. 1 root root 212 1127 2013 EULA
-r--r--r--. 1 root root 18009 1127 2013 GPL
dr-xr-xr-x. 3 root root 4096 523 07:51 images
dr-xr-xr-x. 2 root root 4096 522 14:06 isolinux
dr-xr-xr-x. 2 root root 225280 523 07:50 Packages
-r--r--r--. 1 root root 1359 522 05:04 RELEASE-NOTES-en-US.html
dr-xr-xr-x. 2 root root 4096 523 07:51 repodata
-r--r--r--. 1 root root 1706 1127 2013 RPM-GPG-KEY-CentOS-6
-r--r--r--. 1 root root 1730 1127 2013 RPM-GPG-KEY-CentOS-Debug-6
-r--r--r--. 1 root root 1730 1127 2013 RPM-GPG-KEY-CentOS-Security-6
-r--r--r--. 1 root root 1734 1127 2013 RPM-GPG-KEY-CentOS-Testing-6
-r--r--r--. 1 root root 3380 523 07:51 TRANS.TBL

//生成安装系统所需的rpm文件列表
[root@localhost ~]# awk ‘/Installing/{print "rsync -a /mnt/Packages/"$2".rpm /application/CentOS6/Packages/"}' install.log|bash

//生成repodata目录
[root@localhost Packages]# cd /application/CentOS6/Packages/
[root@localhost Packages]# yum -y install createrepo

//comps.xml文件用于存放包组信息,复制出来
[root@localhostCentOS6]#cp /mnt/repodata/
d0df041d26b67f7e9b5c5828e5126ddbfeb3a998ec8e8426de2d260d8e1215f6-c6-x86_64-comps.xml comps.xml
[root@localhost CentOS6]# createrepo -g comps.xml .
Spawning worker 0 with 3206 pkgs
Workers Finished
Gathering worker results

Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

[root@localhost CentOS6]# ls repodata/
0474a08e24c52579899f4060aa39b96bd7048578aa963d659a4f7f06a64e2389-other.sqlite.bz2
0e1e9719f1a825bb3379648f4ce5c093e8b4ec3133b39fda8b861a90fbff2cf0-filelists.xml.gz
4175f582be3173fb368db4e5b8e4d965b12ef30861f8940c0693bc319aa43cae-primary.sqlite.bz2
4c4c6cd6b4ce02ce2012d20fbbd9c5b04987f5bf7d0d1bbfb77a0460d9c26283-filelists.sqlite.bz2
aa8289f99bf8aedf9426be9da6339eed4db430a72d9740b4a502cb1ec150aff8-c6-x86_64-comps.xml.gz
aa8289f99bf8aedf9426be9da6339eed4db430a72d9740b4a502cb1ec150aff8-comps.xml.gz
d0df041d26b67f7e9b5c5828e5126ddbfeb3a998ec8e8426de2d260d8e1215f6-c6-x86_64-comps.xml
d0df041d26b67f7e9b5c5828e5126ddbfeb3a998ec8e8426de2d260d8e1215f6-comps.xml
ebbb976900dc32d92aca820db0d01b8a4cba61f02050435ef7b9ef78c2c2c453-primary.xml.gz
fe32f3bbaa1573d811721823b5161b9f42ba21fa46c4f6f648b0a4e2d574ce16-other.xml.gz
repomd.xml
TRANS.TBL


//删除两个带c6的文件,名字过长,之后会产生重名错误
[root@localhost repodata]# ls
0474a08e24c52579899f4060aa39b96bd7048578aa963d659a4f7f06a64e2389-other.sqlite.bz2
0e1e9719f1a825bb3379648f4ce5c093e8b4ec3133b39fda8b861a90fbff2cf0-filelists.xml.gz
4175f582be3173fb368db4e5b8e4d965b12ef30861f8940c0693bc319aa43cae-primary.sqlite.bz2
4c4c6cd6b4ce02ce2012d20fbbd9c5b04987f5bf7d0d1bbfb77a0460d9c26283-filelists.sqlite.bz2
aa8289f99bf8aedf9426be9da6339eed4db430a72d9740b4a502cb1ec150aff8-comps.xml.gz
d0df041d26b67f7e9b5c5828e5126ddbfeb3a998ec8e8426de2d260d8e1215f6-comps.xml
ebbb976900dc32d92aca820db0d01b8a4cba61f02050435ef7b9ef78c2c2c453-primary.xml.gz
fe32f3bbaa1573d811721823b5161b9f42ba21fa46c4f6f648b0a4e2d574ce16-other.xml.gz
repomd.xml
TRANS.TBL
[root@localhost repodata]# cd ..
[root@localhost CentOS6]# mv comps.xml /tmp/

/* repodata文件中comps.xml文件中包含了安装时用户所见到的与rpm相关的所有内容,他会检查Packages下的rpm包的依赖关系,安装时如果缺少依赖包,他会提示哪个rpm包需要哪些依赖库。同时它的角色相当于图形安装时选择软件包的环节。
Comps.xml主要由三部分组成,组列表,用于描述在安装过程中需要的不同的组件,包括组名、组的描述和包含的rpm包;租的层次结构,用于将组分成不同的类,并定义了组的一个顺序,从而可以决定哪些组需要先安装;最后一个为rpm包以及它们之间的依赖关系。*/



4、 定制kickstart安装脚本ks.cfg文件
/*利system-config-kickstart可以快速生成ks.cfg文件,喜欢自己手写的参考如下示例*/
[root@localhost ~]# vim /application/CentOS6/isolinux/ks.cfg
#platform=x86, AMD64, 或 Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
# Use CDROM installation media
cdrom
# Root password
rootpw --iscrypted $1$Kldv3XiW$fBgcVMAyKrKeHjPXh8IID/
# System authorization information
auth --useshadow --passalgo=sha512
# Use graphical install
graphical
firstboot --disable
# System keyboard
keyboard us
# System language
lang zh_TW
# SELinux configuration
selinux --disabled
# Installation logging level
logging --level=info
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --asprimary --fstype="ext4" --size=500
part swap --fstype="swap" --size=2000
part / --asprimary --fstype="ext4" --grow --size=1

%packages
@base
@basic-desktop
@chinese-support
@debugging
@desktop-debugging
@desktop-platform
@directory-client
@fonts
@ftp-server
@general-desktop
@graphical-admin-tools
@input-methods
@internet-applications
@internet-browser
@java-platform
@legacy-x
@network-file-system-client
@office-suite
@print-client
@remote-desktop-clients
@server-platform
@x11

%end


[root@localhost ~]# vim /application/CentOS6/isolinux/isolinux.cfg

default vesamenu.c32
#prompt 1
timeout 600

display boot.msg

menu background splash.jpg
menu title Welcome to CentOS 6.8!
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

//改这里,将ks.cfg文件路径添加上
label linux
menu label ^Auto Install or upgrade an existing system
menu default
kernel vmlinuz
append ks=cdrom:/isolinux/ks.cfg initrd=initrd.img
label vesa
menu label Install system with ^basic video driver
kernel vmlinuz
append initrd=initrd.img 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 –



5、生成镜像
[root@localhost ~]# yum -y install mkisofs
[root@localhost CentOS6]# mkisofs -o /application/CentOS-6.8-Auto-FTP.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T .

6、生成ISO文件MD5值,用于放置复制过程中数据损坏

[root@localhost CentOS6]# yum -y install isomd5sum

[root@localhost CentOS6]# cd ..
//只能植入一次
[root@localhost application]# implantisomd5 CentOS-6.8-Auto-FTP.iso
Inserting md5sum into iso image...
md5 = fe8849344b0d5b85d9f20566699e1d2a
Inserting fragment md5sums into iso image...
fragmd5 = a94ae6bfc9f4838c0ff65bdd37b1ae8434a3deace97f81dce92f9e172796
frags = 20
Setting supported flag to 0

[root@localhost application]# checkisomd5 CentOS-6.8-Auto-FTP.iso
Press [Esc] to abort check.

The media check is complete, the result is: PASS.

It is OK to use this media.

任务难点:
1、 不熟悉Linux装机过程,导致开机找不到引导文件
2、 Ks.cfg文件的创建。Kickstart工具头一次使用,必要的软件包没有选择上,导致自动化安装出错。