---
title: 第15章 アップグレード
prev: books/porters-handbook/testing
next: books/porters-handbook/porting-dads
showBookMenu: true
weight: 15
params:
  path: "/books/porters-handbook/port-upgrading/"
---

[[port-upgrading]]
= アップグレード
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 15
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/porters-handbook/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

port のバージョンが原作者からのものに比べて古いことに気がついたら、 まずはあなたの持っている port が私たちの最新のもの (最新の port は FreeBSD FTP ミラーサイトの [.filename]#ports/ports-current# というディレクトリにあります) であることを確認してください。 また、Ports Collection 全体を最新の状態に保つために CVSup を利用することもできます。 詳しくは extref:{handbook}[FreeBSD ハンドブック, CVSUP-CONFIG]をご覧ください。

次に port の [.filename]#Makefile# に `MAINTAINER` (保守担当者) のアドレスが書いてある場合には、その人にメールを出してみましょう。 保守担当者の人がすでにアップグレードの準備をしているかも知れませんし、 (新しいバージョンの安定度に問題があるなど) あえてアップグレードをしない理由があるのかも知れません。 その人たちと作業を重複させたくはないでしょう。 なお、保守されていない ports は、保守担当者が `ports@FreeBSD.org` になっています。その場合は、 そのアドレスにメールを送っても役に立たないでしょう。

保守担当者にアップグレードをしてくれと頼まれた場合、 あるいは、保守担当者が `ports@FreeBSD.org` の場合は、あなたがアップグレードをしてくださると助かります。 その場合にはアップグレードを作成した後、 変更前と変更後のディレクトリの再帰的 `diff` の出力結果を保存してください (たとえば変更前のディレクトリが [.filename]#superedit.bak# という名前でとってあり、変更後のものが [.filename]#superedit# に入っているなら、 `diff -ruN superedit.bak superedit` の結果を保存してください)。 unified または context diff のどちらでも構いませんが port のコミッターは一般に unified diff の方を好むようです。 `-N` オプションの使い方を覚えておいてください。 これは、新たにファイルが追加されたり、 古いファイルが削除された場合を diff が正しく扱えるようにする方法です。わたしたちに差分を送る前に、 すべての変更が正しくなされているか出力結果を確認してください。

差分を送る一番良い方法は man:send-pr[1] (カテゴリは `ports`) に diff の出力結果を添えて、わたしたちに送ってもらうのが一番良いです。 commit する際に CVS に明確に記述しなければならないので、 あなたがその port のメンテナになるなら、概要 (synopsis) 行の先頭に `[maintainer update]` と記入し、PR の "Class" を `maintainer-update` にしてください。 付け加えたり削除したりしたファイルがあればそれについて書いておいてください。 もし diff の大きさが 20 KB 程度を超えるようであれば、 圧縮したものを uuencode してください。 そうでなければそのまま PR に入れるだけで構いません。

最後に、役に立つ障害報告の書き方について詳しいことは、 障害報告についての記事の extref:{problem-reports}[障害報告の書き方, pr-writing]の節を読んでください。

[IMPORTANT]
====
更新の動機が、セキュリティ上の問題や、 現在 commit されている port に重大な欠陥である場合は、 {portmgr} に連絡して、あなたの port のパッケージをただちに作りなおして再配布するように要求してください。 そうしないと、無防備な man:pkg_add[1] のユーザたちが、何週間にもわたって `pkg_add -r` で古いバージョンをインストールし続けてしまいます。
====

[NOTE]
====
繰り返しになりますが、既存の ports の変更を送るときには man:shar[1] ではなく man:diff[1] を使用してください!
====
