20170802 软件包管理

目录

  • 软件运行环境介绍
  • 包管理器
  • rpm 包管理器的使用
  • yum rpm包管理器前端工具的使用
  • 编译安装

一、软件运行环境

  • ABI(Application Binary Interface) 导致不同系统的文件不兼容,linux遵循ELF标准,Windows遵循PE标准

  • API(Application Programming Interface)是编程使用的统一接口,linux遵循POSIX标准

  • 程序从源代码转变为二进制可执行文件经历的一般过程:
    程序源代码--->预处理--->编译--->汇编--->链接

  • 链接将各个模块之间相互引用部分处理好,使各个模块之间能够正确衔接,分为静态链接动态链接

    • 静态链接 libxxx.a

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

      • 只把依赖加做一个动态链接
      • 连接指向
      • 占用较少空间,升级方便
  • 系统开发语言:C,C++
    应用开发语言:Java,Python,Go

二、包管理器

(一)包的分类、命名、管理

  • 二进制应用程序组成:
    二进制文件、库文件、配置文件、帮助文件

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

    • dpkg包管理器:Debian,文件格式.deb
    • rpm包管理器:Redhat,文件格式.rpm
  • 源代码包命令格式:name-VERSION.tar.gz|bz2|xz

  • rpm包命名格式:name-VERSION-release.arch.rpm

  • 将软件包拆分成几个包,便于管理、按需安装

    • Application-VERSION-ARCH.rpm 主包
    • Application-devel-VERSION-ARCH.rpm 开发子包
    • Application-utils-VERSION-ARHC.rpm 工具子包
    • Application-libs-VERSION-ARHC.rpm 库子包

(二)包依赖

  • 包之间可能存在依赖关系,解决包依赖的管理工具

    • yum: rpm包管理前端工具
    • apt-get: deb包管理前端工具
  • ldd 查看二进制程序依赖的库文件,如ldd /bin/cat

  • ldconfig 加载库文件
    /sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件名及文件路径映射关系

  • 配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
    缓存文件:/etc/ld.so.cache

(三)rpm包基本知识

  • rpm包文件组成:

    • rpm包内的应用程序
    • rpm包元数据:名称、版本、依赖性、描述等
    • 安装、卸载时运行的脚本
  • 数据库/var/lib/rpm包含:

    • 程序包名称及版本
    • 依赖关系
    • 功能说明
    • 包安装后生成的各文件路径及校验码信息
  • 获取程序包的途径

    • 系统光盘、官方服务器
      国内镜像:
      http://mirrors.aliyun.com
      http://mirrors.sohu.com
      http://mirrors.163.com
    • 相关官方网站
    • 第三方组织:Fedora-EPEL (Extra Packages for Enterprise Linux),注意第三方包要检查来源合法性、程序包完整性

三、rpm 包管理器

(一)rpm 包安装

  • 语法:rpm {-i|--install} [install-options] PACKAGE_FILE…

  • 选项:

-i                              //安装
-v                              //显示安装过程
-vv                             //显示详细过程
-h                              //以#符号显示执行进度
--test                          //测试安装,但不真正执行安装
--nodeps                        //忽略依赖关系
--replacepkgs| replacefiles     //覆盖安装
--nosignature                   //不检查来源合法性
--nodigest                      //不检查包完整性
--noscripts                     //不执行程序包脚本
  • 实验:安装tree软件包,显示安装过程
20170802 软件包管理_第1张图片

(二)rpm 包升级

  • 语法:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
rpm {-F|--freshen} [install-options] PACKAGE_FILE...
//U和F的区别:当存在旧程序,都执行升级;当不存在旧程序,U选项执行安装,F选项跳过
  • 选项
--oldpackage        //降级
--force             //强制安装
  • 注意:
    1、内核可以多版本并存,故不推荐对内核进行升级操作,直接安装新版本即可
    2、若原程序的配置文件有修改,升级后将不覆盖旧配置文件,新配置文件以增加后缀.rpmnew方式存在

  • 实验:升级tree程序

20170802 软件包管理_第2张图片

(三)rpm 包查询

  • 语法:rpm {-q|--query} [select-options] [query-options]

  • 选项:

// select-options
-a                           //所有包
-f                           //查看指定的文件由哪个程序包安装生成
-p rpmfile                   //针对尚未安装的程序包文件做查询操作
--whatprovides CAPABILITY    //查询指定的CAPABILITY由哪个包所提供
--whatrequires CAPABILITY    //查询指定的CAPABILITY被哪个包所依赖

// query-options
--changelog                  //查询rpm包的changelog
-c                           //查询程序的配置文件
-d                           //查询程序的文档
-i                           //information
-l                           //查看指定的程序包安装后生成的所有文件
--scripts                    //程序包自带的脚本
--provides                   //列出指定程序包所提供的CAPABILITY
-R                           //查询指定的程序包所依赖的CAPABILITY
  • 实验:
    1.查看/bin/grep文件由哪个包生成
    2.查看光盘下zlib文件的详细信息
20170802 软件包管理_第3张图片

3.查询grep程序的配置文件、文档


20170802 软件包管理_第4张图片

(四)rpm 包删除

  • 语法:rpm {-e|--erase} [options] PACKAGE_NAME ...

  • 选项:

--allmatches     //删除匹配包名的所有版本程序包
--nodeps         //忽略依赖关系
--noscripts      //不执行程序包脚本
--notriggers     //不执行触发器脚本
--test           //测试删除,不实际删除
  • 实验:卸载tree程序

(五)rpm 包校验

  • 包校验:将本地文件信息与rpm数据库中包文件的元数据相比较

  • 语法:rpm {-V|--verify} [select-options] [verify-options]

  • 选项:

// select-options
select-options 选项同rpm查询中的相应选项

// verify-options
--nodeps       //不校验包依赖
--nodigest     //不校验包完整性
--nofiles      //不校验包文件属性
--noscripts    //不执行校验脚本
--nosignature  //不校验来源合法性
  • 包完整性验证加密算法:SHA256;来源合法性验证:RSA
    验证包文件完整性和签名:rpm -K|checksig rpmfile

  • 加密方式:

    • 对称加密:加密、解密使用同一秘钥
    • 非对称加密:秘钥成对,公钥对外公开,私钥不能公开
  • 导入公钥:rpm --import PathToGPGKeys

  • 光盘根目录有公钥:以RPM-GPG-KEY开头的文件,如CentOS 7光盘根目录的RPM-GPG-KEY-CentOS-7文件

  • 查看当前导入的公钥:rpm -qa "gpg-pubkey*"

  • 实验:校验vim-common包,有报警提示,导入公钥后再次校验成功进行

四、yum rpm 包管理器前端工具

  • yum (yellowdog update modifier)可以解决包之间的依赖性问题,可在多个库之间定位软件包

  • yum设计为C/S架构,服务器端储存包文件和包文件的元数据信息,客户端执行rpm包管理操作时通过缓存包文件元数据信息解决包依赖性问题,并进行相关操作

  • 服务器通信协议:http://,https://,ftp://,file://

(一)yum客户端配置

  • 配置文件路径:
    /etc/yum.conf 所有仓库的通用配置
    /etc/yum.repos.d/*.repo 仓库指向配置

  • *.repo仓库指向配置文件格式

[repositoryID]     //每个仓库唯一的标识符,一个单词
name=the description of the repository       //简要介绍
baseurl=url://the path to the repository     //仓库内repodata目录所在的父目录
enabled={1|0}       //是否使用此仓库
gpgcheck={1|0}     //是否检查签名
gpgkey=url         //公钥的地址
  • 配置文件可以使用的变量名

    • $releasever: 当前OS的发行版的主版本号
    • $arch: 平台,i386,i486,i586,x86_64等
    • $basearch:基础平台,i386, x86_64
  • yum-config-manager yum配置管理工具

yum-config-manager --enable repo_name      //启用仓库
yum-config-manager --disable repo_name     //禁用仓库
  • 实验:建立一个阿里云的yum配置文件,文件名aliyun.repo,仓库ID命名为aliyun,检查签名
    实现:建立配置文件/etc/yum.repos.d/aliyun.repo,文件内容如下:
[aliyun]
name=the repository of aliyun
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/x86_64
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/$releasever/os/x86_64/RPM-GPG-KEY-CentOS-7
20170802 软件包管理_第5张图片

(二)yum 命令使用

  • 语法: yum [options] [command] [package ...]

  • 显示yum仓库列表 yum repolist

yum repolist all          //列出所有仓库列表
yum repolist enalbed      //列出所有启用的仓库列表,默认
yum repolist disabled     //列出所有未启用的仓库列表

实验:列出所有启用的仓库

  • 显示程序包 yum list
yum list all           //列出所有可获得和已安装的包
yum list glob_expr     //列出所有符合通配符的包
yum list available     //列出所有可以安装的包
yum list installed     //列出所有已安装的包
yum list updates       //列出所有有更新的包
  • 实验:列出所有以gp开头的包


    20170802 软件包管理_第6张图片

最右侧一列可以看到,前三个包以@开头表明已安装,anaconda表明为安装系统时安装,之后的包未有安装,安装包仓库为aliyun。

  • 安装 yum install
yum install package1 [package2]...       //安装包
yum reinstall package1 [package2]...     //重新安装包
  • 升级 yum update [package1]...
yum update             //升级所有已安装的包
yum update package     //升级package包
  • 检查可用升级 yum check-update

  • 卸载 yum remove|erase package1 [package2]...

  • 查看程序包详细信息 yum info package1

  • 查看指定特性由哪个程序包提供 yum provides|whatprovides feature

  • 清除本地缓存 yum clean all

  • 构建本地缓存 yum makecache

  • 以指定字符串搜索程序包和概要描述yum search string

  • 列出package包的依赖和提供这些依赖的程序包,yum deplist package

  • 实验:yum安装、卸载、查询软件包:

1.查看screen包的详细信息

20170802 软件包管理_第7张图片

2.安装screen包

20170802 软件包管理_第8张图片

3.列出screen包的依赖信息

20170802 软件包管理_第9张图片

4.卸载screen

20170802 软件包管理_第10张图片
  • 列出yum历史yum history
yum history info 6    //查看第6条历史的信息
yum history undo 6    //撤销第6条历史的操作
yum history redo 6    //重做第6条历史的操作
  • 实验:yum history的使用:

1.查询yum历史

20170802 软件包管理_第11张图片

2.查询第6条历史的详细信息,发现是安装telnet

20170802 软件包管理_第12张图片

3.撤销第6条历史的操作,使用undo命令,结果为卸载Telnet

20170802 软件包管理_第13张图片
  • 包组管理
yum groupinstall group1 [group2] [...]    //包组安装
yum groupupdate group1 [group2] [...]     //包组升级
yum grouplist [groupwildcard] [...]       //按照通配符列出匹配包组
yum groupremove group1 [group2] [...]     //包组卸载
yum groupinfo group1 [...]                //显示包组信息
  • yum 选项
--nogpgcheck                 //禁止进行gpgcheck
-y                           //自动回答为"yes",适于脚本
-q                           //静默模式,往往和y选项配合使用
--disablerepo=repoidglob     //临时禁用此处指定的repo
--enablerepo=repoidglob      //临时启用此处指定的repo
--noplugins                  //禁用所有插件
  • 实验:静默安装telnet.x86_64包
20170802 软件包管理_第14张图片

注意:-y和-q选项必须分开才能同时发挥作用

五、编译安装

(一)C语言源代码编译安装步骤

  1. configure
    configure脚本通过参数选项指定安装路径、启用功能等,以用户指定、以makefile.in文件为模板并检查依赖的外部环境,最终生成Makefile文件
  2. make
    make命令依据Makefile文件将源代码文件转换成为应用程序
  3. make install
    make install命令将文件复制到指定目录
  • 注意:安装前查询源代码目录的README和INSTALL文件

(二)编译安装前准备

  • 源代码获取:官方网站、代码托管网站

  • 配置开发工具和开发环境
    开发工具:make, gcc等
    开发环境:开发库,头文件等

  • 实现:安装开发组件包组
    yum groupinstall "Development tools"

(三)编译安装过程

第一步,configure脚本选项配置
  • 选项:
--prefix=/PATH             //指定安装位置,默认为/usr/local
--sysconfdir=/PATH         //指定配置文件安装位置
--disable-feature          //指定启用特性
--enable-feature[=arg]     //指定禁用特性
  • 注意:执行configure脚本报错信息中的程序包依赖问题,往往是缺少该程序的开发组件,程序包名一般格式为name-devel-VERSION
第二步,make命令
第三步,make install命令
  • 可以将第二步和第三步合并,命令为make && make install
第四步,安装后配置
  • 二进制程序目录导入环境变量
echo 'export PATH=/path/to/bin:$PATH' > /etc/profile.d/httpd22.sh
//将二进制程序添加到PATH变量头部
. /etc/profile.d/httpd22.sh
//设置生效
  • 导入帮助手册
    编辑/etc/man.config(CentOS 6)或者man_db.conf(CentOS 7)配置文件,添加一条MANPATH(CentOS 6)或MANDATORY_MANPATH(CentOS 7)条目指向帮助手册路径

(四)实验:在CentOS 7上源代码编译安装apache 2.4

1.系统默认安装了“apache 2.4”的旧版本,先卸载旧版本

rpm -qa "httpd*"
yum remove httpd

2.安装开发工具包组

yum grouplist
yum groupinstall "Development tools"

3.将源代码压缩包解压缩至目录/usr/local/src,并且进入解压缩的目录内

tar xvf httpd-2.4.27.tar.bz2 -C /usr/local/src/
cd /usr/local/src/httpd-2.4.27/

4.解压缩的源代码目录下有README和INSTALL说明文件可在安装时查询,此时目录下尚未存在Makefile文件,运行带用户指定参数的configure脚本,会以用户指定设置以Makefile.in为模板文件生成Makefile,同时检查用户环境的依赖问题

ls
./configure --prefix=/app/httpd24 --enable-so --enable-ssl
20170802 软件包管理_第15张图片

5.执行configure脚本后往往会报错,根据错误提示安装相应包,一般为带devel后缀的开发包,再执行configure脚本。通常执行configure脚本时会多次报错,根据提示安装各类开发包后,最终会成功执行。如本实验一共出现四次错误提示,分别为APR not found,APR-util not found,pcre-config for libpcre not found,mod_ssl configure:error,yum分别安装apr-devel,apr-util-devel,pcre-devel,openssl-devel包。

yum install apr-devel          //报错APR not found,安装apr-devel
./configure --prefix=/app/httpd24 --enable-so --enable-ssl     //再次执行configure脚本

yum install apr-util-devel     //报错APR-util not found,安装apr-util-devel
./configure --prefix=/app/httpd24 --enable-so --enable-ssll    //再次执行configure脚本

yum install pcre-devel         //报错pcre-config for libpcre not found,安装pcre-devel
./configure --prefix=/app/httpd24 --enable-so --enable-ssll    //再次执行configure脚本

yum install openssl-devel      //报错mod_ssl configure:error,安装openssl-devel
./configure --prefix=/app/httpd24 --enable-so --enable-ssll    //再次执行configure脚本

6.最终成功执行configure脚本

20170802 软件包管理_第16张图片

7.执行make命令和make install命令,成功结果如下

make & make install
20170802 软件包管理_第17张图片

8.安装完成后,进行相关配置,将二进制目录添加到PATH变量中

echo 'export PATH="/app/httpd24/bin:$PATH"'>/etc/profile.d/httpd24.sh
. /etc/profile.d/httpd24.sh
20170802 软件包管理_第18张图片

9.导入帮助手册,在/etc/man_db.conf文件,添加新行MANDATORY_MANPATH /app/httpd24/man,并更新mandb数据库

vim /etc/man_db.conf
mandb
20170802 软件包管理_第19张图片

10.开启httpd服务,查看80端口是否已经开启,如下图成功开启80端口,至此安装完毕。

20170802 软件包管理_第20张图片

你可能感兴趣的:(20170802 软件包管理)