本文主要介绍如何根据官方的Centos镜像文件,在保留原有默认安装的RPM包的基础下,添加自己所需要的RPM包的,最终生成一个自定制版的ISO,节省了宝贵的时间并确保了安装的定制性。对于其他没有介绍的修改,后续在实践中会进行更新。

本文基于Centos7.3版本制作的ISO镜像,其他版本可能本文介绍的制作过程有所差别。

搭建基础环境

#yum install createrepo mkisofs isomd5sum squashfs-tools

#mkdir /root/PanISO

将/root/PanISO作为ISO的制作目录

#mount /dev/cdrom /media/

#cp -r /media/* /root/PanIOS/

#cp  /media/.discinfo /root/PanIOS/

#cp  /media/.treeinfo /root/PanIOS/

# chmod +w /root/PanISO/isolinux/isolinux.cfg

注意:如果你想用Centos7.3的ISO进行挂载也是可以的

#mount -o loop /root/CentOS-7-x86_64-DVD-1611.iso /mnt

修改isolinux.cfg文件,将“append initrd=initrd.img”后面的当前行内容删除,并加入“ks=cdrom:/isolinux/ks.cfg”。

menu color timeout_msg  #ffffffff # none

# Command prompt text
menu color cmdmark #84b8ffff # none
menu color cmdline #ffffffff # 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 Linux
kernel vmlinuz
append initrd=initrd.img ks=cdrom:/isolinux/ks.cfg

这步的作用是实现自动化安装,如果不加上就需要手动配置参数就行下一步安装了。

修改自动化安装配置文件

#cp /root/anaconda-ks.cfg /root/PanISO/isolinux/ks.cfg

本次制作iso用的是系统安装成功生成的默认的anaconda-ks.cfg文件,并未做修改,如果有需求可以自行修改。下面是我使用的示例,并稍加了一些文件配置说明(详细配置说明可以查找kickstart配置文件):

#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- # Network information 网卡配置
network --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
network --hostname=localhost.localdomain # Root password root用户的密码
rootpw --iscrypted $$Ok9Jcj51va/3x830$/6rLkpu8k2tPCmd7byUBE7wuRexmuoMzp0jAelDRYMAIk9yRL/84mCFrOTp5QYWJNVcEIB7wWgw8byp0r21vT0
# System services
services --disabled="chronyd"
# System timezone 时区
timezone Asia/Shanghai --isUtc --nontp
user --name=pan --password=$$ONSyoQ.S58OJpcnj$jUz6vDadzY5wZ39fr0dEONbI/iNIeVkpRMaUjz9ZJbIqQLPLKqq8ZJWRoDGjolLJfkwmw58Dp5xPhKufAca8y/ --iscrypted --gecos="pan"
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
autopart --type=lvm
# Partition clearing information
clearpart --none --initlabel
%pre
%end
#安装包的信息
%packages
@^minimal
@core
kexec-tools %end
%post
%end
 
%addon com_redhat_kdump --enable --reserve-mb='auto'

%end

%anaconda
pwpolicy root --minlen= --minquality= --notstrict --nochanges --notempty
pwpolicy user --minlen= --minquality= --notstrict --nochanges --notempty
pwpolicy luks --minlen= --minquality= --notstrict --nochanges --notempty
%end

%pre表示系统安装前,%post 表示在系统安装后执行,这样可以定制自己的自动化脚本

 获取系统默认安装的RPM包和需要添加的RPM包

在使用Centos系统安装完成后会生成/root/install.log,该文件记录了系统安装时安装的RPM包信息。如果没有该文件,可以手动生成(新安装的干净系统):

#rpm -qa >> /root/install.log

清空ISO制作目录里的Packages和repodata两个目录里的所有内容,并根据install.log将所需安装包放入Packages文件夹内:

# awk '{print $2}'  /root/install.log |xargs -i cp /media/Packages/{}.rpm /root/PanIOS/Packages/

注:如果是手动生成的install.log,将'{print $2}' 改为'{print $0}' 。

因为需要自定制iso,需要预安装其他的包,将解决好依赖关系的包全部放入/root/PanIOS/Packages/中:

多数情况下我们会根据yum来下载安装包,下面介绍两种获取下载安装包的方法:

1.修改yum的配置文件,将yum下载的安装包保存起来

#vim /etc/yum.conf

修改keepcache=1 (1为保存,0为不保存,默认是0)

修改后使用yum安装的包会保存在“/var/cache/yum/”下。

2.通过yum指令的--downloadonly可以只下载安装包,不进行安装

#yum -y install --downloadonly --downloaddir=/root/test/ <file.name>

该指令我会将安装的包统一放在/root/test/目录下,yum update同样可以使用该方法,这样定制后的ISO中RPM包都是最新版本的。

修改comp.xml文件,定义RPM包组

.xml文件的写法如下:

<group>
<id>组的ID,非数字</id>
<name>组的名字</name>
<description>组的描述</description>
<default>是否预安装,true或者false</default>
<uservisible>是否可见,true或者false</uservisible>
<langonly>zh</langonly> #仅在某个语系的安装界面中显示,可选项
<packagelist>
<packagereq requires="依赖包" type="conditional">软件包1</packagereq>
<packagereq type="default">软件包2</packagereq>
<packagereq type="default">软件包3</packagereq>
</packagelist>
</group> ......
<category>
<id>分类的名字,非数字</id>
<name>将显示在左侧列表里</name>
<description>将显示在下面的描述栏里</description>
<grouplist>
<groupid>组1的ID</groupid>
<groupid>组2的ID</groupid>
</grouplist>
</category>
<category>

简单来说,一个group中包含若干个RPM包,一个category则包含了若干个group,在安装系统的时候,在选择自定义安装的步骤中,左侧的是category,右侧是group。

1.group id我们可以在ks.cfg来指定

%packages
@^minimal
@core
kexec-tools

示例中的@core就是一个组的名称,如果我们想添加指定的包组,就可以在ks.cfg文件中指定;

2.在group中的包含的RPM只需要填入完整包的名称即可,不需要把依赖也添加进去,只需要在Packages文件夹内将所需的依赖添加完整即可;

3.在group中添加完整包的名称是yum安装下显示的包名,比如vim,它的完整包的名称是vim-enhanced;

4.当然你也可以在Packages中保留完整的Centos系统的RPM包,将自定制的分类和组添加进去,这样在安装界面就可以发现我们自定义的category和group。

重新生成repo

#cd PanISO

#createrepo -g comps.xml .

注意:在CentOS下需要根据'.discinfo'来设置'baseurl'(declare -x discinfo=head -1 .discinfo; createrepo -u "media://$discinfo"...); 在CentOS7中不再需要如此做,实际上如果在CentOS7中执行了这个命令,在安装的过程中,可能会报错"RepoError after 10 retries: Insufficient space in download directory /run/install/repo/Packages"

在其他版本中可执行如下指令:

# declare -x discinfo=$(head -1 /root/PanIOS/.discinfo)

# createrepo -u "media://$discinfo" -g /root/minimal-x86_64.xml /root/PanIOS/

修改安装界面图标背景

以图标为例,其他操作类似

将安装界面左上角的该图标换为

解压

# unsquashfs /root/PanISO/LiveOS/squashfs.img

把解压后的文件进行挂载,然后操作

#mount -o loop,rw squashfs-root/LiveOS/rootfs.img /media

/media/usr/share/anaconda/pixmaps/sidebar-logo.png为该安装界面的图标,只需根据自己的需要替换即可,分辨率要跟原图保持基本一致,要不会出现图标过大的情况

将解压后的文件重新打包

#mksquashfs squashfs-root/   squashfs.img

并将生成的squashfs.img替换原来的squashfs.img

制作ISO

#mkisofs -o Pan-7.3.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/PanIOS/

#implantisomd5 Pan-7.3.iso

参考:https://www.cnblogs.com/flintlovesam/p/6605788.html

自定制Centos7.3系统镜像(ISO)的更多相关文章

  1. Remastersys---制作当前的ubuntu系统镜像iso,自定义ubuntu系统

    Remastersys---制作当前的ubuntu系统镜像iso,自定义ubuntu系统 Remastersys则款软件,我们就是使用他来将当前的系统制作成iso镜像,一方面可以用来备份系统,二来可以 ...

  2. linux系统镜像iso文件下载

    linux系统镜像iso文件下载 首先你要选择你想要的linux版本,常见版本有CentOS,Ubuntu.选择一个你需要的. 有两个镜像站推荐: 网易镜像站:http://mirrors.163.c ...

  3. centos7利用系统镜像修复grub

    1 故障描述 由于错误操作,导致grub配置文件失效,系统开机后一直卡在下面的画面. 2 解决办法 这时候,就要利用系统镜像光盘,进入修复模式,然后按下面图示操作 进入镜像的shell环境,如下图所示 ...

  4. MSDN原版系统镜像ISO下载站

    官网 网址1:http://www.imsdn.cn/ Windows 10 最新版本 1909 正式版 ISO 镜像下载 (微软 MSDN / VL 官方原版系统) 网址2:https://www. ...

  5. 配置LANMP环境(1)-- 安装虚拟机VMware与安装CentOS7.2系统

    一.安装虚拟机VMware 1.下载VMware傻瓜式安装 2.配置                二.安装CentOS7.2系统 镜像下载链接 1.放入ios镜像文件之后,启动虚拟机,选择7.0+的 ...

  6. 初涉定制linux系统之——自动化安装Centos系统镜像制作

    最近碰到个需求:要在内网环境安装centos6.5系统并搭建服务,但由于自动部署脚本里安装依赖包使用的是yum安装,而服务器无法连接外网,实施人员也不会本地yum源搭建O__O "….. 本 ...

  7. 基于Centos7.2使用Cobbler工具定制化批量安装Centos7.2系统

    1.1    定制Centos_7_x86_64.ks文件内容 # Cobbler for Kickstart Configurator for CentOS 7.2.1511 by Wolf_Dre ...

  8. Docker上定制CentOS7镜像

    原文:Docker上定制CentOS7镜像 前言: 环境:centos7.5 64 位 正文: 第一步:下载centos7镜像 docker pull centos 第二步:建立centos7的容器 ...

  9. 安装Win7或者XP系统用虚拟光驱加载Win7或者XP镜像 iso文件xp win7wim文件

    安装Win7或者XP系统用虚拟光驱加载Win7或者XP镜像 iso文件xp win7wim文件 http://pcedu.pconline.com.cn/teach/xt/1201/2657834_8 ...

随机推荐

  1. 【2016.4.6】结对编程 终章 THE END

  2. Linux内核分析 读书笔记 (第四章)

    第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间.进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有通过调度程序的合理调度,系统资源才能最大限 ...

  3. Linux内核分析 读书笔记 (第五章)

    第五章 系统调用 5.1 与内核通信 1.调用在用户空间进程和硬件设备之间添加了一个中间层.该层主要作用有三个: 为用户空间提供了硬件的抽象接口. 系统调用保证了系统的稳定和安全. 实现多任务和虚拟内 ...

  4. 《Linux内核分析》第七周: 可执行程序的装载

    LINUX内核分析第七周学习总结--可执行程序的装载 杨舒雯(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/ ...

  5. Unigine mesh顶点坐标转换精度问题

    本问题虽然与Unigine引擎相关,但对其他精度问题也有参考价值. 问题: 将精细模型顶点从自身参考系的相对坐标(类似4378.95020,4561.00000,31.3887463) 转到椭球面世界 ...

  6. <构建之法>13——17章的读后感

    第13章:软件测试 问题:对于这么多种的测试方法,怎么才能最有效的选取? 第14章:质量保证 问题:很多工程师都把大多数时间花在软件质量上.一成不变是无法创新的.如何在保证质量的情况下,又得到创新呢? ...

  7. Java用JSoup组件提取asp.net webform开发网页的viewstate相关相关参数

    /** * 从页面中提取特定input的的Value * @param formparams * @param document * @param elementId */ private void ...

  8. sql优化问题笔记(mysql)

    相信大家平时面试都会遇到这个问题:平时你都是怎么对sql进行调优的? 此篇文章相当于一个随便笔记,根据朋友们的聊天记录整理而成,如有不对,请指正! 注意:这篇是以mysql整理的 查看sql计划分析 ...

  9. Java之Logger日志(Java8特性)

    import java.util.logging.Level; import java.util.logging.Logger; public class LoggingDemo { public s ...

  10. python之tkinter使用-复选框操作

    # tkinter复选框操作 import tkinter as tk root = tk.Tk() root.title('问卷调查') root.geometry('220x80') # 设置窗口 ...