Linux程序包管理
概述
API:Application Program Interface
ABI:Application Binary Interface
Unix-like,
ELF
Windows
exe, msi
库级别的虚拟化:
Linux: WinE
Windows: Cywin
系统级开发:
C/C++:httpd, vsftpd, nginx
go
应用级开发:
java/Python/perl/ruby/php:
java: hadoop, hbase, (jvm)
Python:openstack, (pvm)
perl: (perl)
ruby: (ruby)
php: (php)
C/C++程序格式:
源代码:文本格式的程序代码;
编译开发环境:编译器、头文件、开发库
二进制格式:文本格式的程序代码 --> 编译器 --> 二进制格式(二进制程序、库文件、配置文件、帮助文件)
java/python程序格式:
源代码:编译成能够在其虚拟机(jvm/pvm)运行的格式;
开发环境:编译器、开发库
二进制
项目构建工具:
c/c++: make
java: maven
程序包管理器:
源代码 --> 目标二进制格式(二进制程序、库文件、配置文件、帮助文件) --> 组织成为一个或有限几个“包”文件;
安装、升级、卸载、查询、校验
程序包管理器:
debian:dpt, dpkg, ".deb"
redhat:redhat package manager, rpm, ".rpm"; rpm is package manager;
S.u.S.E:rpm, ".rpm",
Gentoo:ports
ArchLinux:
源代码:name-VERSION.tar.gz
VERSION:major.minor.release
rpm包命名格式:
name-VERSION-release.arch.rpm
VERSION:major.minor.release
release.arch:rpm包的发行号
release.os: 2.el7.i386.rpm
archetecture:i386, x64(amd64), ppc, noarch
redis-3.0.2.targz --> redis-3.0.2-1.centos7.x64.rpm
拆包:主包和支包
主包:name-VERSION-release.arch.rpm
支包:name-function-VERSION-release.arch.rpm
function:devel, utils, libs, ...
依赖关系:
X, Y, Z
X --> Y,Z
Y --> A, B, C
C --> Y
前端工具:自动解决依赖关系;
yum:rhel系列系统上rpm包管理器的前端工具;
apt-get (apt-cache):deb包管理器的前端工具;
zypper:suse的rpm管理器前端工具;
dnf:Fedora 22+系统上rpm包管理器的前端工具;
程序包管理器:
功能:将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作;
1、程序包的组成清单(每个程序包都单独实现);
文件清单
安装或卸载时运行的脚本
2、数据库(公共)
程序包的名称和版本;
依赖关系;
功能说明;
安装生成的各文件的文件路径及校验码信息;
等等等
/var/lib/rpm/
获取程序包的途径:
(1) 系统发行版的光盘或官方的文件服务器(或镜像站点):
http://mirrors.aliyun.com,
http://mirrors.sohu.com,
http://mirrors.163.com
(2) 项目的官方站点
(3) 第三方组织:
(a) EPEL
(b) 搜索引擎
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
(4) 自动动手,丰衣足食
建议:检查其合法性
来源合法性;
程序包的完整性