Linux DVD 建立本地 yum 源

既然 yum 已经很好的解决了 RPM 包的依赖问题,本文要解决的就是速度问题。本地光驱的访问速度甚至快过 100M 局域网,而且在最近一些发行版安装盘中,已经预置好 repo 信息,并存放在名为 repodata 的目录中。可以说安装盘本身就是一个现成的 yum 源。在 RHEL5 中,预置了多个 repo,分别存放在 <CDROOT>/Server/repodata,<CDROOT>/Cluster/repodata 等目录中;在 Fedora12 中,存放在 <CDROOT>/repodata 中。在 RHEL4 等一些旧发行版中,没有预置 repo 信息。在这种情况下,需要手工建立 repo 信息供 yum 使用。关于手工建立 repo 的信息,请参考下一节“利用安装 CD 建立本地 yum 源中”关于 createrepo 部分的示例。

首先,把光盘放入光驱,挂载光盘。

# mount /dev/hdc /media/cdrom
mount: block device /dev/hdc is write-protected, mounting read-only

如果在本地有安装盘镜像,也通过 loop 方式挂载到相应目录。

# mount -o loop rhel-server-5.4-i386-dvd.iso /media/cdrom

然后,编辑 yum 源配置文件,添加一个本地 yum 源。这里是一张 RHEL5u4 的 DVD 安装盘,它的 repo 对应 <CDROOT>/Server。

# cat > /etc/yum.repos.d/dvd.repo <<END
[dvd]
name=install dvd
baseurl=file:///media/cdrom/Server
enabled=1
gpgcheck=0
END

对于 Fedora,系统安装后有默认远程 yum 源存在,建议在补装 RPM 包之前通过在 *.repo 文件中设置 “enabled=0” 临时禁用这些远程 yum 源。这样会迫使 yum 只使用本地光盘作为安装源,从来避免因外部下载带来时间的浪费。关于这部分的操作,请参考 doris_install_gnome_on_fc12.txt 中的相关部分。

用安装 CD 建立本地 yum 源

对于 RHEL4 或者其它相对旧的发行版,或者仅有安装 CD 的情况下,还可以通过类似的方式补装 RPM 包吗?答案是肯定的,不过需要一个多余的步骤,即手工创建 repo 数据。

下面的示例,通过把 RHEL4u6 的 5CD 中的 RPMS 混合到一个目录中,然后用 createrepo 命令建立 repo 数据。

首先混装 CD:

[root@localhost root]# mkdir -p /mnt/dvd
# insert CD1
[root@localhost root]# mount /dev/hdc /media/cdrom/
[root@localhost root]# cp -prf /media/cdrom/Server /mnt/dvd/RPMS
[root@localhost root]# umount /media/cdrom

# insert CD2

# insert CD3

# insert CD4

# insert CD5
[root@localhost root]# mount /dev/hdc /media/cdrom/
[root@localhost root]# cp -prf /media/cdrom/Server /mnt/dvd/RPMS
[root@localhost root]# umount /media/cdrom# remove unused files
[root@localhost root]# find /mnt/dvd/RPMS -name TRANS.TBL -exec rm -f {} \;

然后通过 createrepo 命令创建 yum 源数据。这正是“空间换时间”的预处理过程,视 RPM 数据的多少,大约需要几分钟。”-d” 参数表示在生成 xml 索引的同时生成 sqlite 格式的索引。完成过后,这两种索引文件均以压缩格式存放于 repodata 目录中,供 yum 查询所用。

[root@localhost root]# cd /mnt/dvd

[root@localhost dvd]# createrepo -d .
  1/2399 – RPMS/plymouth-theme-charge-0.8.0-0.2009.29.09.18.fc12.i686.rpm
  2/2399 – RPMS/aspell-0.60.6-7.fc12.i686.rpm
  3/2399 – RPMS/xml-common-0.6.3-30.fc12.noarch.rpm                       

……                            

2397/2399 – RPMS/mythes-en-3.0-5.fc12.noarch.rpm
2398/2399 – RPMS/hunspell-mi-0.20080630-3.fc12.noarch.rpm
2399/2399 – RPMS/hicolor-icon-theme-0.11-1.fc12.noarch.rpm
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

[root@localhost dvd]# ls -l repodata/
total 10004
-rw-r–r–. 1 root root 2974902 2009-12-06 09:48 filelists.sqlite.bz2
-rw-r–r–. 1 root root 2618445 2009-12-06 09:48 filelists.xml.gz
-rw-r–r–. 1 root root  912087 2009-12-06 09:48 other.sqlite.bz2
-rw-r–r–. 1 root root  951651 2009-12-06 09:48 other.xml.gz
-rw-r–r–. 1 root root 1809806 2009-12-06 09:48 primary.sqlite.bz2
-rw-r–r–. 1 root root  958302 2009-12-06 09:48 primary.xml.gz
-rw-r–r–. 1 root root    2726 2009-12-06 09:48 repomd.xml

最后,编辑 yum 源配置文件,添加一个本地 yum 源。注意对应的目录,这次是 /mnt/dvd,因为 repodata 是在此路径下创建的。

[root@localhost dvd]# cat > /etc/yum.repos.d/dvd.repo <<END
[dvd]
name=install dvd
baseurl=file:///mnt/dvd
enabled=1
gpgcheck=0
END

对于 RHEL4 一类不带 repodata 的安装 DVD,去掉混装 RPM 的一步,直接用 createrepo 命令建立源数据即可。

=============================================================================

执行以下命令,清空以下缓存并创建新的缓存

yum clean all
yum makecache

然后 yum install wget 试一下能否正常安装依赖包。

本地安装用yum localinstall gcc