3 在 RMT 服务器上镜像储存库 #
您可以在 RMT 服务器上镜像安装和更新储存库。这样便无需在每台计算机上下载更新,从而节省时间和带宽。
在使用默认配置的情况下,RMT 每晚会自动镜像已启用的产品储存库一次。
镜像的储存库默认储存于 /var/lib/rmt/public/repo
中。
要更改镜像储存库的默认位置,请将 /usr/share/rmt/public/repo
符号链接指向所需的目录。可以使用 ln -sfn /usr/share/rmt/public/repo TARGET
命令(将 TARGET
替换为所需的目标)来完成此操作。请确保该目标具有 rmt
用户和 nginx
组的读写权限。如果您要将镜像储存库储存到其他目录或储存设备,
当启用的储存库完全镜像后,您可以通过在客户端计算机上运行 SUSEConnect --url https://RMT_HOSTNAME
来向 RMT 注册您的客户端系统。成功注册后,客户端计算机上的 Zypper 将使用来自 RMT 服务器的储存库。
RMT 不支持系统为 SUSE Linux Enterprise Server 11 及以下版本的客户端。
3.1 镜像身份凭证 #
在创建 SUSE Linux Enterprise 储存库的本地镜像之前,您需要具有相应的组织身份凭证。您可以从 SUSE Customer Center 获取身份凭证。
要从 SUSE Customer Center 获取身份凭证,请执行以下步骤:
访问 SUSE Customer Center (http://scc.suse.com) 并登录。
如果您是多个组织的成员,请从左侧边栏中选择要使用的组织。
从顶部菜单中选择
。右上角即会显示身份凭证。
要查看口令,请选择眼睛符号。
应当使用 YaST RMT 服务器配置模块对获取的身份凭证进行设置,或将其直接添加到 /etc/rmt.conf
文件中。有关 /etc/rmt.conf
文件的详细信息,请参见第 5.3.1 节 “/etc/rmt.conf”。
3.2 同步储存库元数据 #
需要使用从 SUSE Customer Center 下载的信息定期更新本地 RMT 数据库。其中包括有关可用产品和储存库的信息。
同步通过 systemd
计时器 rmt-server-sync.timer
来完成。要查看状态(例如下次运行时间),请使用 systemctl status
:
root #
systemctl status rmt-server-sync.timer
● rmt-server-sync.timer - RMT Sync timer Loaded: loaded (/usr/lib/systemd/system/rmt-server-sync.timer; enabled; vendor preset: disabled) Active: active (waiting) since Fri 2018-06-22 04:22:34 EDT; 2h 34min ago Trigger: Sat 2018-06-23 03:53:00 EDT; 20h left Jun 22 04:22:34 d31 systemd[1]: Started RMT Sync timer.
要手动更新 RMT 数据库,请使用 rmt-cli sync
命令。有关详细信息,请参见第 5.1.2 节 “sync
”。
3.3 镜像软件包 #
RMT 服务器上会镜像所启用的储存库的软件包。系统会每天定期下载一次软件包。不过,您也可以随时手动触发下载。
定期镜像由 systemd
计时器 rmt-server-mirror.timer
执行。要显示状态(例如下次运行时间),请使用 systemctl status
:
root #
systemctl status rmt-server-mirror.timer
● rmt-server-mirror.timer - RMT Mirror timer Loaded: loaded (/usr/lib/systemd/system/rmt-server-mirror.timer; enabled; vendor preset: disabled) Active: active (waiting) since Fri 2018-06-22 04:22:34 EDT; 2h 34min ago Trigger: Sat 2018-06-23 02:17:57 EDT; 19h left Jun 22 04:22:34 d31 systemd[1]: Started RMT Mirror timer.
要手动更新镜像的软件包,请使用 rmt-cli mirror
命令。有关详细信息,请参见第 5.1.6 节 “mirror
”。
3.4 启用和禁用储存库镜像 #
可以单独启用或禁用储存库镜像,也可以通过指定产品来启用或禁用储存库镜像。一次可以指定一个或多个储存库或产品。如果储存库处于启用状态,系统会在镜像过程中下载并更新其软件包。要启用或禁用储存库镜像,您需要提供产品字符串或 ID 或者储存库名称或 ID。一般情况下,您会想要启用或禁用产品,因为这样会自动启用或禁用与产品关联的所有储存库。
3.4.1 使用产品 #
要启用或禁用产品的所有储存库,请使用 rmt-cli products enable ID
和 rmt-cli product disable ID
命令。要检索已禁用但可用的产品的 ID,请使用 rmt-cli products list --all
命令。要检索已启用的产品的 ID,请使用 rmt-cli product list
命令。
示例:
tux >
sudo
rmt-cli products list --all
+------+----------------------+---------+--------+--------------+--------------- | ID | Product | Version | Arch | Mirror? | Last mirrored +------+----------------------+---------+--------+--------------+--------------- [...] | 1743 | SUSE Package Hub | 15 | x86_64 | Don't Mirror | | | PackageHub/15/x86_64 | | | | [...]tux >
sudo
rmt-cli products enable 1743
2 repo(s) successfully enabled.tux >
sudo
rmt-cli products disable 1743
2 repo(s) successfully disabled.
要一次启用或禁用多个产品,请指定产品 ID 或字符串的空格分隔列表。例如:
tux >
sudo
rmt-cli products enable 1743 SLES/15/x86_64 SLES/12
3.4.2 使用储存库 #
要启用或禁用特定储存库的镜像,请使用 rmt-cli repos enable ID
和 rmt-cli repos disable ID
命令。要检索已禁用但可用的储存库的 ID,请使用 rmt-cli repos list --all
命令。要检索已启用的储存库的 ID,请使用 rmt-cli repos list
命令。
示例:
tux >
sudo
rmt-cli repos list --all
+--------+-------------------------+-------------------------------------------+ | SCC ID | Name | Description | +--------+-------------------------+-------------------------------------------+ [...] | 3061 | SUSE-PackageHub-15-Pool | SUSE-PackageHub-15-Pool for sle-15-x86_64 | [...] +--------+-------------------------+-------------------------------------------+tux >
sudo
rmt-cli repos enable 3061
Repository successfully enabled.tux >
sudo
rmt-cli repos disable 3061
Repository successfully disabled.
要一次启用或禁用多个储存库,请指定储存库 ID 的空格分隔列表。例如:
tux >
sudo
rmt-cli repos disable 2526 3263
3.5 删除镜像数据 #
按第 3.4 节 “启用和禁用储存库镜像”中所述禁用储存库或产品镜像后,已镜像的数据仍保留在本地硬盘上。其中包括镜像的 RPM 软件包。要去除这些数据,请手动去除对应的目录:
tux >
sudo
rm -r /usr/share/rmt/public/repo/SUSE/Products/PRODUCT/VERSION/ARCHITECTURE/
3.6 添加自定义储存库 #
您可以使用 RMT 服务器镜像自定义储存库。这些储存库不是 SUSE Customer Center 提供的。它们可能是第三方供应商(例如 Open Build Service)提供的,也可能是使用 createrepo
创建的。
自定义储存库可以作为独立储存库使用,也可以关联到产品。这样,您便可以在已注册到 RMT 服务器的客户端上使用一个命令连接多个储存库。
下面的示例过程演示了镜像第三方储存库的过程。
将远程储存库添加到 RMT 服务器。将 URL 替换为储存库的 URL。将 NAME 替换为您为储存库所选择的名称。
root #
rmt-cli repos custom add URL NAME
列出所有自定义储存库以获取新储存库的 ID。
root #
rmt-cli repos custom list
(可选)将新的自定义储存库关联到某个产品。例如,如果所有桌面客户端都需要这个新的自定义储存库,则可将其关联到
SUSE Linux Enterprise Desktop
产品。root #
rmt-cli repos custom attach REPOSITORY_ID PRODUCT_ID
将 REPOSITORY_ID 替换为新自定义储存库的 ID。将 PRODUCT_ID 替换为要将储存库关联到的产品的 ID。如果您需要检索 PRODUCT_ID,请使用命令
rmt-cli products list --all
。启用新自定义储存库的镜像。
root #
rmt-cli repos custom enable REPOSITORY_ID
要获取所有可用自定义储存库命令的列表,请参见第 5.1.4 节 “repos
”。
3.7 导出和导入储存库 #
RMT 具有可导入和导出有关可用储存库和镜像软件包的数据的内置函数。例如,可以通过在本地复制已镜像的 RPM 软件包来加快新 RMT 服务器的设置。
另一个用例是脱机模式。通过脱机模式,可以将数据传输到断开连接的 RMT 服务器,从而实现为气隙网络中的计算机提供更新等目的。
下面的过程说明了如何使用 USB 驱动器在两台 RMT 服务器之间传输数据及镜像的 RPM。服务器 sun
与 SUSE Customer Center 相连,而服务器 sirius
则位于气隙网络中。
登录服务器
sun
。root@sun #
rmt-cli sync
root@sun #
rmt-cli mirror
连接一个 USB 驱动器(假设为
/dev/sdb
),并将其装入到所需位置(例如/mnt/external
)。root@sun #
mount /dev/sdb1 /mnt/external
导出有关可用储存库和产品的数据。
root@sun #
rmt-cli export data /mnt/external/
导出已启用储存库的列表。在下一步导出储存库时需要使用该导出文件。
root@sun #
rmt-cli export settings /mnt/external/
导出镜像的 RPM 软件包。此过程可能需要较长时间,具体视镜像储存库的大小而定。
root@sun #
rmt-cli export repos /mnt/external/
从
sun
卸载并拔出磁盘,然后转到sirius
。root@sun #
umount /mnt/external
将 USB 驱动器连接到
sirius
,并将其装入到/mnt/external
中。root@sirius #
mount /dev/sdb1 /mnt/external
导入有关可用储存库和产品的元数据。
root@sirius #
rmt-cli import data /mnt/external/
导入镜像的 RPM 软件包。此过程可能需要较长时间,具体视镜像储存库的大小而定。
root@sirius #
rmt-cli import repos /mnt/external/
在
sirius
上根据需要启用储存库。有关详细信息,请参见第 3.4 节 “启用和禁用储存库镜像”。
如果您的气隙服务器 (sirius
) 具有许多启用的储存库,或者启用的储存库经常更改,我们建议从此服务器中导出储存库设置。
然后可将导出的设置导入到与 SUSE Customer Center 相连的服务器 (sun
) 中。这样便能确保 sun
下载了 sirius
所需的所有数据。