Linux_Package_Management
Before Package Management
API
Application Program Interface
This is the set of public types/variables/functions that you expose from your application/library.
In C/C++ this is what you expose in the header files that you ship with the application.
ABI
Application Binary Interface
This is how the compiler builds an application.
It defines things (but is not limited to):
How parameters are passed to functions (registers/stack).
Who cleans parameters from the stack (caller/callee).
Where the return value is placed for return.
How exceptions propagate.
以下是API和ABI之间的详细联系:
https://www.safaribooksonline.com/library/view/linux-system-programming/0596009585/ch01s02.html
可执行程序的格式:
Unix-like | Windows |
---|---|
ELF (ELF 64-bit LSB executable) | exe,msi |
虚拟环境
Linux | Windows |
---|---|
WinE(Wine Is Not an Emulator)——allow applications designed for Microsoft Windows to run on Unix-like operating systems | Cygwin——a Unix-like environment and command-line interface for Microsoft Windows. |
项目构建(管理)工具
C/C++ | java |
---|---|
make——GNU make utility to maintain groups of programs | maven——a build automation tool used primarily for Java projects |
包管理器
organize binary program,include but not limited to**install**、upgrade、uninstall、query、verify
debian | redhat | S.u.S.E | Gentoo | ArchLinux |
---|---|---|---|---|
dpt(debian package tool)、dpkg、.deb、apt-get | redhat package manager、rpm、.rpm:rpm is package manager、yum,dnf | rpm.rpm、zypper | ports | paceman |
前端工具
可以自动解决软件之间的依赖关系
yum | apt-get(apt-cache) | zypper | dnf |
---|---|---|---|
rpm包管理前端工具 | deb包管理器前端工具 | SuSE的rpm包管理器前端管理工具 | Fedoras 22+系统上rpm包管理器的前端工具 |
version
- source code
name-Version.tar.gz
Version:major.minor.release
major表示重大改变
minor表示小改变
release表示bug修正发行号
比如:redis-3.0.2.tar.gz
- rpm package
name-Version-release.arch.rpm
Version:major.minor.release
release:release.arch
archetecture:i386、x64(amd64)、ppc、noarch
release.os:2.el7.i386.rpm
比如:bash-4.1.2-33.el6.x86_64,其中4.1.2是bash的版本号,33.el6.x86_64是release,其架构是x86_64
redis-2.8.7-2.centos7.x64.rpm,其中2.8.7是redis版本号,2.centos7.x64是release,表示源码的第二次打包,用于centos7的x64平台
- 拆包
main
name-Version-release.arch.rpm
mild
name-function-Version-release.arch.rpm
function:devel、utils、libs、...
比如php-5.4.16-23.el7_0.3.x86_64.rpm和php-bcmath-5.4.16-23.el7_0.3.x86_64.rpm
程序包管理器
功能
将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等操作
每个程序包都有自己的一套清单,包括安装、卸载的各种脚本。
程序包数据库(公共的)
程序包数据库包括已经安装的各种程序包的信息,包括但不限于:程序包的名称和版本、依赖关系、功能说明、安装生成的个文件的文件路径和校验码信息
CentOS系统上存放数据库的位置:/var/lib/rpm/
程序包获取途径
- 系统发行盘的光盘或官方的文件服务器(或镜像站点)
http://mirrors.aliyun.com
http://mirrors.163.com
http://mirrors.hust.com
http://mirrors.sohu.com - 项目的官方站点
- 第三方组织
- EPEL
- search engine
- 编译安装
注意:最好不要使用下载工具下载,可能会下载其他人上传的修改文件
合法性检查
- 来源合法性
- 文件完整性
rpm命令详解
挂载系统镜像(CentOS 7为例)
- 从虚拟机加载系统镜像
- 挂载
[root@localhost ~]# mount -r /dev/cdrom /media
mount: 在 /dev/sr0 上找不到媒体
[root@localhost ~]# mount -r /dev/cdrom /media
之所以第一次挂在是因为在第一步中添加了镜像文件,但是没有链接到虚拟机中,在虚拟机的右下方有一个光盘图标,右键链接/dev/cdrom中就会出现这个镜像设备,另外这里要是用只读挂载。
3. 接下来进入/media/Packages目录就可以进行各种rpm操作了。
rpm功能
rpm [OPTIONS] [PACKAGE_FILE]
安装:-i,--install
升级:-U,--update,-F,--freshen
卸载:-e,--erase
查询:-q,--query
校验:-V,--verify
数据库维护:--builddb,--initdb
检测:--test
GENERAL OPTIONS
-v:verbose,详细信息
-vv:更详细的输出
安装:
rpm {-i|--install}{install options]PACKAGE_FILE...
rpm -ivh PACKAGE_FILE
[install-optoins]
-h:解压归档时打印50个箭头
-v:verbose,更好的显示-h的表现形式
--test:安装准备检测
--nodeps:强制安装,忽略依赖关系。不建议这样安装
--replacepkgs:重新安装
如果某一个文件出了问题,直接把这个文件删掉,然后使用这个选项重新安装
--noscripts:不执行任何脚本
注意:rpm可以自带脚本;脚本一共有四种类型
preinstall:安装过程开始之前运行的脚本,%pre, --nopre
postinstall:安装过程完成之后运行的脚本,%post --nopost
preuninstall:卸载过程真正开始执行之前运行的脚本,%preun --nopreun
postuninstall