软件包管理
RPM包
概念阐述
何为rpm?
rpm软件包
RPM : RPM包管理员(简称RPM,全称为The RPM Package Manager 此名词既可能指.rpm的文件格式软件包,也可能指其本身的软件包管理器(RPM Package Manager)。
最早由Red Hat研制,现在也由开源社区开发。 目前是GNU/Linux下软件包资源最丰富的软件包类型之一。
软件包管理系统是在电脑中自动安装、配制、卸载和升级软件包的工具组合,在各种系统软件和应用软件的安 装管理中均有广泛应用。
在Linux发行版中,几乎每一个发行版都有自己的软件包管理系统。
常见的有:
- 管理deb软件包的dpkg以及它的前端apt(使用于Debian、Ubuntu)。
- RPM包管理员以及它的前端dnf(使用于Fedora)、
- 前端yum(使用于Red Hat Enterprise Linux)、
- 前端 ZYpp(使用于openSUSE)
- 前端urpmi(使用于Mandriva Linux、Mageia)等。
使用软件包管理系统将大大简化在Linux发行版中安装软件的过程。
RPM软件包分为二进制包(Binary)、源代码包(Source)和Delta包 三种。
二进制包可以直接安装在计算机中,而源代码包将会由RPM自动编译、安装。源代码包经常以src.rpm作为后缀名。
代表性rpm
下面聊聊两个代表性的rpm。
yum
yum: Yum(全称为 Yellow dog Updater, Modified)是一个在 Fedora 、RedHat 和 CentOS中的Shell前端软件包管理器。
基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
常用命令:
1 | 安装软件 |
apt
apt: linux软件包管理工具。用于在 Ubuntu, Debian , Linux 发行版上安装、更新、删除和管理 deb 软件包。
apt是Debian及其衍生产品的主要命令行包管理器,它提供了用于搜索、管理和查询的命令行工具、有关软件包的信息以及对所有功能的低级访问
作为操作的一部分,APT使用一个文件列出可获得软件包的镜像站点地址,这个文件就是/etc/apt/sources.list。
客户端在进行安装或升级时先要查询DEB索引清单,从而可以获知所有具有依赖关系的软件包,并一同下载到客户端以便安装。
当客户端需要安装、升级或删除某个软件包时,客户端计算机取得DEB索引清单压缩文件后,会将其解压置放于/var/state/apt/lists/,而客户端使用apt-get install或apt-get upgrade命令的时候,就会将这个文件夹内的数据和客户端计算机内的DEB数据库比对,知道哪些DEB已安装、未安装或是可以升级的。
一些常用命令:
1 | 安装删除 |
apt 与 rpm 一样是 linux 软件包管理器。
rpm操作命令
命名与依赖性
==RPM包命名规则==
例子:
Httpd-2.2.15.el6.centos.1.i686.rpm其中:
Httpd:软件包包名
2.2.15:软件版本
15:软件发布的次数
el6.centos:适合的Linux平台
i686:适合的硬件平台 noarch 表示任何硬件平台都可以安装
rpm rpm包扩展名
如果自己组建rpm包,都以rpm结尾,这样更加清晰,其他管理员可以明白。
注意:
Httpd-2.2.15.el6.centos.1.i686.rpm为包全名,Httpd为包名。这两者有明显区别的,Linux系统命令严格区分两者
RPM包依赖性。
- 树形依赖:a→b→c
- 环形依赖:a→b→c→a
- 环形依赖需要把a,b,c三个同时安装
- 模块依赖:模块依赖查询网站:www.rpmfind.net
如果安装时遇到问题,出现依赖性错误的话:若被依赖文件以.so.[数字]结尾,则为库依赖,需要直接安装这个软件,错误会自动解决。
安装这个包时需要进入网站 www.rpmfind.net 查询被依赖文件
安装升级与卸载
包全名:操作的包是没有安装的软件包时,使用包全名。
注意路径
包名:操作已经安装好的安装的软件包时,使用包名。
包名默认在搜索/var/lib/rpm中的数据库
1 | rpm -ivh 包全名 |
参数:
- -i 安装(install)
- -v 显示详细安装信息(verbose)
- -h 显示进度(hash)
- –nodeps 不检测依赖性 一般不用,安装时都得显示依赖性
注意:安装一定要用包全名
1 | rpm -Uvh 包全名 |
参数:
- -U 升级
- rpm -e 包名
- -e 卸载
- –nodeps 不检查依赖性
查询
1 | -q 查询(query) |
| 为管道符 。作用是:对于管道符两侧,左边命令的输出能作为右边命令的输入。
注意:
1、管道命令只处理前一个命令正确输出,不处理错误输出。
2、管道命令右边命令,必须能够接收标准输入流命令才行。
查询安装过软件包详细信息
1 | rpm -qi 包名 |
查询包中文件安装位置
1 | rpm -ql 包名 |
查询系统文件属于哪个RPM包
1 | rpm -qf 系统文件名 |
查询软件包的依赖性
1 | rpm -qR 包名 |
校验和文件提取
1 | rpm -V 已安装的包名 RPM包校验 |
- -V 校验指定RPM包中的文件(verify)
例子:
rpm -V httpd显示: S.5……T. c /etc/httpd/conf/heepd.conf
验证内容中的8个信息的具体内容:
- S:文件大小是否改变
- M:文件的类型或文件的权限(rwx)是否被改变
- 5:文件MD5校验和是否改变(可以看成文件内容是否改变) MD5是进行文件完整性验证的
- D:设备的中,从代码是否改变
- L:文件路径是否改变
- U:文件的属主(所有者)是否改变
- G:文件的属组是否改变
- T:文件的修改时间是否改变
文件类型:
c:配置文件(config file)
d:普通文档(documentation)
g:“鬼”文件(ghost file),
很少见,意识是该文件不应该被这个RPM包 包含。
l:授权文件(license file)
r:描述文件(read me)
1 | rpm2cpio 包全名 | cpio -idv.文件绝对路径 |
rpm2cpio是将rpm包转换为cpio格式的命令cpio是一个标准工具,他用于创建软件档案文件和从档案文件中提取文件
源码包
源码包和rpm的区别
概念不同
==源码包==
源码包:可以看到源代码,但是安装时间较慢。像脚本安装包类似Windows安装软件。 可以看作是是写了安装界面的源码包
- 优点:
- 开源,如果有足够的能力,可以修改源代码
- 可以自由选择所需的功能
- 软件是编译安装,所以更适合自己的系统,使用更加稳定也效率更高
- 卸载方便,直接删除安装目录
- 缺点:
- 安装过程步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误
- 编译过程时间较长,安装比二进制安装时间长
- 因为是编译安装,安装过程中一旦报错新手很难解决。
==二进制包==
二进制包:RPM包,系统默认包,厂商已经进行了编译,看不到源代码,但是安装时间较快
优点:
- 包管理系统简单,只通过几个命令就可以实现包的安装,升级,查询和卸载。
- 安装速度比源码包安装快得多。
缺点:
经过编译,不再可以看到源代码。
功能选择不如源码包灵活。
依赖性 依赖性指的是要想安装A包就得先安装B包,要想安装B包又得先安装C包,所以只能以CBA的顺序。安装RPM包,删除的时候得按ABC顺序删除安装包,基本上所有的RPM包全有依赖性。
安装位置不同
- RPM包默认安装路径(绝大部分软件文件安装位置):
/etc安装文件安装目录/usr/bin/可执行的命令安装目录/usr/lib程序所使用的函数库保存位置/usr/share/doc/基本的软件使用手册保存位置/usr/share/man帮助文件保存位置
RPM包默认安装路径(绝大部分软件文件安装位置):
源码包安装位置:
- 安装在指定位置当中,一般是
/usr/local/软件名/。
- 安装在指定位置当中,一般是
安装位置不同带来的影响:
RPM包:
RPM包安装的服务可以使用系统服务管理命令(service)来管理,例如RPM包安装的Apache的启动方法是:
1 | /etc/rc.d/init.d./httpd start |
RPM包的启动文件全在/etc/rc.d/init.d./里,service 会搜索RPM包所有的安装路径,所以 service 才能启动RPM包软件。
但是service启动不了源码包软件,因为源码包在/usr/local里,和RPM包不一样。
源码包
源码包启动使用绝对路径加start。
源码包的安装
这里举例(安装Apache)说明一下:
安装准备
安装C语言编译器
使用命令:
1 | yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake |
执行命令前要下载源码包:
http://mirror.bit.edu.cn/apache/httpd/
选择任何版本,比如:httpd-2.4.43.tar.bz2版本
注意事项
- 源码包保存位置:/usr/local/src
- 软件安装位置:/usr/local
然后看看安装过程有没有报错:
安装过程停止,并出现error,warning或者no提示,即发生错误
把电脑本机下载好的源码包传输到Linux系统或者服务器上。
Windows下载WinSCP软件进行本机与虚拟机或者远程传输
Mac连接远程阿里云服务器,终端使用命令 scp进行传输:
1 | scp -r localfile.txt username@192.168.0.1:/home/username/ |
其中,
1)scp是命令,-r是参数
2)localfile.txt 是文件的路径和文件名
3)username是服务器账号,一般为root
4)192.168.0.1是要上传的服务器ip地址
5)/home/username/是要拷入的文件夹路径,一般为/root 家目录
例子:scp -r /Users/yangyangyang/Desktop/httpd-2.4.43.tar.bz2 root@47.95.5.171:/root
解压下载到源码包
使用命令tar -jxvf httpd-2.4.43.tar.bz2
如果是tar.gz压缩包可以使用 tar -zxvf 命令进入解压缩目录
输入命令:1
cd httpd-2.4.43
INSTALL:安装说明
README:使用说明进入安装说明:
1
2
3
4
5vi INSTALL
./configure --prefix=PREFIX 编译前准备
make 进行编译
make install 编译安装
PREFIX/bin/apachectl star 启动命令这些为详细的安装步骤,其中:
./configure为软件配置与检查 我们也称编译前准备
1.定义需要的功能选项。
2.检测系统环境是否符合安装要求
3.把定义好的功能选项和检测系统环境的信息都写入Makefile文件,用于后续的编辑。定义安装路径
退出之后输入命令:./configure --prefix=/usr/local/apache2如果报错显示:
进以下网址寻求解决办法
http://www.cnblogs.com/yuzhaokai0523/p/4382974.html完成定义
输入命令:make进行编译完成编译
输入命令:make install编译安装启动
输入命令1
2/usr/local/apache2/bin/apachectl start
PREFIX/bin/apachectl star #$pREFIX为软件安装路径
第三种包:脚本包
- 脚本安装包并不是独立的软件包类型,常见安装的是源码包。
- 是人为把安装过程写成了自动安装的脚步,只要执行脚本,定义简单的参赛,就可以完成安装。
- 非常类似于Windows下软件的安装方式。
使用绝对路径直接回车安装。
linux中.sh文件即脚本文件,一般都是bash脚本。