天天看点

软件包管理

                                             软件包管理

-----------------------------------------------------------------------------------------------------------------------------------------------

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>