- 程序安装之前,来认识下程序的组成部分:
- 二进制程序
- 库文件
- 配置文件
- 帮助文件(手册、文档)
- 。。。
- 二进制程序:/bin,/sbin,/user/bin,/user/sbin,/usr/local/bin,/usr/local/sbin,/opt/bin,/opt/sbin
- 库文件:/lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64,/opt/lib,/opt/lib64
- 配置文件:/etc/,/etc/DIR,/usr/local/{etc,conf}。。
- 帮助文件:/usr/share/man,/usr/share/doc,/usr/local/share/man,/usr/local/doc
- 注:有些特殊的程序会将执行文件放置于libexec目录;
- 编译之前:源代码
- 编译之后:
- 程序包管理器
- 安装、卸载、升级、查询
- 实现应用程序打包,有特定格式
- 对兼容的程序包进行管理
- 注:制作成的二进制格式程序与平台有相关性,故通常需要制作各种流行平台所兼容的版本
- 编译:
-
- 源代码(文本) --> 预处理 --> 编译 --> 汇编 --> 链接
- 编译时,根据是否将被调用的库文件直接打包进生成的二进制程序文件,编译方式可分为两类:
- 动态链接:不将被调用的库文件打包进来,而是运行时去装载它
- 静态链接:将被调用的库文件打包进来,将来运行时,可自己完全独立运行,而无需外部库文件支持运行
- c程序包;
- 程序包:
- appneme-VERSION-RELEASE.ARCH.rpm
- 源代码:appnema-VERSION.tar.gz,appname-VERSION.tar.gz2,appname-VERSION.tar.xz
- 包管理器(rpm)格式:
- 常见的包管理器:
- deb:Debian
- rpm:Red hat Package Manager,RPM is Package Manager
- rpm包命名格式:
- VERSION:
- RELEASE:包自身的修订号,有时会有适用于os的信息
- ARCH:使用的平台
- major:主版本号
- minor:次版本号
- release:发型号
- x86:i386,i486,i586,i686
- x86_64:amd64,x86_64
- powerpc:ppc
- noarch:与平台无关
- appname-VERSION-RELEASE.ARCH.rpm
- 分包机制:
-
- 核心包,主包:命名与源项目名称一致;
- 子包(支包):命名为源项目名称后附加支包中的文件提供的功能组成
- 获取包途径:
-
- 来源合法
- 包的完整性
- http://rpmfind.net
- http://rpm.pbone.net
- http://pkgs.org
- 教室:http://172.16.xx.xx/fedora-epel/6/
- 光盘挂载
- lrwxrwxrwx 1 root root 3 Apr 9 2015 cdrom -> sr0
- lrwxrwxrwx 1 root root 3 Apr 9 2015 dvd -> sr0
- 光盘放入光驱
- mkdir /media/cdrom
- mount -o ro -t iso9660 /dev/cdrom /media/cdrom
- 系统的发型光盘镜像或官方站点(或站点镜像服务器)
- 程序包的官方站点
- 第三方组织:epel
- 搜索引擎
- 建议:安装前验证其合法性
- CentOS系统上程序rpm包管理:
-
- 安装、升级、卸载、查询、检验
- 通过rpm命令完成
- 安装
-
- --relocate
- --force
- --replacepkgs 相关配置文件就没了=.=!
- 副作用:能安装成功,未必可以成功运行
- 由众多目的单一的小程序组成,结果程序包之间存在相关性,甚至有循环依赖
- rpm {-i|--install } [install-options]
- -h:hash,以#来表示安装进度。100个#表示安装完成
- -v,--verbose:显示安装过程中的详细信息
- 安装时常用的组合:-ivh,-ivvh
- --test,测试安装。不执行真正的安装过程,仅报告依赖关系及冲突信息等
- 程序包之间存在的依赖关系:
- 忽略依赖关系:--nodeps
- 覆盖安装:重新安装并覆盖原有文件
- 强制安装:
- 重新定位程序包的安装位置
- 升级:
-
- 一定不要对内核进行升级(兼容性)。Linux允许多内核共存,故可直接安装多个不同版本内核
- 若程序包的配置文件安装后曾被修改,升级时,新版本的配置文件不会覆盖老版本的配置文件,而把新版本的配置文件重命名(加后缀.rpmnew)后保存
- -U:升级或安装。没有安装会安装目标程序
- rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
- rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
- --test
- --nodepkgs
- --force
- --oldpackage:降级
- 注:
- 卸载:移除已安装的包
-
- rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
- [--notriggers] [--test] PACKAGE_NAME ...
- 简单用法:rpm -e PACKAGE_NAME
- --nodeps:忽略依赖关系
- --test:仅做测试卸载:dry-run模式
- --allmatches:如果一个程序包同时安装多个版本,则此选项一次全部卸载之
- 注:
-
- 如果程序包的配置文件安装后曾被修改,卸载时,此文件通常不会删除,而是被重命名(加后缀.rpmsave)后保存
- 查询:
-
- rpm {-q|--query} [select-options] [query-options]
- [select-options]:
- [query-options]:
- rpm -qf /etc/fstab
- rpm -qa
- rpm -q PACKAGE_NAME
- rpm -q --scripts PACKAGE_NAME
- rpm -q --requires PACKAGE_NAME
- rpm -q --provides PACKAGE_NAME
- rpm -q --changelog PACKAGE_NAME
- rpm -qd PACKAGE_NAME
- rpm -qc PACKAGE_NAME
- rpm -ql PACKAGE_NAME
- rpm -qi PACKAGE_NAME
- 查询某包是否已经安装,以及检查安装的所有包,还可以查看特定包的详细信息
- rpm -qpi PACKAGE_FILE
- 查询某包或某些包是否安装:
- 查询已安装的所有包
- 查询某文件是由哪个包安装生成:
- 查询尚未安装的包文件的相关信息;
- preinstall:安装过程开始之前执行的脚本
- postinstall:安装过程完成后执行的脚本‘
- preuninstall:卸载开始之前执行的脚本
- postuninstall:下载过程完成之后执行的脚本
- 脚本有四类:
- 查询某包的简要说明信息:
- 查询某包安装后生成的文件列表:
- 查询某包安装后生成的配置文件:
- 查询某包安装后生成的帮助文件:
- 查看某包制作时随版本变化的changelog信息:
- 查询某包提供的capabilities(包和其他功能):
- 查询某包所依赖的capabilities:
- 查询某包安装或卸载时会执行的脚本;
校验:
-
rpm {-V|--verify} [select-options] [verify-options]
- 常见用法:rpm -V PACKAGE_NAME
- S file Size differs
- M Mode differs (includes permissions and file type)
- 5 digest (formerly MD5 sum) differs
- D Device major/minor number mismatch
- L readLink(2) path mismatch
- U User ownership differs
- G Group ownership differs
- T mTime differs
- P caPabilities differ
- 查询安装之后生成的文件是否发生了改变(被改动)
程序包的合法性验证:
-
rpm --import /PATH/TO/RPM-GPG-KEY-GILE
- 验证:rpm {-K|--checksig} PACKAGE_FILE
- --nosignature:不检查来源合法性
- --nodigest:不检查完整性
- 包未被二次修改,完整性校验成功
- 依赖于:制作者提供的程序特征码
- 验证方式:安装者用同样的特征码提取算法提取程序包的特征码,并与原作者提供的相比较
- 由信任的制作者提供
- 依赖于:制作者的数字签名:签名是作者使用自己的私钥加密程序包的特性码进行的
- 来源合法
- 内容合法
- 验证其光盘中程序包的来源及完整性
rpm管理器数据库:/var/lib/rpm
-
rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY]
- --initdb:初始化数据库,即数据库完全不存在时,可新建之
- --rebuild:无论当前数据存在与否,都会直接重建此库
时间: 2024-11-06 10:56:47