|
此外,在文件的开头还需要定义-target_cpu 为i686,从而创建i686的内核RPM包,并且需要对/usr/lib/rpm目录下面的一些宏重新定义,比如当前目录下面的macros文件,需要重新定义arch 和build_arch为i686。最后,执行命令 rpmbuild -ba kernel-2.6.spec --with smp 就可以。当然,如果对内核进行了相应的修改,就必须生成多个内核RPM包,以适用于多个arch,如kernel-2.4.18-3-i586- smp.rpm, kernel-2.4.18-3-athlon.rpm等。
4 操作系统安装盘的定制过程
你需要将原来操作系统发布盘上的内容拷贝到本机硬盘中,根据有几张发布盘而生成几个目录,比如Fedora Core 2有四张盘,你则需要在系统上生成四个目录,如disc1、disc2、disc3、disc4,分别将这四张盘上内容拷贝到这四个目录中,然后对相应的 RPM包进行更新。
首先找到你想更新的RPM包,将新的RPM替换旧包。当然你也可以根据你的需要新增或删除RPM 包,需要注意的是,你需要在comps.xml文件中将新增加或删除的RPM包名加入某个组件中,并且注意其与其它RPM包的依赖关系,也就是说你所放置的包的位置要恰当,否则它会依赖于在它之前而没有加入系统的某个RPM包。
4.1 编辑comps.xml文件
在生成安装盘之前,需要注意对comps.xml文件进行修改。这个文件用来告知安装程序anaconda,用户选择了某个组是应该有哪些包需要安装,定义了在安装过程中,包是如何被捆绑在一起的。在Red Hat 8.0以前版本的发布盘中,对应的文件为comps,它只是一个简单的文本文件,在Red Hat 8.0之后的版本中,用comps.xml代替了原来的comps文件。comps.xml是一个XML文件,易于对内容进行分析和说明。
comps.xml文件开始是说明xml的版本和DTD断言,然后进入以
标记开始的文件的主体内容。如:
|
comps.xml主要由三部分组成,首先是组列表,它描述了在安装过程中需要的不同的组(或组件),包括组名、组的描述和包含的RPM包;其次是组的层次结构,它将组分成不同的类,并定义了组的一个顺序,从而可以决定哪些组需要先安装;最后为一系列RPM包以及它们之间的依赖关系。
下面分别介绍comps.xml文件的这三部分:
(1) 组列表
在系统安装时,需要用到一个组中的一些属性,下面就是属性列表以及它们如何使用。一个组被定义在
和标记之内.
一个简单的组定义可以是:
somegroup
Sample Group
true
false
This is a silly sample group
bash
cpio
|
下面分别说明组定义中一些参数的含义:
- id:组的id仅仅是在comps.xml文件中作为该组的一个标识,这是必须的;
- name:表示用户可以看到的组的名字,它也是必须的;
- default:它表示在系统安装过程中,当选择定制(custom)安装时,该组是否在缺省情况下被选中。如果没有说明,则缺省情况下为不选中。
- uservisible:它表示该组在缺省情况下是否在安装时可以看到,如果没有说明,缺省设置为YES,为可以看到。
- description:它表示对该组进行简短的描述,这是必须的;
- packagelist:它说明在该组内的一系列安装包,这也是必须的。
packagereq:包名
属性:
+ type:当进行安装时,判定对应的包是否是组的"强制"部分、或"缺省"部分或"可选"部分。它可以是"mandatory"、"default"或"optional"之一。
+ requires:它说明只有当它所需要(依赖)的包也安装情况下,此包才安装进系统。
(2)组层次结构
它描述了组的树状层次结构,组层次结构定义在
和标记之间,由定义的
标记组成类。
一个简单的组层次结构可以如下所述:
Random Groups
somegroup
|
一个类由下面这些属性组成:
- name: 它表示类名,是必须的;
- subcategories: 它表示此类的一些子类,由一列表
和 元素组成- subcategory: 前面定义的组的id
(3)RPM包
此部分说明要安装的RPM包,它定义在
和标记之内。一个简单的RPM包部分可以如:
bash
mktemp
bash
glibc
libtermcap
|
- name:它指的是RPM包名,是必须的。
- dependencylist:它说明此包对应的依赖的RPM包。
- dependency:此包需要的包的名字
4.2 产生完整的comps.xml文件
上述说明的comps.xml文件中的RPM包部分是是自动产生的,为了形成完全的comps.xml文件,需要在系统中安装comps-extras RPM包,然后进行下面的操作:
- 将comps.xml文件中的原来的RPM包部分删除;
- 运行:
/usr/share/comps-extras/getfullcomps.py comps.xml /path/to/tree arch >/root/filelist 在此,/path/to/tree是Red Hat Linux操作系统安装盘内容存储的地方,arch指的是体系结构,为i386。注意的是,假定comps.xml已经存放 /path/to/tree/arch/RedHat/base/目录下,将此输出重定向到一个临时文件,如/root/filelist。
- 将comps.xml文件中最后一行内容(为)删除
- 将前面生成的临时文件添加到comps.xml中
- 再将添加到comps.xml文件中
通过新增你的包到comps.xml文件,你可以根据你的需要做你自己的发布盘,确信你的包在缺省情况下会被安装。需要注意的一件事是你更新的包与其它包的依赖关系,这是你需要处理的,要注意你更新的包所应该放置的位置。另外,不要在文件中随意增加或删除其余的空格。在修改comps.xml之前,也最好对最初的comps.xml做个备份,以备恢复使用。
4.3 重新编译安装程序,调整安装阶段
安装程序是不可能一次就加载进来的,必须分阶段进行,通常我们就称为"stage"。第一个阶段所用程序很小,只有这样才能从一张软盘、tftp服务器等等上面加载。通常这个阶段程序包含的只有一个精简过的Linux内核和在后续步骤当中必要的一些驱动程序(比如SCSI)。
要采用一个新的RedHat安装,就会需要很多的映像,最明显的就是引导安装盘本身(从软驱或者光驱安装)的boot.img,但是我们也需要对从硬盘、网络文件系统等安装方式提供支持。
RedHat就此提供了很好的脚本命令,只需一个简单的操作就可以完成所有的操作。这些脚本的工作就是把某些RPM包的内容提取出来,然后用来生成各安装步骤所用程序的映像。
所再强调的是,我们必须保证安装了anaconda-runtime:
#rpm -i anaconda-runtime-xxxxx-i386.rpm
接着进入目录/usr/lib/anaconda-runtime,这里我们会看到一些非常有用的脚本,比如:
- mk-images.i386:包涵有创建启动磁盘时i386的专门设置(通常情况下,网络和pcmcia)以及辅助磁盘驱动程序。在此您可以改变启动映像中所包含的模块,比如说在网络启动磁盘有:
……
NETWORKMODULES="$COMMONMODULES nfs 3c59x eepro100 tulip pcnet32
ne2k-pci 8139too"
……..
|
- buildinstall 这是主要的。
#cd /usr/lib/anaconda-runtime
#./buildinstall ~/disc1/
|
这个脚本命令会在~/disc1/images目录下更新一些的文件。
4.4 生成新的hdlist文件
当安装时,安装程序需要依赖光盘上的Fedora/base/hdlist文件,它包含的是所有可用的RPM包的必要信息,这些信息在安装过程当中是用来显示每一个包的用途以及解决用户选择软件包后的依赖性问题。
用以生成hdlist文件的程序叫做genhdlist,它是由anaconda-runtime这个包产生的。现在的genhdlist多了一个新的参数:–withnumbers,是用来记录hdlist文件中每个RPM包的媒介代号。
分步处理的过程如下:
#rpm -i anaconda-runtime-xxxxx-i386.rpm
#cd /usr/lib/anaconda-runtime
#./genhdlist -- withnumbers ~/disc1 ~/disc2 ~/disc3 ~/disc4
|
整个过程只需要执行一个脚本,见附录一:kernel-update.sh。
如果你在系统中添加了RPM包,那么在生成安装盘之前,最好将这四张盘上的内容复制到一个目录下,然后修改附录一的脚本文件,运行脚本,先网络安装一次,看是否存在包的依赖关系问题。如果没有,则可以生成安装盘。
5 生成iso映象
当前面系统进行网络安装成功后,则可以生成iso映象,然后进行刻盘,执行的操作如下:
# build disk 1
cd ~/disc1 /*假设我们将第一张盘的内容放置在此外*/
mkisofs -R -J -T -no-emul-boot -boot-load-size 4 -boot-info-table -V
fedora -b isolinux/isolinux.bin -c isolinux/boot.cat -o /iso/exm-disc1.iso .
/*使用mkisofs工具生成iso映象,将生成的iso映象放在/iso目录中*/
# build disk 2
cd ~/disc2 /*采用同样的方法,生成第二个iso,依次。*/
mkisofs -R -J -T -V fedora -o /iso/exm-disc2.iso .
|
在生成iso映象之后,需要对它进行测试,你可以将它挂接到某个地方,比如:
mount -o loop /iso/exm1-disc1.iso /mnt
|
在生成安装iso(exm-disc1.iso)之后,我们可以将它复制到windows系统中,采用刻录程序进行刻录,然后可以从光盘安装,进行安装测试。
附录一:kernel-update.sh
#!/bin/sh
# current working directory
BASE=`pwd`
# generate hdlists
mkdir -p $BASE/SOURCES
echo
echo Copying disc1 to SOURCES directory, please wait...
cp -Rf $BASE/disc1/* $BASE/SOURCES
echo Copying disc2 to SOURCES directory, please wait...
cp -Rf $BASE/disc2/* $BASE/SOURCES
echo Copying disc3 to SOURCES directory, please wait...
cp -Rf $BASE/disc3/* $BASE/SOURCES
echo Copying disc4 to SOURCES directory, please wait...
cp -Rf $BASE/disc4/* $BASE/SOURCES
echo
echo Make sure anaconda, anaconda-runtime is installed...
rpm -U $BASE/SOURCES/Fedora/RPMS/anaconda-*.rpm
为了做好运维面试路上的助攻手,特整理了上百道 **【运维技术栈面试题集锦】** ,让你面试不慌心不跳,高薪offer怀里抱!
这次整理的面试题,**小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。**
![](https://img-blog.csdnimg.cn/img_convert/2db38c81c456127c838d74d06c686337.png)
本份面试集锦涵盖了
* **174 道运维工程师面试题**
* **128道k8s面试题**
* **108道shell脚本面试题**
* **200道Linux面试题**
* **51道docker面试题**
* **35道Jenkis面试题**
* **78道MongoDB面试题**
* **17道ansible面试题**
* **60道dubbo面试题**
* **53道kafka面试**
* **18道mysql面试题**
* **40道nginx面试题**
* **77道redis面试题**
* **28道zookeeper**
**总计 1000+ 道面试题, 内容 又全含金量又高**
* **174道运维工程师面试题**
> 1、什么是运维?
> 2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?
> 3、现在给你三百台服务器,你怎么对他们进行管理?
> 4、简述raid0 raid1raid5二种工作模式的工作原理及特点
> 5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
> 6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
> 7、Tomcat和Resin有什么区别,工作中你怎么选择?
> 8、什么是中间件?什么是jdk?
> 9、讲述一下Tomcat8005、8009、8080三个端口的含义?
> 10、什么叫CDN?
> 11、什么叫网站灰度发布?
> 12、简述DNS进行域名解析的过程?
> 13、RabbitMQ是什么东西?
> 14、讲一下Keepalived的工作原理?
> 15、讲述一下LVS三种模式的工作过程?
> 16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
> 17、如何重置mysql root密码?
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618542503)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
7、Tomcat和Resin有什么区别,工作中你怎么选择?
> 8、什么是中间件?什么是jdk?
> 9、讲述一下Tomcat8005、8009、8080三个端口的含义?
> 10、什么叫CDN?
> 11、什么叫网站灰度发布?
> 12、简述DNS进行域名解析的过程?
> 13、RabbitMQ是什么东西?
> 14、讲一下Keepalived的工作原理?
> 15、讲述一下LVS三种模式的工作过程?
> 16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
> 17、如何重置mysql root密码?
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618542503)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**