CentOS7-1511光盘定制化制作:

部分专业词汇释义:

包组:一个功能块往往由多个rpm安装包才能完成安装,此时所有此功能必备的安装包称之为一个包组。

isolinux.bin:是光盘引导程序,服务器读取光盘的第一步。

isolinux.cfg:isolinux.cfg是isolinux.bin的配置文件,当光盘启动后(即运行isolinux.bin),会自动去找isolinux.cfg文件。

vmlinuz:是linux系统的内核映像,在isolinux.cfg中配置读取。

initrd.img:initrd.img是ramfs内存系统镜像 (先cpio,再gzip压缩),都是编译内核生成的;isolinux.bin根据安装选项找到对应的配置,装载完内核就装载 内存镜像系统,其中包含启动配置文件ks.cfg;

squashfs.img:squashfs.img是根文件系统,当内核启动后就装载squashfs.img并切换根文件系统并执行里面的anaconda程序。

参考文献:

http://www.smorgasbork.com/2014/07/16/building-a-custom-centos-7-kickstart-disc-part-1/

http://www.smorgasbork.com/2012/01/04/building-a-custom-centos-7-kickstart-disc-part-2/

http://www.smorgasbork.com/2012/01/04/building-a-custom-centos-7-kickstart-disc-part-3/

http://www.smorgasbork.com/2012/01/04/building-a-custom-centos-7-kickstart-disc-part-4/

http://blog.csdn.net/ericzhong83/article/details/6921105

http://blog.csdn.net/ericzhong83/article/details/7357536

http://blog.csdn.net/ericzhong83/article/details/7369539

http://blog.csdn.net/ericzhong83/article/details/7380120

http://blog.csdn.net/ericzhong83/article/details/7429192

总体来说安装盘定制化分为三步,1解压(挂载)原生盘,拷贝部分不需要改动的文件   2修改需要改动的文件,定制化裁剪rpm软件包   3压缩ISO

1:解压原生盘,拷贝部分不需要改动的文件:

例如原生光盘位置在 /home/makeISO/CentOS-7-x86_64-DVD-1511.iso

新建一个挂载的文件夹:/home/makeISO/mnt

挂载:mount /home/makeISO/CentOS-7-x86_64-DVD-1511.iso /home/makeISO/mnt

挂载成功后看到的mnt目录如下:

挂载成功后,准备建立与原生盘目录对应的映射文件夹系统,用来将挂载的原生盘拷贝出来(挂载文件为只读,拷贝出来才能修改)

新建文件夹:

/home/makeISO/buildding

/home/makeISO/buildding/all_rpms

/home/makeISO/buildding/isolinux

/home/makeISO/buildding/isolinux/images

/home/makeISO/buildding/isolinux/ks

/home/makeISO/buildding/isolinux/LiveOS

/home/makeISO/buildding/isolinux/EFI

/home/makeISO/buildding/isolinux/Packages

将部分原生盘的文件拷贝到映射文件夹系统上:

拷贝.discinfo

cp /home/makeISO/mnt/.discinfo /home/makeISO/buildding/isolinux/.discinfo

拷贝原生isolinux资源

cp /home/makeISO/mnt/isolinux/* /home/makeISO/buildding/isolinux/

拷贝原生images资源

cp -rf /home/makeISO/mnt/images/* /home/makeISO/buildding/isolinux/images/

拷贝原生LiveOS资源

cp -rf /home/makeISO/mnt/LiveOS/* /home/makeISO/buildding/isolinux/LiveOS/

拷贝efi启动文件资源

cp -rf /home/makeISO/mnt/EFI/* /home/makeISO/buildding/isolinux/EFI/

拷贝comps.xml

cp /home/makeISO/mnt/repodata/*comps.xml.gz /home/makeISO/buildding/comps.xml.gz

注意comps.xml是原生盘rpm包的配置文件,可以当做目录来用,解压,以备后面定制化rpm使用。

gunzip /home/makeISO/buildding/comps.xml.gz

拷贝RPM资源

cp /home/makeISO/mnt/Packages/*.rpm /home/makeISO/buildding/all_rpms

拷贝完部分文件后安装一些打盘必备的服务。

执行:yum -y install systemtap-sdt-devel

进入/home/makeISO/buildding/all_rpms目录下:

执行:rpm -Uvh --force perl-5*-*.el7.x86_64.rpm \

pocale-*.el7.noarch.rpm \

perl-Exporter-*.el7.noarch.rpm \

perl-ExtUtils-Install-*.el7.noarch.rpm \

perl-ExtUtils-MakeMaker-*.el7.noarch.rpm \

perl-ExtUtils-Manifest-*.el7.noarch.rpm \

perl-ExtUtils-ParseXS-*.el7.noarch.rpm \

perl-File-Listing-*.el7.noarch.rpm \

perl-File-Path-*.el7.noarch.rpm \

perl-File-Temp-*.el7.noarch.rpm \

perl-Filter-*.el7.x86_64.rpm \

perl-Getopt-Long-*.el7.noarch.rpm \

perl-HTML-Parser-*.el7.x86_64.rpm \

perl-HTML-Tagset-*.el7.noarch.rpm \

perl-HTTP-Cookies-*.el7.noarch.rpm \

perl-HTTP-Daemon-*.el7.noarch.rpm \

perl-HTTP-Date-*.el7.noarch.rpm \

perl-HTTP-Message-*.el7.noarch.rpm \

perl-HTTP-Negotiate-*.el7.noarch.rpm \

perl-HTTP-Tiny-*.el7.noarch.rpm \

perl-IO-Compress-*.el7.noarch.rpm \

perl-IO-HTML-*.el7.noarch.rpm \

perl-IO-Socket-IP-*.el7.noarch.rpm \

perl-IO-Socket-SSL-*.el7.noarch.rpm \

perl-libs-*.el7.x86_64.rpm \

perl-LWP-MediaTypes-*.el7.noarch.rpm \

perl-libwww-perl-*.el7.noarch.rpm \

perl-macros-*.el7.x86_64.rpm \

perl-Net-HTTP-*.el7.noarch.rpm \

perl-Net-LibIDN-*.el7.x86_64.rpm \

perl-Net-SSLeay-*.el7.x86_64.rpm \

perl-parent-*.el7.noarch.rpm \

perl-PathTools-*.el7.x86_64.rpm \

perl-Pod-Escapes-*.el7.noarch.rpm \

perl-Pod-Perldoc-*.el7.noarch.rpm \

perl-Pod-Simple-*.el7.noarch.rpm \

perl-Pod-Usage-*.el7.noarch.rpm \

perl-podlators-*.el7.noarch.rpm \

perl-Scalar-List-Utils-*.el7.x86_64.rpm \

perl-Socket-*.el7.x86_64.rpm \

perl-srpm-macros-*.el7.noarch.rpm \

perl-Storable-*.el7.x86_64.rpm \

perl-Test-Harness-*.el7.noarch.rpm \

perl-Text-ParseWords-*.el7.noarch.rpm \

perl-Thread-Queue-*.el7.noarch.rpm \

perl-threads-*.el7.x86_64.rpm \

perl-Time-Local-*.el7.noarch.rpm \

perl-TimeDate-*.el7.noarch.rpm \

perl-URI-*.el7.noarch.rpm \

perl-WWW-RobotRules-*.el7.noarch.rpm \

perl-LWP-MediaTypes-6.02-2.el7.noarch.rpm \

perl-XML-Filter-BufferText-*.el7.noarch.rpm \

perl-XML-NamespaceSupport-*.el7.noarch.rpm \

perl-XML-Parser-*.el7.x86_64.rpm \

perl-XML-SAX-*.el7.noarch.rpm \

perl-XML-Simple-*.el7.noarch.rpm \

gdbm-devel-*.x86_64.rpm \

glibc-devel-*.x86_64.rpm \

glibc-headers-*.x86_64.rpm \

kernel-headers-*.x86_64.rpm \

libdb-devel-*.x86_64.rpm \

systemtap-sdt-devel-*.x86_64.rpm \

mailcap-*.noarch.rpm \

createrepo-*.el7.noarch.rpm \

deltarpm-*.el7.x86_64.rpm \

python-deltarpm-*.el7.x86_64.rpm \

libxml2-python-2.9.1-5.el7_1.2.x86_64.rpm \

genisoimage-*.el7.x86_64.rpm \

libusal-*.el7.x86_64.rpm \

squashfs-tools-*.el7.x86_64.rpm

2修改需要改动的文件,定制化裁剪rpm软件包:

工具链接: https://pan.baidu.com/s/1smyELR3 密码: zfep

① 先说裁剪rpm包的问题,这里介绍两款非常精简的小工具(含源码):

1)Utils\gather_packages.pl 此工具可以根据第一步中解压出来的comps.xml完成对原生光盘中rpm包的解析分类,然后将我们需要的包组从源文件目录拷贝到

目标目录中。

调用参数:comps_file      the full path to the comps.xml file   comps.xml的绝对路径

rpm_src_path         the full path to the directory of all RPMs from the distro

RPM包的源文件绝对路径,本例中指的是/home/makeISO/buildding/all_rpms

rpm_dst_path         the full path to the directory where you want to save the RPMs for your kickstart

RPM包的目标文件绝对路径,本例中指的是/home/makeISO/buildding/isolinux/Packages

arch                 the target system architecture (e.g. x86_64)

软件包的系统结构版本,本例中统一使用x86_64

xtra_grps_and_pkgs   a list of extra groups and packages, separated by spaces

需要的包组的id列表,传入时可以用空格分开,比如web-server mariadb等

由于我们的光盘定制比较固定化,所以已经将部分必要的包组ID写入工具内,

详情请参考Utils\gather_packages.pl 第27行

@desired_groups = ('core', 'base', 'web-server', 'mariadb', 'fonts', 'grub2','grub2-efi', 'kernel','createrepo','memcached','net-tools','wget','pciutils');

2)Utils\resolve_deps.pl 此工具可以检测目标文件夹目录中所有rpm包是否可以完成kickstart启动程序需求,如果不满足可以列出缺失的包名,

注意一旦缺失此工具只列出一层依赖缺失关系的包名,需要多次运行直到所有依赖缺失全部解决。

调用参数:rpm_src_path    the full path to the directory of all RPMs from the distro

RPM包的源文件绝对路径,本例中指的是/home/makeISO/buildding/all_rpms

rpm_dst_path    the full path to the directory where you want to copy the RPMs for your kickstart

RPM包的目标文件绝对路径,本例中指的是/home/makeISO/buildding/isolinux/Packages

arch            the target system architecture (e.g. x86_64)

软件包的系统结构版本,本例中统一使用x86_64

了解这两种rpm包工具之后裁剪rpm的工作就变得简单起来,

首先拷贝我们需要的软件包组,调用工具指令:

gather_packages.pl /home/makeISO/buildding/comps.xml /home/makeISO/buildding/all_rpms /home/makeISO/buildding/isolinux/Packages x86_64

将我们自己需要用到的包全部拷贝到/home/makeISO/buildding/isolinux/Packages下,方便最后统一配置yum源

然后检测依赖关系,调用工具指令:

resolve_deps.pl /home/makeISO/buildding/all_rpms /home/makeISO/buildding/isolinux/Packages x86_64

注意:如果发现依赖缺失,请重复调用上面的工具,直到没有缺失为止。

② 改必要的文件和配置,达到定制化和自动部署的目的。(重难点)

之前所做的一切都只是准备工作或者精简工作,从这里开始我们真正的开始定制化linux系统启动盘。

1)生成自己的ks.cfg(kickstart)配置文件,此文件配置了安装系统时候的一些选项,高度可定制化,下面给出适合我们自己使用的例子:

ks.cfg具体内容

# Install OS instead of upgrade同原生,无需改动

install

# Keyboard layouts 中国式键盘

keyboard --vckeymap=cn --xlayouts='cn'

# Root password root密码,这里经过sha512加密,其实密码就是admin

rootpw --iscrypted \$1\$i7FG2PRM\$wT/A.hDqa0j.W6ddthku90

# System timezone 时区设置

timezone Asia/Shanghai

# System language 语言和编码设置

lang zh_CN.UTF-8

# Firewall configuration 禁用防火墙

firewall --disabled

# System authorization information 密码验证方式

auth --useshadow --passalgo=sha512

# Use CDROM installation media 同原生

cdrom

# Use graphical install 同原生

graphical

# SELinux configuration 禁用selinux

selinux --disabled

# Do not configure the X Window System 同原生

skipx

# Reboot affter installation 同原生

reboot --eject

# System bootloader configuration 引导程序参数。系统盘启动方式和启动盘以及分区类型,这里使用mbr方式,专业人士可以自行修改grub.cfg定 # 制EFI启动。

bootloader --location=mbr --boot-drive=sda

autopart --type=lvm

# Clear the Master Boot Record 同原生

zerombr

# Partition clearing information  初始化启动盘及清理

clearpart --all --initlabel --drives=sda

# Post scripts 系统设置结束标志,也是自定义准备脚本的开始标志

%post --nochroot

#!/bin/bash

set -x

exec < /dev/tty3 > /dev/tty3

chvt 3

(

echo "准备工作开始"

echo "拷贝定制化资源..."

) 2>&1 | /usr/bin/tee /var/log/post_install.log

chvt 1

# %end是自定义脚本结束标志

%end

# %post是自定义脚本开始标志

%post --log=/root/post-log.log

#!/bin/bash

#set -x

exec < /dev/tty3 > /dev/tty3

chvt 3

(

echo "################################"

echo "# 自定义开机标题        #"

echo "################################"

) 2>&1 | /usr/bin/tee /var/log/post_install.log

chvt 1

# %end是自定义脚本结束标志

%end

# install packages here 自动安装的包组ID写在这里

%packages

@base

@core

@fonts

@mariadb

@web-server

createrepo

memcached

wget

net-tools

#MySQL-python

python-keystoneclient

python-paramiko

%end

2)生成启动菜单文件isolinux.cfg:

isolinux.cfg具体内容:(没有中文注释的均为与原生盘保持一致)

default vesamenu.c32

timeout 600

display boot.msg

# Clear the screen when exiting the menu, instead of leaving the menu displayed.

# For vesamenu, this means the graphical background is still displayed without

# the menu itself for as long as the screen remains in graphics mode.

menu clear

menu background splash.png

menu title $productName$productVersion

menu vshift 8

menu rows 18

menu margin 8

#menu hidden

menu helpmsgrow 15

menu tabmsgrow 13

# Border Area

menu color border * #00000000 #00000000 none

# Selected item

menu color sel 0 #ffffffff #00000000 none

# Title bar

menu color title 0 #ff7ba3d0 #00000000 none

# Press [Tab] message

menu color tabmsg 0 #ff3a6496 #00000000 none

# Unselected menu item

menu color unsel 0 #84b8ffff #00000000 none

# Selected hotkey

menu color hotsel 0 #84b8ffff #00000000 none

# Unselected hotkey

menu color hotkey 0 #ffffffff #00000000 none

# Help text

menu color help 0 #ffffffff #00000000 none

# A scrollbar of some type? Not sure.

menu color scrollbar 0 #ffffffff #ff355594 none

# Timeout msg

menu color timeout 0 #ffffffff #00000000 none

menu color timeout_msg 0 #ffffffff #00000000 none

# Command prompt text

menu color cmdmark 0 #84b8ffff #00000000 none

menu color cmdline 0 #ffffffff #00000000 none

# Do not display the actual menu unless the user presses a key. All that is displayed is a timeout message.

menu tabmsg Press Tab for full configuration options on menu items.

menu separator # insert an empty line

menu separator # insert an empty line

label linux

#TITLENAME是安装界面的标题名字

menu label ^Install TITLENAME

menu default

kernel vmlinuz

#initrd=配置了initrd.img的读取,inst.stage2=hd:LABEL=配置的是打完光盘后,挂载到服务器上的磁盘名,

#inst.ks=file:/ks.cfg指定了ks文件的路径和名称,file:/指的是initrd.img的磁盘根路径

append initrd=initrd.img inst.stage2=hd:LABEL=TITLENAME inst.ks=file:/ks.cfg net.ifnames=0 biosdevname=0

menu separator # insert an empty line

menu end

3)重新打包生成initrd.img

新建个文件夹用来放解压后的文件

mkdir -p /home/temp

cd /home/temp

将initrd.img解压到temp目录下

(xz -d 只是解压成流,然后将结果传给cpio创建成文件系统,参数-i指cpio进入解压模式,--make-directories在需要的地方创建目录,

--no-absolute-filenames在-i模式中, 即使它们在归档包中有绝对路径名。也在当前目录中创建所有相关文件, )

xz -d < /home/makeISO/buildding/isolinux/initrd.img | cpio -i --make-directories --no-absolute-filenames

将我们在第1步中生成的ks.cfg拷贝到当前目录下

cp -f ks.cfg .

替换完成后,将文件压缩回initrd.img,替换原有的initrd.img

find .会列出当前目录下所有文件,然后传递给cpio,-H newc 指定了归档包的类型,--create指定了cpio进入压缩模式,压缩后的归档包

传递给xz指令,--format=lzma指定了xz压缩算法,--compress指定了xz为压缩操作,--stdout >指定了输出路径

find . | cpio -H newc --create | xz --format=lzma --compress --stdout > /home/makeISO/buildding/isolinux/initrd.img

4)建立光盘需要的repo数据源

createrepo 为创建repo源的指令,comps.xml就是之前使用的rpm包配置文件 /home/makeISO/buildding/isolinux是rpm包所在路径

createrepo -g /home/makeISO/buildding/comps.xml /home/makeISO/buildding/isolinux

创建成功后会在当前目录下看到repodata文件夹。

3:压缩ISO:

压缩指令如下:

mkisofs -o "/home/光盘名字.iso" -b isolinux.bin -c boot.cat -no-emul-boot -V "光盘版本" -boot-load-size 4 -boot-info-table -eltorito-alt-boot

-e images/efiboot.img -R -J -v -T /home/makeISO/buildding/isolinux

mkisofs是打盘指令

-o 光盘的路径及名字

-b 启动引导程序,也就是isolinux.bin

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

-no-emul-boot 非启动模式

-V 光盘卷册集ID

-boot-load-size 4 -boot-info-table -eltorito-alt-boot 都是固定参数,不用管

-e efi启动镜像路径

-R -J -v -T 固定参数不用管

最后的参数是光盘的文件路径

CentOS7光盘定制化相关推荐

  1. ubuntu光盘定制化(在系统ISO里装自定义软件)

    本文主要介绍如何定制Ubuntu系统. 1.准备Ubuntu的原版ISO镜像文件 2. 在ubuntu系统里挂载原版镜像文件 mkdir /mnt/iso mount ubuntu.iso /mnt/ ...

  2. fpm定制化RPM包之nginx rpm包的制作

    fpm定制化RPM包之nginx rpm包的制作 1.安装ruby模块 # yum -y install ruby rubygems ruby-devel 2.添加阿里云的Rubygems仓库,国外资 ...

  3. 自动化部署必备技能—定制化RPM包[转载]

    回顾下安装软件的三种方式: 1.编译安装软件,优点是可以定制化安装目录.按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长.  2.yum安装软件,优点是全自动 ...

  4. 使用lorax 构建定制化操作系统

    构建定制化操作系统 文章目录 构建定制化操作系统 前言 一.构建定制化操作系统步骤 1. 安装所需的linux操作系统. 2. 下载所需工具 3. 构建本地软件库 4. 构建本地所需的操作环境 5. ...

  5. Centos7.9最小化安装与初始化环境配置

    Centos7.9最小化安装与初始化环境配置 镜像源下载地址:http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/ (CentOS-7.9.20 ...

  6. Office 2019/2021三件套定制化安装(Word、Excel、PPT)

    Office 2019/2021定制化安装 Office 2019/2021默认会将所有组件一并安装,不提供图形界面供用户选择组件.这样很多功能用不到,很占资源,下面提供仅安装Office三件套(Wo ...

  7. 面向隐私AI的TensorFlow深度定制化实践

    作者 | Rosetta团队 出品 | AI科技大本营(ID:rgznai100) 之前我们整体上介绍了基于深度学习框架开发隐私 AI 框架中的工程挑战和可行解决方案.在这一篇文章中,我们进一步结合 ...

  8. AI进军服装零售产业:微软小冰与特步推出定制化服装设计生产及零售平台

    (6月22日,北京) 今日,体育用品企业特步集团与微软小冰宣布达成合作,依托微软小冰人工智能创造技术共同推出的定制化服装设计生产及零售平台即将上线.双方携手为消费者提供定制化图案设计,满足每个消费者的 ...

  9. 独家 | 高季尧:定制化优化算法的应用与威力(附PPT)

    随着大数据与人工智能领域技术的发展和应用的普及,算法越发繁多复杂,需要处理的数据量也越发庞大,高性能计算能力就显得尤为重要. 本篇选自高季尧先生近期于清华大数据"技术·前沿"系列讲 ...

最新文章

  1. 随机森林RF中的特征重要性的计算公式VIM
  2. 喜讯不断,BCH又迎来两个代币发行方案
  3. 【java新】Optional pk 空指针
  4. redhat_yum install
  5. python建立字典读取键和值_在Python字典中动态创建键和值
  6. 一句话进行浏览器版本识别
  7. Dive Into Thrift Node-安装
  8. zbb20180929 thread 自旋锁、阻塞锁、可重入锁、悲观锁、乐观锁、读写锁、对象锁和类锁...
  9. 计算机中 amp 是什么符号,这里面的amp;amp;,||是什么意思,相当与数学里面的什么符号?...
  10. 电闹上赠么使用计算机,计算器怎么算n次方 怎么用电脑计算器算次方
  11. python求解二次规划_二次规划问题
  12. 跨进程 API hook
  13. html横线标记_html中横线怎么写代码
  14. 第五章-----Java数组及排序
  15. ipod nano7安装linux,奔泪求助ipod nano5怎么取消外放功能
  16. python+vue+elementui健身房网站管理系统django-pycharm项目
  17. linux系统怎样将图片导出,Linux 下 将PDF文件中的文本,图片导出的方法。
  18. 多模态信息用于推荐系统问题(MMDIN,hyperCTR)
  19. winform数独C#的数独游戏
  20. python 会计应用软件_下列关于会计核算软件记账功能的说法中,正确的有(  )。...

热门文章

  1. c语言.jpg图片转成数组_AWTK——基于C语言开发的GUI框架,功能强大,支持跨平台同步开发...
  2. ​​【​观察】萨提亚为微软中国定下主基调 平台价值释放与生态伙伴共赢
  3. python 白噪声检验-python之时间序列分析(一)
  4. 视觉算法的工业部署及落地方面的技术知识,怎么学?
  5. 其实更换照片底色,使用excel也可以完成。
  6. PLC PLSY 指令
  7. https安全证书提示证书风险怎么办
  8. 智能合约隐私计算之同态加密应用举例
  9. Android检测网络状态监听网络变化
  10. 517coding网站P1960