(一)概述
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:rpm, ".rpm"; redhat package manager/rpm is package manager
- S.u.S.E:rpm,".rpm"; 文件路径与组织格式与redhat的rpm不兼容
- Gentoo:ports
- ArchLinux:
源代码:name-Version.tar.gz
- Version: major.minor.release
rpm包命名格式:name-Version-release.os.arch.rpm
- Version:源代码版本
- release:rpm包的发行号
- os:操作系统,如centos7;不一定有,有时候省略
- arch:架构,如:i386,x64(amd64),ppc,noarch
拆包:主包和支包(不是官方叫法,自己叫的)
- 主包:name-Version-release.arch.rpm
- 支包:name-function-Version-release.arch.rpm
- function:devel,utils,libs...
依赖关系:
- 前端工具:自动解决依赖关系
- yum:rhel系列系统上rpm包管理器的前端工具
- apt-get(apt-cache):deb包管理器的前端工具
- zypper:suse的rpm包管理器的前端工具
- dnf:Fedora 22+系统上rpm包管理器的前端工具
程序包管理器
- 功能:将编译好的应用程序的各个组成文件打包成一个或几个程序包文件,从而更方便的实现程序包的安装、升级、卸载和查询等管理操作
- 程序包的组成清单(每个程序包都单独实现)
- 文件清单
- 安装或卸载时运行的脚本
- 数据库(公共)
- 程序包的名称和版本
- 依赖关系
- 功能说明
- 安装生成的各文件的文件路径及校验码信息
- 等等等
获取程序包的途径
- 系统发行版的光盘或官方的文件服务器(或镜像站点)
- http://mirrors.aliyun.com
- http://mirrors.sohu.com
- http://mirrors.163.com
- 项目的官方站点
- 第三方组织
- EPEL
- 搜索引擎
- http://pkgs.org
- http://rpmfind.net
- http://rpm.pbone.net
- 自己动手制作
- 建议:检查合法性和完整性
- 来源合法性
- 程序包的完整性
CentOS系统上rpm命令管理程序包
- 安装、升级、卸载、查询和校验、数据库维护
- rpm [OPTIONS] [PACKAGE_FILE]
- 安装:-i,--install
- 升级:-U,--upgrade;-F,--freshen
- 卸载:-e,--erase
- 查询:-q,--query
- 校验:-V,--verify
- 数据库维护:--builddb,--initdb
- 安装:rpm {-i | --install} [general-options] [install-options] PACKAGE_FILES...
- 常用:rpm -ivh PACKAGE_FILE...
- general-options:
- -v:verbose,输出详细信息
- -vv:更详细的输出
- install-options:
- -h:hash marks输出进度条;每个#表示2%的进度
- --test:测试安装,检查并报告依赖关系及冲突消息等
- --nodeps:忽略依赖关系,不建议
- --replacepkgs:重新安装
- 注意,rpm可以自带脚本;脚本分为四类:
- preinstall:安装过程开始之前运行的脚本,%pre;--nopre
- postinstall:安装过程完成之后运行的脚本,%post;--nopost
- preuninstall:卸载过程真正开始执行之前运行的脚本,%preun;--nopreun
- postuninstall:卸载过程完成之后运行的脚本,%postun;--nopostun
- --noscript都不执行
- --nosignature:不检查包签名信息,即不检查来源合法性
- --nodigest:不检查包完整性信息,即不检查md5信息