首页 > 技术文章 > 定制专属于你的系统安装镜像

flytor 2019-08-26 21:09 原文

1. 生产场景

领导要求你到某个机房给服务器安装CentOS6的系统并搭建服务,你到现场发现服务器没有外网只有内网,而且没有内网yum仓库,kickstart或cobbler更不用想。你手上仅有的工具是usb光驱或U盘。怎么搞定??

做一个自动化安装的镜像,并把业务所有需要的依赖包全打包进去。开工…

2. 挂载镜像

    1. #→首先自备CentOS-6.7-x86_64-bin-DVD1.iso镜像(3.63G),然后将镜像挂载到虚拟机。
    2. #→CentOS6.8的镜像也可,只要后面你会随机应变。下载地址https://pan.baidu.com/s/1dFDiJst
  •  
  • [root@zyiso ~]# mount /dev/cdrom /mnt/
  • mount: block device /dev/sr0 is write-protected, mounting read-only
  • [root@zyiso ~]# df -h
  • Filesystem Size Used Avail Use% Mounted on
  • /dev/sda3 19G 1.5G 16G 9% /
  • tmpfs 491M 0 491M 0% /dev/shm
  • /dev/sda1 190M 36M 145M 20% /boot
  • /dev/sr0 3.7G 3.7G 0 100% /mnt
  • [root@zyiso mnt]# ll -ah
  • 总用量 567K
  • dr-xr-xr-x 7 root root 4.0K 8月 5 2015 .
  • dr-xr-xr-x. 23 root root 4.0K 8月 24 11:48 ..
  • -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
  • -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
  •  
  • 常见文件目录用途说明:
  • isolinux目录存放光盘启动时的安装界面信息
  • images目录包括了必要的启动映像文件
  • Packages目录存放安装软件包及信息
  • repodata目录存放rpm包依赖信息
  • .discinfo文件是安装介质的识别信息

    3. 收集RPM包

  • [root@zyiso mnt]# mkdir -p /application/CentOS6 
  • [root@zyiso mnt]# rsync -a –exclude=Packages/ –exclude=repodata/ /mnt/ /application/CentOS6/
  • [root@zyiso mnt]# cd /application/CentOS6/
  • [root@zyiso CentOS6]# ls
  • CentOS_BuildTag GPL RELEASE-NOTES-en-US.html RPM-GPG-KEY-CentOS-Security-6
  • EFI images RPM-GPG-KEY-CentOS-6 RPM-GPG-KEY-CentOS-Testing-6
  • EULA isolinux RPM-GPG-KEY-CentOS-Debug-6 TRANS.TBL
  • [root@zyiso CentOS6]# du -sh 
  • 268M 
  •  
  • [root@zyiso CentOS6]# mkdir -p /application/CentOS6/Packages
  • [root@zyiso CentOS6]# cd 
  • [root@zyiso ~]# ls 
  • anaconda-ks.cfg install.log install.log.syslog
  •  
  • [root@zyiso ~]# awk ‘/Installing/{print “rsync -a /mnt/Packages/”$2″.rpm /application/CentOS6/Packages/”}’ install.log|bash
  •  
  • [root@zyiso Packages]# pwd
  • /mnt/Packages
  • [root@zyiso Packages]# cp 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@zyiso ~]# cd /application/CentOS6/Packages/
  • [root@zyiso Packages]# du -sh
  • 368M .
  • [root@zyiso Packages]# ls|wc -l
  • 516
  •  
  • #→生成repodata目录
  • [root@zyiso ~]# yum -y install createrepo
  • [root@zyiso CentOS6]# pwd
  • /application/CentOS6
  •  
  • #→复制文件名包含comps.xml文件,这个文件存放包组信息。
  • [root@zyiso CentOS6]# cp /mnt/repodata/4df092633ebecaeebdd78359a11a3c13f619f22605322e15e5e307beebd8e641-c6-x86_64-comps.xml comps.xml
  • [root@zyiso CentOS6]# createrepo -g comps.xml .
  • 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@zyiso CentOS6]# ls repodata/
  • 1796ee77e0a9d1aedf4fc8e8bb112a05f58b37a48a97b3ad4ae96862f334e93b-primary.xml.gz
  • 1da2cadaadd73048ae5ac2275b46851b8829278568dcad09608015f0201ea42e-other.sqlite.bz2
  • 3c0626aafa36099243a809bcb7e4b2ae85d781e0b361916d52f73965582be885-other.xml.gz
  • 418aeb7685093a6eb90725f2c2c5e3306b3697f7a7c13067dee102e645bde860-filelists.xml.gz
  • 486d3ee62873814293a1be370640ae9c71863a35c7299eb76739e03369ad0c3f-comps.xml.gz
  • 4df092633ebecaeebdd78359a11a3c13f619f22605322e15e5e307beebd8e641-comps.xml
  • 54bcf19d09ed0221351fddc12a6d80f061c1c7adc83135a5940410617d0cbfd0-primary.sqlite.bz2
  • d7ad8946692006ed04f68494acb16da97fffa216b102568b809e9e1e519956c4-filelists.sqlite.bz2
  • repomd.xml
  •  
  • [root@zyiso CentOS6]# mv comps.xml /tmp/

    repodata文件中comps.xml 文件中包含了安装时用户所见到的与rpm相关的所有内容,它会检查Packages下的RPM包的依赖关系,安装时如果缺少依赖包,它会提示您哪个RPM 包需要哪些依赖库。同时它的角色就是相当于图形安装时选择软件包那个环节。

    comps.xml主要由三部分组成,首先是组列表,它描述了在安装过程中需要的不同的组(或组件),包括组名、组的描述和包含的RPM包;其次是组的层次结构,它将组分成不同的类,并定义了组的一个顺序,从而可以决定哪些组需要先安装;最后为一系列RPM包以及它们之间的依赖关系。

    4. 定制kickstart安装脚本ks.cfg文件

    下面文件的含义大家可以参考另外一篇文章《自动化运维系列1–Kickstart全自动安装操作系统》

  • [root@zyiso ~]# vim /application/CentOS6/isolinux/ks.cfg
  • # Kickstart Configurator for CentOS 6.7 by yao zhang
  • 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=oldboyedu
  • 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
  •  
  • %post
  • #→在这里可以定制一下系统
  • echo “Welcome to the Old Boys Education iso image”>/etc/motd
  • %end
  •  
  •  
  • [root@zyiso ~]# 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.7!
  • 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
  •  
  • #→修改此处
  • label linux
  • menu label ^Auto Install Oldboyedu Linux System
  • menu default
  • kernel vmlinuz
  • append ks=cdrom:/isolinux/ks.cfg initrd=initrd.img
  • 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@zyiso CentOS6]# yum -y install mkisofs
  •  
  • [root@zyiso CentOS6]# mkisofs -o /application/CentOS-6.7-x86_64-oldboyedu.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@zyiso ~]# yum -y install isomd5sum
  • #→以前每做出一个ISO都会同时生成一个md5值文件,防止复制过程中数据损坏;现使用implantisomd5和checkisomd5两个工具,可以将md5值嵌入ISO中并直接效验,方便不少。
  • [root@zyiso application]# implantisomd5 CentOS-6.7-x86_64-oldboyedu.iso #→只能植入一次
  • Inserting md5sum into iso image…
  • md5 = f4e43ec24d18fa09047f852adf6d2051
  • Inserting fragment md5sums into iso image…
  • fragmd5 = b3854c6e41d46c688616dda1e9c881e2119a271558f759b6b7eeee733ac1
  • frags = 20
  • Setting supported flag to 0
  • [root@zyiso application]# checkisomd5 CentOS-6.7-x86_64-oldboyedu.iso 
  • Press [Esc] to abort check.
  •  
  • The media check is complete, the result is: PASS.
  •  
    1. It is OK to use this media.

       

      提供镜像下载:https://pan.baidu.com/s/1dFDiJst

       

      镜像主要信息:

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

      2. 用户root密码123456

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

      4. 防火墙和selinux关闭

      5. 大家按需要修改网卡/主机名/用户密码

      7. 安装制作的ISO镜像

       

      大家可以看到这张图片被修改了,大家想改的话,这个图片的路径为isolinux/splash.jpg

       

      8. 后记

      上面定制的镜像仅仅包含系统,如果需要将我们的web服务或者mysql服务内嵌进镜像,读者可以学习完下一篇文章《自动化运维系列4–定制化专属于你的软件包》,将这些服务定制成rpm包,然后在第3节收集rpm包这一步骤将自己制作的rpm包放进/application/CentOS6/Packages目录,然后再改改第4节的ks.cfg文件即可。Good Luck!

推荐阅读