YUM信息库和程序包管理

时间:2020-03-21 11:48:49  来源:igfitidea点击:

每个操作系统都必须具有某种方式来安装程序。
重要的是,用户不应承担管理程序安装所涉及的开销的责任。

我们会问,安装程序需要多少费用?

是的,在计算机中安装程序涉及一些开销,如下所示。

  • 该程序与我的计算机体系结构兼容吗?
  • 该程序与我的操作系统版本兼容吗?
  • 是否在系统中在那里运行某个程序所需的所有程序和库?
  • 新安装的程序是否会与已经安装的程序冲突?

安装程序或者程序管理器必须自行处理这些开销,而不会骚扰用户。
从本质上讲,Linux是目前最好的操作系统(如果以正确的方式进行配置,


因此,这变成了一项繁琐的工作)。

让我们逐步介绍创建本地YUM存储库的方法。

步骤1:将安装磁盘中的所有.rpm软件包(以及所有收集的软件包)复制到系统上的隔离文件夹中。

第2步:为向我们展示此示例,我将复制/var/yum文件夹中的所有.rpm软件包

[root@theitroad2 yum]# pwd
/var/yum
[root@theitroad2 yum]# ls
a2ps-4.13b-57.2.el5.i386.rpm
acl-2.2.39-3.el5.i386.rpm
acpid-1.0.4-7.el5.i386.rpm
adaptx-0.9.13-3jpp.1.i386.rpm
adaptx-doc-0.9.13-3jpp.1.i386.rpm

如果看到以上输出(安装磁盘中大约有2000个软件包,我没有显示整个输出。
),安装磁盘中的所有软件包都将复制到/var/yum中。

如前所述,存储库不过是目录中软件包的集合。
创建YUM是为了使操作系统可以同时使用不同的存储库。

操作系统完全无法下载整个存储库(因为存储库有时大小为千兆字节。
YUM被设计为仅获取和下载按需安装所需软件的那些软件包。

)安装所需的软件包。
例如,如果我要安装一个名为“ Perl”的软件包,则YUM必须首先在存储库中包含所有软件包的列表(请注意,它仅需要该列表,而无需该软件包)

YUM将下载存储库中可用软件包的总列表(该列表将包含存储库中的软件包名称,软件包详细信息等)。
不是说它将仅下载包含详细信息的软件包列表,而不下载软件包。
下载列表之后,如果yum能够(从该存储库或者其他存储库)获取所需软件包的所有依赖关系,则yum将在与我们确认后将其安装。

现在让我们制作该文件,其中将包含程序包名称和其他存储库详细信息。
为此,还有另一个名为“ Createrepo”的工具。
让我们看看createrepo的作用。

[root@localhost var]# createrepo /var/yum/
2669/2669 - orca-1.0.0-5.el5.i386.rpm
Saving Primary metadata
Saving file lists metadata
Saving other metadata
[root@localhost var]#

在上面的示例中,我已经使用目录“/var/yum”作为参数运行了createrepo命令(我们需要为该命令安装“ createrepo”软件包。
我们将在安装磁盘中获得该软件包,因此请使用“ rpm”安装它-ivh createrepo-XX-XX-XX.noarch.rpm“)。

[root@localhost yum]# ll | grep ^d
drwxr-xr-x 2 root root      4096 Nov 10 16:40 repodata
[root@localhost yum]#

在我们的存储库目录中运行“ createrepo”后,我们将在存储库中有一个添加目录以及软件包。
该目录名为“ repodata”

让我们看看该目录中的内容。

[root@localhost repodata]# pwd
/var/yum/repodata
[root@localhost repodata]# ll
total 13840
-rw-r--r-- 1 root root  3021610 Nov 10 16:39 filelists.xml.gz
-rw-r--r-- 1 root root 10148949 Nov 10 16:39 other.xml.gz
-rw-r--r-- 1 root root   969664 Nov 10 16:39 primary.xml.gz
-rw-r--r-- 1 root root      951 Nov 10 16:40 repomd.xml
[root@localhost repodata]#

我们可以清楚地看到该目录中有四个文件。

让我们详细了解每个文件的内容。

YUM中的filelists.xml.gz是什么?

让我们借助“ zcat”查看压缩文件中的内容。
为了说明,我从文件“ filelists.xml.gz”中复制了一行。

<package pkgid="deee52b24486906ee52576ee471b57061ccd5544" name="php-mbstring" arch="i386"><version epoch="0" ver="5.1.6" rel="32.el5"<file>/etc/php.d/mbstring.ini</file><file>/usr/lib/php/modules/mbstring.so</file></package>

如果我们看到上面的行,则第一个条目将告诉我们软件包的ID,这将唯一地标识软件包。

当然,第二个条目“名称”建议包装的名称。

它还提到了体系结构,版本以及软件包的发行版。

要注意的一个重要事实是,如果我们安装了此软件包,它还会提供有关要在系统上安装的文件的信息。
安装此软件包后,将安装两个文件,即

/etc/php.d/mbstring.ini

/usr/lib/php/modules/mbstring.so

哇不酷吗?
这样,filelists.xml.gz将包含有关存储库中所有软件包的完整信息。
YUM将使用此文件来获取存储库中所有软件包的详细信息。

YUM中的primary.xml.gz是什么?

让我们从primary.xml.gz文件中获得完全相同的软件包的详细信息。
让我们看看这个文件里面有什么。

<package type="rpm"><name>php53-mbstring</name><arch>i386</arch><version epoch="0" ver="5.3.3" rel="5.el5"<checksum type="sha" pkgid="YES">e4d153d1ac6f71fa50bb6587cf13b324ee44537c</checksum><summary>A module for PHP applications which need multi-byte string handling</summary><description>The php-mbstring package contains a dynamic shared object that will add

因此,此文件还包含软件包详细信息。
但是它包含一些其他信息,如下所示。

  • 数据包类型
  • sha哈希
  • 安装包简介

如果我们注意到文件“ filelists.xml.gz”包含有关文件的信息,则该文件将在系统上安装特定的软件包。
因此,如果存储库中没有“ filelists.xml.gz”,那么我们将无法使用所需的文件搜索存储库(进行这种搜索是为了识别哪个包提供了特定的文件。

大多数软件包在系统上安装了大量文件。
这就是为什么文件“ filelists.xml.gz”太大的原因。

什么是yum中的repomd.xml?

文件remomd.xml包含有关目录中所有文件的详细信息。
remomd.xml的内容如下所示。

<?xml version="1.0" encoding="UTF-8"?>
<repomd xmlns="http://linux.duke.edu/metadata/repo">
  <data type="other">
    <location href="repodata/other.xml.gz"
    <checksum type="sha">53349b063023303c5976135a7e485b0aa932ba6f</checksum>
    <timestamp>1360494599</timestamp>
    <open-checksum type="sha">2245d5a3cf0c3398a28b0c63948ecdf58668041e</open-checksum>
  </data>
  <data type="filelists">
    <location href="repodata/filelists.xml.gz"
    <checksum type="sha">35d6d80d5b115f0da3452534c1f5cf9c0efcef3f</checksum>
    <timestamp>1360494599</timestamp>
    <open-checksum type="sha">5d1f2791794e1cc20590099a962cf5260f942b7a</open-checksum>
  </data>
  <data type="primary">
    <location href="repodata/primary.xml.gz"
    <checksum type="sha">afe11b0976096135357e11e2ff1707d88ebef6fd</checksum>
    <timestamp>1360494599</timestamp>
    <open-checksum type="sha">976baa466007d496accfa24922f2f0722c56f1dd</open-checksum>
  </data>
</repomd>

它告诉我们有关存储库元数据中所有其他文件的详细信息,或者称其为repodata。

  • primary.xml.gz,filelists.xml.gz,other.xml.gz的位置
  • 他们的修改时间戳
  • 他们的校验和

Yum中的other.xml.gz是什么?

该文件包含有关软件包的完整信息,如下所示

  • 作者
  • 版本详细信息
  • 变更日志
  • 先前版本中的错误修复等

当用户借助“ repoquery”命令查询有关软件包的信息时,将使用此文件。
该命令是yum-utils软件包的一部分。

我们将讨论“ YUM”命令以及可用于查询另一篇文章中的存储库的其他实用程序,因为这需要特别注意。

other.xml.gz是最大的Repo文件,因为它包含许多特定于版本的详细信息和特定程序包的更改日志。

如何启用我使用系统创建的createrepo创建的YUM存储库?

yum的主要配置文件是/etc/yum.conf。
让我们看看该文件的内容。

[root@localhost ~]# cat /etc/yum.conf
[main]
cachedir=/var/cache/yum
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
distroverpkg=redhat-release
tolerant=1
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
bugtracker_url=http://bugs.centos.org/yum5bug
# Note: yum-RHN-plugin doesn't honor this.
metadata_expire=1h
installonly_limit = 5
# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d
[root@localhost ~]#

文件“ yum.conf”中的倒数第二行表示,我们可以将存储库配置详细信息放在此处,也可以将文件扩展名放在/etc/yum.repos.d/中,扩展名为.repo。

因此,现在让我们创建一个名为local.repo的文件(我们可以使用任意名称执行此操作。
仅记住扩展名必须是.repo。

[root@localhost yum.repos.d]# pwd
/etc/yum.repos.d
[root@localhost yum.repos.d]# cat local.repo
[localrepo]
baseurl=file:///var/yum/
gpgcheck=0
[root@localhost yum.repos.d]#

在上面的示例中,我在/etc/yum.repos.d/中的三行中创建了名为local.repo的文件。

第一行表示Repo名称,

第二行指示存储库的URL。
我使用过file:///,因为它在我的本地系统中。
URL中的前两个“ //”表示协议斜杠,第三个斜杠表示Linux根文件系统“ /”

我们还可以将存储库放置在FTP主目录中,以使用FTP协议运行(我们将使用ftp://YOURIP/FTP HOME作为基本URL)。

我们也可以使用HTTP协议,将其放在Apache的文档ROOT中,并在“ baseurl”参数中提供适当的URL。

第三行要求忽略密钥检查(不用担心,我将在有关yum的第二篇文章中包括它们。

让我们尝试通过我们新创建的存储库安装一个软件包。

[root@localhost yum.repos.d]# yum install php-mbstring
Loaded plugins: fastestmirror, security
Repository 'localrepo' is missing name in configuration, using id
Loading mirror speeds from cached hostfile
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package php-mbstring.i386 0:5.1.6-32.el5 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================================================================================================================================================================================
 Package                                                     Arch                                                Version                                                      Repository                                                Size
=============================================================================================================================================================================================================================================
Installing:
 php-mbstring                                                i386                                                5.1.6-32.el5                                                 localrepo                                                996 k

Transaction Summary
=============================================================================================================================================================================================================================================
Install       1 Package(s)
vafopoulos.org/easy-money-on-internet
Upgrade       0 Package(s)
Total download size: 996 k
Is this ok [y/N]:

有一个用于yum的缓存目录,其中yum保存存储库中所有必需的文件。
它包含在“ createrepo”命令帮助下创建的所有文件。
最初使用存储库时,将下载并保留它们。

[root@localhost ~]# cd /var/cache/yum/
[root@localhost yum]# ls
base  extras  localrepo  myrepo  timedhosts.txt  updates
[root@localhost yum]# cd localrepo/
[root@localhost localrepo]# ls
cachecookie  packages  primary.xml.gz  primary.xml.gz.sqlite  repomd.xml
[root@localhost localrepo]#

从上面的输出中,我们可以清楚地看到,我们的缓存目录为单独的yum存储库提供了单独的目录。

我们可以根据需要创建任意数量的存储库(并将包含URL的.repo文件放在/etc/yum.repos.d/中)。