软件包管理
-----------------------------------------------------------------------------------------------------------------------------------------------
rpm篇
ABI:Application Binary Interface
Windows与Linux不兼容
ELF(Executable and Linkable Format)
PE(Portable Executable)
库级别的虚拟化:
Linux: WINE
Windows: Cygwin
API:Application Programming Interface
POSIX:Portable OS
程序源代码--> 预处理--> 编译--> 汇编--> 链接
静态编译:.a
动态编译:.so
静态和动态链接
链接主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接,分为静态链接和动态链接
静态链接
把程序对应的依赖库复制一份到包
libxxx.a
嵌入程序包
升级难,需重新编译
占用较多空间,迁移容易
动态链接
只把依赖加做一个动态链接
libxxx.so
连接指向
占用较少空间,升级方便
开发语言
系统级开发:C、C++
应用级开发:java、Python、go、php、perl、delphi、ruby
包管理器
二进制应用程序的组成部分:
二进制文件、库文件、配置文件、帮助文件
程序包管理器:
debian:deb文件, dpkg包管理器
redhat:rpm文件, rpm包管理器
rpm:RedhatPackage Manager
RPM Package Manager
包命名
源代码:name-VERSION.tar.gz|bz2|xz
VERSION: major.minor.release
rpm包命名方式:
name-VERSION-release.arch.rpm
例:bash-4.2.46-19.el7.x86_64.rpm
release:release.OS
常见的arch:
x86: i386, i486, i586, i686
x86_64: x64, x86_64, amd64
powerpc: ppc
跟平台无关:noarch
包命名和工具
包:分类和拆包
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm开发子包
Application-utils-VERSION-ARHC.rpm其它子包
Application-libs-VERSION-ARHC.rpm其它子包
包之间:可能存在依赖关系,甚至循环依赖
解决依赖包管理工具:
yum:rpm包管理器的前端工具
apt-get:deb包管理器前端工具
zypper: suse上的rpm前端管理工具
dnf: Fedora 18+ rpm包管理器前端管理工具
库文件
查看二进制程序所依赖的库文件
ldd/PATH/TO/BINARY_FILE
管理及查看本机装载的库文件
ldconfig加载库文件
/sbin/ldconfig-p: 显示本机已经缓存的所有可用库文件名及文件路径映射关系
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
缓存文件:/etc/ld.so.cache
功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作
包文件组成(每个包独有)
RPM包内的文件
RPM的元数据,如名称,版本,依赖性,描述等
安装或卸载时运行的脚本
数据库(公共):/var/lib/rpm(需要备份)
程序包名称及版本
依赖关系
功能说明
包安装后生成的各文件路径及校验码信息
程序包的来源
管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum, dnf
获取程序包的途径:
(1) 系统发版的光盘或官方的服务器
CentOS镜像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
(2) 项目官方站点
(3) 第三方组织:
Fedora-EPEL:
Extra Packages for Enterprise Linux
Rpmforge:RHEL推荐,包很全
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
(4) 自己制作
注意:第三方包建议要检查其合法性
来源合法性,程序包的完整性
rpm包管理
CentOS系统上使用rpm命令管理程序包:
安装、卸载、升级、查询、校验、数据库维护
安装:
rpm {-i|--install} [install-options] PACKAGE_FILE…
-v: verbose显示进度
-vv:显示更详细的信息
-h: 以#显示程序包管理执行进度
rpm -ivhPACKAGE_FILE …
安装光盘位置:
[install-options]
--test: 测试安装,但不真正执行安装,即dry run模式
--nodeps:忽略依赖关系
--replacepkgs:替换以前的文件,强制安装| replacefiles:安装时覆盖一样的文件
--nosignature: 不检查来源合法性
--nodigest:不检查包完整性
--noscripts:不执行程序包脚本
%pre: 安装前脚本--nopre
%post: 安装后脚本--nopost
%preun: 卸载前脚本--nopreun
%postun: 卸载后脚本--nopostun
卸载包不用写路径,rpm -e memcached
rpm--import rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 导入公钥,用来检查包的完整性和来源
rpm -i 安装后新版本旧版本都在,
rpm -U 安装有旧版程序包,则“升级”,如果不存在旧版程序包,则“安装”
rpm -F 安装有旧版程序包,则“升级”,如果不存在旧版程序包,则不执行升级操作
rpm -UvhPACKAGE_FILE ...
rpm -FvhPACKAGE_FILE ...
--oldpackage:降级
--force: 强制安装
rpm2cpio 安装包 | cpio -t 预览包内文件
rpm -qpl 查询安装包里的文件
rpm -qi 查询已安装包的详细信息
rpm -q --script cmd 查看命令的脚本
包查询
rpm {-q|--query} [select-options] [query-options]
[select-options]
-a: 所有包
-f: 查看指定的文件由哪个程序包安装生成
-p rpmfile:针对尚未安装的程序包文件做查询操作
--whatprovidesCAPABILITY:查询指定的CAPABILITY由哪个包所提供
--whatrequiresCAPABILITY:查询指定的CAPABILITY被哪个包所依赖
rpm -q 软件名: 询问系统是不是安装了该软件包,比如说rpm -q httpd
rpm -qa : 查询已安装的所有软件包,查找某个软件包用rpm -qa | grep 软件名提取
rpm -qc 软件名: 查询已安装软件的配置文件
rpm -qd 软件名: 查询已安装软件的文档安装位置
rpm -qf 文件名: 查询已安装的文件属于哪个软件包,比如说rpm -qf /usr/lib/libacl.la
rpm -qi 软件包名:查询一个已经安装软件包的信息
rpm -ql 软件包名:查询已安装的软件包安装到哪个目录
rpm -qp 软件包名:查询当前目录下rpm包相关信息,配合rpm -qpi、rpm -qpR等需要转到有软件包的目录下
rpm -qR 软件名: 查询已安装软件所依赖的软件包及文件
rpm2cpio 包文件|cpio–itv预览包内文件
rpm2cpio 包文件|cpio–id “*.conf”释放包内文件
--changelog:查询rpm包的changelog
-qc: 查询程序的配置文件
-qd: 查询程序的文档
-qi: information
-ql: 查看指定的程序包安装后生成的所有文件
-q --scripts:程序包自带的脚本
-q --provides: 列出指定程序包所提供的CAPABILITY
-qR: 查询指定的程序包所依赖的CAPABILITY
常用查询用法:
-qi PACKAGE, -qfFILE, -qc PACKAGE, -qlPACKAGE, -qdPACKAGE
-qpiPACKAGE_FILE, -qplPACKAGE_FILE, ...
-qa\
包卸载:
rpm {-e|--erase}
[--allmatches] 所有匹配
[--nodeps]不理会包依赖直接卸载
[--noscripts] 没有脚本
[--notriggers]不用触发器
[--test] PACKAGE_NAME测试
rpm -a -ql -qf -qi -qp
包校验
rpm -V检测包完整性
rpm {-V|--verify} [select-options] [verify-options]
提示语中:
S 文件大小不同
M 文件类型不同(包括权限和未见类型)
5 哈希值不同
D Device major/minor number mismatch
L readLink(2) path mismatch
U 所有者发生变化
G Group ownership differs
T 文件修改时间不同
P capabilities differ
rpm数据库
数据库重建:
/var/lib/rpm,此文件夹保护好
rpm {--initdb|--rebuilddb}
initdb: 初始化
如果事先不存在数据库,则新建之
否则,不执行任何操作
rebuilddb:重建已安装的包头的数据库索引目录
yum篇
CentOS: yum, dnf
YUM: YellowdogUpdate Modifier,rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具,底层依赖于rpm
yum repository: yum repo,存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下)
文件服务器:
http://
https://
ftp://
file://
yum基于python 2.7,不要乱装python,以免无法使用yum
yum配置文件/etc/yum.conf,配置文件中:
keepcache=1,保留缓存,安装后保留安装包,方便多台机器安装某个安装包;
gpgcheck=0,不导入公钥就设为0,不检查安装包相关,设为1就需要导入公钥。
repodata在哪,哪就可以当作用来配置yum仓库的位置
写仓库位置:/etc/yum.repos.d/任意字符.repo
作为远程服务器时链接光盘挂载点 :/var/www/html/CentOS
文件内格式:
[自己起名]:
name=test(自己起)
baseurl=file:///misc/cd (光盘路径),路径包括http://、https://、ftp://、file://
gpgcheck=0 或者
gpgkey=公钥位置
enabled=0 禁用
yum info 查询安装包信息
yum list 查询yum仓库信息
systemctl start …service 启动服务指令,CentOS7才有
yum的repo配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号
$arch: 平台,i386,i486,i586,x86_64等
$basearch:基础平台;i386, x86_64
$YUM0-$YUM9:自定义变量
实例:
http://server/centos/$releasever/$basearch/
http://server/centos/7/x86_64
http://server/centos/6/i384
yum remove 无依赖性卸载
yum histrory 记录安装信息
yum history redo 9重做yumyum历史第九步操作
yum history undo 9 撤销yum历史第九步操作
yum clean all清除yum仓库缓存,仓库变化后需要清楚缓存
yum装包组大小写不敏感,装包大小写敏感
yum install 安装包 -q 静默安装
yum info 安装包信息
yum groupinfo 安装包组信息:
不带符合表示包已经安装,不带包组独自安装;
=随着包组一起装好
+表示没有安装,升级时会自动安装
-表示没有安装,包组安装时也不会自动安装
yum search
yum history undo
yum repolist 检查yum的仓库
yum-untils工具可以查询一个没有安装的包里的文件,requery -ql指令,基于yum仓库
createrepo 目录:自制yum源
yum groupinstall "development tools"
生成172.16.0.1_cobbler_ks_mirror_CentOS-X-x86_64_.repo
yum-config-manager --add-repo=
http://172.16.0.1/cobbler/ks_mirror/7/
yum-config-manager --disable “仓库名" 禁用仓库
yum-config-manager --enable “仓库名” 启用仓库
yum命令的用法:
yum [options] [command] [package ...]
显示仓库列表:
yum repolist[all|enabled|disabled]
显示程序包:
yum list
yum list [all | glob_exp1] [glob_exp2] [...]
yum list {available|installed|updates} [glob_exp1] [...]
安装程序包:
yum install package1 [package2] [...]
yum reinstall package1 [package2] [...] (重新安装)
升级程序包:
yum update [package1] [package2] [...]
yum downgrade package1 [package2] [...] (降级)
检查可用升级:
yum check-update
卸载程序包:
yum remove | erase package1 [package2] [...]
yum provides 查看指定的特性由哪个程序包提供
yum deplist 查看包的依赖性
yum的命令行选项:
--nogpgcheck:禁止进行gpgcheck
-y: 自动回答为“yes”
-q:静默模式
--disablerepo=repoidglob:临时禁用此处指定的repo
--enablerepo=repoidglob:临时启用此处指定的repo
--noplugins:禁用所有插件
系统安装光盘作为本地yum仓库:
(1) 挂载光盘至某目录,例如/mnt/cdrom
mount /dev/cdrom/mnt/cdrom
(2) 创建配置文件
[CentOS7]
name=
baseurl=
gpgcheck=
enabled=
创建yum仓库:createrepo[options] <directory>