软件包管理

火车开道

                      (@@) (  ) (@)  ( )  @@    ()    @     O     @     O      @
                 (   )
             (@@@@)
          (    )

        (@@@)
       ====        ________             ___________
   _D _|  |_______/        \__I_I_____===__|_________|
    |(_)---  |   H\________/ |   |        =|___ ___|      _________________
    /     |  |   H  |  |     |   |         ||_| |_||     _|             \_____A
   |      |  |   H  |__--------------------| [___] |   =|                        |
   | ________|___H__/__|_____/[][]~\_______|       |   -|                        |
   |/ |   |-----------I_____I [][] []  D   |=======|____|________________________|_
 __/ =| o |=-~~\  /~~\  /~~\  /~~\ ____Y___________|__|__________________________|_
  |/-=|___|=   O=====O=====O=====O|_____/~\___/          |_D__D__D_|  |_D__D__D_|
   \_/      \__/  \__/  \__/  \__/      \_/               \_/   \_/    \_/   \_/

软件包

包的组成

二进制文件、库文件、配置文件、帮助文件

包的命名

  1. 源代码name-VERSION.tar.gz|bz2|xz
    VERSION: major.minor.release
  2. rpm包:name-VERSION-release.arch.rpm
  • bash-4.2.46-19.e17.x86_64.rpm
  • VERSION: major.minor.release
  • release: release OS
  • arch: x86, x86_64, ppc, s390, noarch

包的分类

  1. Application-VERSION-ARCH.rpm 主包
  2. Application-devel-VERSION-ARCH.rpm 开发子包
  3. Application-utils-VERSION-ARCH.rpm 其它子包
  4. Applicatio-libs-VERSION-ARCH.rpm 其它子包

库文件

  1. 查看二进制程序所依赖的库文件
    ldd /path/to/binary_file
  2. 管理及查看本机装载的库文件
  • ldconfig 加载配置文件中指定的库文件
  • ldconfig -p 显示本机已缓存的所有可用库文件名及文件路径映射关系
  • 配置文件 /etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
  • 缓存文件: /etc/ld.so.cache

rpm包

包文件组成

  • rpm包内的文件
  • rpm元数据:名称、版本、依赖性,描述等
  • 安装或卸载时运行的脚本

包数据库 /var/lib/rpm

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

rpm命令

安装

rpm -ivh [install-options] PACKAGE_FILE ...

  • -v: verbose
  • -h:以#显示程序包管理执行进度
[install-options] comments
--test 测试安装
--nodeps 忽略依赖关系
--replacepkgs 重新安装,缺失包时恢复安装
--replacefiles 替换冲突文件
--nosignature 不检查来源合法性
--nodigest 不检查包的完整性
--noscripts 不执行程序包脚本

升级

  • rpm -U [INSTALL-OPTIONS] PACKAGE_FILE..
    upgrade: 安装有旧版程序包,则“升级”;不存在旧版程序包,则“安装”
  • rpm -F [INSTALL-OPTIONS] PACKAGE_FILE...
    freshen: 安装有旧版程序包,则“升级”;如果不存在旧版程序包,则不执行升级操作
  • rpm -Uvh PACKAGE_FILE ... or rpm -Fvh PACKAGE_FILE...
  • --oldpackage 降级
  • --force 强制安装
  • note1:不要升级内核,直接安装新版内核
  • note2: 升级时会保留老版本配置文件

查询

rpm -q [SELECT-OPTIONS] [QUERY-OPTIONS]

[select-options] comments
-a 所有包
-f 查看指定的文件由哪个程序包安装生成
-p rpmfile 针对尚未安装的程序包文件做查询操作
[query-options] comments
--changelog 查询rpm包的changelog
-c 查询程序的配置文件
-d 查询程序的文档
-i information
-l 查看指定的程序包安装后生成的所有文件
--script 程序包自带的脚本
--provides 列出指定程序包所提供的capability
-R 查询指定程序包所依赖的capability
  • 常用用法
command comments
-qi PACKAGE 查询package的具体信息
-qf FILE 查看文件file是由哪个包提供的
-qc PACKAGE 查询包的配置文件
-ql PACKAGE 查询package安装好后生成的所有文件
-qd PACKAGE 查询package程序文档
-qpi PACKAGE_FILE 查询未安装的package信息,package要完整路径
-qpl PACKAGE_FILE 查询未安装的package文件,package要完整路径
-qa 显示所有包
# 查询程序是否安装
[root@test1_c1 Packages]#rpm -q tree
tree-1.6.0-10.el7.x86_64
# 查询已安装程序包的所有文件
[root@test1_c1 Packages]#rpm -ql tree
/usr/bin/tree
/usr/share/doc/tree-1.6.0
/usr/share/doc/tree-1.6.0/LICENSE
/usr/share/doc/tree-1.6.0/README
/usr/share/man/man1/tree.1.gz
# 查询已安装的文件属于哪个包
[root@test1_c1 Packages]#rpm -qf /usr/bin/tree
tree-1.6.0-10.el7.x86_64

# 解压rpm包
[root@test1_c1 data]#rpm2cpio tree-1.6.0-10.el7.x86_64.rpm | cpio -tv
-rwxr-xr-x   1 root     root        62768 Jun 10  2014 ./usr/bin/tree
drwxr-xr-x   2 root     root            0 Jun 10  2014 ./usr/share/doc/tree-1.6.0
-rw-r--r--   1 root     root        18009 Aug 13  2004 ./usr/share/doc/tree-1.6.0/LICENSE
-rw-r--r--   1 root     root         4628 Jun 24  2011 ./usr/share/doc/tree-1.6.0/README
-rw-r--r--   1 root     root         4100 Jun 24  2011 ./usr/share/man/man1/tree.1.gz
177 blocks
[root@test1_c1 data]#rpm2cpio tree-1.6.0-10.el7.x86_64.rpm | cpio -idv ./usr/bin/tree
./usr/bin/tree
177 blocks
[root@test1_c1 data]#ls usr/bin/
tree

# 查询kernel相信信息
rpm -qi kernel

包卸载

rpm -e [--allmatches] [--nodeps][--noscripts][--notriggers][--test] PACKAGE_NAME...

  • 包卸载时,对应的配置文件不会删除,以FILENMAE.rpmsave保留

校验

  • rpm -V [SELECT-OPTIONS][VERIFY-OPTIONS]
  • rpm -K rpmfile 检查包的完整性和签名
  • rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    key file is in "/etc/pki/rpm-gpg/"

rpm数据库维护 /var/lib/rpm

  • rpm --initdb 初始化
  • rpm --rebuilddb 重建数据库

yum

yum 仓库

文件服务器:
http://
https://
ftp://
file://

  • 元数据
    repodata

yum配置文件

  1. 配置文件 /etc/yum.repos.d/*.repo
# [repositoryID]
# name=Some name for this repository
# baseurl=url://path/to/repository/
# enabled={1|0}
# gpgcheck={1|0}
# gpgkey=URL

[base]
name=Base ISO repository
baseurl=file:///mnt/iso
enabled=1
gpgcheck=0

[epel]
name=Epel repository
baseurl=https://mirrors.aliyun.com/epel/$releasever/x86_64
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/7/os/x86_64/RPM-GPG-KEY-CentOS-7

  1. yum仓库
  2. 配置文件中可用的变量
name comments
$releaseserver 当前OS的发行版的主版号
$arch 平台,x86_64
$basearch 基础平台,x86_64
$YUM0-YUM9 自定义变量
示例 https://mirrors.aliyun.com/centos/$release/os/$basearch/
  1. yum 源
  • 阿里云
name url
base https://mirrors.aliyun.com/centos/$release/os/$basearch/
epel https://mirrors.aliyun.com/epel/$release/$basearch/
  • 华为云
name url
base https://mirrors.huaweicloud.com/centos/$release/os/$basearch/
epel https://mirrors.huaweicloud.com/epel/release/basearch/

yum 命令

yum [optioms][command][package...]

commands comments
yum repolist [all|enabled|disabled] 显示仓库列表
yum list {available|installed|updates}[all |glob_exp1][...] 显示程序包
yum {install|reinstall} package1 [...] 安装或者重新安装
yum {update|downgrade} package1[...] 升级或降级
yum check-update 检查可用的升级
yum {remove|erase} package1[...] 卸载程序包, 只卸载package,忽略依赖包
yum info [...] 查看包information
yum provides | whatprovides feature1 [...] 查看某文件是由哪个包提供的
yum clear [pacakges|metadata|expire-cache|rmpdb|plugins|all] 清除/varcache/yum/$basearch/$releasever缓存
yum makecache 构建缓存
yum search string1 [...] 以指定的关键字搜索包名
yum deplist package1 [...] 查看指定包的依赖
yum history [info|list|summary|redo|undo|rollback|new|sync|stats]
yum history 显示yum历史命令
yum history info 6 显示历史命令6详细信息
yum history undo 6 将yum 命令6执行过程撤销掉,如果时安装命令,就会完全删除
yum history redo 将yum 命令6重做
/var/log/yum.log 日志
yum localinstall|localupdate rpmfile1 [...]
yum group install|groop update|group list|group remove|group info group1 ...[] 包组相关命令
options comments
--nogpgcheck 禁止进行gpg check
-y 自动回答为“yes”
-q 静默模式
--disablerepo=repoidglob 临时禁用此处指定的repo
--enablerepo=repoidglob 临时启用此处指定的repo
--noplugins 禁用所有插件

系统光盘创建yum仓库

  1. 挂载光盘至某目录
    mount /dev/cdrom /mnt/cdrom
  2. 创建配置文件
[Centos7]
name=centos7 iso
baseurl=file:///mnt/cdrom/
gpgcheck=0
enabled=1
  1. 利用http创建yum仓库
    (1) 安装http协议 yum install httpd, systemctl enable httpd, systemctl start httpd
    (2)mkdir -pv /var/www/html/centos/{6,7}/os/x86_64/
    tree /var/www/html/centos/{6,7}/os/x86_64/
    (3)mount iso光盘到对应文件夹

dnf centos8上包管理器

  1. 配置文件 /etc/dnf/dnf.conf
  2. 仓库文件 /etc/yum.repos.d/*.repo
  3. 日志 /var/log/dnf.rpm.log
  4. 用法:与yum一致

编译安装

  1. 获取源代码
  2. 准备编译环境
  • 开发工具和开发环境
    (1) 开发工具:make,gcc
    (2) 开发环境:开发库,头文件,glibc:标准库
  • 通过包组
    (1) Development Tools
    (2) Server Platform Development
  • 基于最小化安装的系统
yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel
openssl openssl-devel systemd-devel zlib-devel vim lrzsz tree screen lsof tcpdump wget ntpdate net-tools iotop bc zip unzip nfs-utils
  1. 编译步骤
    prestep:安装前查看INSTALL,README文件
  2. ./configure
    通过选项传递参数,指定启用特性,安装路径;执行时会参考用户的设置及makefile.in文件生成makefile
选项 comments
--help 获取支持的使用选项
安装路径设定
--prefix=/PATH 设置默认安装位置,default是/usr/local
--sysconfdir=/PATH 配置文件的安装位置
System types 支持交叉编译
可选特性
--enable-FEATURE [ARG] 启用特性
--disable-FEATURE 禁用特性
可选包
--with-PACKAGE[=ARG] 依赖包
--without-PACKAGE 禁用依赖关系
NOTE 通常被编译操作依赖的程序包,需要安装此程序包的开发组件,其包名一般类似于name-devel-VERSION
  1. make
    根据makefile文件,构建应用程序

  2. make install
    复制文件到相应的路径

  3. 安装后配置

  • 二进制程序目录导入至PATH环境变量中
    编辑文件/etc/profile.d/NAME.sh, then export PATH=/PATH/TO/BIN:$PATH
  • 导入帮助手册
    编辑/etc/man.config/man_db.conf文件,添加一个MANPATH


    软件包管理.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。