Linux学习15-软件包管理rpm、yum及源码编译安装

软件包管理

知识点

  • 使用RPM和YUM安装、卸载升级和删除包
  • 建立yum仓库及客户端配置文件
  • 源码编译安装

1. 包管理简介

过去,许多 Linux 程序以源代码的形式发行,用户把源代码构建为所需的程序或程序集;源代码还附带必需的手册页、配置文件等等。现在,大多数 Linux 发行商使用称为包 的预构建的程序或程序集,包便于在发行版上安装。

1.1 包的安装方式

  • 二进制安装
  1. rpm包管理(RPM Package Manager)
  2. yum管理(Yellowdog Update Modifier)
  • 源码编译
    1. 编译安装

1.2软件运行

ABI :应用程序要在某程序上 运行,应用程序必须满足此操作系统的接口,这个接口就是ABI接口。Win和Linux不兼容。

  • Windows:PE(Portable Executable)接口
  • LINUX:ELF(Executable and Linkable Format)

API 应用程序开发接口,调用库文件

  • POSIX:(Portable Operating System Interface of UNIX)IEEE在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称
    ###1.3程序编译
    程序源代码→预处理→编译→汇编→链接

  • 预处理:将源代码简单处理,例如宏定义、#include文件包含、条件编译、特殊符号

  • 编译:由编译器将c源代码转变成汇编代码

  • 汇编:由汇编器将汇编代码转变成目标代码

  • 链接:由链接器将代码在执行过程用到的其他目标代码和库文件链接成为一个可执行程序也就是目标程序。

链接处理分类
链接主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接,分为静态链接和动态链接

  • 静态链接
    1、把程序对应的依赖库复制一份到包
    2、libxxx.a
    3、嵌入程序包
    4、升级难,需重新编译
    5、占用较多空间,迁移容易

  • 动态链接
    1、只把依赖加做一个动态链接
    2、libxxx.so
    3、连接指向,包只记录依赖对象的名字及少量登记信息
    4、占用较少空间,升级方便

1.4 包管理器

  • 二进制应用程序的组成部分
    二进制文件、库文件、配置文件、帮助文件
  • 程序包管理器种类
    debian:deb文件,dpkg包管理器
    redhat:rpm文件,rpm包管理器

2. rpm

原名Redhat Package Manager ,推广后改名为 RPM Package Manager

  • 包管理器功能
    将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作

  • 包文件组成(每个包独有)

    1. RPM包内的文件
    2. RPM的元数据,如名称,版本,依赖性,描述等
    3. 安装或卸载时运行的脚本
  • 数据库(公共):/var/lib/rpm
    初始数据库,每个包解压后的初始状态如属性、大小、权限等,以后可以比较初始安装与目前状态的比较,做安全检查。

    1. 程序包名称及版本 ,属性,大小,权限等
    2. 依赖关系
    3. 功能说明
    4. 包安装后生产的各文件路径及校验码信息
  • 管理程序包的方式:
    使用包管理器:rpm,前提是要有rpm包,安装卸载等
    使用前端工具:yum,dnf

  • 程序包的来源

    1. 系统发版的光盘或官方的服务器
      CentOS镜像
      https://www.centos.ort/download.
      http://mirrors.aliyun.com
      http://mirrors.sohu.com
      http://mirrors.163.com
    2. 项目官方站点
    3. 第三方组织
      Fedora-EPEL:(Extra Packages for Enterprise Linux)红帽组织的第三方相对比较稳定的包
    4. 自己制作
      注意:第三方建议要检查其合法性、开源合法性,程序包的完整性

2.1 包命名

  • 源代码命名
    name-VERSION.tar.gz|bz2|xz
    例如:linux-4.18.5.tar.xz

    • VERSION(版本号):major.minor.release
      1. major(主版本号):重要变更或升级
      2. minor(次版本号):对系统有优化,不多,
      3. release(最次版本号):修复BUG
  • rpm包命名方式:
    name-VERSION-release.arch.rpm
    例:bash-4.2.46-19.el7.x86_64.rpm

    1. name
      软件名:bash
      版本号:4.2.46(主、次、最次)
    2. VERSION-release
      编译的版本号:19编译19次
      el7代表:红帽rhel版本号
    3. arch
      cpu架构:x86_64 noarch(通用的架构)
  • 包分类

    1. Application-VERSION-ARCH.rpm:主包
    2. Application-devel-VERSION-ARCH.rpm开发子包。软件过于复杂,都放在一起用起来太臃肿,会分成主包、子包(如手册、开发、工具包等)
    3. Application-utils-VERSION-ARCH.rpm其他子包
    4. Application-libs-VERSION-ARCH.rpm其他子包
  • 包依赖性

    1. 包之间可能存在依赖关系,甚至循环依赖
    2. 解决依赖包管理工具
      1. yum: rpm包管理器的前端工具
      2. apt-get: deb包管理器前端工具
      3. zypper: suse上的rpm前端管理工具
      4. dnf:(yum的升级版)Fedora 18+ rpm包管理器前端管理工具

3. rpm命令

CentOS系统上使用rpm命令管理程序包,这里将其选项大致分三组:

  • 用于查询和检查包
  • 用于安装、升级和卸载包
  • 用于执行其他功能如校验、数据库维护

这里重点学习前两组命令选项

3.1 安装

软件包安装时往往还需要各种依赖包,rpm命令安装某个软件时,它是知道需要依赖哪些包的,只是并不会帮助我们解决依赖问题,需要我们自己来一个个获取依赖包,知道满足安装条件。这个问题后续的yum工具可以解决,这里先来了解rpm的用法。

  • 格式
    rpm {-ivh} [install-options] PACKAGE_FILE…

  • 选项
    -i:–install安装
    -v:查看更详细的安装信息
    -vv:比v更详细的信息
    -h:以#显示程序包管理执行进度

  • [install-options]
    –test:测试安装,但不真正执行安装,即dry run模式
    –nodeps:忽略依赖关系,强行安装,但是不能用
    –replacepkgs:适用于原来的文件遭到破坏,重新安装覆盖
    –force:与–replacepkgs作用相同
    –replacefiles:例如安装同一个程序2个版本时,会有2个man文件,系统会认为重复,导致程序不能安装,这时候加- -replacefiles可以覆盖文件,而不覆盖程序安装
    –nosignature:不检查来源合法性
    –nodigest:不检查包完整性
    –noscripts:不执行程序包所有脚本
    –nopre:安装前脚本 %pre
    –nopost:安装后脚本 %post
    –nopreun:卸载前脚本 %preun
    –nopostun:卸载后脚本 %postun

  • 示例 :删除tree命令,然后重新安装

'删除tree命令'
[root@V9centos7]$rm /usr/bin/tree
'再次安装'
[root@V9centos7]$rpm -ivh /misc/cd/Packages/tree-1.5.3-3.el6.x86_64.rpm
'会出现以下提示,该程序已安装'
package tree-1.6.0-10.el7.x86_64 (which is newer than tree-1.5.3-3.el6.x86_64) is already installed
'强制安装--force'
[root@V9centos7] $rpm -ivh /misc/cd/Packages/tree-1.5.3-3.el6.x86_64.rpm --force

####2.1.1恢复
软件卸载后,重新安装时除–force与–replacepkgs选项外,还可以使用命令cpio来恢复,有可能带来权限属性的不同。

例如:$rm -f /usr/bin/tree      <==删除tree命令
     $rpm2cpio /misc/cd/Packages/tree-1.5.3-3.el6.x86_64.rpm |cpio -id ./usr/bin/tree
     132 blocks             <==将rpm包转换成cpio格式,输出到管道查看文件解压出单个需要的文件      
     $cp ./usr/bin/tree /usr/bin/      <==将文件拷贝到删除目录下,修复成功

###2.2 包卸载

格式:
rpm{-e|- -erase}[- -allmatches]  [- -nodeps][- -noscript s][- -notriggers][- -test]PACKAGE_NAME...
选项:    
-e:           卸载。长选项为--erase
--allmatches:忽略版本,匹配到的都删除
--nodeps:    忽略依赖性
--noscripts: 忽略脚本,卸载不执行卸载后脚本
--test:      仅测试,不真的卸载

###2.3 包升级降级

  • inux支持多版本并存,如果升级内核建议使用-i,可以保留旧版本

  • 如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名

      格式:
      rpm{-UFvh}[installoptions]PACKAGE_FILE...
      选项:
       -U   --upgrade:安装有旧版程序包,则升级如果不存在旧版程序包,则安装
       -F   --freshen:安装有旧版程序包,则升级如果不存在旧版程序包,则不执行升级操作
      --oldpackage:降级
      --force:强制安装,作用同--replacepkgs
    

###2.4 查询

格式:
rpm {-q|--query}[select-options][query-options]
[select-options]:
 -q:查询已经安装的包,只有-q,需要完整的文件名,不然查不到
 -a:所有包。配合q,然后取出大概程序名,匹配符合的结果
 -f:查看指定的文件由那个程序包安装生成,查的是rpm的数据库,删除命令仍然可以查到所属。
	     例如:$rm -f /usr/bin/tree   <==删除
              $rpm -qf /usr/bin/tree      <==仍然可以查询                 
              tree-1.5.3-3.el6.x86_64       <==结果
 -p:针对尚未安装的程序包文件做查询操作,跟的是包名  
 -qi:(information)查看程序的信息
 --whatprovides CAPABILITY:查询指定的能力(CAPABILITY)由那个包提供
 --whatrequires CAPABILITY:查询指定的CAPABILITY被那个包所依赖

[query-options]
--scripts:程序包自带的脚本
-- provides:列出指定程序包CAPABILITY(库文件,对应的二进制文件等)
--changelog:查询rpm包的更新日志
   例如:$rpm -q --changelog tree
-i:information	   
-d:查询程序的文档,比如man帮助文档
-l:查看指定的程序包安装后生产的所有文件
-R:查询指定的程序包所依赖的CAPABILITY
-c:查询程序的配置文件程序的配置文件
	例如:$rpm -qc bash

例:查询远程仓库软件包,包含那些文件
    $rpm -qpl http://.../*.rpm

###2.5 包校验

####2.5.1 RPM包文件完整性
软件制作者会为软件提供一个数字化的签名,并将签名的公钥(public key)放出,CentOS使用的数字签名系统为GUN计划的GunPG(GUN Privacy Guard,GPG),可以通过哈希运算,得出专属密钥系统或者数字签名系统。所以,首先需要安装GPG数字签名的公钥文件

  • 密钥文件路径
    系统路径:/etc/pki/rom-gpg/ RPM-GPG-KEY- CentOS-7
    光盘路径:/cd/RPM-GPG-KEY-CentOS-7
    #:不同版本可能GPG文件位置不同,不过文件名大部分以GPG-KEY来说明,可以find /etc -name '*GPG-KEY*'搜索。
  • 导入密钥文件
    rpm --import [密钥文件路径]
  • 检查包的完整性和签名
    rpm -K|checksig rpmfile
  • 查看导入后的公钥
    rpm -qa “gpg-pubkey*” <==取得密钥
    rpm -qi gpg-pubkey-f4a… <==查看密钥的信息

####2.5.2 检验安装的包
利用var/lib/rpm里面的数据库信息来比对目前Linux系统的环境下所有软件文件,来了解这段时间修改了哪些文件数据了。

格式:rpm {-V|--verigy}[select -options]
选项:-V:  后面跟软件名,若所包含的文件被改动过,才会列出
     -Va: 列出系统上被改动的所有文件
     -Vp: 后面跟软件名,列出可能被改动过的文件
     -Vf: 列出某个文件是否被改动过
	
	例:$rpm -V cenos-release   
		SM5....T.  c /etc/issue                <==SM5  T为报警内容
		.......T.  c /etc/issue.net         

报警内容如下

符号 解释
S file Size differs文件大小相异
M Mode differs 文件模式相异,包括权限和类型
5 digest (formerly MD5 sum )differs指纹码相异
D Device major/minor number mismatch主次代码相异
L redLink(2) path mismatch路径相异
U User ownership differs文件所属人相异
G Group ownership differs文件所属群相异
T mTime differs文件建立时间相异
P capabilities differ功能相异
c 配置文件(config file)
d 文件数据文件(documentation)
g ghost file
l 许可证文件
r 自述文件

###2.6 数据库重建
数据库目录所在 /var/lib/rpm

  • 格式
    rpm {- -initdb|- -rebuilddb}
  • 选项
    initdb: 初始化数据库目录,事先不存在,则新建;否则,不执行任何操作
    rebuilddb:重建已安装的数据库索引目录。只有数据库文件,没有内容,不能使用
    ##3. yum工具
    YUM 在 RPM 系统中增加了自动更新和包管理,包括依赖关系管理。除了了解系统上安装的包之外,YUM 还使用存储库。存储库是包的集合,通常可以通过网络连接访问它们。
    ###3.1 yum基础
  • yum工作原理
  1. yum需要搭建一个服务器,上面存放了rpm包,同时还存放了这些包之间的信息(meta data元数据),比如依赖性,分组信息等,合称yum repo (仓库)
  2. 然后在自己的电脑上配置yum客户端文件,指向仓库的路径
  3. 安装软件时,yum读取客户端配置文件指向yum服务器,下载元数据到客户端的缓存区中,得到预安装程序依赖信息,连接仓库,将所有包下载下来进行安装
  4. 如果仓库中路径改变,可以清除缓存yum clean all,重新配置仓库路径
  • yum可能出错的地方
  1. 配置路径错误
  2. meta data路径改变,缓存中没有更改
    /var/cache/yum yum仓库缓存
    yum clean all清除缓存
  • yum repo服务器类型
  1. 远程路径
    http://
    https://
    ftp://
  2. 本地路径
    file://
  • yum repo仓库必备的两个内容
  1. rpm包,对应光盘中的Packages
  2. repodata(元数据),对应光盘中的repodata,仓库的路径就是repodata元数据所在的目录路径
  3. 查看生效的仓库
    命令:yum repolist
  • yum客户端配置文件
  1. /etc/yum.repos.d/*.repo:为仓库指向提供配置
    1. /etc/yum.conf:为所有仓库提供公共配置

       [main]             <==/etc/yum.conf
       cachedir=/var/cache/yum/$basearch/$releasever          
       keepcache=0  保留缓存吗  0不保留1保留
       debuglevel=2  调试模式
       logfile=/var/log/yum.log   日志
       exactarch=1   是否检查CPU架构,1检查0不检查
       obsoletes=1   过期包
       gpgcheck=1   检查完整性1检查,0不检查,需要先导入key
       plugins=1    是否支持插件
       installonly_limit=5   是否进行并行链接,同时安装包					  
       bugtracker_url=http://bugs.centos.org/set_project.phpproject_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
       distroverpkg=centos-release发型版本信息
      

###3.2 yum客户端个人配置文件
个人仓库的配置文件放在/etc/yum.repos.d下,自定义后缀为.repo的文件,后缀不对会失效。

  • 本地仓库配置文件,基于光盘
[CDrom]
baseurl=file:///misc/cd   
enabled=1
gpgcheck=0   
  • yum-config-manager 自动创建仓库配置

    1. 格式
      yum [-config-manager] [选项]
    2. 选项
      –add-rep= :添加仓库配置
      –disable ‘仓库名’ : 禁用仓库
      –enable ‘仓库名’ :启用仓库
    3. 示例
yum-config-manager  --add-rep=http://172.16.0.1/cobbler/ks_mirror/7/
  • 仓库的配置文件格式
选项 释义
[repositoryID] 必须要有的,仓库名称,不要加空格
baseurl=url 必须要有的,仓库路径,本地或者网络,可写多个
mirrorlist= 指向的一个文件,文件中是一个个url路径,baseurl会根据设置选取一个为baseurl
name= 描述信息
enabled={1|0} 仓库禁用0启用1
gpgcheck={1|0} 0为不检查密钥,不写默认为1检查,如果检查需要导入密钥路径
gpgkey=URL 指定密钥路径
enablegroups={1|0} 默认启用就好
failovermethod={roundrobin|priority} 多路径访问顺序,roundrobin随机(默认值),priority顺序访问
cost= 默认为1000,访问优先级,越大越靠后

###3.3 配置远程yum仓库

  • 依赖于网络相关服务
  1. 建立http服务程序yum -y install httpd
  2. 查看rpm -ql httpd包含的文件,找到.service文件
  3. 命令:systemctl start httpd.service启动服务,此时就可以通过浏览器输入本地IP地址访问了
  4. 这里参考阿里云的结构建立目录,存放在/var/www/html/
    命令:mkdir centos/7/os/x86_64/ -pv
    命令:mkdir centos/6/os/x86_64/ -pv
  5. 挂载光盘
    mount /dev/sr1 /var/www/html/centos/6/os/x86_64/
    mount /dev/sr1 /var/www/html/centos/7/os/x86_64/
  6. 配置yum客户端文件
    vim /etc/yum.repos.d/*.repo
  7. 文件上传,将需要共享的文件放在/var/www/html/里,就可以在仓库找到
  8. 文件下载
    命令wget [仓库地址]
  • yum的repo配置文件中可用的变量:
  1. $releasever:当前OS的发行版的主版本号
  2. $arch:平台,i386,i486,i586,x86_64等
  3. $besearch:基础平台;i386,x86_64
  4. $YUM0-$YUM9:自定义变量
  5. 实例
    http://server/centos/$releasever/$basearch/
    http://server/centos/7/x86_64
    http://server/centos/6/i384
  • yum源
  1. 阿里云repo云
    http://mirrors.aliyun.con/repo/
  2. CentOS系统的yum源
  3. 阿里云
    https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
  4. 清华大学
    https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/x86_64/
  5. EPEL的yum源
    https://mirrors.aliyun.com/epel/$releasever/x86_64
  • yum自建源
  1. 将需要制作的包放到可用路径,如实验路径/data下,进入目录
  2. 输入命令ceaterepo . ,生成一个repodata目录,就可以利用生成的repodata所在目录作为源。
  3. 将自建的源文件放到/var/www/html下,就可以在http服务器用了。

###3.5 yum常见用法
yum的命令行选项:

--nogpgcheck:禁止进行gpg check
-y:自动回答为‘yes’
-q:静默模式 不能与别的选项连起来写,要单独写
--disablerepo=repoidglob:临时禁用此处指定的repo
--enablerepo=repoidglob:临时启用此处指定的repo
--noplugins:禁用所有插件

####3.5.1安装

  • 新安装

      yum install package1  [package2] [...]
    
  • 重新安装,不会因为残留安装不了

      yum reinstall package1  [package2] [...] 
    

####3.2.2 升级降级

  • 升级
    yum update [package1][package2][…]
  • 降级
    yum downgrade package1 [package2] […] (降级)
  • 检查可用升级
    yum check-update

####3.2.3卸载程序包
卸载文件,只卸载当前程序,依赖性的程序不会删除,可以通过查看历史yum history,再info,然后undo

yum  remove | erase  package1  [package2] [...]

####3.5.4查询功能

  • 列出软件名称与版本等信息比list详细,可以指定某个软件,类似于rpm -qai

     格式:yum  info  [...]    
    
  • 查看指定的特性(可用是某文件)是由那个程序包所提供,类似于rpm -qf

     格式:yum provides | whatprovides  feature1  [feature2] [...] 
    
  • 列出当前仓库的所有软件名称和版本,类似rpm -qa
    所列信息带@表示之前安装好的;不带@的表示目前没装上的。
    anaconda通过光盘安装的;base通过仓库安装的

     格式:yum  list  [选项] [glob_exp2]      <==支持正则表达式
     选项: all :     列出所有软件
           available:列出未安装的
           installed:列出所有安装的
           updates:  列出可供升级的软件和版本
    
  • 以指定的关键字搜索程序包名及summary信息

     格式:yum  search  string1 [string2][...]
    
  • 查看指定包所依赖的capabilities:

     格式:yum  deplist  package1 [package2][...]  
    
         例如:$yum deplist bash
           package: bash.x86_64 4.2.46-30.el7             <==包程序
     	  dependency: libc.so.6(GLIBC_2.15)(64bit)    <==依赖包
     	  provider: glibc.x86_64 2.17-222.el7              <==提供者
    
  • 仓库工具yum-utils里的repoquery
    功能:查询未安装包中包括的文件列表

     格式:repoquery  –ql   package
    

####3.5.5 历史记录功能
查看yum历史
日志所在目录:/var/log/yum.log

  • 命令:yum history

     ID     | Login user | Date and time    | Action(s) | Altered
      4 | root     | 2018-08-09 17:33 | D, E      |    8   
      3 | root     | 2018-08-09 17:01 | Install   |    5   
      2 | root     | 2018-08-09 16:37 | I, U      |    8  <
      1 | System  | 2018-07-28 10:07 | Install   | 1362 > 
      #ID:历史记录号码
      #Altered:更改数量 
    
  • 命令:yum history info #:输入#(ID号)查询对应的历史详情,承上

    $yum history info 3                 <==查看ID为3的历史记录
    ...                                 <==中间是记录相关信息,这里省略
    Command Line   : install httpd      <==当时执行的操作
    Packages Altered:                   <==yum history中Altered栏更改的项目
    
  • 命令:yum history undo #:查看历史详情后,可以根据需要彻底卸载yum的依赖包

      $yum history undo 3
    
  • 命令:yun history redo #:卸载后悔了。。。还可以重新安装

     $yum history redo3
    

####3.5.6 包组管理的相关命令
可以将相关的包一次安装,比如虚拟化相关的包组,开发相关的包组

  • 查看系统默认的包组,支持正则表达式查找

    $yum grouplist [groupwildcard] […]

  • 安装包组,包组大小写不敏感,包大小写敏感

     $yum  groupinstall  group1  [group2]  [...]   
    
  • 升级包组

     $yum  groupupdate  group1  [group2]  [...]    
    
  • 移除包组

     $yum  groupremove group1 [group2] [...]
    
  • 查看包组信息

     $yum  groupinfo  group1 [...]    可以查看包组的信息
     					             不是随着包组装的没有符号
     	                             跟随包租一块安装好的前面为=号
     	                             没有安装,会随着包组一块安装为+号
     	                             没有安装,不会随着包组一块安装为-号
    

###4.程序包编译
根据源码包中 Makefile.in 文件的指示,configure 脚本检查当前的系统环境和配置选项,在当前目录中生成 Makefile 文件(还有其它的文件),然后 make 程序就按照当前目录中的 Makefile 文件的指示将源代码编译为二进制文件,最后将这些二进制文件移动(即安装)到指定的地方(仍然按照 Makefile 文件的指示
####4.1程序包编译简介

  • 编译的好处:编译过程可以定制功能,路径指定

  • 编译管理器:
    C、C++: make项目管理器
    java: maven

  • C语言源代码编译安装的三步骤

  1. ./configure 脚本将>预处理- ->编译- ->汇编- ->链接打包借助模板makefile.in生成Makefile文件
    (1)通过选项传递参数,指定启用那些功能、安装路径等;
    (2)执行时会参考用户指定以及Makefile.in文件生成Makefile
    (3)检查依赖到的外部环境,如依赖的软件包
  2. make命令找到makefile生成二进制,拷贝到指定的目录下
  3. make install复制文件到第一步指定的路径
  • 开发工具:很复杂,暂时了解就好
    autoconf:生成confugure脚本
    automake:生成Makefile.in

  • 查看一些文档,程序源代码解压后,生成许多文件,其中一些说明文件可以帮助我们了解这个程序。

  1. 文件README,可以了解下载的软件包
  2. 文件INSTALL,可以告诉我们怎么安装
  • 获取其支持使用的选项
    进到源代码解压文件目录执行以下命令

      $./configure --help:
    
  1. 安装路径设定:

    • -prefix=PREFIX:指定默认安装位置,默认为/usr/local/apache2
    • -sysconfdir=/PATH:配置文件想要安装在某文件下,可以单独指定
      System types:支持交叉编译
    • -host=HOST
  2. Optional Features:可选特性
    - -disable-FEATURE
    - -enable-FEATURE[=ARG]

  3. Optional Packages:可选包
    - -with-PACKAGE[=ARG],依赖包
    - -without-PACKAGE,禁用依赖关系
    注意:通常被编译操作依赖的程序包,需要安装此程序包的开发组件,其包名一般类似于name-devel-VERSION
    ####4.2 编译步骤

  • 第一步,
  1. 执行./configure 然后指定安装路径- -preffix,指定配置文件安装路径- -syscongdir 开启加密功能- -enable装的时候,会要求依赖文件,缺什么装什么,后面补上-devel

     	1 、$yum groupinstall 'development tools'  <==制作前把开发工具包组安装上
     	2 、$./configure --prefix=/data/httpd1 --sysconfdir=/etc/httpd2 --enable-ssl
     		...
     		checking for APR... no              <==提示缺这个包
     	3 、$yum install apr-devel              <==安装之,包名后补上-devel
         4 、$./configure --prefix=/data/httpd1 --sysconfdir=/etc/httpd2 --enable-ssl <==再次执行./configure
     	    ...checking for APR-util... no      <==提示还缺这个包 
         5 、$yum install apr-util-devel         <==再安装之补-devel
         6 、$......                             <==再次执行./configure
     	    checking for pcre-config... false   <==提示还缺这个包 
         7 、$yum install  pcre-devel            <==安装补-devel
         8 、$......                             <==再次执行./configure
             configure: WARNING: OpenSSL version is too old      <==提示这个包有问题
         9 、$yum install  openssl-devel         <==安装补-devel
         10、$./configure --prefix=/data/httpd1 --sysconfdir=/etc/httpd2 --enable-ssl                          <==再次执行./configure
     	    ...                                 <==省略前面部分信息
     		 Server Version: 2.4.25
         Install prefix: /data/httpd1
         C compiler:     gcc -std=gnu99
         CFLAGS:           -pthread
         LDFLAGS:         
         LIBS:           
     	CPPFLAGS:        -DLINUX -D_REENTRANT -D_GNU_SOURCE
         C preprocessor: gcc -E
         # 到这里就生成了makefile文件
    
  2. make 生成可以执行的二进制文件

     	$make -j 8 进行编译    <== -j 为参数   8代表几个cpu多线程编译
    
  3. make install
    编译完成后,进入文件目录PREFIX/bin/ ,启动apachectl

     	$cd /data/httpd1         <==可以看到我们预定义安装的目录这时还没有
     	-bash: cd: /data/httpd1: No such file or directory
     	$make install            <==安装,会自动生成目录      
     	$cd /data/httpd1;ls     <==完成后,跳转到目录
     	bin  build  cgi-bin  error  htdocs  icons  include  logs  man  manual  modules
    
  4. INSTALL安装

         $cat INSTALL   查看安装说明文件
         ...
         PREFIX/bin/apachectl start    <==怎么启动
         $ls /data/httpd1/bin/
         apachectl   ...               <==就是这个
    

####4.3安装后的配置

  • 将编译启动程序路径加入变量中
  1. 二进制程序目录导入至PATH环境变量中

         $echo 'PATH=/data/httpd1/bin:$PATH' >/etc/profile.d/httpd.sh     
    
  2. 导入库文件路径
    编辑/etc/ld.so.conf.d/NAME.conf
    添加新的库文件所在目录至此文件中
    让系统重新生成缓存
    ldconfig [-v]

  3. 导入头文件
    基于链接的方式实现
    ln –sv

  4. 导入帮助手册
    编辑/etc/man.config|man_db.conf文件
    添加一个MANPATH

  5. 卸载,源码安装就是将安装路径那两个文件删除。

你可能感兴趣的:(Linux学习15-软件包管理rpm、yum及源码编译安装)