创建本地软件库
如果你曾经自行下载、创建、或重建 RPM 组件(如 zh/TipsAndTricks/YumAndRPM 内「设置好以不是 root 的身份来重建组件」所解释的),你或许会想将它们放在一个让你本地网络上的机器都能访问的地方。
注:如果只有单一个组件或一台用户机系统,你不必费时创建一个正式的 NFS 输出文件系统及软件库 —— 你只需利用:
[root@server1 ~]# yum --nogpgcheck localinstall packagename.arch.rpm
或针对未签署组件的一个更早期及更简单的方法:
[root@server1 ~]# rpm -Uvh packagename.arch.rpm
利用 rpm 这个方法的好处,就是一个开发者可以渐进式地解决依赖性,而 rpm 会推荐接着所需的组件,因此你更可以创建一个「刚刚好」的安装方案:
[root@server1 ~]# rpm -Uvh package1.arch.rpm package2.arch.rpm ...
运用 yum 软件库还有其它好处,因为 yum 能判断依赖性的组件并自动利用现存的软件库满足需要。
以下的步骤会解释如何创建一个 NFS 分享,当中藏有一个收录自行创建/重建/下载组件的软件库,然后容让其它相同发行版本的系统以统一的方式访问这些组件。这个做法亦可以用来开设 os、updates 等的本地镜像,这样做避免从外置的镜像服务器进行下载,及让你可控制更新于测试后才在本地机器上出现。
- 这个样例会针对 i386 结构的 CentOS4。同一个方法亦适用于其它结构及版本。你亦可以用其它方式提供软件库的访问权,例如 HTTP 及/或 FTP 服务器。有关命令行部份的常规: # 代表以 root 执行; $ 代表以用户执行 —— 在样例中他名叫 builduser。
- 首先在服务器上 —— 假设是 server1 —— 创建目录结构:
[root@server1 ~]# mkdir -p /share/CentOS/4/local/i386/RPMS
- 如果 createrepo 未被安装 —— 因为缺省它不会被安装 —— 请安装它。
[root@server1 ~]# yum install createrepo
- 由 foo-1.2.3.4-1.el4.src.rpm 创建新一组组件(或者从可靠的来源下载组件)。
[builduser@server1 ~]$ rpmbuild --rebuild /path/to/srpm/foo-1.2.3.4-1.el4.src.rpm
这样做便创建了(举个例说)/home/builduser/rpmbuild/RPMS/foo-1.2.3.4-1.el4.i386.rpm /home/builduser/rpmbuild/RPMS/foo-devel-1.2.3.4-1.el4.i386.rpm /home/builduser/rpmbuild/RPMS/foo-docs-1.2.3.4-1.el4.i386.rpm
- 将文件转到软件库并创建中继数据:
[root@server1 ~]# mv /home/builduser/rpmbuild/RPMS/foo* /share/CentOS/4/local/i386/RPMS [root@server1 ~]# chown -R root.root /share/CentOS/4/local [root@server1 ~]# createrepo /share/CentOS/4/local/i386 [root@server1 ~]# chmod -R o-w+r /share/CentOS/4/local
- 注:当新组件被加进软件库时,请重复第三及第四步。
- 创建 /etc/yum.repos.d/local.repo
警告:这个样例假设 yum-plugin-protectbase 插件(见 zh/PackageManagement/Yum/ProtectBase)已被安装,而你期望软件库缺省是被引导的、受到保护、及可取代核心组件。它亦假设你的组件未经 GPG 签署。另一个更强劲的选择就是采用 zh/PackageManagement/Yum/Priorities.
[local] name=CentOS-$releasever - local packages for $basearch baseurl=file:///share/CentOS/$releasever/local/$basearch enabled=1 gpgcheck=0 protect=1
- 针对 HTTP 或 FTP 软件库,baseurl 这行必须作相应改动。
- 在服务器上安装组件来测试软件库。它们如果没有用的话可以稍后删除。
[root@server1 ~]# yum install foo foo-devel foo-docs
- 通过 NFS 输出目录 —— 如果它并不在一个分享目录上。(你亦可能需要安装及引导 NFS,及/或在初次使用前重新开机。这个步骤就留给各位同学作为一个练习。)将 IP 地址改至适合你的网络。如果你希望分享能够被某些授权的机器写入,请不要用 "ro",但应用 "rw" 及处理 root_squash 的问题。
[root@server1 ~]# echo "/share 192.168.1.0/24(ro,async)' >>/etc/exports [root@server1 ~]# exportfs -r
- 以 root 的身份登录客户端的机器(假设是 client1),然后设置 NFS 挂载及 yum 的配置文件。
- 注:
你或许需要 autofs 这个组件(yum install autofs)令下面的例子生效。另一个方法就是创建 /share 并通过 /etc/fstab 挂载 NFS 在 /share 上。这个样例假设 root 可以运用 ssh/scp。你需要一台支持本地主机名称的 DNS 服务器,或者设置了 IP 地址及主机名称的 /etc/hosts。
[root@client1 ~]# scp server1:/etc/yum.repos.d/local.repo /etc/yum.repos.d/ [root@client1 ~]# ln -s /net/server1/share /share
- 注:
- 测试设置 —— 应该能看见软件库。
[root@client1 ~]# ls /share/CentOS/4/local
- 在客户端安装组件。
[root@client1 ~]# yum install foo foo-devel foo-docs
请按需要为额外客户端重复最后三个步骤。
这页的英文版本由 PhilSchaffner 创建及维护。欢迎其它 Wiki 用户作出更正、添加、或修改。
Translation of revision 13