订制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安装软件,优点是全自动化 ...
随机推荐
- Android For OpenCV的环境搭建
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函数和少量 C++ 类 ...
- DataPipeline在大数据平台的数据流实践
文 | 吕鹏 DataPipeline架构师 进入大数据时代,实时作业有着越来越重要的地位.本文将从以下几个部分进行讲解DataPipeline在大数据平台的实时数据流实践. 一.企业级数据面临的主要 ...
- SVN简介与安装
SVN 简介: Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据. 这些数据放置在一个中央资料档案库(repository) 中. 这 ...
- Centos7.3离线(rpm方式)安装mysql服务
1.mysql官网下载安装包,官网地址:www.mysql.com [root@seiang software]# ll total 580020 -rw-r--r--. 1 root root 59 ...
- cmake 入门实战
当你的程序只有一个源文件时,直接就可以用gcc命令编译它 g++ main.cc 这样会输出一个main.out https://www.hahack.com/codes/cmake/
- .NET微服务调查结果
.NET Core就是专门针对模块化的微服务架构而设计, 在2018年国庆时间展开.NET微服务的使用情况,本次调查我们总计收到了来自378个开发者的调查.从落地现状.架构体系.未来趋势等方面对微服务 ...
- Java三种方式实现栈和队列
栈:LIFO(后进先出) 队列:FIFO(先进先出) 1.栈:LIFO(后进先出) 1.1.栈的顺序存储结构实现: /** * 基于数组实现的顺序栈 * @param <E> */ pub ...
- Kafka 消费者相关配置
消费者相关配置类为 org.apache.kafka.clients.consumer.ConsumerConfig 具有以下配置参数 1. GROUP_ID_CONFIG = "grou ...
- Tampermonkey还你一个干净整洁的上网体验
作为一个前端开发,平时难免要经常浏览一些博客.技术网站,学习新的技术或者寻找解决方案,可能更多是ctrl+c和ctrl+v(^_^|||),但是目前很多网站的布局以及广告对于我们阅读文章造成了很多的障 ...
- 我所不知道的Makefile语法
问题一: $(CC) -c $^ -o $(ROOT_DIR)/$(OBJS_DIR)/$@ 这里的$^和$@是设么意思? 经过查找,该特殊符号的用法如下: 假如:all:library.cpp ma ...