102、定制专属操作系统


102.1、生产场景:

你到某个机房给服务器安装CentOS6的系统并搭建服务,你到现场发现服务器没有外网只有内网,而且没有内网yum仓库,kickstart或cobbler更不用想。

你手上仅有的工具是usb光驱或U盘。怎么搞定,做一个自动化安装的镜像,并把业务所有需要的依赖包全打包进去。

102.2、挂载镜像:

[root@m01 ~]# mount /dev/cdrom /mnt

mount: block device /dev/sr0 is write-protected, mounting read-only

[root@m01 ~]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/sda2 57G 2.3G 52G 5% /

tmpfs 296M 4.0K 296M 1% /dev/shm

/dev/sda1 190M 67M 114M 37% /boot

/dev/sr0 3.7G 3.7G 0 100% /mnt

[root@m01 ~]# cd /mnt

[root@m01 mnt]# ll -ah

总用量 567K

dr-xr-xr-x 7 root root 4.0K 8月 5 2015 .

dr-xr-xr-x. 25 root root 4.0K 12月 17 05:27 ..

-r--r--r-- 2 root root 14 8月 5 2015 CentOS_BuildTag

-r--r--r-- 1 root root 31 8月 5 2015 .discinfo #安装介质的识别信息文件;

dr-xr-xr-x 3 root root 2.0K 8月 5 2015 EFI

-r--r--r-- 2 root root 212 11月 27 2013 EULA

-r--r--r-- 2 root root 18K 11月 27 2013 GPL

dr-xr-xr-x 3 root root 2.0K 8月 5 2015 images #存放必要启动映像文件的目录;

dr-xr-xr-x 2 root root 2.0K 8月 5 2015 isolinux #存放光盘启动时安装界面信息的目录;

dr-xr-xr-x 2 root root 516K 8月 5 2015 Packages #存放安装软件包及信息的目录;

-r--r--r-- 2 root root 1.4K 7月 25 2015 RELEASE-NOTES-en-US.html

dr-xr-xr-x 2 root root 4.0K 8月 5 2015 repodata #存放rpm包依赖的信息;

-r--r--r-- 2 root root 1.7K 11月 27 2013 RPM-GPG-KEY-CentOS-6

-r--r--r-- 2 root root 1.7K 11月 27 2013 RPM-GPG-KEY-CentOS-Debug-6

-r--r--r-- 2 root root 1.7K 11月 27 2013 RPM-GPG-KEY-CentOS-Security-6

-r--r--r-- 2 root root 1.7K 11月 27 2013 RPM-GPG-KEY-CentOS-Testing-6

-r--r--r-- 1 root root 3.4K 8月 5 2015 TRANS.TBL

-r--r--r-- 1 root root 338 8月 5 2015 .treeinfo

102.3、收集rpm包:

[root@m01 mnt]# rsync -avz --exclude={Packages,repodata} /mnt/ /application/CentOS6/

[root@m01 CentOS6]# cd /application/CentOS6/

[root@m01 CentOS6]# ls

CentOS_BuildTag EULA images RELEASE-NOTES-en-US.html RPM-GPG-KEY-CentOS-Debug-6 RPM-GPG-KEY-CentOS-Testing-6

EFI GPL isolinux RPM-GPG-KEY-CentOS-6 RPM-GPG-KEY-CentOS-Security-6 TRANS.TBL

[root@m01 CentOS6]# du -sh

268M .

[root@m01 CentOS6]# mkdir -p /application/CentOS6/Packages

[root@m01 CentOS6]# cd ~

[root@m01 ~]# ls

anaconda-ks.cfg install.log install.log.syslog openvpn.log

[root@m01 ~]# awk '/Installing/{print "rsync -az /mnt/Packages/"$2".rpm /application/CentOS6/Packages/"}' install.log|bash #把当前操作系统中最初装系统时选定的软件通过挂载的镜像包中(/mnt)

拷贝到新的镜像中。

[root@m01 ~]# cd /mnt/Packages/

[root@m01 Packages]# \cp -av tree-1.5.3-3.el6.x86_64.rpm nmap-5.51-4.el6.x86_64.rpm sysstat-9.0.4-27.el6.x86_64.rpm lrzsz-0.12.20-27.1.el6.x86_64.rpm dos2unix-3.1-37.el6.x86_64.rpm telnet-0.17-48.el6.x86_64.rpm /application/CentOS6/Packages/ #增加新的软件包

[root@m01 Packages]# cd /application/CentOS6/

[root@m01 CentOS6]# du -sh

636M .

[root@m01 CentOS6]# ls Packages/ | wc -l #软件包个数

516

102.4、生成repodata目录:

[root@m01 CentOS6]# pwd

/application/CentOS6

[root@m01 CentOS6]# yum install createrepo -y #安装createrepo包;

[root@m01 CentOS6]# rpm -qa createrepo

createrepo-0.9.9-28.el6.noarch

[root@m01 CentOS6]# cp /mnt/repodata/4df092633ebecaeebdd78359a11a3c13f619f22605322e15e5e307beebd8e641-c6-x86_64-comps.xml comps.xml #复制comps文件

[root@m01 CentOS6]# createrepo -g comps.xml . #指定本地软件仓库的组划分,为Packages目录下的rpm包建立索引;

Spawning worker 0 with 516 pkgs

Workers Finished

Gathering worker results

Saving Primary metadata

Saving file lists metadata

Saving other metadata

Generating sqlite DBs

Sqlite DBs complete

[root@m01 CentOS6]# ls repodata/

0f9fa8678bade710bf334e6fee35bac83b14789b6b2de6313e9485d433595cda-other.sqlite.bz2

486d3ee62873814293a1be370640ae9c71863a35c7299eb76739e03369ad0c3f-comps.xml.gz

4df092633ebecaeebdd78359a11a3c13f619f22605322e15e5e307beebd8e641-comps.xml

622ef0bcb8d8d1f19606a25c0c31c4190d7221e1824d26298f9e7c3c0ee34a16-filelists.xml.gz

6bf0def1e8746b53b10bb67a116519ce047f64b605a5480f39184bdcc8c4e4ce-other.xml.gz

79e0d6b88259038c7f4bf27e5e183e13de6a95774e8854ed023d1bb922e98432-primary.xml.gz

908d6f9e712fd0a295f7f93067f8cd7a0c79aad971aa3939d01411658f156569-filelists.sqlite.bz2

bc2f2d4b6c814468efc4e2614b12a3cc5a958de463cb5c3caabcb8b618b5031f-primary.sqlite.bz2

102.4.1、repodata文件中的comps.xml文件中包含了 安装时所建的与rpm相关的内容,它会检查Packages下的rpm包的依赖关系,安装时如果

缺少相关的依赖包,它会提示您哪个rpm包需要哪些依赖库,同时它的角色相当于图形安装时选择软件包的环节;

102.5、定制kickstart安装脚本ks.cfg文件:

[root@m01 ~]# vim /application/CentOS6/isolinux/ks.cfg #定制的启动脚本;

# Kickstart Configurator for CentOS 6.7 by lc

install

cdrom

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$X20eRtuZhkHznTb4$dK0BJByOSAWSDD8jccLVFz0CscijS9ldMWwpoCw/ZEjYw2BTQYGWlgKsn945fFTjRC658UXjuocwJbAjVI5D6/

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

iptraf

ncurses-devel

openssl-devel

zlib-devel

OpenIPMI-tools

screen

%end

%post

>/etc/issue

echo 'welcome lc linux' >/etc/motd

%end

[root@m01 ~]# vim /application/CentOS6/isolinux/isolinux.cfg #默认的启动脚本

label linux

menu label ^Auto Install LC Linux system

menu default

kernel vmlinuz

append ks=cdrom:/isolinux/ks.cfg initrd=initrd.img

102.6、生成镜像:

[root@m01 ~]# yum install mkisofs -y #安装镜像工具制作包;

[root@m01 CentOS6]# cd /application/CentOS6/

[root@m01 CentOS6]# mkisofs -o /application/CentOS-6.7-x86_64-lc.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T .

# -o:制作的镜像文件名;

-b:指定在制作可开机光盘时所需的开机映像文件;

-c: 制作可开机光盘时,mkisofs会将开机映像文件中的全-eltorito-catalog<开机文件名称>全部内容作成一个文件;

-no-emul-boot:非模拟模式启动;

-boot-load-size 4: boot文件加载的大小;

-boot-info-table:生成boot列表;

-R:使用Rock Ridge Extensions;

-J:使用Joliet格式的目录与文件名称;

-v:显示详细的信息;

-T :建立文件名的转换表,适用于不支持Rock Ridge Extensions的系统上;

[root@m01 CentOS6]# ls -l /application/CentOS-6.7-x86_64-lc.iso

-rw-r--r-- 1 root root 671232000 12月 17 09:46 /application/CentOS-6.7-x86_64-lc.iso

102.6.1、植入md5校验码:

[root@m01 CentOS6]# cd /application/

[root@m01 application]# yum install isomd5sum -y #安装isomd5sum软件包;

[root@m01 application]# implantisomd5 CentOS-6.7-x86_64-lc.iso #在iso镜像包中植入md5校验码,只能植入一次;

Inserting md5sum into iso image...

md5 = 4a15e4800790a7d21001cef502457ea9

Inserting fragment md5sums into iso image...

fragmd5 = 5fa4ed4124f6b68b551fa9f8cd51987775fcd2da3a162fb658d889f91dde

frags = 20

Setting supported flag to 0

[root@m01 application]# checkisomd5 CentOS-6.7-x86_64-lc.iso

Press [Esc] to abort check.

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

It is OK to use this media.

102.7、安装制作的镜像包:

1、新建一台虚拟机,稍后安装操作系统;

2、启动虚拟机:

3、镜像主要信息:

最小化安装及额外选择4个包组及tree nmap sysstat lrzsz dos2unix这几个软件;

用户:root;密码:123456;主机名:CentOS6;

磁盘分区boot 200M swap 1G 剩余空间给/;

防火墙和selinux关闭;

上面定制的镜像仅仅包含系统,如果需要将我们的web服务或者mysql服务内嵌进镜像,将这些服务定制成rpm包,然后在102.3节收集rpm包这一步骤

将自己制作的rpm包放进/application/CentOS6/Packages目录,然后再改改第102.5节的ks.cfg文件即可。

如果想修改linux安装时的界面图片,这个图片的路径为isolinux/splash.jpg;

猜你喜欢

转载自www.cnblogs.com/LiuChang-blog/p/12315216.html