- 本文作者: wumingx
- 本文链接: https://www.wumingx.com/linux/centos-iso.html
- 本文主题: 基于centos7.6制作自定义的ISO镜像
- 版权声明: 本站所有文章除特别声明外,转载请注明出处!如有侵权,请联系我删除。
以CentOS 7.6为例
全自动安装CentOS,在生产环境下可以有效减少安装的时间,以及可以集成一些软件到镜像上,做一个定制化的处理,所以有必要进行定制化。这样就可以实现2个功能:
- 制作完成的ISO在安装过程中可以选择自定义的软件包
- 制作完成的ISO全自动安装,不需要在安装过程中进行任何选择操作
基础准备与介绍
先下载原始的镜像, http://vault.centos.org/ 由于我是需要做centos 7.6的镜像,直接打开 https://vault.centos.org/7.6.1810/isos/x86_64/ 下载DVD的镜像,注意,尽量选择这个镜像,minimal版本的包太少了,有些还会缺少。
下载好ISO,在虚机机上面安装,安装过程省略,自行百度。此次实验仅使用最小化来安装。
我此次是使用的是KVM进行虚拟化的,具体可以参考:实战CentOS7安装且使用KVM虚拟机
挂载光盘及复制
将原始ISO镜像复制到虚拟机里面,然后进行挂载。
安装工具
安装制作发行版的工具
1 |
yum -y install anaconda repodata createrepo mkisofs rsync |
挂载光盘,同步文件
1 |
mkdir /mnt/cdrom |
挂载光盘之后,各分区的作用:
1 |
. |
复制rpm包
使用脚本拷贝相关软件包到/ISO/Packages目录下,centos6安装之后是可以从/root/install.log读取安装了哪些安装包,但在Centos7的/root下面并没有install.log文件。于是我们可以通过下面脚本用rpm -qa的方式得到所需安装的软件包。
1 |
#!/bin/bash |
或者使用 awk '{print $0}' package.txt |xargs -i cp /mnt/cdrom/Packages/{}.rpm /ISO/Packages/ 来复制即可。
下载自定义软件包以及依赖包
配置yum下载指定软件包列表(rpms_list.txt)以及所有依赖包
1 |
#!/bin/sh |
这一步其实是可以写成脚本,不过需要做一下特殊的判断。
修改isolinux/isolinux.cfg文件
这里指定ks文件引导:
1 |
label linux |
- ks为ks.cfg文件位置;
- inst.stage2为安装介质位置,hd:LABEL为介质标签,例如CentOS7。这个和后续生成ISO镜像文件的命令genisoimage的参数-V有关。最好是把所有hd:LABEL后面的值都替换为一个后面会用到的字符串,如CentOS76
- modprobe.blacklist=nouveau; 禁用nouveau驱动安装,用于NVIDIA驱动的安装准备工作;
- net.ifnames=0 biosdevname=0; 用于禁用centos7的”一致性网络设备命名法”.
生成ks.cfg文件
1 |
cp /root/anaconda-ks.cfg /ISO/isolinux/ks.cfg |
在%packages与%end中间加入需要自定义安装的包组。
1 |
%packages |
制作修改comps文件
简介
先来解释下comps文件。
进入/mnt/cdrom/repodata 目录,将-x86_64-comps.xml文件拷贝到/ISO/repodata路径下,并重命名成comps.xml。由于centos6.5下的comps.xml文件名很长,这里“*”为省略符,实际操作时输入完整文件名。
comps文件以group来区分包,以environment来区分环境,例如centos的mini版本为minimal,其核心包为core。类似于其格式,可定制自己的rpm包,建立自己的group id和name,包含自己的language及描述,最重要的是packagelist,类型default为默认的,mandatory为强制的。如下是默认的comps格式:
- 先定义好一个group的分组,里面包括了package的信息,
1 |
<?xml version="1.0" encoding="UTF-8"?> |
然后在ks.cfg文件里面定义好package就可以实现自动安装,使用 @ 表明安装一个group,
1 |
%packages |
精思化操作
这个方法比较麻烦,但是对于ks.cfg的维护比较规范,即定义好group分组,再然后选择指定的分组进行安装,方法如下:
1) 进入/ISO目录,将“*-x86_64-comps.xml”文件拷贝到/ISO/repodata路径下,并重命名成comps.xml。
1 |
cp /media/repodata/*-x86_64-comps.xml /ISO/repodata/comps.xml |
2) 编辑comps文件
(1) 添加定制rpm包
1 |
<group> |
根据rpms_list.txt拼接packagereq
1 |
#!/bin/sh |
(2) 在指定的环境中添加定制的groupid
1 |
<environment> |
切换到ISO/路径下,由comps.xml生成repodata包。注意当有新包加入,或者更新comps.xml文件,均需要重新生成repodata文件夹
1 |
createrepo -g repodata/comps.xml ./ |
粗放式方法
从上面的方法可以看出,整理一个comps.xml相对比较麻烦,还有一个方法,是不修改这个文件,使用以下方法即可:
1 |
cp /media/repodata/*-x86_64-comps.xml /ISO/repodata/comps.xml |
但这样做的结果是需要在ks.cfg文件里面维护全部的包名,如下:
1 |
%packages --ignoremissing |
制作ISO镜像
注意参数中的-V,和上面的isolinux.cfg文件有关。
1 |
cd /ISO |
制作镜像MD5值
1 |
implantisomd5 /ISO/CentOS-7-6.iso |
Hybird模式
采用“hybird模式”(混合模式),操作系统可以直接刻录成物理光盘,也可以直接做成可引导的U盘。
1 |
isohybrid -v /ISO/CentOS-7-6.iso |
安装系统
只要不出错,一般十来分钟就可以安装完成,但如果出错了,需要使用以下方法来做排查:
由于是text模式,则进入安装界面,会有一个类似图形安装界面的排版,里面可以选择。所有选择均为x的时候,表示正常无误;有!的话,则为错误。错误时需要查看日志,其中Alt+F1快捷键可以进入main界面,Alt+F2快捷键可以进入Shell界面等等。在Shell界面中,可以从/tmp/packaging.log中找到rpm包日志,可以从/tmp/anaconda.log中找到安装过程中的报错日志;可以从/run/install/repo路径下找到外部文件夹;
当选项均为x时,即表示正常无误,可以不进行操作,其自动进入下一步安装过程,直至安装成功,然后自动重启,显示登录界面。
参考资料
https://zhuanlan.zhihu.com/p/140972579
https://blog.csdn.net/chyq112366/article/details/90107753