rpm
1、简介
- 土办法
以源码方式来安装软件: Tar包。
- 带有环境的包
由程序开发者直接在已知的系统上面编译好,再将该程序直接给使用者来安装。
- 像数据库一样管理包
如果在安装的时候还可以加上一些与这些程序相关的资讯,将他创建成为数据库,那不就可以进行安装、反安装、 升级与验证等等的相关功能
- Linux 界的两大主流
RPM 与 DPKG
- 问题
1. 软件文件安装的环境必须与打包时的环境需求一致或相当;
2. 需要满足软件的相依属性需求;
3. 反安装时需要特别小心,最底层的软件不可先移除,否则可能造成整个系统的问题!
- 解决方案SRPM:
****.src.rpm
这个 RPM 文件里面含有原始码哩,这个SRPM 所提供的软件内容『并没有经过编译』
他与 RPM 不同的是,他也提供了参数配置档 (就是 configure 与 makefile)。
所以,如果我们下载的是 SRPM ,那么要安装该软件时,你就必须要:
- 先将该软件以 RPM 管理的方式编译,此时 SRPM 会被编译成为 RPM 文件;
- 然后将编译完成的 RPM 文件安装到 Linux 系统当中
我们现在知道 RPM 文件必须要在相同的 Linux 环境下才能够安装,而 SRPM 既然是原始码的格式,自然我们就可以透过修改 SRPM 内的参数配置档,然后重新编译产生能适合我们 Linux 环境的 RPM 文件,如此一来,不就可以将该软件安装到我们的系统当中,而不必与原作者打包的 Linux 环境相同了?这就是 SRPM 的用处了!
- 什么是 i386, i586, i686, noarch, x86_64
硬件平台要求。norach表示无硬件要求,里面可执行程序,如shell脚本。
2、YUM
dev版本
会比较大,依赖很多包。
依赖
RPM经常依赖别的包的函数库,依赖包可以通过YUM来自动获取。
当用户端有升级、安装的需求时, yum 会向容器要求清单的升级,等到清单升级到本机的 /var/cache/yum 里面后, 等一下升级时就会用这个本机清单与本机的 RPM 数据库进行比较,这样就知道该下载什么软件。接下来 yum 会跑到容器服务器 (yum server) 下载所需要的软件,然后再透过 RPM 的机制开始安装软件啦!
3、rpm
升级
-Uvh
-Fvh
查询
# 查询是否有安装软件,不要版本名
rpm -q logrotate
# 列出软件的目录和文件
rpm -ql logrotate
#列出软件相关信息:
rpm -qi logrotate
#找出包的配置档与说明档
rpm -qc logrotate
rpm -qd logrotate
#查找软件的还需要添加的依赖文件
rpm -qR logrotate
#找出文件是那个软件提供的?
rpm -qf /bin/sh
#想要知道该文件的需求文件,该如何?
rpm -qpR filename.i386.rpm
验证
#验证软件是否被改动
rpm -V logrotate
#验证文件是否被改动
rpm -Vf /etc/crontab
数字签名
验证只能验证软件内信息与 /var/lib/rpm/ 里面的数据库信息而已,无法验证软件文件本身的正确性。
软件商产生一个专属於该软件的签章,并将该签章的公钥 (public key) 释出。 当你要安装一个 RPM 文件时:
- 首先你必须要先安装原厂释出的公钥文件;
- 实际安装原厂的 RPM 软件时, rpm 命令会去读取 RPM 文件的签章资讯,与本机系统内的签章资讯比对,
- 若签章相同则予以安装,若找不到相关的签章资讯时,则给予警告并且停止安装喔。
spec
eg
# 1. 首先,这个部分在介绍整个软件的基本相关资讯!不论是版本还是释出次数等。
Summary: A PPP over Ethernet client (for xDSL support).
Name: rp-pppoe
Version: 3.5
Release: 32.1 #打包词数
License: GPL
Group: System Environment/Daemons
Url: http://www.roaringpenguin.com/pppoe/
Source: http://www.roaringpenguin.com/rp-pppoe-%{version}.tar.gz
Source1: adsl-connect
Source2: adsl-setup
....(中间省略)....
# 2. 这部分则是在配置相依属性需求的地方!
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root #配置作为编译时,该使用哪个目录来缓存中间文件 (如编译过程的目标文件/连结文件等档)。
Prereq: /sbin/chkconfig <==需要的前驱程序有哪些!
Prereq: /sbin/service
Prereq: fileutils
Requires: ppp >= 2.4.2 <==需要的软件又有哪些!
Requires: initscripts >= 5.92
Requires: iproute >= 2.6
BuildRequires: libtool <==还需要哪些工具软件?
BuildRequires: autoconf
BuildRequires: automake
%description <==此软件的描述啦!
PPPoE (Point-to-Point Protocol over Ethernet) is a protocol used by
many ADSL Internet Service Providers. This package contains the
Roaring Penguin PPPoE client, a user-mode program that does not
require any kernel modifications. It is fully compliant with RFC 2516,
the official PPPoE specification.
# 3. 编译前的预处理,以及编译过程当中所需要进行的命令,都写在这里
# 尤其 %build 底下的数据,几乎就是 makefile 里面的资讯啊!
%prep <==这部份在预先 (pre) 进行处理,大致就是 patch 软件啊!
%setup -q
%patch0 -p1 -b .config
%patch1 -p1 -b .buildroot
%patch2 -p1 -b .ipchains
%build <==这部分就是在实际编译罗!
cd src
autoconf
CFLAGS="-D_GNU_SOURCE" %configure
make
install -m 0755 %{SOURCE1} scripts
install -m 0755 %{SOURCE2} scripts
install -m 0755 %{SOURCE3} scripts
install -m 0755 %{SOURCE4} scripts
install -m 0755 %{SOURCE5} scripts
%install <==这就是安装过程!
rm -rf %{buildroot}
mkdir -p %{buildroot}/sbin
make -C src install RPM_INSTALL_ROOT=%{buildroot}
....(中间省略)....
# 4. 这里列出,这个软件释出的文件有哪些的意思!
%files <==这个软件提供的文件有哪些?需要记录在数据库内!
%defattr(-,root,root)
%doc doc/LICENSE scripts/adsl-connect scripts/adsl-setup scripts/adsl-init
%doc scripts/adsl-start scripts/adsl-status scripts/adsl-stop
%doc configs
%config(noreplace) %{_sysconfdir}/ppp/pppoe-server-options
%config(noreplace) %{_sysconfdir}/ppp/firewall*
/sbin/*
%{_sbindir}/*
%{_mandir}/man?/*
# 5. 列出这个软件的更改历史纪录档!
%changelog
* Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 3.5-32.1
- rebuild
....(中间省略)....
* Wed May 31 2000 Than Ngo <than@redhat.de>
- adopted for Winston.
rpm_create
打包
-p
-v
-r
-k
参考资料
鸟哥的linux私房菜
参考资料

浙公网安备 33010602011771号