分类: BSD
2009-03-29 14:20:04
Portsnap 是一套用以安全地分发 FreeBSD ports
套件的系统。 每隔大约一个小时, 就会生成一份 ports 的最新 “快照”,
它会被打包并进行数字签名。 这些文件接下来将通过 HTTP 来分发。
与 CVSup 类似, Portsnap 采用 拉 (pull) 的模式来进行更新: 经过打包并签名的 ports tree 被放在 web 服务器上, 被动地等待用户请求它们。 用户需要手工运行 来下载更新, 或者设置 任务来自动地进行更新。 由于一些技术原因, Portsnap 并不自动地直接更新位于 /usr/ports/ 目录中的 “实际的” ports tree; 事实上, 默认情况下它只操作位于 /var/db/portsnap/ 的压缩的 ports tree 副本, 而这个副本则用于更新实际的 ports tree。 在首次运行 时, 它需要将整个 ports tree 的压缩快照下载到 /var/db/portsnap/ (或者, 如果 Portsnap 是通过 Ports Collection 安装的, 则是 /usr/local/portsnap/)。 在 2006 年初, 其下载尺寸大约是 41 MB。 # portsnap fetch 一旦下载了压缩的快照, 就可以将它释放成为位于 /usr/ports/ 中的 “实际的” ports tree 了。 即时之前那个目录中已经有了一份 ports tree 也需要这样做 (例如, 通过使用 CVSup), 因为这个操作, 将为后续的 portsnap 决定更新 ports tree 的哪一部份提供基础。 # portsnap extract 为了避免对于 Portsnap 服务器的 “快闪” 式访问, portsnap fetch 不支持作为 任务来运行。 与此相反, 提供了一个特殊的 portsnap cron 命令, 它在开始下载更新之前会随机等待最多 3600 秒。 此外, 强烈建议不要将 portsnap update 作为 cron 任务来运行, 因为它可能给正在同时进行的 port 安装带来大问题。
不过, 更新 ports 的 INDEX 文件一般并无大碍, 这可以通过 portsnap的 |
0 3 * * * root portsnap -I cron update && pkg_version -vIL=
|