相必大家对linux下的rpm和yum安装机制都非常熟悉了。现在工作上开始用到了linux的环境,首先要在linux的主机上安装oracle环境。在linux环境上安装oracle首先就是安装一些包。如果还是用rpm的包安装方法,这实在是个灾难。所以架设yum才是解决问题的王道。碍于工作的环境不能和外网联通,所以只好自己老老实实的架设本地yum。在架设yum时候分不同的linux发行版本,yum的配置也稍许不同。有些版本中直接挂载光盘,直接在/etc/yum.repos.d/*.repo 中将baseurl改成光盘中server源就可以了。这样在安装的时候,yum程序会去Server里找repodata这个文件夹里找comps-rhel5-server-core.xml 这个文件记录了所有的rpm的安装包的包头信息。找到了这个xml文件后linux会自动去找到依赖的包,如果需要公钥认证的情况需要在cdrom里找到RPM-GPG-KEY-redhat-realease这个公钥文件。由这个文件的内容来进行身份确认。当然这是最好的情况,但是很多情况下这都会出现异常,报错的原因:

[root@localhost rpm-gpg]# yum update
Loading "security" plugin
Loading "installonlyn" plugin
Loading "rhnplugin" plugin
This system is not registered with RHN.
RHN support will be disabled.
Setting up Update Process
Setting up repositories
No Repositories Available to Set Up
Reading repository metadata in from local files
Skipping security plugin, no data
No Packages marked for Update/Obsoletion
[root@localhost rpm-gpg]#

在加载后发现这不可用,原因是由于光盘上仓库的不可用。所以还得一点一点来,先复制光盘吧。

[root@localhost mnt]# mkdir Server
[root@localhost mnt]# cp -a /mnt/redhat-cdrom/Server/* /mnt/Server/
[root@localhost mnt]#

然后安装createrepo 软件。由于已经改变了文件的位置,所以一定要重新生成依赖关系的xml文件。就是把repodata里的xml文件更新

[root@localhost repodata]# createrepo -g /mnt/Server/repodata/comps-rhel5-server-core.xml /mnt/Server/

最后报错:

[root@localhost Server]# createrepo -g /mnt/Server/repodata/comps-rhel5-server-core.xml /mnt/Server/
2159/2159 - mesa-libGLw-devel-6.5.1-7.5.el5.i386.rpm                           
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Could not remove old metadata dir: .olddata
Error was [Errno 39] Directory not empty: '/mnt/Server/.olddata'
Please clean up this directory manually.
[root@localhost Server]#

这个是由于元数据的限制,使得没办法重新创建。这里只需要删除元数据文件和文件夹。

[root@localhost Server]# cd .olddata
[root@localhost .olddata]# ll
total 4
-r--r--r-- 1 root root 1139 Oct 17  2007 TRANS.TBL

root@localhost .olddata]#
[root@localhost .olddata]# ll
total 4
-r--r--r-- 1 root root 1139 Oct 17  2007 TRANS.TBL
[root@localhost .olddata]# rm TRANS.TBL
rm: remove regular file `TRANS.TBL'? y
[root@localhost .olddata]# cd ..
[root@localhost Server]# rm -r .olddata
rm: remove directory `.olddata'? y

[root@localhost Server]# createrepo -g /mnt/Server/repodata/comps-rhel5-server-core.xml /mnt/Server/
2159/2159 - mesa-libGLw-devel-6.5.1-7.5.el5.i386.rpm                           
Saving Primary metadata
Saving file lists metadata
Saving other metadata

显示已经生成了新的元数据文件夹。

重新编辑客户yum文件

[root@localhost Server]# vim /etc/yum.repos.d/rhel-debuginfo.repo

[rhel-debuginfo]
name=Red Hat Enterprise Linux $releasever - $basearch - Debug
baseurl=file:///mnt/Server/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

对yum进行更新

[root@localhost Server]# yum clean all
Loading "security" plugin
Loading "installonlyn" plugin
Loading "rhnplugin" plugin
This system is not registered with RHN.
RHN support will be disabled.
Cleaning up Everything
[root@localhost Server]# yum update
Loading "security" plugin
Loading "installonlyn" plugin
Loading "rhnplugin" plugin
This system is not registered with RHN.
RHN support will be disabled.
Setting up Update Process
Setting up repositories
rhel-debuginfo            100% |=========================| 1.1 kB    00:00    
Reading repository metadata in from local files
primary.xml.gz            100% |=========================| 756 kB    00:00    
################################################## 2159/2159
Skipping security plugin, no data
No Packages marked for Update/Obsoletion

这里显示尽管没有注册到RHM,但是依然仓库可用。尝试安装软件php,

Installed: php.i386 0:5.1.6-15.el5
Dependency Installed: apr.i386 0:1.2.7-11 apr-util.i386 0:1.2.7-6 gmp.i386 0:4.1.4-10.el5 httpd.i386 0:2.2.3-11.el5 php-cli.i386 0:5.1.6-15.el5 php-common.i386 0:5.1.6-15.el5 postgresql-libs.i386 0:8.1.9-1.el5
Complete!

有的文档中说要拷贝密码文件到/mnt/Server等仓库文件中,但是处理后会出现多个私钥文件。这时后会显示找不到私钥文件。处理方法是向rpm中指明需要的私钥文件

rpm -import /etc/pki/rpm-gpg/RPM*   这样就解决问题了。

     回顾一下情况,为什么这样就可以使用yum了呢?经过我的思考,我认为问题就出在xml这个依赖文件上,由于光盘是不可写的,那么本来的依赖文件又是直接指向RHM官方的,所以不可用。我们只有把它替换掉,为了把它替换掉,我们只能把所有的文件拷到本地,然后在本地重新创建依赖关系。这样,在yum安装时,会主动找到baseurl的文件夹内,在这里找到repodata目录,找到*.xml文件。这样才会一步步找到数据包。折腾了这么一大圈,终于找到了问题,解决了问题。

     解决了yum,下一篇文章,进行oracle在linux下的安装。