1.软件管理简介
1.1 Linux界的两大主流: RPM和DPKG
- RPM(RedHat Package Manager):这个机制最早是由Red Hat开发出来的,后来发现它很好用,因此很多发行版就使用这个机制来作为软件安装的管理方式。包括Fedora, CentOS, SuSE等等知名的开发商都是在用它。通过在线升级机制YUM(指令yum)来解决软件的依赖问题。
- DPKG(Debian Packager):这个机制最早是由Debian Linux社群所开发出来的,透过dpkg的机制,大便(debian)提供的软件就能够简单的安装起来,同时还能提供安装后的软件信息。只要是衍生于大便的其他Linux发行版大多使用 dpkg 这个机制来管理软件的,包拪B2D,Ubuntu等等。通过在线升级机制APT(指令apt-get)来解决软件依赖问题。
1.2 什么是RPM和SRPM
- RPM:是以一种数据库记录的方式来将你所需要的软件安装到你的 Linux 系统的一套管理机制。这个机制最大的特点是将你需要的软件先编译打包成RPM机制的文件,并含有安装时依赖软件的数据库记录。安装时将软件的信息记录到RPM数据库中便于以后进行查询、验证与卸载。其优势与缺点:
- 因为编译完成并打包,不需要重新编译
- 软件信息记录在主机数据库中,方便查询、升级与卸载
- 软件安装环境需与打包时的环境一致或相当
- 需要满足软件之间的依赖
- 卸载时最底层的软件不可先移除,不然可能导致系统出错
- SRPM(source RPM):其提供的是源代码,并没有经过编译,提供了参数配置文件(configure和makefile)。其仍然含有该软件所需要的相依赖软件说明、以及所有RPM档案所提供的数据。下载SRPM(后缀名为.src.rpm)安装时需注意:
- 以RPM管理方式编译,SRPM会被编译成RPM档案
- 将编译的RPM文件安装到系统中
1.3 RPM的优点
- RPM内是已经编译过的程序和配置文件等数据,可以免去重新编译的困扰。
- RPM在被安装前,会先检查系统的硬盘容量、操作系统版本等,可避免软件被错误安装;
- RPM文件本身提供软件版本信息、相依属性软件名称、软件用途说明、软件包含文件等信息,便于了解软件;
- RPM管理的方式使用数据库记录RPM文件的相关参数,便于升级、移除、查询和验证
1.4 RPM软件依赖的克服方式:YUM在线升级
- 基本大部分软件的安装都存在软件依赖问题,RPM通过YUM机制来解决软件的依赖问题。客户端有软件安装的需求时,客户端主机会向yum服务器的容器网址下载软件依赖清单列表,然后透过列表的数据和本机RPM数据库已存在的软件数据相比较,最后安装所有需要的相依赖的软件。
- 当客户端有升级、安装的需求时,yum会向容器要求清单的更新,等到清单更新到本机的 /var/cache/yum 里面后, 等一下更新时就会用这个本机清单和本机的RPM数据库进行比较,这样就知道该下载什么软件。接下来yum会去服务器(yum server)下载所需要的软件,然后再透过RPM的机制开始安装软件。
2.RPM软件管理程序:rpm
2.1 RPM默认安装路径:
- RPM类型的文件在安装的时候,会先去读取文件内记载的设定参数内容,然后将该数据用来比对 Linux 系统的环境,以找出是否有相依赖的软件尚未安装的问题。
- 软件的相关信息在/var/lib/rpm/中的数据库中,保存了软件版本信息、数字签名信息。
- 软件中的一些文件存放路径:
- /etc:配置文件
- /usr/bin:可执行文件
- /usr/lib:程序使用的动态链接库
- /usr/share/doc:一些基本的软件使用手册与说明文件
- /usr/share/man:man page文件
2.2 RPM安装:通常使用rpm -ivh
指令就足够了,也保险
- -i:install
- -v:查看安装的细节信息
- -h:查看安装进度
2.3 RPM升级与更新(upgrade/freshen):rpm -[UF]vh
- -U:后面接的软件没有安装过,则系统将直接安装; 若后面接的软件有安装老版本,则系统自动更新至新版;
- -F:如果后面接的软件未安装到你的 Linux 系统上,则该软件不会被安装;只有已安装至你 Linux 系统内的软件会被更新!
2.4 RPM查询(query):其查询位置在/var/lib/rpm数据库中
rpm -qa
:列出所有的,已经安装在本机 Linux 系统上面的所有软件名称rpm -q[licdR] 已安装软件名
- -ql(information):列出该软件所有的文件和所在目录完整文件名;
- -qi(list):列出该软件的详细信息,开发商、版本和说明等;
- -qc(configuration):列出该软件的所有配置文件 (找出在 /etc/ 底下的文件名)
- -qd(documentation):列出该软件的所有说明文件 (找出与man有关的文件)
- -qR(Required) :列出与该软件有关的相依软件所含的档案
rpm -qf 文件名
:
- -qf :由后面接的文件名,找出该文件属于哪一个已安装的软件
rpm -qp[licdR] 未安装的文件名
:查询某个RPM档案包含信息
- -p(package):查询未安装RPM包中的信息
2.5 RPM验证与数字签名(verify/signature):
- 验证(Verify)的功能主要是提供系统管理员一个有用的管理机制。使用 /var/lib/rpm 底下的数据库内容来比对目前 Linux 系统的环境下的所有软件档案
rpm -V 已安装文件名
:若该软件的文件被更动过,才会列出来rpm -Va
:列出目前系统上面所有可能被更动过的档案rpm -Vp RPM文件名
:列出该软件内可能被更动过的档案rpm -Vf 文件名
:列出某个文件是否被更动过
- 数字签名(Signature):检验软件的来源
2.6 RPM卸载和重建数据库 (erase/rebuilddb):
rpm -e 软件名
:卸载软件,过程一定要由最上层往下卸载,有上层软件依赖,系统会报错提示。rpm --rebuilddb
:重建数据库。RPM文件常常会因安装/移除/升级等操作导致RPM数据库/var/lib/rpm/内的文件损坏。
3.SRPM的使用:rpmbuild
3.1 利用默认值安装SRPM文件(–rebuid/–recompile)
rpmbuild --rebuild
:对SRPM编译和打包,产生RPM文档。rpmbuild --recompile
:对SRPM编译、打包、安装
3.2 SRPM使用的路径和需要的软件(gcc,make等):SRPM在编译的时候会使用到的目录:
- /usr/src/XXXX/SPECS:这个目录当中放置的是该软件的配置文件
- /usr/src/XXXX/SOURCES:放置的是该软件的原始文件 (*.tar.gz 的档案) 以及config这个配置文件
- /usr/src/XXXX/BUILD:在编译的过程中,有些暂存的数据都会放置在这个目录当中
- /usr/src/XXXX/RPMS:编译成功后,将打包完成的档案放置在这个目录当中。
- /usr/src/redhat/SRPMS:与RPMS内相似,这里放置的就是 SRPM 封装的档案。有时候你想要将你的软件用 SRPM 的方式释出时, 你的 SRPM 档案就会放置在这个目录中了。
3.3 配置文件的主要内容 (*.spec):
主要的将SRPM编译成RPM的配置文件。整个档案的开头以Summary为开始,这部分的设定都是最基础的说明内容;然后每个不同的段落间,都以%来做为开头,例如%prep和%install等。
- 必须存在的参数项目:
- Summary:软件的主要说明
- Name:软件的软件名称 (最终会是RPM文件名的一部分)
- Version:软件的版本(最终会是RPM文件名的一部分)
- Release:版本打包的次数说明(会是RPM文件名的一部分)
- License:软件的授权模式
- Group:软件的发展团体名称
- Url:原代码的主要官方网站
- Source:软件的来源
- Patch:作为补丁的patch file
- BuildRoot:设定作为编译时,该使用哪个目录来暂存中间文件 (如编译过程的目标文件/链接文件等档)。
- ExclusiveArch:软件的适合安装的硬件
- 额外设定值:
- Requires:如果你这个软件还需要其他的软件的支持,那这里就必需写上来,则当你制作成 RPM后,系统就会自动的去检查,这就是依赖软件的主要来源
- Prereq:这个软件需要的前驱程序为何。这里指的是程序而Requires指的是软件!
- BulidRequires:编译过程中所需要的软件。Requires 指的是安装时需要检查的,因为和实际执行有关;这个BuildRequires指的是编译时所需要的软件,只有在SRPM编译成为RPM时才会检查的项目。
- Packager:软件是经由谁来打包的
- Vender: 发展的厂商
3.4 SRPM的编译命令(-ba/-bb):
- rpmbulid -ba xxxxx.spec编译并同时产生RPM和SRPM文件
- rpmbulid -bb xxxxx.spec仅编译成RPM文件
4.YUM在线升级机制
4.1 利用yum进行查询、安装、升级和卸载功能
- 查询功能:yum [list|info|search|provides|whatprovides] 参数;
yum [option] [查询内容] [相关参数]
;
- option:
- y:当yum要等待用户输入时,这个选项可以提供yes的响应
- –installroot=/XX/xx::将该软件安装在/XX/xx而不使用默认路径
- [查询内容] [相关参数]:
- search :搜寻某个软件名称或是描述 (description) 的重要关键字
- list:列出目前 yum 所管理的所有的软件名称不版本,有点类似 rpm -qa
- info :同上,有点类似 rpm -qai 的执行结果
- provides:从文件去搜寻软件,类似 rpm -qf 的功能
- option:
- 安装/升级/删除功能:yum [install|update|remove] 软件