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 文件时:

  1. 首先你必须要先安装原厂释出的公钥文件;
  2. 实际安装原厂的 RPM 软件时, rpm 命令会去读取 RPM 文件的签章资讯,与本机系统内的签章资讯比对,
  3. 若签章相同则予以安装,若找不到相关的签章资讯时,则给予警告并且停止安装喔。

 

 

 

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私房菜

参考资料

dep_create

posted @ 2016-10-12 16:54  EDPL  阅读(423)  评论(0)    收藏  举报