软件包管理简介

软件包分类

  1. 源码包
  2. 二进制包(RPM包,系统默认包)

源码包

源码包的优点:

  1. 开源,如果有足够的能力,可以修改源代码
  2. 可以自由选择所需的功能
  3. 软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高
  4. 卸载方便

源码包的缺点:

  1. 安装过程步骤较多,尤其安裝较大的软件集合时(如LAMP环境搭建),容易出现拼写错误
  2. 编译过程时间较长,安装比二进制安装时间长
  3. 因为是编译安装,安装过程中一旦报错新手很难解决

RPM包

二进制包的优点:

  1. 包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载
  2. 安装速度比源码包安装快的多

二进制包的缺点:

  1. 经过编译,不再可以看到源代码
  2. 功能选择不如源码包灵活
  3. 依赖性

RPM包管理 - rpm命令管理

RPM包命名原则

  • httpd : 包名
  • httpd-2.2.15-15.e16.centos.1.i686.rpm : 包全民

httpd-2.2.15-15.e16.centos.1.i686.rpm

  • httpd : 软件包名
  • 2.2.15 : 软件版本
  • 15 : 软件发布的次数
  • e16.centos : 适合的 Linux平台
  • i686 : 适合的硬件平台
  • rpm : rpm包扩展名

PRM包依赖性

  • 树形依赖 : a –> b –> c
  • 环形依赖 : a –> b –> c –> a
  • 模块依赖 : 某个RPM包A是依赖于某个模块B的,也就是说只要装了B,A就自动安装了

包全名和包名

  1. 包全名:操作的包是没有安装的软件包时,使用包全名。而且要注意路径
  2. 包名:操作已经安装的软件包时,使用包名。是搜索/var/ib/rpm/中的数据库

RPM安装

1
rpm -ivh 包全名

参数:

  • -i(install) : 安装
  • -v(verbose) : 显示详细信息
  • -h(hash) : 显示进度
  • –nodeps : 不检测依赖性
  • -U(update) : 升级
  • -e(erase) : 卸载

示例:

1
2
3
4
rpm -ivh httpd-2.2.15-15.e16.centos.1.i686.rpm

# 卸载
rpm -e httpd-2.2.15-15.e16.centos.1.i686.rpm

RPM包的查询

查询是否安装

参数:

  • -q(query) : 查询
  • -a(all) : 所有
  • -i(information) : 包的信息
  • -l(list) : 包的位置
  • -R(requires) : 包的依赖性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查询特定包是否安装
rpm -q 包名

# 查询所有已经安装的RPM包
rpm -qa

# 查询所有包含python的RPM包
rpm -qa | grep python

# 查看信息
rpm -qi httpd

# 查看位置
rpm -ql httpd

# 查看python包的依赖性
rpm -qR python

RPM的校验

  • -V(verify) : 校验指定RPM包中的文件
  • 主要使用校验来检测RPM包是否被修改
  • 检验检测的8个信息:
    1. S 文件大小是否改变
    2. M 文件的类型或文件的权限(rwx)是否被改变
    3. 5 文件MD5校验和是否改变(可以看成文件内容是否改变)
    4. D 设备的中,从代码是否改变
    5. L 文件路径是否改变
    6. U 文件的属主(所有者)是否改变
    7. G 文件的属组是否改变
    8. T 文件的修改时间是否改变
1
rpm -V 已安装的包名

RPM包的文件提取

1
rpm2cpio 包全名 | cpio -div .文件绝对路径
  • rpm2cpio : 将rpm包转换为cpio格式的命令
  • cpio : 是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件

示例:

1
2
3
4
5
6
7
8
9
10
# 查询ls命令属于哪个软件包
rpm -pf /bin/ls

# 先使用rpm2cpio将coreutils-8.4-19.el6.i686包转变cpio格式
# 再执行cpio -div将这个cpio格式提取出/bin/ls
# 保存在当前目录( . )
rpm2cpio /mut/cdrom/Packages/coreutils-8.4-19.el6.i686 | cpio -div ./bin/ls

# 把ls命令复制到bin目录下,修复文件丢失
cp /root/bin/ls bin

RPM包管理 - yum在线管理

网络yum源

1
vi /etc/yum.repos.d/CentOS-Base.repo
  • [base] : 容器名称,一定要放在[]中
  • name : 容器说明,可以自己随便写
  • mirrorlist : 镜像站点,这个可以注释掉
  • baseurl : 我们的yum源服务器的地址。默认是 Centos官方的yum源服务器,是可以使用的,如果你觉得慢可以改成你喜欢的yum源地址
  • enabled : 此容器是否生效,如果不写或写成enable=1都是生效,写成enable=0就是不生效
  • gpgcheck : 如果是1是指RPM的数字证书生效,如果是0则不生效
  • gpokey : 数字证书的公钥文件保存位置。不用修改

yum命令

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查询所有可用的软件包列表
yum list

# 搜索包含关键字的包
yum search 关键字

# 安装
# -y : 自动回答yes
yum -y install 包名

# 升级
yum -y update 包名

# 卸载
yum -y remove 包名

yum软件组管理命令

1
2
3
4
5
6
7
8
# 列出所有可用的软件组列表
yum grouplist

# 安装指定的软件组 , 组名可以由grouplist查询出来
yum groupinstall 软件组名

# 卸载指定的软件组
yum groupremove 软件组名

光盘yum源搭建

修改yum源,让网络yum源失效

1
2
3
# 查看所有的yum源
cd /etc/yum.repos.d/
# CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo

yum是通过扫描yum源来进行安装的,所以只需要将不需要的远修改个名字就行.

比如现在光盘需要用到CentOS-Media.repo,就需要将其它的修改,

1
2
3
4
# 名字可以随意修改,这里使用约定俗成的做法
mv CentOS-Base.repo CentOS-Base.repo.bak
mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak
mv CentOS-Vault.repo CentOS-Vault.repo.bak

修改光盘yum源文件

1
vim CentOS-Media.repo
  • 修改baseurl
  • 设置enabled为1

源码包管理

源码包和RPM包的区别

  • 安装之前的区别:概念上的区别
  • 安装之后的区别:安装位置不同

RPM包默认安装路径

/etc/ 配置文件安装目录
/usr/bin/ 可执行的命令安装目录
/usr/lib/ 程序所使用的函数库保存位置
/usr/share/doc/ 基本的软件使用手册保存位置
/usr/share/man/ 帮助文件保存位置

源码包安装位置

自定义位置,一般是/usr/local/软件名/

安装位置不同带来的影响

RPM包安装的服务可以使用系统服务管理命令(service)来管理,例如RPM包安装的 apache的启动方法是:

1
2
3
4
# 使用绝对路径
/etc/rc.d/init.d/httpd start
# 或者
service httpd start
  • service httpd start的本质其实就是去/etc/rc.d/init.d/找到httpd,然后启动
  • 所以,对于使用源码包安装的服务,因为路径不一样,就不能使用service httpd start,只能使用绝对路径查找

源码包安装过程

  • 我们可以同时安装PRM包和源码包 , 但是不推荐
  • 源码包保存位置 : /usr/local/src/
  • 软件安装位置:/usr/local/

流程 :

  1. 下载源码包
  2. 解压缩下载的源码包
  3. 进入解压缩目录
  4. .configure软件配置与检查
    • 定义需要的功能选项。
    • 检测系统环境是否符合安装要求。
    • 把定义好的功能选项和检测系统环境的信息都写入 Makefile文件,用于后续的编辑。
  5. make : 编译
  6. make install 编译安装

现在已经下载了httpd-2.2.9.tar.gz

1
2
3
4
5
6
7
8
9
10
# 解压缩
tar -zxvf httpd-2.2.9.tar.gz
# 进入解压缩目录
cd httpd-2.2.9
# 设置安装路径
.configure --prefix=/usr/local/apache2
# 调用gcc,将源码进行编译
make
# 编译安装
make install
  • 只有执行了make install后才会真正的安装,如果安装失败,我们执行make clean来清除临时文件即可.
  • 也就是说 , 源码包不需要卸载命令,直接删除安装目录即可。不会遗留任何垃圾文件。

脚本安装包与软件包的选择

  • 脚本安装包并不是独立的软件包类型,常见安装的是源码包。
  • 是人为把安装过程写成了自动安装的脚本,只要执行脚本,定义简单的参数,就可以完成安装。
  • 非常类似于 Windows下软件的安装方式

流程 :

  1. 下载软件
    http://sourceforge.net/projects/webadmin/files/webmin
  2. 解压缩,并进入加压缩目录
  3. 执行安装脚本