Ports Tree を最新に保つ

昔は cvsup を利用していたが、今は portsnap を利用するようだ。

portsnap と cvsupについて

CVSup の短所は
  • CVSup is insecure. The protocol uses no encryption or signing, and any attacker who can intercept the connection can insert arbitrary data into the tree you are updating.
  • CVSup isn't end-to-end. Related to the previous point, this means that anyone who can compromise a CVSup mirror can feed arbitrary data to the people who are using that mirror.
  • CVSup isn't designed for frequent small updates. While CVSup is very good at distributing CVS trees, and is very efficient for updating a tree which has been significantly changed (eg, by a month or more of commits), it transmits a list of all the files in the tree, which makes it quite inefficient if only a few files have changed.
  • CVSup uses a custom protocol. This can cause problems for people behind firewalls -- outgoing connections on port 5999 need to be permitted -- and it needs a heavyweight server (cvsupd).

Secure FreeBSD ports tree updating
要するに、

  • CVSup は暗号化されていないし、電子署名も使われていないから、安全とは言えない。
  • CVSup の通信は end-to-end (通信路上に伝送誤りや故障の可能性がある以上、エンドシステム間でのデータの検証が必要だという認識) ではない。よって、通信経路上で通信内容の変更が可能である。
  • CVSup は小さな変更を反映する用途には向かない。CVSup はわずかな変更であっても、ツリー全体を更新してしまうため、非効率である。
  • CVSup は独自プロトコル(5999番ポート/TCP)を利用しているため、ファイヤーウォールの背後にいるユーザーの利便性が下がる。また、リソースを多く必要とする cvsupd サーバーの稼動が必要になる。

という点が挙げられる。

portsnap の特長

だからこそ、portsnap を下記の理由で利用する。

Portsnap avoids these problems by operating over HTTP (using FreeBSD's fetch(1) utility and a new experimental pipelined HTTP client), signing the snapshots using OpenSSL, and using more sophisticated delta compression to distribute the snapshots.

  1. 通信には HTTP プロトコルを採用する。
  2. OpenSSL を用いて snapshots の認証を行っている。
  3. snapshots の流通に delta 圧縮(Binary diff/patch utility)を採用している

portsnap 利用時の注意点

Please note that when extracting a copy of the FreeBSD ports tree, portsnap will remove existing files. If you have any local changes (eg, extra patches which you've added into a port's files/ directory) then you'll have to put those back after updating the ports tree.

http://www.daemonology.net/portsnap/
  • portsnap は既存の ports tree を削除する。
  • よって、独自の変更を追加している場合は、バックアップを取っておくべきだ。
  • 更新後に、ports tree を戻す。