咱们在这一章当中继续讲述yum命令,然后咱们简单讲述一下源代码安装包的编译及使用。java
咱们在yum的配置文件中,一旦gpgckeck=1时,就意味着咱们安装程序包时,必需要检查gpgckey的密钥了,然后也必须指明该密钥文件的路径,不然不给予安装,咱们能够在命令行中能够指定禁止gpgckeck,由于命令行优先级要高于配置文件,那么在众多的选项当中,有一种能够禁止检查gpg验证功能的选项叫作--nogpgcheck
,那么咱们如今将经常使用的命令行选项总结以下:c++
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位,因此说区分太多,必然会致使对用户的选择来讲是一种负担,所以咱们能够将远程服务器上的全部的路径访问格式将其固定下来,好比说:sql
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
。而后架构也是须要使用变量来进行自动替换的,因此说能够作到了一种文件达到多种场景使用。那么使用内置变量的做用就是:apache
第一:使用变量来判断当前系统架构及发行主版本; 第二:获取平台及平台架构;
那么咱们常用的内置变量总结以下:编程
yum的repo配置文件中可用的变量: $releasever:当前OS发行版的主版本号; $arch:平台; $basearch:基础平台; $YUM0-$YUM9 https://mirrors.aliyun.com/centos/$releasever/$basearch/os
在最经常使用的内置变量当中,无非就是$releasever
和$basearch
,是咱们常常所用到的,咱们此前也讲到过咱们在.repo
文件当中可使用cost
,来指定开销,若是在仓库中有多个应用程序的话,就要取决于cost
开销值。centos
建立yum仓库所使用到的命令为createrepo
,一般咱们使用yum仓库时,一种方式为指向本地光盘,另外一种方式为只想互联网上的某个镜像站点,不管是指向哪里,均可以安装createrepo
命令,这个命令可以在该仓库目录下建立repodata
目录,该目录建立成功以后,就能够直接使用该yum仓库,简单来讲就是repodata
在哪里,yum仓库就指向该带有repodata
目录下的目录仓库。
createrepo是由Python
所研发的一种程序,命令的用法很简单,使用该命令指明目录便可。缓存
建立yum仓库: createrepo [options] <directory>
而对于选项来讲,大部分是能够省略的,或者说一个都没有照样能够将该命令运行。具体使用以下:bash
# 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