Linux程序包管理

   2016-12-01 0
核心提示:Linux的各个release版本开发商,在发布各种应用程序,以及一些团体发布应用程序时,通常会根据发布的程序所适应的开发语言,使用环境,预设参数等,事先编译完成一个可以在相应平台上安装的程序包供使用者直接使用,该程序包含有安装前(preinstall)操作系统

Linux的各个release版本开发商,在发布各种应用程序,以及一些团体发布应用程序时,通常会根据发布的程序所适应的开发语言,使用环境,预设参数等,事先编译完成一个可以在相应平台上安装的程序包供使用者直接使用,该程序包含有安装前(preinstall)操作系统环境检测的脚本,程序包中所有文件的相关信息,程序预定义的配置参数文件,程序运行时的解释器库文件,程序的二进制文件,以及程序安装后(postinstall)把相应信息写入程序管理平台的预设脚本,以方便于后续程序自身升级,卸载等,最终上述一个完整的程序包被release发布。

针对此类发布的程序包目前常见有两种管理方式:

1、DPKG方式:主要由Debian系列的release版本使用,如Ubuntu;

2、RPM方式:主要由RedHat系列,如RHEL,CentOS,Fedora以及Slackware系列的S.u.S.E等等;

此外由于程序包在preinstall时会根据脚本检查是否满足安装条件,例如安装本程序前需要预先存在其他一个或多个程序(程序的相互依赖性),如果满足则进行后续安装过程,如果不满足则退出安装过程;所以,为了简化方便程序包的安装,Linux的开发商同时提供了一种面向使用者的程序包管理的前端工具,目的就是为了解决程序的依赖性安装,以及程序的更新升级,卸载,查询等日常管理使用。针对上述两种方式分别使用1、apt-get工具;2、yum工具。

RPM和SRPM区别

1、RPM(RedHat Packages Manager):是由Distribution厂商预先根据release版本已编译打包完成的程序包;

2、SRPM(Source RPM):是由Distribution厂商提供的未编译的,含有原始码的程序包;

Linux程序包管理

程序包的命名定义格式

Linux程序包管理

程序名-主版本号.次版本号.修正号-release发布号.Distribution版本.arch架构(i386/i586/i686/x86_64等)

YUM工具

由于RPM程序包在安装前会检查程序依赖性,如果不符合,则无法正常安装,此时,其前端工具YUM程序应运而生。YUM原理机制如下:

1、YUM服务器端,含有全部或者大部分RPM程序包,并生成所有程序包的清单列表(repository仓库清单);

2、客户端主机安装指定程序包时,首先根据RPM包中的preinstall脚本检查主机硬件以及OS内核是否满足安装环境要求,其次检查安装程序的其他软件依赖性要求,从 YUM服务器下载程序包清单列表,对 照依赖性要求检查主机是否满足,如果存在未安装的依赖性程序包软件,则向YUM服务器提交下载相应程序包的请求,并安装完成,通过依赖性检查后,正式安装指定的程序包,安装完成以后,把该程序包的相应信息记录在主机本地的RPM数据库中,供日后查询,升级,卸载等操作使用;

YUM服务器保存清单列表的路径:…./repodata/

Linux程序包管理

主机保存本地清单的路径:/var/cache/yum/

Linux程序包管理

主机RPM程序包管理数据库路径

Linux程序包管理

RPM管理程序

一、RPM安装

rpm {-i|–install} [install-options] PACKAGE_FILE …

-i:install 安装

-v:verbose 详细过程信息

-vv:更详细的过程信息,类似debug信息

-h:hash 以hash进度条的方式显示安装进行,默认是2%一个进度步长

–nodeps:忽略程序包依赖性检查

–test:测试性安装,dry run模式,并非实际的真实安装

–noscripts:安装时不执行预设置的脚本,更细化的脚本(禁用)

            –nopre

–nopost

–nopreun

–nopostun

–nosignature:忽略数字签名检查

–justdb:RPM数据库破坏或者有错误存在,可以利用此选项来更新程序包在RPM数据库中的信息

–percent:如果程序包是被打包压缩的形式提供,则此选项可以在安装时显示解包的进度百分比信息

–force:强制安装,如果已存在相应文件或者程序包则覆盖安装,同时包含replacefiles以及replacepkgs两个选项功能

–replacefiles:如果已存在需安装的文件,则直接覆盖原文件

–replacepkgs:如果存在需安装的程序,则直接覆盖原程序

–prefix NEWPATH:安装程序到指定的路径(而非程序包预先配置的默认路径)

二、RPM更新与升级

rpm {-U|–upgrade} [install-options] PACKAGE_FILE …

rpm {-F|–freshen} [install-options] PACKAGE_FILE …

upgrade:无则安装,有则更新

freshen:无则错误,有则更新

option可选项基本与install操作相同

三、RPM查询,如果是已经被安装过的程序包,实际就是查询/var/lib/rpm下的数据库;如果是尚未安装的程序包,则是查询repository仓库中的数据库

rpm {-q|–query} [select-options] [query-options] PACKAGE_NAME

-q:仅查询package_name指定的程序

-qa:查询package_name指定的所有程序

-qf:查询后面指定的file是属于哪个已经安装的程序

-qi:列出查询程序的详细信息(information),包括Distribution,release,说明等等

-ql:列出程序中完整的文件与目录信息(list)

-qc:列出程序包的所有配置文件(configure files),主要就是/etc下的配置文件

-qd:列出程序包的所有帮助文件(doc files)

-qR:列出程序包相依赖性的程序文件(Requires)

-q –scripts:列出程序包安装或者卸载进程指定的脚本

-q –provides:列出程序包自身能提供的功能

-qp[iflcdR….]:查询未安装的程序包

四、RPM验证与数字签名

rpm {-V|–verify} [select-option] [verify-option] PACKAGE_NAME

-V Package_Name:验证指定的程序包所包含的文件是否被改动过

-Va 不加任何参数:验证所有可能被改动的程序包

-Vp Package_File_Name:验证指定的程序包是否被改动过

-Vf file_Name:验证指定的文件是否被改动过

如果相应的程序或者文件发生改变,通过Verify验证后,会提示如下改变的参数:

Linux程序包管理

S:size-文件大小

M:Mode-文件类型或者文件的属性

5:MD5-文件内容

D:Device的Major/Minor改变

L:Link路径改变

U:owner改变

G:group改变

T:modify Time改变

P: caPabilities功能改变

c:configure文件

d:document文件

l:license文件

r:read me文件

g:ghost文件,鬼文件,通常指该文件不被某个程序所包含,较少见的一种情况

数字签名:

GNU Privacy Guard(GPG)系统,使用不对称技术实现,RPM发布者拥有私钥,RPM使用者利用发布者提供的公钥来验证数字签名的有效性,并信任其发布的程序包;

数字签名验证步骤:

1、从正规途径获得发布者的公钥

途径:官网,授权镜像站点,DVD光盘等

2、导入(安装)公钥到本地主机操作系统

导入命令:rpm –import /PATH/……GPG-KEY…..(GPG-KEY关键字)

查询导入的公钥:rpm -qi | grep *pubkey*(pubkey关键字)

3、利用导入的公钥验证数字签名的有效性

4、通过数字签名验证,接受其发布的RPM程序包,执行后续的安装,升级等操作

五、RPM删除或者卸载

rpm {-e|–erase}  [–allmatches] [–nodeps] [–noscripts]  [–notriggers] [–test] PACKAGE_NAME …

RPM数据库重建:用户本地/var/lib/rpm下数据库的重建

rpm –rebuilddb

YUM前端程序管理工具

一、安装与升级操作

yum {install|update|upgrade}

-y:yes,安装时不需要交互式确认

–installroot=/path:指定程序包安装的路径,而非默认的程序路径

update  (空):后面未指定任何程序包或者文件,则升级更新当前所有已安装的程序包

update PACKAGES_NAME:更新指定的程序包

upgrade 与update参数功能类似

二、查询操作

yum {list|info|search|provides|whatprovides}

list:显示已安装的程序包信息,类似rpm -qa

search:以某个程序包或者描述的关键字搜索程序包

info:显示指定程序包的详细信息,类似rpm -qi

provides:以文件为关键字搜索程序包,类似rpm -qf

三、删除卸载操作

yum remove PACKAGES_NAME

四、YUM仓库

yum工具使用仓库清单方式找到所需的程序包,对于YUM服务而言,清单主要是指repodata目录中的数据,对于客户端主机而言,安装,升级,卸载程序包以后,会在本地/var/cache/yum目录下保存记录本地的程序包清单;

此外,如果使用rpm方式安装,升级,卸载程序包,会在主机/var/lib/rpm目录下生成一个rpm的数据库,供rpm方式进行程序包的管理(查询,升级,卸载等操作);

创建YUM仓库步骤:

1、在yum程序配置文件目录下,增加或者新建.repo后缀的仓库名录(可以在系统原有的repo仓库中新增或者完全新建一个.repo后缀的仓库)

Linux程序包管理

2、通过vim编辑仓库清单配置文件

Linux程序包管理

3、清空主机原有仓库清单信息

Linux程序包管理

4、重新生成最新的清单

Linux程序包管理

Linux程序包管理

通过上述步骤配置,后续就可以直接通过YUM方式进行程序包的安装,升级,查询,卸载操作了,通过YUM方式很好的解决了程序包相互依赖性的问题,对于不需要额外自定义配置参数的程序包生成并安装的使用者大大方便了RPM程序包的管理操作。

有时候,源仓库的可靠性对系统而言是非常重要的,一般我们都使用官方或者可信任的第三方所提供的仓库镜像点进行在线方式的YUM管理使用,但是针对临时性的第三方或者自定义的仓库资源,我们可以采用临时启用生效的模式进行操作,例如,上文中我通过临时挂载DVD光盘方式制定了一个repo程序包仓库资源,如果不希望其永久生效的话,可以采用如下方式进行操作:

1、首先挂载DVD设备

Linux程序包管理

2、创建repo临时性的仓库资源配置文件

Linux程序包管理

Linux程序包管理

Linux程序包管理

3、临时使用时通过yum命令选项启用

Linux程序包管理

SRPM程序包如何使用

当我们从受信任的站点资源获得含有原始代码的SRPM程序包后,如何重新编译?

1、首先,通过受信任的站点资源下载src.rpm程序包

2、通过rpm -ivh xxxx.src.rpm解开程序包(并非实际意义上的安装),命令执行之后解开(安装)的路径默认是指向/root/rpmbuild

Linux程序包管理

一般在此路径下会存在如下几个目录,分别代表不同的含义

SOURCES:主要存放原始码的tar包,补丁包patch,以及config配置文件等

SPECS:主要存放程序包的相应信息文件

BUILD:主要存放源代码编译过程中生成的文件

RPMS:主要存放编译完成以后生成的.rpm程序包

SRPMS:主要存放编译完成以后生成的.srpm程序包

3、SPECS下的.spec文件主要是该程序包的详细信息文件

[root@localhost rpmbuild]# cat ~/rpmbuild/SPECS/cloud-utils-growpart.spec

Name:cloud-utils-growpart

Version:0.27

Release:13%{?dist}

License:GPLv3

Group:System Environment/Base

Source0:https://launchpad.net/cloud-utils/trunk/%{version}/+download/cloud-utils-%{version}.tar.gz

URL:https://launchpad.net/cloud-utils

Source1:LICENSE

BuildArch:noarch

Summary:Script for growing a partition

Group:System Environment/Base

———上述说明此程序包的基本信息————–

Requires:gawk

Requires:util-linux

———此程序包的依赖性信息————

# gdisk is only required for resizing GPT partitions and depends on libicu

# (25MB). We don't make this a hard requirement to save some space in non-GPT

# systems.

#Requires:gdisk

# patches_base=0.27

Patch0001: 0001-suppress-partx-usage-error.patch

———-下面以%开始的分段落信息表示在编译过程中的处理脚本—————

%description

This package provides the growpart script for growing a partition. It is

primarily used in cloud images in conjunction with the dracut-modules-growroot

package to grow the root partition on first boot.

%prep

%setup -q -n cloud-utils-%{version}

%patch0001 -p1

%build

%install

cp %{SOURCE1} LICENSE

# Create the target directories

mkdir -p $RPM_BUILD_ROOT/%{_bindir}

mkdir -p $RPM_BUILD_ROOT/%{_mandir}/man1

# Install the growpart binary and man page

cp bin/growpart $RPM_BUILD_ROOT/%{_bindir}/

cp man/growpart.* $RPM_BUILD_ROOT/%{_mandir}/man1/

————该程序生成的文件—————

%files

%doc ChangeLog LICENSE

%{_bindir}/growpart

%doc %{_mandir}/man1/growpart.*

———–该程序的日志改变记录————

%changelog

* Tue Mar 18 2014 Lars Kellogg-Stedman <lars@redhat.com> – 0.27-13

– suppress partx usage error

* Tue Jan 14 2014 Lars Kellogg-Stedman <lars@redhat.com> – 0.27-11

import into RHEL

[root@localhost rpmbuild]#

4、编译过程

命令 rpmrebuild [ba|bb] xxxx.spec

-ba:编译并同时生成rpm以及srpm程序包

-bb:编译并仅生成rpm程序包

 
标签: Linux 数据库
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • windows10环境下安装Linux子系统---debian
    windows10环境下安装Linux子系统---debian
    windows10环境下安装Linux子系统---debian一、前提1、在控制面板-程序-启用与关闭Windows功能中,勾选“适用于Linux的Windows子系统”  2、首先需要创建一个文件夹,用来存放子系统,在需要的位置创建即可,文件夹名任意3、手动下载Windows子系统发行版包,
    03-08
  • 【强转】QEMU+GDB调试linux内核全过程
    【强转】QEMU+GDB调试linux内核全过程
    昨天更新了一篇名为《QEMU+GDB调试linux内核全过程》[link][https://blog.csdn.net/weixin_37867857/article/details/88138432]的博客,发现排版比较混乱,而且思维也比较混乱。咋一看下来简直是惨不忍睹,而且会给读者在安装过程中一种云里雾里的感觉,加上
    03-08
  • Linux下Bochs,NASM安装和使用 linux bom
    Linux下Bochs,NASM安装和使用 linux bom
    以Ubuntu为例,先更新一下:sudo apt-get updatesudo apt-get upgrade然后安装Bochs环境:sudo apt-get install build-essential xorg-dev libgtk2.0-dev安装NASMNASM官网下载,这以nasm-2.14.02.tar.gz为例:用tar zxvf nasm-2.14.02.tar.gz解压后编译安装cd
    03-08
  • 把玩Alpine linux(一):安装
    把玩Alpine linux(一):安装
    导读Alpine Linux是一个面向安全应用的轻量级Linux发行版。它采用了musl libc和busybox以减小系统的体积和运行时资源消耗,同时还提供了自己的包管理工具apk。Alpine 的内核都打了grsecurity/PaX补丁,并且所有的程序都编译为Position Independent Executabl
    03-08
  • 日志审计与分析实验三(rsyslog服务器端和客户端配置)(Linux日志收集)
    日志审计与分析实验三(rsyslog服务器端和客户
     Linux日志收集一、实验目的:1、掌握rsyslog配置方法2、配置rsyslog服务收集其他Linux服务器日志:C/S架构:客户端将其日志上传到服务器端,通过对服务器端日志的查询,来实现对其他客户端的日志进行集中管理;下面实现就是通过两套机器来实现,(server:19
    03-08
  • Linux学习系列--如何在Linux中进行文件的管理
    Linux学习系列--如何在Linux中进行文件的管理
    文件在常见的Linux的文件系统中,经常使用能了解到的文件管理系统是分为多个文件夹进行管理的。如何查看文件路径 pwd ,在文件目录中,会有一个点(.)代表的是当前目录,两个点(..)代表的是当前目录的上层目录在Linux下,所有以点开始的文件都是“隐藏文件
    03-08
  • [JetBrains] 我想在 Linux 上使用 macOS 键绑定!
    [JetBrains] 我想在 Linux 上使用 macOS 键绑定
    很高兴认识你,我的名字是kitakkun。我最近开始实习,是工程界的新手。顺便说一句,这是我的第一篇文章。你最喜欢的操作系统是什么?视窗?苹果系统?还是Linux?我将它们全部用于不同的目的,但感觉就像 macOS ≒ LinuxWindows。一两个月前,我最喜欢 Linux
    03-08
  • Linux使用nginx反向代理。可实现域名指向特定端
    在配置80指向域名的时候出现端口占用,使用kill -9无法杀死端口,应使用下面的命令来杀死进程killall -9 nginx(使用完本命令需要再把配置过的配置文件重新启动。命令写在了PS下面)后在root权限下的nginx的sbin下使用./nginx -t(命令重启nginx并检查是否有语
    02-13
  • 新换的 Fedora Core Linux 桌面,来秀一秀(多
    1、桌面、终端、文件浏览器,已经设置好字体、自动挂载硬盘,不是很麻烦2、即时通讯:QQ,Skype3、firefox4、D4X、BT、电驴5、开发工具:eclipse netbeans6、openoffice 大开 word 公式文档,输出 PDF7、小企鹅输入法,支持微软双拼8、星际译王,linux 下免费
    02-10
  • fedora linux源代码下载
    fedora linux源代码下载
    yumdownloader --source kernel如果是下载insight就是 yumdownloader --source insight下载到的是当前目录.然后在用rpm2cpio 生成 压缩文件rpm2cpio insight-7.4.50-8.20120403cvs.fc17.src.rpm|cpio -idrpm2cpio 的使用 在 http://www.rpm.org/max-rpm/s1-rp
    02-10
点击排行