程序包管理:
应用程序的安装,实际上是解压缩并复制程序包中的文件到指定目录的过程;
应用程序的结构形式:
源代码:
包含了整个应用程序完整的编程语言的所有代码的文本文件集合;
使用源代码安装应用程序:
编译开发环境:编译器(gcc, GNU C Compiler),开发库,头文件,...
预处理(预处理器) --> 编译(编译器) --> 汇编(汇编器) --> 链接(链接器) -->可以直接在CPU上运行的二进制程序文件;
API:Application Programing Interface,应用编程接口;
POSIX:POS, Portable Operating System, 可移植操作系统;
ABI:Application Binary Interface,应用二进制接口;
MySQL:
windows系统:exe, msi
Unix-like:ELF
应用程序编程语言:
系统级编程语言:
C/C++/go
应用级编程语言:
Java/Python/perl/ruby/PHP/bash
通常情况下,源代码文件是多个文件文档,而且这些文档之间存在着某种联系,可以通过软件项目构建工具,自动的根据程序员提供的文件之间的依赖关系,自动完成应用程序编译;
软件项目的构建工具:
C/C++:make
Java:maven
Python:buildout
二进制:
将源代码经过一系列的编译、汇编、链接等操作之后,得到的可以直接执行的二进制程序及与之相关的其他文件;
程序包:
使用分包的方法,将已经编译过的二进制文件及与之相关的其他文件,根据功能分别放入不同的程序包中,以供终端用户自行选择所需功能;并且可以自动的将用户选择的程序包中的文件展开到指定的目录中;也可以在卸载应用程序时,自动将所有文件统一删除;
程序包管理器:
方便终端用户进行程序的安装、卸载、升级、安装信息查询及校验等工作;
不同的Linux的发行版本中,有不同的程序包管理器:
Debian:dpt, Debian Package Toolkits;.deb后缀名的软件包;
RedHat:rpm, RedHat Package Manager;.rpm后缀名的软件包;
rpm成为Linux系统中的程序包管理的行业标准;
rpm is Package Manager;
rpm使用perl语言编写的,后来又使用C语言将其重写;
S.u.S.E:rpm, .rpm后缀名的软件包;
Gentoo:借鉴了FREEBSD的portage程序包管理机制,ports方式,emerge工具;
ArchLinux:pacman
以CentOS为例,rpm程序包管理器的相关内容:
rpm程序包的命名规则:
源代码包:
name-Version(以后这就代表版本号).tar.gz(纯源代码包)
name-Version.src.rpm(rpm封包的源代码包)
VERSION: Major.Minor.Release
Major:主版本号,通常只有程序进行了重大的功能改进才会修改;
Minor:次版本号,通常在某个主版本中的对某个特定功能进行改进或添加新功能才会修改;
Release:发行版本号,一般修复bug或进行了代码优化都会更改;
如:apache-tomcat-7.0.63.tar.gz
二进制包:
name-Version-[release].[os].arch.rpm
VERSION: Major.Minor.Release
[release]: rpm封包的发行版本号;
[os]: 此程序包所能够支持的操作系统的版本;如:el7(RHEL7,CentOS7), SUSE11, Fedora21, ...
arch: 此程序包所依赖的硬件平台类型:i386, x86_64(amd64), ppc, sparc, noarch, ...
如:hping3-0.0.20051105-24.el7.x86_64.rpm
在制作rpm程序包时,通常其制作者会根据自己的理解将程序编译后的结果分别放置于不同的rpm包中,用以实现对于该程序的不同需求;将此种封包方式,称为分包技术;一旦程序被分包,则程序包就被分为两类:
主程序包:
name-Version-[release].[os].arch.rpm
子程序包(分支程序包):
name-function-Version-[release].[os].arch.rpm
function:
devel:开发包;
utils:工具包;
libs:共享库包;
manual:离线帮助文档包;
...
程序包的依赖关系:
程序包的安装顺序,被需要的应该先被安装;
X,Y,Z --> A
A --> B,C
B --> X
依赖地狱;
程序包管理的前端工具:
就是为了解决各个程序包之间的依赖关系,阻止依赖地狱出现;