zoukankan      html  css  js  c++  java
  • CentOS6.7定制化制作ISO

    CentOS6.7定制化制作ISO
    CentOS 6.7-minimal为例。
    欢迎大家转载,并保留原文出处。内容若有错误或补充,请联系:szyzln@126.com









    本文主要讲解如何在已有官方CentOS镜像文件的情况下对系统默认安装的RPM包进行剪裁,同时添加与公司业务相关的应用RPM包,生成一个定制版的ISO确保每次系统安装后业务布署自动化和高度一致。


    本文不对Linux内核进行任何剪裁和优化,不能带你装逼。






    自动化部署文件

    这个文件一般在你安装完CentOS/root目录下生成,分别记录了你安装系统时的系统配置情况和安装了哪些软件包。我们在制作定制版ISO时可以直接使用这个文件,可以减轻一些工作量。当然你直接创建一个文本文件并编辑为下面内容也是可以的。
    # vi /root/ks.cfg
    # Kickstart file automatically generated by anaconda.
    #version=DEVEL
    install
    cdrom
    lang zh_CN.UTF-8
    keyboard us
    rootpw  --iscrypted $6$wkkHFjodgcq5lXPL$Y6rKvuAbZcxGT144.EDLv17Sz706nxUJvDw1ODUEh.B21ZFSvO5NXsW1jeKEu1jxr45Q5NlM9gt95vt9PSpCA0
    firewall --service=ssh
    authconfig --enableshadow --passalgo=sha512
    selinux --disabled
    timezone --utc Asia/Shanghai
    #bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
    # The following is the partition information you requested
    # Note that any partitions you deleted are not expressed
    # here so unless you clear all partitions first, this is
    # not guaranteed to work
    network --hostname YueKeOS --onboot yes  --bootproto dhcp  --nameserver 223.5.5.5,223.6.6.6
    %pre
    %end
    %packages --nobase
    @core
    %end
    %post
    %end



    准备环境

    # yum install createrepo mkisofs isomd5sum squashfs-tools
    # mkdir /root/YueKeOS
    [说明]:以后统一将”/root/YueKeOS”称为ISO制作目录。
    # mount /dev/cdrom /media/
    # cp -r /media/* /root/YueKeOS/
    # cp  /media/.discinfo /root/YueKeOS/
    # cp  /media/.treeinfo /root/YueKeOS/
    # cp /root/anaconda-ks.cfg isolinux/ks.cfg
    # chmod +w isolinux/isolinux.cfg
    找到下面一行内容,在其后面加上一部分:
    append initrd=initrd.img ks=cdrom:/isolinux/ks.cfg asknetwork
    [说明]:斜体部分可选,代表是否在安装时对网络部分进行提示交互。





    安装前运行自定义脚本

    %pre表示系统安装前,此时ISO镜像文件被挂载到内存中Linux/mnt/source
    具体操作:暂无




    安装后运行自定义脚本

    %post 在系统安装后执行
    --不带参数,其实就是在真实的操作系统里操作。
    --nochroot 已安装的真实操作系统被挂载到内存虚拟操作系统中的/mnt/sysimage目录。这个参数的用途主要是配合%pre使用的。先将光盘里的文件copy到内存运行的虚拟操作系统,再从内存虚拟操作系统copy到已安装的真实操作操作。
    %post --nochroot
    mkdir /media
    mount /dev/cdrom /media/
    cp /media/test1.txt /mnt/sysimage/root/
    %end
    [说明]:上面命令实现了从ISO镜像中拷贝文本文件到安装好的真实操作系统中。



    利用系统安装得到RPM

    简单地来讲,系统安装主要是将光驱作为本地YUM源。那么只要找到第一次安装到底安装了哪些RPM包,则这些RPM包完全满足YUM源,不存在任何依赖关系破损。
    centos系统安装完成后生成的/root/install.log。这个文件记录的恰恰是系统安装时安装了哪些RPM(不管是系统默认还是用户自定义勾选的)。我们可以从光驱里拷贝对应的RPM包到ISO制作工作目录里的Packages目录。
    第一步:清空ISO制作目录里的Packages和repodata俩个目录里的所有内容。并重新参照install.log从光驱里拷贝对应的RPM包。
    # rm Packages/* repodata/* -rf
    # awk '{print $2}'  /root/install.log |xargs -i cp /media/Packages/{}.rpm /root/YueKeOS/Packages/





    系统首次更新

    官方ISO可能比较旧,安装后我们可能需要执行“yum upgrade”来升级。虽然这种更新不包括操作系统内核和跨越发行版本,但至少可以保证已安装的软件包升级到最新。
    1、修改YUM配置文件。以确保YUM命令操作会保存RPM
    # /etc/yum.conf
    keepcache=1 1为保存 0为不保存,默认不保存
    2、yum upgrade
    3、拿到YUM命令下载到本机缓存库里的包,并拷贝到ISO制作目录里。
    # mv /var/cache/yum/x86_64/6/updates/packages/* /root/YueKeOS/Packages
    # mv /var/cache/yum/x86_64/6/base/packages/* /root/YueKeOS/Packages
    4、删除旧的对应RPM包。当然也可以不用删除。我这里的测试结果是系统最终安装的版本是升级包的最新版本。






    利用YUM来搜集RPM

    很多情况下,除了系统最少安装包外,我们还需要额外安装业务相关软件,比如常见的VIMMySQL等。系统默认YUM安装MySQL5.1,版本太旧了。我们需要让ISO集成更新的MySQL 5.6版本并默认安装。

    1、修改YUM配置文件。以确保YUM命令操作会在本机保存下来RPM
    # /etc/yum.conf
    keepcache=1 1为保存 0为不保存,默认不保存
    2yum install vim  
    [说明]:从yum安装界面上显示信息,vim-enhanced才是完整的软件包名称
    3、yum install mysql-community-server
    搭建MySQLYum源,详见官网说明:
    httpp://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/
    4、将所有此次安装的软件安装包和依赖包,全部转移到ISO制作目录的Packages目录。







    创建光驱YUM仓库

    1、准备资源库列表XML文件
    # cp /media/repodata/*minimal-x86_64.xml /root/minimal-x86_64.xml
    <comps>
      <group>
        <id>core</id>
        <name>Core</name>
    <description/>
        <default>true</default>
        <uservisible>false</uservisible>
         <packagelist>
         <packagereq type='mandatory'>acl</packagereq>
         <packagereq type='mandatory'>xfsprogs</packagereq>
         此处省略N行   
         <packagereq type='mandatory'>vim-enhanced</packagereq>
         <packagereq type='mandatory'>mysql-community-server</packagereq>
       </packagelist>
      </group>


    <category>
        <id>core</id>
        <name>Core</name>
        <description>Minimal server packages set</description>
        <display_order>60</display_order>
        <grouplist>
          <groupid>core</groupid>
        </grouplist>
      </category>
    </comps>
    [说明1]:让我们来打量一下XML文件,它接下来将被“reaterepo -g参数这种形式来引用的。它的作用就是在生成YUM仓库后将RPM列表归为几个group。哪些group id可以安装由ks.cfg来指定。我们在网上看到一些关于创建本地YUM源并没有这个配置文件,是因为创建本地YUM源根本不需要。
    [说明2]:经过实际测试,只需要在资源库列表中列出你要安装的软件包完整名称即可,其依赖包可以不用列出。当然你也可以创建新的group id给自己的业务定制包,也可以按照YUM的安装顺序将依赖包列入资源库列表中。



    3、重新生成repo
    # declare -x discinfo=$(head -1 /root/YueKeOS/.discinfo)
    # createrepo -u "media://$discinfo" -g /root/minimal-x86_64.xml /root/YueKeOS/
    [说明]:.discinfo隐藏文件里的第一行数字为光盘介质编号,可以随便编写。并制作repo时必须要引用它。




    自己制作RPM
    暂无








    其它修饰

    isolinux.cfg
    光盘启动时安装选项菜单。修改背景图
    # mount -o loop images/install.img /mnt/
    [说明:挂载后可以浏览,但无法修改。需要将里面的全部文件拷贝到另外一个临时目录。待修改完成后再制作成install.img文件。假设这个临时目录名为“install-image”
    # mksquashfs install-image/ /root/install.img -all-root -noF
    光盘安装软件包进度时上方背景图



    制作ISO

    # cd /root
    # mkisofs -o YueKeOS-6.7.1_64.iso -input-charset utf-8 -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T -joliet-long  /root/YueKeOS/
    [说明]:mkisofs实际上是链接genisoimage命令
    # implantisomd5 YueKeOS-6.7.1_64.iso
  • 相关阅读:
    ios webapp调试神器MIHTool
    20个正则表达式
    jQuery技巧
    浏览器判断和移动端的判断
    JavaScript 被忽视的细节
    移动端Web页面问题解决方案
    virtualenv创建虚拟环境
    init.d文件夹
    python連接mysql數據庫
    const和define的使用区别
  • 原文地址:https://www.cnblogs.com/flintlovesam/p/6605788.html
Copyright © 2011-2022 走看看