订制rpm包到Centos7镜像中
本文以CentOS 7.4 最小化镜像(CentOS-7-x86_64-Minimal-1708.iso)为模版
要达到的目的:
1、订制所需的rpm软件包集成到iso文件中
2、制作完成的ISO全自动安装,不需要在安装过程中进行任何选择操作
一、最小化镜像,请去centos官方镜像站下载
下载地址,请自行百度
二、使用VMware Workstation 14 Pro安装CentOS 7.4最小化系统
安装过程略
为什么要在vmware上搞?而不直接用物理机搞呢?
1. vmware可以做快照,你物理机能吗?建议装好系统,配好网络(通外网),配好yum 源和epel源后生成快照,因为要完成目的2,至少需要制作2次iso做测试
2. vmware的网络很好配置。你要是物理机,你得跑机房去配网络,你说说选哪个
3. vmware只需要1个支持虚拟化的台式机就行了。如果你公司有钱,并且你不嫌上面2条麻烦,可以用物理机
三、制作ISO过程操作记录
当第二步完成后,虚拟机的网络、yum源、epel源(因为有些rpm包是在epel中的)都配置好了
制作1个快照,后面会用到的。快照的好处不言而喻
3.1 查看光盘是否已挂载
ls -l /dev/cdrom |grep cd
3.2 将ISO所在的/dev/cdrom挂载到/media
mount /dev/cdrom /media
3.3 安装制作发行版的工具
yum -y install createrepo mkisofs isomd5sum rsync
3.4 同步光盘文件到制作ISO的目录
mkdir /ISO
#同步/media下的文件到/ISO路径下,除了Packages和repodata文件夹
/usr/bin/rsync -a --exclude=Packages/ --exclude=repodata/ /media/ /ISO/
# 在/ISO/文件夹下新建Packages和repodata文件夹
mkdir -p /ISO/{Packages,repodata}
3.5 拷贝当前系统已安装的软件包到/ISO/Packages目录下
最好还是拷贝全量的原Packages下的安装包,或者是yum安装过后再生成install.log否则依赖包会不完整
3.5.1 将目前已安装的rpm包重定向到install.log中
rpm -qa >> /root/install.log
3.5.2 拷贝已安装rpm
awk '{print $0}' /root/install.log |xargs -i cp /media/Packages/{}.rpm /ISO/Packages/
这里可能会输出找不到某些rpm包,主要是3.3中的那些包,暂时不用管
3.6 把需要集成的rpm包名写入text文件
这里我只用1个lrzsz包做集成实验,如果你有很多rpm包,一行写一个,不要有空行,不要重复
[root@localhost ISO]# cat /root/rpms_list.txt
lrzsz
3.7 使用yum下载指定软件包列表(rpms_list.txt中)的所有依赖包,而并不在本机安装
[root@localhost ISO]# mkdir -p /root/test/
[root@localhost ISO]# cat /root/a.sh
#!/bin/bash
for line in `cat /root/rpms_list.txt`
do
echo "download file>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>and it's denpendies"$line
yum install -y --downloadonly --downloaddir=/root/test/ $line
#或者先安装yum -y install yum-utils再yumdownloader $line
done
#yum查找.so或者某个依赖在哪个rpm包中
yum provides {.so名或者依赖名字}
#拷贝包到指定目录
cp /root/test/* /ISO/Packages/
[root@localhost ISO]# sh /root/a.sh
3.8 修改isolinux.cfg文件
inst.ks为ks.cfg文件位置;
inst.stage2为安装介质位置,hd:LABEL为介质标签,例如CentOS7。这个和后续生成ISO镜像文件的命令genisoimage的参数-V有关。
需要修改的地方是:
- 把所有hd:LABEL后面的值都替换为一个后面会用到的字符串,如CentOS7
- 把label check标签下的append行,添加inst.ks=cdrom:/isolinux/ks.cfg
修改完之后的完整内容如下:
[root@localhost ISO]# cat isolinux/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 CentOS 7
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
menu label ^Install CentOS 7
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=CentOS7 quiet
label check
menu label Test this ^media & install CentOS 7
menu default
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=CentOS7 rd.live.check inst.ks=cdrom:/isolinux/ks.cfg quiet
#append initrd=initrd.img inst.stage2=hd:LABEL=CentOS7 inst.ks=cdrom:/isolinux/ks.cfg quiet
menu separator # insert an empty line
# utilities submenu
menu begin ^Troubleshooting
menu title Troubleshooting
label vesa
menu indent count 5
menu label Install CentOS 7 in ^basic graphics mode
text help
Try this option out if you're having trouble installing
CentOS 7.
endtext
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=CentOS7 xdriver=vesa nomodeset quiet
label rescue
menu indent count 5
menu label ^Rescue a CentOS system
text help
If the system will not boot, this lets you access files
and edit config files to try to get it booting again.
endtext
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=CentOS7 rescue quiet
label memtest
menu label Run a ^memory test
text help
If your system is having issues, a problem with your
system's memory may be the cause. Use this utility to
see if the memory is working correctly.
endtext
kernel memtest
menu separator # insert an empty line
label local
menu label Boot from ^local drive
localboot 0xffff
menu separator # insert an empty line
menu separator # insert an empty line
label returntomain
menu label Return to ^main menu
menu exit
menu end
3.9 修改自动化安装配置文件
cp /root/anaconda-ks.cfg /ISO/isolinux/ks.cfg
vi /ISO/isolinux/ks.cfg
在%packages与%end中间加入需要自定义安装的包组(这里我用的自定义包组的groupid是ziding)
[root@localhost ISO]# cat /ISO/isolinux/ks.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
# Network information
network --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
network --hostname=localhost.localdomain
# Root password
rootpw --iscrypted $6$u0SrYp5DcuOPeY4U$FU5xYBPGqHUOinjYp5juphsb/Z646d9gbmugTKth4qhweC1SvqeW5lsTNoj0qbKLJBur9rlWq07o9tOtc2nsL.
# System services
services --enabled="chronyd"
# System timezone
timezone America/New_York --isUtc
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
# Partition clearing information
clearpart --none --initlabel
# Disk partitioning information
part /boot --fstype="xfs" --ondisk=sda --size=1024
part pv.198 --fstype="lvmpv" --ondisk=sda --size=19455
volgroup centos --pesize=4096 pv.198
logvol swap --fstype="swap" --size=1024 --name=swap --vgname=centos
logvol / --fstype="xfs" --size=18427 --name=root --vgname=centos
%packages
@^minimal
@core
chrony
kexec-tools
@ziding
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
3.10 制作修改comps文件
3.10.1 进入/ISO目录,将“*-x86_64-comps.xml”文件拷贝到/ISO/repodata路径下,并重命名成comps.xml
cp /media/repodata/*-x86_64-comps.xml /ISO/repodata/comps.xml
3.10.2 编辑comps文件
3.10.2.1 添加定制rpm包
vi /ISO/repodata/comps.xml
添加自定义的组到该文件
<group>
<!-- <id>{自定义包组的groupid}</id> -->
<id>ziding</id>
<name>My Dependencies</name>
<default>true</default>
<uservisible>true</uservisible>
<packagelist>
<packagereq type="default">python-webob</packagereq>
......
......省略多行
......
......
</packagelist>
</group>
根据rpms_list.txt拼接packagereq
#!/bin/bash
for line in `cat rpms_list.txt`
do
echo " <packagereq type=\"default\">"$line"</packagereq>" >> /root/package.txt
done
3.10.2.2 在指定的环境中添加定制的groupid
<environment>
<id>web-server-environment</id>
<name>Basic Web Server</name>
<description>Server for serving static and dynamic internet content. </description>
<display_order>30</display_order>
<grouplist>
<groupid>base</groupid>
<groupid>core</groupid>
<groupid>web-server</groupid>
<groupid>{自定义包组的groupid}</groupid>
</grouplist>
</environment>
3.11 由comps.xml生成repodata包
切换到ISO/路径下,注意当有新包加入,或者更新comps.xml文件,均需要重新生成repodata文件夹
createrepo -g repodata/comps.xml ./
3.12 制作ISO镜像,注意参数中的-V,和上面的isolinux.cfg文件有关
cd /ISO
genisoimage -joliet-long -V CentOS7 -o CentOS-7-4.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -cache-inodes -T -eltorito-alt-boot -e images/efiboot.img -no-emul-boot /ISO
3.13 制作镜像MD5值
implantisomd5 /ISO/CentOS-7-4.iso
3.14 接下来用新镜像安装系统
在界面中就会有自定义包组的选项,若配置自动安装则启动时全自动安装
当你在安装界面的software中,选了自定义的组名My Dependencies后
注意下方提示,很可能报错,提示里面的某些包的依赖关系没解决,根据提示去下载这些依赖包
把这些依赖包下载到/ISO/Packages下,
恢复到系统快照,重新把以上步骤来一遍
在恢复到系统快照之前,你可以去/ISO/Packages下把已有的rpm包打包下载下来(就可以省去3.5到3.7的步骤),如果你的网速够快,不在乎重复下载,那就直接恢复到快照吧
如有你没有打包所有rpm包的话,回到本文开头再来一遍,记得把后来下载的依赖包拷贝到/ISO/Packages下
如果打包了所有rpm包,把压缩文件上传到/ISO/Packages下解压,删除压缩文件,继续3.8(含)以后的步骤
直到新镜像安装系统时,没有error,没有提示有依赖关系需要解决。会提示“您的group id不存在,是否放弃安装该组内容”,选择“yes”
虽然选择了yes,但是后续安装过程你会发现我们的包依然会被装上
3.15 划重点
比如说你已经做到3.14步骤,并且在虚拟机装系统也没问题,虽然装系统会弹出“您的group id不存在,是否放弃安装该组内容”
这时候,你就大可放心的把这个自定义组(ziding)中的所有rpm包名,放到默认的最小化安装组(core)中去了,就不会弹出任何消息了
具体做法是:
- 不需要在3.9中修改/ISO/isolinux/ks.cfg了,直接使用默认组(core)
- 不需要3.10.2.1了,把3.10.2.1中运行shell脚本生成的标签中的内容增加到默认组(core)中就行了
- 不需要3.10.2.2了
- 这就是本文开头说的,第2次制作iso镜像(集成到core中)
参考链接:
https://www.jianshu.com/p/2d81f88efa62
订制rpm包到Centos7镜像中的更多相关文章
- 在 Docker 的 CentOS7 镜像 中安装 mysql
在 Docker 的 CentOS7 镜像 中安装 mysql 本来以为是个很简单的过程居然折腾了这么久,之前部署云服务器时也没有好好地记录,因此记录下. 特别提醒:本文的操作环境是在 Docker ...
- 将源码包制作成rpm包
Linux系统中一般安装软件有两种方法,源码安装和yum安装或者rpm包安装,由于光盘中的rpm包都是几年前制作成的,所以软件版本都很低,同时yum安装对软件的可定制性很低,所以为了使用最新的软件,一 ...
- redhat 中安装rpm包时遇到异常 “error: Failed dependencies:xinetd is needed by .”
redhat 中安装rpm包时遇到错误 “error: Failed dependencies:xinetd is needed by ....” redhat中安装rpm包时遇到“error: Fa ...
- FPM定制RPM包实践
1.1 快速部署方案 ✔ 问题:当领导给你 100 台已经安装好系统的服务器,然后让优化,让你提出一个快速部署方案. 解答: 1.tar 打包 先编译安装 打包-->分发-->解包(比如 ...
- linux rpm包
rpm包,软件包,程序包,以.rpm结尾的包 我们刚开始安装的Linux系统是最小化安装(minimol),只安装系统,不安装不必要的软件包 刚开始vim,ifconfig,tree等命令都没有,当然 ...
- 烂泥:Linux源码包制作RPM包之Apache
本文由秀依林枫提供友情赞助,首发于烂泥行天下 公司服务器比较多,需要把apache源码包制作成rpm包,然后放到公司内网yum源上进行下载安装.apache的rpm包安装方式比源码安装方式比较快,这能 ...
- 3-1 rpm包命名规则
1.RPM包的来源 <1>RPM包在系统光盘中 ---------------------------------------------------------------------- ...
- RPM包定制
概述 问题:当领导给你 100 台已经安装好系统的服务器,然后让优化,让你提出一个快速部署方案.解答: 1.tar 打包 先编译安装 打包-->分发-->解包(比如 mysql 打包后直接 ...
- 自动化部署必备技能—定制化RPM包[转载]
回顾下安装软件的三种方式: 1.编译安装软件,优点是可以定制化安装目录.按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长. 2.yum安装软件,优点是全自动化 ...
随机推荐
- CesiumJS 添加会动的GIF
由于Cesium使用canvas渲染,如果使用billboard等加载gif图片只能渲染第一帧,导致动图不动.在Cesium的官方示例中找到一段代码可将HTML元素渲染到地图上,将gif以html元素 ...
- Java关于数字工具类~持续汇总~
/** * 01 * 描述:求int数组中最大值 * [时间 2019年3月5日下午3:21:36 作者 陶攀峰] */ public static int test01(int[]sz) { int ...
- 题目:python 打印出如下图案(菱形):
# 题目:打印出如下图案(菱形): # # * # *** # ***** # ******* # ***** # *** # * nu = 1 # 开始值 k = 2 # 变量值 while nu ...
- oracle 简单备注
1. 建立数据库 备注: 1) oracle 不同于mysql 可以直接create database 2) oracle 创建schema时对应一个用户,即该schema的访问用户,与用户一一对应: ...
- 从Android源码修改cpu信息
cpuinfo 网上的文章都是怎么查看/proc/cpuinfo,一直以为这种东西没法改呢,我还是太天真了./proc/cpuinfo是个文件,只读,想直接写肯定不行的.今天研究了一下,发现它的输出逻 ...
- octotree-chrome插件,Github代码阅读神器
1.下载octotree-chrome插件 下载地址 2.安装问题 由于新版chrome为了安全,已经不支持像以前一样拖拽插件进行安装,只能从其 Chrome Web Store 下载安装扩展程序. ...
- 经典排序算法 — C# 版(上)
提起排序,与我们的息息相关,平时开发的代码少不了排序. 经典的排序算法又非常多,我们怎么评价一个排序算法的好坏呢? 其实可以这样想,要细致的比较排序算法好坏,那我们就从多方面尽可能详细的对比 一.效率 ...
- 配置完IDEA开发lua后用idea竟然打不开lua的文件。
1.文件没关联上 File > setting > File Types 完成后即可打开lua文件
- 【Java】几道让你拿offer的知识点
前言 只有光头才能变强 之前在刷博客的时候,发现一些写得比较好的博客都会默默收藏起来.最近在查阅补漏,有的知识点比较重要的,但是在之前的博客中还没有写到,于是趁着闲整理一下. 文本的知识点: Inte ...
- Windows系统pip安装whl包
1.确保PIP的存在 2.CMD命令进入C:\Python34\Scripts里面后再执行PIP命令安装pip install wheel # D: 和cd 地址 3.把文件最好放在\S ...