Chinaunix首页 | 论坛 | 博客
  • 博客访问: 376034
  • 博文数量: 59
  • 博客积分: 2490
  • 博客等级: 大尉
  • 技术积分: 795
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-16 16:25
文章分类

全部博文(59)

文章存档

2011年(1)

2010年(9)

2009年(21)

2008年(28)

我的朋友

分类: BSD

2009-03-29 14:20:04

从FreeBSD 6.2开始已经习惯用portsnap 来替代cvsup(csup)使唤了,不过一直都是手动去portsnap fetch update.记得freebsd handbook有提到利用cron来“自动”更新ports tree的,顺便也google了一下网上资料,也有些人提到这个用法,不过好像和handbook上提到的在cron文件的写法(参数)不一致,仔细参研了中文的handbook(英文不是太好),说一下自己的理解备忘一下,顺便BS自己记忆能力,好像越来越健忘了:(

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-I 参数来实现 (显然, 如果 portsnap -I update 是通过 cron 来运行的, 在之后还需要执行不带 -Iportsnap update 来更新 ports tree 余下的部分。)


portsnap fetch update其实是两个步骤的,
portsnap fetch && portsnap update
fetch已经可以用portsnap cron来“自动fetch",可是update就不行,handbook中有提到,因为当如果在portsnap  update过程当中假如同时在利用port功能安装软件运行带来问题(什么问题呀,不懂我也懂不了反正handbook都这么说,旷且听之任之)
所以"官方"建议这种方式

可以在 /etc/crontab 中加入下列设置, 以便让 portsnap 更新其压缩快照, 以及位于 中的 /usr/ports/INDEX 文件, 并在有 port 过期时发出邮件通知:

0 3 * * * root portsnap -I cron update && pkg_version -vIL=

注意:
如果系统时钟没有设置为使用本地时区, 请将 3 改为一介于 0 和 23 的随机值, 以便让 Portsnap 服务器的负载更为平均。
注意: 某些较早版本的 portsnap, 并不支持在一次调用 portsnap 时使用多个命令 (例如, cron update)。 如果这样不行, 请将 portsnap -I cron update 改为 portsnap cron && portsnap -I update








阅读(1252) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~