yum的再次学习:常用命令、常见配置参数、变量、yum源的搭建以及repodata目录下的文件分析

1.常用命令
yum check-update:检测哪些包有更新了
yum update XXX:更新某个rpm package
yum update:更新所有的rpm package
yum search XXX:查找某个rpm package的信息
yum list all:列出所有的rpm,包括已安装的或可以安装的
yum list installed:列出所有的rpm,不包括未安装的
yum repolist:查看当前主机所能使用的yum源列表
yum provides “*bin/pwd”:查看提供了pwd目录的rpm是哪个源
yum install @ kde-desktop:安装group list
yum remove XXX:删除某个package(但不建议用yum来删除,建议用rpm来删除)
yum history list all:查看yum的操作历史
yum history package-list puppet:查看某个package的操作历史
yum history undo idXXX:通过yum history查看后,可以通过这个回退某个操作。操作id在yum history的时候可以看到
yum history redo idXXX:通过yum history查看后,可以通过这个重做某个操作。操作id在yum history的时候可以看到
yum-complete-transaction:对意外情况下的yum事务(比如yum到一半断电了),通过这个操作继续yum操作
yum-complete-transaction –cleanup-only:对意外情况下的yum事务(比如yum到一半断电了),通过这个操作做清理而不继续
yum localinstall XXX.rpm:通过yum安装rpm包,可以解决rpm的依赖问题
yum-config-manager:查看yum的当前的所有配置,包括各个repository的配置

2.配置yum
yum的配置文件主要是/etc/yum.conf,这个文件有量大部分,第一个部分是[main]节,这里变是对yum全局的配置。另一部分是[repositoryXXX],这里对每个repo有特定的配置。不过对于repo的配置一般都推荐在/etc/yum.repos.d/目录下进行配置,配置文件的后缀需要是.repo。

来看下yum.conf中主要的配置选项,先看[main]的:
assumeyes:如果是0表示yum对于关键操作会给出提醒。如果是1表示不提醒,就类似于yum -y
cachedir:用于存放cache和database
debuglevel:可以指定0到10,数字越高日志记录越详细
exactarch:如果是0则不检查package的架构。如果是1则会检查下架构
exclude:后面跟package的list,指定排除的package
gpgcheck:0表示不检查GPG的签名信息,1表示检查
keepcache:0表示在安装完成后不保存package的header信息。1表示保存cache信息
reposdir:用于指定.repo文件的目录
retries:如果是0则失败了会不停的重试,否则则尝试指定的次数

然后看[repository],那些.repo的文件也是下面的这些参数。需要注意的是在[repository]中也是可以写[main]中的一些参数的,只不过优先级不同而已:
name:一个可读的repository的名字
baseurl:repository的地址。可以是HTTP,FTP,FILE。对于HTTP可以指定用户名和密码
enabled:如果是0则不使用这个repository。如果是1则使用

3.yum变量
yum的配置文件中有很多的变量,这些变量在实际生效的时候会的被具体的值替代,主要有:
$releasever:用于指明Red Hat Enterprise Linux的版本
$arch:用于指明cpu的架构
$basearch:指明base架构
$YUM0-9:用于在环境变量中指定后这里可以替换
另外如果要自定义变量,可以在/etc/yum/vars建立一个XXX文件,然后就可以引用$XXX来替代XXX文件中的内容了。

4.repository的操作
添加repository:
最简单的方法就是在/etc/yum.repos.d/目录下建立一个.repo的文件,然后按照上面说的写入相关的配置。不过上面也说了,在/etc/yum.conf中添加一个repository节也是可以的啦。
如果这样做了后发现新添加的repository没有生效,看看有没有enable。

建立repository:
这里小秦建立一个repository提供给别人用。首先先安装下面的包:

[root@CONTROLLER01 manifests]# yum install createrepo

把我们要对外提供的package复制到指定的一个目录中:

[root@CONTROLLER01 Packages]# pwd
/media/RHEL_6.5 x86_64 Disc 1/Packages
[root@CONTROLLER01 Packages]# mkdir /repo_images
[root@CONTROLLER01 Packages]# cp ./* /repo_images/
[root@CONTROLLER01 repo_images]# cd /repo_images/

建立源文件:

[root@CONTROLLER01 repo_images]# createrepo --database /repo_images/
Spawning worker 0 with 3763 pkgs
Workers Finished
Gathering worker results

Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

这个时候可以看到生成了一个repodata目录。里边包含了必要的元信息。

其后我们可以通过多种方法提供服务,比如把我们的/repo_images/目录挂载到一个ftp下,然后客户端的yum配置文件指向它就可以了。小秦这里使用ftp,具体的步骤是:

[root@CONTROLLER01 repodata]# yum install vsftpd*
[root@CONTROLLER01 repodata]# chkconfig vsftpd on
[root@CONTROLLER01 repodata]# service vsftpd restart
[root@CONTROLLER01 repodata]# cd /var/ftp/pub/
[root@CONTROLLER01 pub]# mv /repo_images/* ./

然后在客户端建立如下的repo文件:

[root@COMPUTE01 yum.repos.d]# pwd
/etc/yum.repos.d
[root@COMPUTE01 yum.repos.d]# cat thuanqin.repo
[thuanqin]
name=thuanqin repository for test
baseurl=ftp://192.168.19.95/pub/
enabled=1
gpgcheck=0

这里的ip就是小秦我这里yum服务器的地址。然后就可以使用小秦这里的源啦,比如通过yum list进行相关的测试。

5.yum cache
通过keepcache参数来启用yum的cache功能。cache的意思就是普通的那种cache啦。可以通过yum makecache来主动生成cache。通过yum clean all清除cache。

6.repodata目录下的文件
小秦在这里看下repodata目录下的几个文件。
XXX-filelists.xml:这个文件包含了具体package的具体的会被安装的文件及路径。比如:

<package pkgid="ca85d2cb3339dda40e542f94b45d77c2a6b22082d441ac4306b85a7abfe597e0" name="dbus-qt" arch="x86_64">
    <version epoch="0" ver="0.70" rel="7.2.el6"/>

    <file>/usr/lib64/libdbus-qt-1.so.1</file>
    <file>/usr/lib64/libdbus-qt-1.so.1.0.0</file>
    <file>/usr/share/doc/dbus-qt-0.70/COPYING</file>
    <file type="dir">/usr/share/doc/dbus-qt-0.70</file>
</package>

XXX–primary.xml:这个文件包含了package的详细说明,rpm中的依赖也被提取出来了。比如:

<package type="rpm">
  <name>dbus-qt</name>
  <arch>x86_64</arch>
  <version epoch="0" ver="0.70" rel="7.2.el6"/>
  <checksum type="sha256" pkgid="YES">ca85d2cb3339dda40e542f94b45d77c2a6b22082d441ac4306b85a7abfe597e0</checksum>
  <summary>Qt-based library for using D-BUS</summary>
  <description>D-BUS add-on library to integrate the standard D-BUS library with
the Qt3 thread abstraction and main loop.</description>
  <packager>Red Hat, Inc. &lt;http://bugzilla.redhat.com/bugzilla&gt;</packager>
  <url>http://www.freedesktop.org/software/dbus/</url>
  <time file="1401091912" build="1272308556"/>
  <size package="30344" installed="86466" archive="87188"/>
<location href="dbus-qt-0.70-7.2.el6.x86_64.rpm"/>
  <format>
    <rpm:license>AFL or GPLv2+</rpm:license>
    <rpm:vendor>Red Hat, Inc.</rpm:vendor>
    <rpm:group>System Environment/Libraries</rpm:group>
    <rpm:buildhost>x86-002.build.bos.redhat.com</rpm:buildhost>
    <rpm:sourcerpm>dbus-qt-0.70-7.2.el6.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="1384" end="5596"/>
    <rpm:provides>
      <rpm:entry name="dbus-qt" flags="EQ" epoch="0" ver="0.70" rel="7.2.el6"/>
      <rpm:entry name="dbus-qt(x86-64)" flags="EQ" epoch="0" ver="0.70" rel="7.2.el6"/>
      <rpm:entry name="libdbus-qt-1.so.1()(64bit)"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/sbin/ldconfig"/>
      <rpm:entry name="/sbin/ldconfig" pre="1"/>
      <rpm:entry name="libc.so.6(GLIBC_2.2.5)(64bit)"/>
      <rpm:entry name="libdbus-1.so.3()(64bit)"/>
      <rpm:entry name="libgcc_s.so.1()(64bit)"/>
      <rpm:entry name="libgcc_s.so.1(GCC_3.0)(64bit)"/>
      <rpm:entry name="libm.so.6()(64bit)"/>
      <rpm:entry name="libnsl.so.1()(64bit)"/>
      <rpm:entry name="libpthread.so.0()(64bit)"/>
      <rpm:entry name="librt.so.1()(64bit)"/>
      <rpm:entry name="libstdc++.so.6()(64bit)"/>
      <rpm:entry name="libstdc++.so.6(CXXABI_1.3)(64bit)"/>
      <rpm:entry name="libstdc++.so.6(GLIBCXX_3.4)(64bit)"/>
      <rpm:entry name="rtld(GNU_HASH)"/>
    </rpm:requires>
  </format>
</package>

XXX-other.xml:这个文件包含了其它的一些不重要的信息,如:

<package pkgid="ca85d2cb3339dda40e542f94b45d77c2a6b22082d441ac4306b85a7abfe597e0" name="dbus-qt" arch="x86_64">
    <version epoch="0" ver="0.70" rel="7.2.el6"/>

<changelog author="Rex Dieter &lt;rexdieter[AT]users.sf.net&gt; 0.62-2" date="1150804800">- enable qt4 bindings
- BR: gettext</changelog>
<changelog author="Rex Dieter &lt;rdieter[AT]fedoraproject.org&gt; 0.70-1" date="1170158400">- dbus-qt</changelog>
<changelog author="Dennis Gilmore &lt;dennis@ausil.us&gt; 0.70-2" date="1188216000">- rebuild for F8 and update license</changelog>
<changelog author="Fedora Release Engineering &lt;rel-eng@fedoraproject.org&gt; - 0.70-3" date="1203336000">- Autorebuild for GCC 4.3</changelog>
<changelog author="Rex Dieter &lt;rdieter@fedoraproject.org&gt; - 0.70-4" date="1206446400">- s/qt-devel/qt3-devel/ (f9+)</changelog>
<changelog author="Tom &quot;spot&quot; Callaway &lt;tcallawa@redhat.com&gt; - 0.70-5" date="1211371200">- fix license tag</changelog>
<changelog author="Fedora Release Engineering &lt;rel-eng@lists.fedoraproject.org&gt; - 0.70-6" date="1235476800">- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild</changelog>
<changelog author="Fedora Release Engineering &lt;rel-eng@lists.fedoraproject.org&gt; - 0.70-7" date="1248436800">- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild</changelog>
<changelog author="Dennis Gregorovic &lt;dgregor@redhat.com&gt; - 0.70-7.1" date="1258113600">- Fix conditional for RHEL</changelog>
<changelog author="Dennis Gregorovic &lt;dgregor@redhat.com&gt; - 0.70-7.2" date="1272283200">- Rebuilt for RHEL 6
Related: rhbz#566527</changelog>

</package>

另外的几个是sqlite的数据库文件。

可以看到,总的来说这里的几个文件就是对package的信息做了一个类似索引归纳的动作。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*