项目构建工具:可以自动构建需要的文件,顺序等操作
c/c++:make命令
java:maven工具
程序包管理器:
从开发到最后的包:源代码->目标二进制格式(二进制程序,库文件,配置文件,帮助文件)->组织成为一个或有限几个包文件
对安装包的操作包括:安装、升级、卸载、查询、校验
程序包管理器:不同系用不同的管理器和包格式
debian:dpt,dpkg,"deb"
redhat:redhat package manager,"rpm";rpm is package manager
suse:rpm
下载的源代码命名格式一般是:name-VERSION.tar.gz
VERSION包含的组成部分:major:主版本号,minor次版本号,release发行号:比如:redis-3.0.2
下载的rpm包命名格式:name-VERSION-release.arch.rpm
VERSION包含的部分,这个是源码的版本号:major.minor.release
release.arch:rpm包的发行号,有时候是源代码没有改变,但是改变了制作rpm的配置文件,可以改这个release,arch指的是架构
有时候rpm包的命名为:realese.os.arch.rpm,会增加一个系统os,来区分是安装在哪个系统上,比如centos6或者centos7
这是个例子:redis-2.4.10-1.el6.x86_64
由源码编译为rpm包:redis-3.0.2.tar.gz—redis-3.0.2-1.centos7.x86.rpm
有时候rpm包有拆包的习惯:主包和支包
主包:name-VERSION-release.arch.rpm
支包:name-function-VERSION-release.arch.rpm
比如下面的
openssl-1.0.1e-48.el6.x86_64.rpm
openssl-devel-1.0.1e-48.el6.x86_64.rpm
openssl-perl-1.0.1e-48.el6.x86_64.rpm
前端工具:自动解决依赖关系,a依赖b,会自动安装b
yum:rhel系列系统上rpm包管理器的前端工具
apt-get:deb包管理器的前端工具
zypper:suse的rpm包管理器前端工具
dnf:fedora 22+系统上rpm包管理器的前端工具
程序包管理器:
功能:将编译好的应用程序的各组成文件打包成一个或多个程序包文件,从而更方便的实现程序包的安装,升级,等管理操作
程序包组成清单(每个程序包都单独实现)
文件清单
安装或卸载时运行的脚本
数据库(公共)
程序包的名称和版本
依赖关系
功能说明
安装生成各文件的文件路径及校验码信息
……
获取程序包的途径:
系统发行版光盘或官方文件服务器(镜像站点)
http://mirrors.aliyum.com
http://mirrors.163.com
第三方组织
epel源
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
建议检查其合法性,来源合法性,程序包的完整性
rpm命令:centos系统上管理命令
rpm [options] [package_file] 安装:-i,--install 升级:-U,--update,-F,freshen 卸载:-e,--erase 查询:-q,--query 校验:-V,--verify 数据库维护:--builddb,--initdb
安装
rpm {-i|--install} [install-options] PACKAGE_FILE .. rpm ivh PACKAGE_FILE .. 最常用的命令 general options: -v:verbose,详细信息 -w:更详细的信息 [install-options] -h:hash marks:输出进度条,每个#表示2%的进度 --test:测试安装,检查并报告依赖关系及冲突消息 --nodeps:忽略依赖关系,不建议 --replacepkgs:重新安装 --nodigest:不检查包的完整性信息 --nosignature:不检查包签名信息,不检查来源的合法性 rpm可自带脚本 preinstall:安装过程开始之前运行脚本,%pre postinstall:安装过程完成之后运行脚本,%post preuninstall:卸载过程真正开始执行之前运行脚本,%preun postuninstall:卸载过程完成之后运行的脚本,%postun
升级
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... 升级或安装 rpm {-F|--freshen} [install-options] PACKAGE_FILE ... 升级,如果没有安装,不会安装 rpm Uvh PACKAGE_FILE .. rpm Fvh PACKAGE_FILE .. [install-options] 和上面一样 --oldpackage:降级为老版本 --force:强制升级,可能影响依赖的关系,a依赖b,b升级后的版本假如a使用不了,a就可能受影响 注意:不要对内核做升级,linux支持多内核版本存在,因此,直接安装新版内核 注意:如果某源程序包的配置文件安装后曾被修改过,升级时新版本的程序提供的同一个配置文件不会覆盖原来的配置文件,\ 而是把新版本的配置文件重命名后(FILENAME.rpmnew)提供
卸载
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ... rpm -e PACKAGE_NAME,卸载时是PACKAGE_NAME,安装时是PACKAGE_FILE --allmatches:卸载时所有匹配指定名称的程序包的各版本,一个系统可以多版本共存 --nodeps:忽略依赖关系 --test:测试卸载,dry run模式
查询
rpm {-q|--query} [select-options] [query-options] select-options:PACKAGE_NAME:查询指定的程序包是否已安装,及其安装版本 rpm -q zsh -a;--all;查询所有已经安装过的包 rpm -qa | grep "zsh" #模糊查询 -f FILE:查询指定的文件由哪个程序包安装生成 rpm -qf /etc/fstab -p,--package PACKAGE_FILE 对未安装过的程序包执行查询操作,假如下载下来一个rpm包,可以不按照这个rpm来查看都有哪些东西 --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供 rpm -q --whatprovides bash --whatrequires CAPABILITY(能力):查询指定的CAPABILITY被哪个包所依赖 query-options --changelog:查询rpm包的changelog rpm -q --changelog zsh -l,--list:程序安装生成的文件列表 -i,--info:查询information,包括版本号,大小,所属的包组 rpm -qi: -c,--configfiles:查询程序包有哪些配置文件 -d,--docfiles:查询指定的程序包提供的文档 --provides:列出指定程序包提供的所有的能力 -R,--requires:查询程序包的的依赖关系,这个包依赖哪些东西才能工作 rpm -qR bash --scripts:查看程序包自带的脚本片段都有哪些信息 rpm -qp[i|c|i|d...] PACKAGE 根据程序的安装包查询未安装时候的各种信息
校验:看那些文件属性和内容更改了,查看是人为的还是其他人所为
rpm {-V|--verify} [select-options] [verify-options] verify-options # rpm -V zsh 当修改这个命令列表里面的某一个文件改一下,再执行这个校验命令都会显示改的文件
包来源合法性验证和完整性验证:
获取并导入信任的包制作者的秘钥
对于centos发行版来说:rpm –import /path/RPM-GPG-KEY-CentOS-7
[root@localhost /etc/pki/rpm-gpg]#ls #导入后保存的位置 RPM-GPG-KEY-CentOS-6 RPM-GPG-KEY-CentOS-Security-6 RPM-GPG-KEY-CentOS-Debug-6 RPM-GPG-KEY-CentOS-Testing-6
验证:
安装此组织签名的程序时,会自动执行校验
手工验证:rpm -K PACKAGE_FILE 未安装的时候,检查包的合法性
签名:用作者的私钥签署rpm包的指纹信息,确保来源的合法性,包的完整性
实验
将更新的rpm包到root目录下
# cp /run/media/root/CentOS\ 7\ x86_64/Packages/zsh-5.0.2-14.el7.x86_64.rpm /root/ 导入信任的rpm公钥, # rpm --import /run/media/root/CentOS\ 7\ x86_64/RPM-GPG-KEY-CentOS-7 # ll /etc/pki/rpm-gpg/ 可以在/etc/pki/rpm-gpg/下看到导入的公钥 # rpm -ivh zsh-5.0.2-14.el7.x86_64.rpm 安装不会报警告 # rpm -K zsh-5.0.2-14.el7.x86_64.rpm 手工校验rpm包
数据库重建:所有的安装数据都存放在数据库里面,删除后系统将不知道命令是否已经安装,依赖性等等
rpm管理器数据库路径:/var/lib/rpm
获取帮助:
centos6:man rpm
centos7:man rpmdb
rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY] [--root DIRECTORY] 当数据库损坏了,或者删除了,可以自动创建数据库,删除/var/lib/rpm后可重建 --initdb:初始化数据库,当前无任何数据库初始化,创建一个新的。当前有时不执行任何操作 #rpm --initdb --dbpath /tmp/rpm 将系统的数据库重建到该目录下 --rebuilddb:重新构建,通过读取当前系统上所有已安装过的程序包进行重新创建
经过测试,重建不出来,,,
–
–
–
评论前必须登录!
注册