YUM信息库和程序包管理
每个操作系统都必须具有某种方式来安装程序。
重要的是,用户不应承担管理程序安装所涉及的开销的责任。
我们会问,安装程序需要多少费用?
是的,在计算机中安装程序涉及一些开销,如下所示。
- 该程序与我的计算机体系结构兼容吗?
- 该程序与我的操作系统版本兼容吗?
- 是否在系统中在那里运行某个程序所需的所有程序和库?
- 新安装的程序是否会与已经安装的程序冲突?
安装程序或者程序管理器必须自行处理这些开销,而不会骚扰用户。
从本质上讲,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/中)。