centos7定制linux镜像,自定制Centos7.3系统镜像(ISO)

本文主要介绍如何根据官方的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 0 #ffffffff #00000000none

# Command prompt text

menu color cmdmark0 #84b8ffff #00000000none

menu color cmdline0 #ffffffff #00000000none

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

menu tabmsg Press Tabforfull configuration options on menu items.

menu separator # insert an empty line

menu separator # insert an empty line

label linux

menu label^Install CentOS Linux 7kernel 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-8# Network information 网卡配置

network--bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate

network--hostname=localhost.localdomain

# Root password root用户的密码

rootpw--iscrypted $6$Ok9Jcj51va/3x830$/6rLkpu8k2tPCmd7byUBE7wuRexmuoMzp0jAelDRYMAIk9yRL/84mCFrOTp5QYWJNVcEIB7wWgw8byp0r21vT0

# System services

services--disabled="chronyd"# System timezone 时区

timezone Asia/Shanghai --isUtc --nontp

user--name=pan --password=$6$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

@corekexec-tools%end

%post

%end

%addon com_redhat_kdump --enable --reserve-mb='auto'

%end%anaconda

pwpolicy root--minlen=6 --minquality=50 --notstrict --nochanges --notempty

pwpolicy user--minlen=6 --minquality=50 --notstrict --nochanges --notempty

pwpolicy luks--minlen=6 --minquality=50 --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/

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

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

.xml文件的写法如下:

组的ID,非数字

组的名字

组的描述

是否预安装,true或者falsedefault>

是否可见,true或者false

zh#仅在某个语系的安装界面中显示,可选项"依赖包" type="conditional">软件包1

"default">软件包2

"default">软件包3......分类的名字,非数字

将显示在左侧列表里

将显示在下面的描述栏里

组1的ID

组2的ID

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

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

%packages

@^minimal

@corekexec-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/

修改安装界面图标背景

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

69b71c4b2d65e8454f2c87e1693e4168.png将安装界面左上角的该图标换为75e1d532b5eb2d16f8155177037a1e23.png

解压

# 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

调用打开另外一个APK

2019独角兽企业重金招聘Python工程师标准>>> Intent mIntent new Intent(); mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ComponentName comp new ComponentName("com.mm.android.direct.gdmssphoneLite", "com.mm.android.direct.gdmsspho…

Jquery Mobile dialog的生命周期

JQuery Mobile对htm5的移动开发绝对是个好用的东西,今天简单谈谈JQuery Mobile中的dialog的使用。 1.对话框的弹出。 2.对话框的生命周期。 3.对话框内事件的注册。 1)第一个问题:对话框的弹出。 如果要弹出一个对话框,可以在页面…

c语言源程序最多可能由组成,一个C语言源程序由若干函数组成,其中至少应含有一个()。...

个C语言源由I am interested in the training course, which _____ at Hilton Hotel in Beijing from March 8 to 12, 2018.程序成“万物莫不有对”体现了中国传统哲学的矛盾观。用户在进行产品的三维设计时,干函可以采用以下( )的设计方法。数组少意识是人脑对客观…

Citrix Netscaler版本管理和选择

Citrix Netscaler版本管理和选择 来源 http://blog.51cto.com/caojin/1898164 随着Citrix Netscaler的快速发展,有很多人在维护设备时经常搞不懂Netscaler软件版本是如何查看和选择,当前软件是否需要升级,当前软件是否稳定等。基于以上问题&a…

oracle实例与数据库

一、名称 Oracle数据库服务器。单叫数据库或服务器都不全面。 二、组成 oracle数据库服务器由二部份组成:实例和数据库 实例: 可理解为对象,看不见。数据库: 理解为类,看得见的,E:\app\Administrator\…

WEB前端面试题汇总整理01

1.JS找字符串中出现最多的字符 例如&#xff1a;求字符串nininihaoa中出现次数最多字符 var str "nininihaoa"; var o {}; for (var i 0, length str.length; i < length; i) {var char str.charAt(i);if (o[char]) {o[char]; //次数加1} else {o[char] 1;…

c语言 文件游程统计,游程 码表 如何形成

游程 码表 如何形成求一个程序 将下表用huffman 树存储表示用传统的霍夫曼建立的树 好像不能形成此码表。我感觉应该有一个特等的算法。我也试了好几种方法&#xff0c;感觉都不行&#xff0c;希望大家给点建议。(码表 要利于编码和解码)(部分码表)白游程 码子 黑游程 码子(长…

2.ORM思想

一、ORM思想介绍 orm是一种思想&#xff0c;是dao层代码的一种编写思想。其中&#xff1a;o代表Object&#xff0c;java对象&#xff1b;r代表Relation&#xff0c;关系型数据库&#xff1b;m代表Map&#xff0c;java对象和关系型数据库表的映射关系。该思想主张&#xff1a;1、…

android 字体颜色选择,Android中颜色选择器和改变字体颜色的实例教程

易采站长站为您分析Android中颜色选择器和改变字体颜色的实例教程,其中改变字体颜色用到了ColorPicker颜色选择器,需要的朋友可以参考下1.构建一张七彩图:我们经常看到这种样子的颜色选择器吧..然后其实右边的亮度选择是:这样我们的代码就可以进行啦...// 创建七彩图片private …

新版vue-cli搭建多页面应用

2019独角兽企业重金招聘Python工程师标准>>> 折腾了好久&#xff0c;终于把坑踩完了&#xff0c;废话不多说&#xff0c;上教程~ github地址&#xff1a;https://github.com/guolihuaGitHub/vue-cli-multipage 另外推荐一下我另一篇博客&#xff0c;我觉得这篇好用&…

2017 Google 开发者大会直播入口

今年&#xff0c;Google 开发者大会再度来袭&#xff01;大会将于 12 月 13 日和 14 日在上海举办&#xff0c;主题涵盖机器学习 (Machine Learning)、Android、移动网络&#xff08;Mobile Web)、TensorFlow、Firebase、云服务 (Cloud)、AR/VR、设计 (Design) 以及更多开发者相…

日志组件slf4j介绍及配置详解

2019独角兽企业重金招聘Python工程师标准>>> 原文出自 1 基本介绍 每一个Java程序员都知道日志对于任何一个Java应用程序尤其是服务端程序是至关重要的&#xff0c;而很多程序员也已经熟悉各种不同的日志库&#xff0c;如java.util.logging、Apache log4j、logback。…

count(*),count(1),count(0)效率

网上文章很多&#xff0c;今天分别跑了一张2000多万行的表&#xff0c;该表没有主键&#xff0c;索引&#xff0c;约束条件。 结果是&#xff0c;效率差不多

android 转场动画兼容问题,【Android】关于ARouter转场动画的问题

实现从主页跳转到搜索页&#xff0c;再从搜索页回退主页withTransition(int resId,int resId)这个方法两个参数第一个的意思是&#xff0c; A 到 B&#xff0c; B 的入场动画第二个的意思是&#xff0c;A 到 B&#xff0c; A 的出场动画即&#xff0c;入场动画&#xff0c;出场…

react不同环境不同配置angular_叫雨山斗鸡优势在哪里,环境不同,价值不同

叫雨山斗鸡优势在哪里&#xff0c;环境不同&#xff0c;价值不同 原生态高端食材网站&#xff0c;专注金线莲、散放斗鸡、斗鸡蛋、野生蜂蜜、小耳黑猪肉等云南原生态套餐定制的高端食材供应商。云南叫雨山斗鸡叫雨山斗鸡原生态饲养 叫雨山斗鸡源自于鲁西斗鸡&#xff0c;初代斗…

android studio 布局拖拽,为什么使用android studio不能像老师一样在Design里随意拖动控件...

qq_喷泉_02017-07-25 13:08已采纳xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tools"http://schemas.android.com/tools"android:layout_width"match_parent"android:layout_height"match_parent"tools:context"co…

Oracle自定义函数(不断更新)

1、将数字转为ip地址&#xff1a;IPAdd_DotNumFormat create or replace FUNCTION IPAdd_DotNumFormat(v_LfValue number)return varchar2 asv_DotNumString varchar2(50);v_flg Integer;v_NewLfValue number;v_tmp Integer;v_P1 Integer;v_P2 Integer;v_P3 Integer;v_P4…

element ui select设置不显示不存在的项_appium—等待时间设置方法

引言&#xff1a;在做UI自动化的过程中&#xff0c;我们有时候为了等待元素的出现&#xff0c;需要加一些等待时间来帮助&#xff0c;但是有时候时间加的过多或者过少&#xff0c;这个没有办法判断&#xff0c;今天就介绍几种等待时间&#xff0c;我们看看那种适合我们 一、强制…

android rn 和webview,RN Webview与Web的通信与调试

React Native Version:0.51RN 在 0.37 版本中加入了WebView功能&#xff0c;所以想要在使用WebView,版本必须>0.37&#xff0c;发送的 message 只能是字符串&#xff0c;所以需要将其他格式的数据转换成字符串&#xff0c;在接收到后再转换回去&#xff0c;其实直接用JSON.s…

html 物流状态,使用css实现物流进度的样式的实例代码

效果&#xff1a;css样式&#xff1a;ul li {list-style: none;}.package-status {padding: 18px 0 0 0}.package-status .status-list {margin: 0;padding: 0;margin-top: -5px;padding-left: 8px;list-style: none;}.package-status .status-list>li {border-left: 2px so…