今天在虚机上通过yum挂载iso源来安装rpm包,但提示错误,内容见下面。之前也有过这样的操作,
mount后,修改repo文件,然后就可以yum install rpm包了;过程很简单啊。不知道这次为什么不行,后来网上查询了一下。
(结论:这个问题应该在rhel5低版本才出现)
=============分割线==============
在RHEL5版本中,很多人碰到这样类似的问题:
[root@master ~ 18:40:12]# yum install php-devel
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for php-devel to pack into transaction set.
media://1192656534.547140%233/php-devel-5.1.6-15.el5.i386.rpm: [Errno 4] IOError: <urlopen error unknown url type: media>
Trying other mirror.
Error: failed to retrieve php-devel-5.1.6-15.el5.i386.rpm from rpms
error was [Errno 4] IOError: <urlopen error unknown url type: media>
RedHat的官方解释是FC6不建议使用本地源,关于RHEL5的解释倒没查到,不过应该一样吧。
个人感觉是因为传输rpm包时用的协议错了,应该是file,却变成了media,应该是光盘中的xml文件里写错了,难道是个BUG?
网上查了一圈,解决方法一堆,有修改/usr/lib/python2.4/site-packages/yum下的yumRepo.py文件的,
有使用yum localinstall xxx.rpm命令的,这些都没用。有人说把DVD上所有的RPM包拷贝到硬盘,自己做个源,
我觉得这样就失去光盘镜像的意义了,舍进而求远。
总结了一下,还是用createrepo命令最好,方法如下:
先安装createrepo这个RPM包,手动安装吧,yum还没好呢。
然后用createrepo命令重建描述repository的XML文档。
createrepo的命令用法可以man一下,网上竟然没有人说明过,个人觉得几个参数还是有必要说明下的:
-u 指定base的url,其实就是待会yum的时候,下载rpm包的路径,所以一定要写对;
-o 指定XML文件的输出路径,你当然没办法把XML文件直接输出到光盘或者镜像中吧,所以最好也指定下。
举例如下:
RHEL5的光盘挂载在/mnt/cdrom下
[root@localhost ~]#mkdir /repo
[root@localhost ~]#createrepo -u /mnt/cdrom -o /repo /mnt/cdrom
OK,这个时候/repo下应该有repodata目录,里面就是XML文件啦。
接着修改/etc/yum.repo.d/下面的repo文件
把其中的baseurl=改成baseurl=file:///repo ---就是XML文件所在的目录
然后[root@localhost ~]#yum clean all
一切正常了。
另外一个类似处理方法:
RHEL5.4可以直接使用光盘作yum源,而RHEL5.1不能直接用光盘中的源,否则会出现urlopen error unknown url type: media,
需要改造一番,注意这里提供的方法不用拷贝光盘中的大量文件.
1.将光盘镜像挂载到/media/RHEL/目录下
[root@Blinux Desktop]#mkdir /media/RHEL
[root@Blinux Desktop]#mount /root/rhel5.1.iso /media/RHEL -o loop
2.生成库文件
[root@Blinux Desktop]#mkdir /media/yum/
[root@Blinux Desktop]#rpm -ivh /media/RHEL/Server/createrepo-0.4.4-2.fc6.noarch.rpm
[root@Blinux Desktop]createrepo -o /media/yum/ -g /media/RHEL/Server/repodata/comps-rhel5-server-core.xml /media/RHEL/Server/
[root@Blinux Desktop]mount --bind /media/yum/repodate/ /media/RHEL/Server/repodate/
3.生成依赖关系
[root@Blinux Desktop]# vim /etc/yum.repos.d/rhel-debuginfo.repo
修改为类似
[rhel]
name=Red
baseurl=file:///media/RHEL/Server/
enabled=1
gpgcheck=0
[root@Blinux Desktop]# yum clean all
[root@Blinux Desktop]# yum makecache
RHEL5.1下的本地YUM源就这样OK了,注意,这里并没有拷贝大量的文件,而是挂载.