我们在yum的配置文件中,一旦gpgckeck=1时,就意味着我们安装程序包时,必须要检查gpgckey的密钥了,而后也必须指明该密钥文件的路径,否则不给予安装,我们可以在命令行中可以指定禁止gpgckeck,因为命令行优先级要高于配置文件,那么在众多的选项当中,有一种可以禁止检查gpg验证功能的选项叫做--nogpgcheck
,那么我们现在将常用的命令行选项总结如下:
yum的命令行选项: --nogpgcheck:禁止进行gpg check; -y:自动回答为"yes"; -q:静默模式; --disablerepo=repoidglob:临时禁止指定的repo; --enablerepo=repoidglob:临时启用指定repo; --noplugins:禁用所有插件;
我们之前也看到过,在我们使用或配置yum文件时,其在配置文件中还可以使用变量。其用到变量的好处就是,我们在此前的bash章节当中讲到过变量是什么,以及变量所能够发挥的效用,那么在配置文件当中使用变量也是很容易理解的,比如说你是某个站点镜像的维护者,为CentOS 5,6,7
给用户提供了相应的yum源,对CentOS 6
来说,既有32位又有64位的操作系统,对于用户来讲,需要分别提供配置文件才可以,因为有可能有些人不会做该配置文件,所以可以在官方的镜像站点上去下载,而后放置到某个目录下,而后还得需要告诉用户32位的是属于什么文件,64位的是属于什么文件,这样造成的后果是管理繁杂,而且即是说明了32位的是属于什么文件,64位的是属于什么文件,恐怕用户也不知道系统本身是32位还是64位,所以说区分太多,必然会导致对用户的选择来说是一种负担,因此我们可以将远程服务器上的所有的路径访问格式将其固定下来,比如说:
http://mirrors.china.org/centos/6/i386/os http://mirrors.china.org/centos/6/x86_64/os http://mirrors.china.org/centos/7/x86_64/os
所以我们需要指明一个文件,对于以上网址以及系统发行商是不用变的,格式已经固定完成,但是对于不同的发型版及系统架构来说形式多变,我们就要用变量来替代放置于客户端,当放置在客户端时,能够获取到当前系统发行版的主版本号及系统架构,也就是说,该变量能够自动替换6
或者7
。然后架构也是需要使用变量来进行自动替换的,所以说可以做到了一种文件达到多种场景使用。那么使用内置变量的作用就是:
第一:使用变量来判断当前系统架构及发行主版本; 第二:获取平台及平台架构;
那么我们经常使用的内置变量总结如下:
yum的repo配置文件中可用的变量: $releasever:当前OS发行版的主版本号; $arch:平台; $basearch:基础平台; $YUM0-$YUM9 https://mirrors.aliyun.com/centos/$releasever/$basearch/os
在最常用的内置变量当中,无非就是$releasever
和$basearch
,是我们经常所用到的,我们此前也讲到过我们在.repo
文件当中可以使用cost
,来指定开销,如果在仓库中有多个应用程序的话,就要取决于cost
开销值。
创建yum仓库所使用到的命令为createrepo
,通常我们使用yum仓库时,一种方式为指向本地光盘,另一种方式为只想互联网上的某个镜像站点,无论是指向哪里,都可以安装createrepo
命令,这个命令能够在该仓库目录下创建repodata
目录,该目录创建成功之后,就可以直接使用该yum仓库,简单来说就是repodata
在哪里,yum仓库就指向该带有repodata
目录下的目录仓库。
createrepo是由Python
所研发的一种程序,命令的用法很简单,使用该命令指明目录即可。
创建yum仓库: createrepo [options] <directory>
而对于选项来说,大部分是可以省略的,或者说一个都没有照样可以将该命令运行。具体使用如下:
# mkdir httpd # mv httpd-2.4.25.tar.gz httpd # cd httpd/ # createrepo httpd/ Saving Primary metadata Saving file lists metadata Saving other metadata Generating sqlite DBs Sqlite DBs complete
创建成功之后,我们进入httpd目录下的repodata目录,显示并查看,该压缩文件的命名方式都是由UUID格式命名组成。
# cd httpd/repodata/ # ls 01a3b489a465bcac22a43492163df43451dc6ce47d27f66de289756b91635523-filelists.sqlite.bz2 401dc19bda88c82c403423fb835844d64345f7e95f5b9835888189c03834cc93-filelists.xml.gz 5dc1e6e73c84803f059bb3065e684e56adfc289a7e398946574d79dac6643945-primary.sqlite.bz2 6bf9672d0862e8ef8b8ff05a2fd0208a922b1f5978e6589d87944c88259cb670-other.xml.gz 7c36572015e075add2b38b900837bcdbb8a504130ddff49b2351a7fc0affa3d4-other.sqlite.bz2 dabe2ce5481d23de1f4f52bdcfee0f9af98316c9e0de2ce8123adeefa0dd08b9-primary.xml.gz repomd.xml
无论之前我们使用rpm命令或yum命令来安装时,都是使用二进制格式的程序包,那么二进制的程序包都是由个人或某个组织编译好的来对用户进行提供。不过,别人提供的rpm包未必对所有人能够适用,所以有的情况我们不得不编译安装,比如说第一方面就是找不到合适的rpm包,因为没有那个组织或个人来进行制作,第二方面就是有符合的rpm包,但是有个问题就是,只是编译了一部分功能,而使用该功能时这个包并没有该功能,所以只能去编译安装,好在也有些组织考虑了该问题,所以rpm包有两种格式,一种为编译好的rpm包,另一种就是源码rpm包。
但需要注意一点的是,里面的rpm包是没有经过编译的,都需要经过编译成为二进制才能够使用。
testapp-VERSION-release.src.rpm --> 安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装;
有时候不知道你的平台是什么的时候,使用该包时编译成为CPU所使用的指令,一般来讲编程语言(例如C语言),都要先预处理,然后在经过编译,编译之后会生成目标代码,而后使用汇编将目标代码转换成为该平台所理解的二进制的过程,简单来讲就是汇编成CPU可以理解为指令的过程。所以说能够编译成完全需要符合版本的程序包这么一步过程而已。
源代码 --> 预处理 --> 编译(gcc) --> 汇编 --> 链接 --> 执行
要想完成程序包的编译安装,很多源文件程序可能不止一个,也不应该只此一个,不止一个可以按照层级,按照不同的功能分别组织代码文件,每个源文件可以当作单个的独立组件,不过,它们之间也是有依赖关系的,所以说我们源代码组织格式如下:
源代码组织格式: 多文件;文件中的代码段之间,很可能存在跨文件依赖关系;
所以说我们手动编译的话,是非常困难的一件事情,那么为了降低其编译上的难度,或者说降低代码管理之间上的难度,我们对代码源程序有增强型的管理程序,它们都要有专门的项目管理器,对于C/C++来说,是用make
工具,而对Java来说,使用的是maven
。
C\C++: make (configure --> Makefile.sh --> makefile) java: maven
make需要一个指示文件,它里面也有配置文件,make针对于每一个源代码,都有相应的配置文件,而后在make时根据该配置文件做出相应的步骤与决定,比如:自动根据其配置文件如何进行预处理及编译,该配置文件称为makefile,但makefile文件并不是事先存在,也不是对于用户的需要都是一样的,因为做make之后,将来程序包还是得需要安装,那么二进制文件以及库文件等程序文件安装是一个问题,对于不同的用户来讲需要一定是不一样,所以该配置文件一定不能写死,不然的话没有什么灵活性了,而makefile文件是由Makefile.in
文件生成的,而该文件可以理解为是一个模版,基于该模版来生成makefile文件,但该文件的生成是由根据用户的需要来进行生成的,用户可以指明路径以及启用某个功能,而启用的特性是由configure
工具来进行生成的makefile.in文件模版,之后生成了makefile文件。需要注意的是,make是构建项目的一个关键步骤,但make本身不是编译器,而是调用gcc编译器来完成编译的。
C编译安装三步骤: ./configure: (1) 通过选项专递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile。 (2) 检查以来到的外部环境。 make: 根据makefile文件,构建应用程序; make install 安装到指定路径中;
不过可能以上文件在源代码包中可能不会自带,不过可以自动生成该文件脚本及构建开发的应用程序,其开发工具项目为:
开发工具: autoconf:生成configure脚本; automake:生成Makefile.in
所以安装任何一个源代码时,需要注意INSTALL文档和README文档。
建议:安装前查看INSTALL, README
那么编译包的获取一般为两种方式,一种是直接进入官方或者是开源协议站点,另一个是在某个代码托管网站上去进行查找。
开源程序源代码的获取: 官方自建站点: apache.org (ASF) mariadb.org ... 代码托管: SourceForge Github.org code.google.com
在之前我们讲过,对于系统级开发来说,我们使用的是C/C++或Go语言去研发的,而对于应用级开发来说,我们可以使用Java/Python等编程语言进行研发。
c/c++:gcc (GNU C Complier)
编译C源代码程序,刚才也讲过了,无非也就是三步骤,值得需要注意的是,要想编译安装程序包,需首先提供开发环境。
编译C源代码: 前提:提供开发工具及开发环境 开发工具:make, gcc等; 开发环境:开发库、头文件; glibc:标准库 通过"包组"提供开发组件: CentOS 6 "Development Tools", "Server platform Development"
需要注意的是,对于CentOS 5, 6, 7
来讲,开发包组并不能容纳所有的程序包。较新的程序包可能依赖于较新版本的编译器,较老的也可能使用较老版本的编译器来进行编译。太老了功能有可能对新的编译器来说不支持。那么接下来我们可以直接安装某个源码程序包就可以了,使用configure脚本支持许多选项。
第一步, configure脚本 选项:指定安装位置、指定启用的特性; --help:获取其支持使用的选项 选项分类: 安装路径设定: --prefix=/PATH/TO/SOMEWHERE:指定默认安装位置;默认为: /usr/local --sysconfdir=/PATH/TO/SOMEWHERE:配置文件安装位置; System types:指明系统类型,可进行交叉编译; Optional Features:可选特性 --disable-FEATURE --enable-FEATURE[=ARG] Optional Packages:可选包,依赖到的程序包 --with-PACKAGE[=ARG] --without-PACKAGE 第二步:make 第三步:make install
以上三步第一步比较困难一些,不过到这一步算是完成安装,但并没有其配置完成,首先我们可能需要将运行路径添加到环境变量中去,还有将库文件路径更改一下或者为导出等步骤。
安装后的配置: (1) 导出二进制程序目录至PATH环境变量中; 编辑文件/etc/profile.d/NAME.sh export PATH=/PATH/TO/BIN:$PATH (2) 导出库文件路径; 编辑/etc/ld.so.conf.d/NAME.conf 添加新的库文件所在路径至此文件中; 让系统重新生成缓存; ldconfig [-v] (3) 导出头文件 基于链接的方式实现; ln -sv (4) 导出帮助手册 编辑/etc/man.config手册 添加一个MANPATH MANPATH /PATH/TO/SOMEFILE
2018-3-24Linux系统管理(12)程序包管理(3)yum前端配置及编译
原文地址:http://blog.51cto.com/tianxie/2091473