Home
Packages
Forums
Wiki
GitLab
Security
AUR
Download
コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
目次
コミュニティに貢献
最近の出来事
おまかせ表示
特別ページ
交流
ヘルプ
貢献
最近の更新
最近の議論
新しいページ
統計
リクエスト
ArchWiki
検索
検索
表示
アカウント作成
ログイン
個人用ツール
アカウント作成
ログイン
パッケージにパッチを適用のソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
パッケージにパッチを適用
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
[[Category:パッケージ管理]] [[en:Patching in ABS]] {{Related articles start}} {{Related|ABS}} {{Related|SVN から PKGBUILD を取得}} {{Related articles end}} このドキュメントでは [[ABS]] を使ってパッケージにパッチを作成したり適用する手順を説明します。 == パッチの作成 == 別の場所から入手したパッチを使う場合 (例: Linux カーネルのパッチをダウンロードした場合)、下のセクションに飛んでください。ただしソースコードや Makefile、設定ファイルなどを編集する必要がある場合、パッチを作成できるようにならなければなりません。 {{Note|ファイル内の一行か二行程度しか変える必要がないときは (例: Makefile)、{{ic|sed}} を利用するほうが簡単だと思われます。}} パッケージのパッチを作成するときは、パッケージのコピーを2つ作成して、新しいコピーを編集し、2つのファイルの差分を作成します。Arch Linux パッケージを作成する場合、以下の手順に従うことでパッチが作成できます: # ファイルのダウンロード先を {{ic|PKGBUILD}} の source 配列に追加してください。もちろん、既存の PKGBUILD を編集する場合、必要ありません。 # ダミーの (空の、あるいは {{ic|echo}} コマンドだけしか存在しない) build() 関数を作成してください。既存の {{ic|PKGBUILD}} を修正する場合、build 関数の大部分をコメントアウトしてください。{{ic|makepkg}} を複数回実行することになるため、壊れたパッケージをビルドするのに時間を費やすのは無駄です。 # {{ic|makepkg -o}} を実行してください。編集する必要があるソースファイルが {{ic|src}} ディレクトリにダウンロードされます。 # {{ic|src}} ディレクトリに移動してください。通常の場合、ダウンロードした圧縮ファイルから解凍されたファイルが含まれたディレクトリが存在します (ファイルしかない場合もありますが、差分は複数のファイルを処理できます)。ディレクトリのコピーを2つ作成してください。片方のコピーには手を入れず makepkg で操作しません。もう片方のコピーからパッチを作成します。2つのコピーには {{ic|package.pristine}} と {{ic|package.new}} などと名前を付けます。 # {{ic|package.new}} ディレクトリに移動してください。編集する必要があるファイルを全て編集します。必要な変更はパッチで何をするかによります。Makefile のパスを修正する、あるいはソースのエラーを修正する (例えば、{{ic|gcc 3.4}} でコンパイルできるようにする) などです。無論、{{ic|package.new}} ディレクトリのサブディレクトリにあるファイルを編集することもできます。{{ic|package.new}} ディレクトリに大量のファイルを作成するコマンドを実行しないように気をつけてください。プログラムをコンパイルして変更が問題ないかを確認してはいけません。コンパイルを実行してしまうと、無用なファイルがパッチの中に入ってしまいます。代わりに、手動で {{ic|patch}} コマンドを使用するか {{ic|PKGBUILD}} (下を参照) でディレクトリの別のコピー (先に作成した pristine ディレクトリではありません) にパッチを適用して、そこから変更を適用してください。 # {{ic|src}} ディレクトリに戻ってください。 # {{ic|diff -aur package.pristine package.new}} を実行してください。unified 形式の diff フォーマットで全ての変更が出力されます。ファイルを開いてパッチが問題ないことを確認することができます。 # {{ic|diff -aur package.pristine package.new > package.patch}} を実行して全ての変更を {{ic|package.patch}} という名前のファイルにまとめてください。これが patch で使用するファイルになります。元のディレクトリのコピーに変更を適用して、上手くパッチが機能することを確認できます。また、パッチに無駄な情報が含まれていないことも確認すると良いでしょう。例えば、ファイル内のタブがパッチによってスペースに変換されるのは望ましくありません (テキストエディタが行ったことが原因です)。パッチはテキストエディタを使って編集することができます。あるいは万全を期して (diff ファイルに誤りを入れないように)、元のファイルを編集してから再度パッチを作成してもかまいません。 == パッチの適用 == このセクションでは自分で作成した、あるいはインターネットからダウンロードしてきたパッチを {{ic|PKGBUILD}} の {{ic|prepare()}} 関数で適用する方法を説明します。以下の手順に従ってください: # {{ic|PKGBUILD}} の {{ic|source}} 配列にパッチファイルのエントリを追加してください。元のソース url とは空白で区切られます。ファイルがオンライン上に存在する場合、完全な URL を記入すれば {{ic|src}} ディレクトリに自動的にダウンロード・配置されます。パッチを自分で作成した場合、あるいはインターネット上からパッチを取得できない場合、{{ic|PKGBUILD}} ファイルと同じディレクトリにパッチファイルを置いて、source 配列にファイルの名前を追加してください。ファイルが {{ic|src}} ディレクトリにコピーされるようになります。{{ic|PKGBUILD}} を再配布する場合、{{ic|PKGBUILD}} とパッチを一緒にする必要があります。 # 次に {{ic|updpkgsums}} を使用して {{ic|md5sums}} 配列を更新してください。あるいは手動で {{ic|md5sums}} 配列にエントリを追加してください。{{ic|md5sum}} ツールを使うことでパッチのチェックサムを生成できます。 # {{ic|PKGBUILD}} の中に {{ic|prepare()}} 関数を(存在しない場合)作成してください。 # まずはパッチをあてる必要があるディレクトリに移動します (移動を行うのは {{ic|prepare()}} 関数の中で、ターミナルではありません。パッチの適用を自動化します)。{{ic|cd $srcdir/$pkgname-$pkgver}} などとすることでディレクトリを移動できます。{{ic|$pkgname-$pkgver}} はダウンロードされたソースファイルが展開されたときによく作られるディレクトリの名前ですが、必ずしもこの名前になるとは限りません。 # ディレクトリの中からパッチを適用してください。{{ic|prepare()}} 関数に以下を追加するだけです ({{ic|pkgname.patch}} は差分が含まれているファイルの名前に置き換えてください。パッチファイルは {{ic|PKGBUILD}} の {{ic|source}} 配列に追加したので自動的に {{ic|src}} ディレクトリにコピーされています):{{bc|patch -p1 <pkgname.patch}} ::prepare 関数の例:{{bc|<nowiki> prepare() { cd $pkgname-$pkgver patch -Np1 <../eject.patch } </nowiki>}} (ターミナルから) {{ic|makepkg}} を実行してください。全てが上手くいっていれば、パッチが自動的に適用されて、新しいパッケージにはパッチに含まれている変更が追加されているはずです。そうならない場合、patch の {{ic|-p}} オプションを使って実験を行ってみてください。詳しくは {{ic|man patch}} を読んでください。 基本的には次のようになっています。{{ic|myversion/}} のファイルにパッチを適用する diff ファイルが作成された場合、diff ファイルは {{ic|myversion/file}} に適用されます。({{ic|PKGBUILD}} で cd した) {{ic|yourversion/}} ディレクトリの中から実行する場合、ファイルにパッチが適用されるときに、{{ic|myversion/}} の部分は省いて {{ic|file}} ファイルに適用されるようにしなくてはなりません。{{ic|-p1}} でパスからディレクトリが一つ削除されます。しかしながら、開発者が {{ic|myfiles/myversion}} にパッチを適用した場合、ディレクトリを二つ削除する必要があるので、{{ic|-p2}} を使います。 -p オプションを指定しなかった場合、全てのディレクトリ構造が取り除かれます。全てのファイルがベースディレクトリに存在する場合はそれで ok ですが、パッチを作成したのが {{ic|myversion/}} で編集したファイルが {{ic|myversion/src/file}} の場合、{{ic|yourversion}} の中から {{ic|-p}} オプションを付けずにパッチを実行したときに、{{ic|yourversion/file}} という名前のファイルにパッチが適用されてしまいます。 ほとんどの開発者はパッチを適用するディレクトリの親ディレクトリからパッチを作成するので、通常は {{ic|-p1}} が正しくなります。 == 参照 == * http://www.kegel.com/academy/opensource.html — Useful information on patching files * http://patch-tracker.debian.org/ * http://gentoo-portage.com/ * http://packages.gentoo.org/ * http://pkgs.fedoraproject.org/cgit/
このページで使用されているテンプレート:
テンプレート:Bc
(
ソースを閲覧
)
テンプレート:Ic
(
ソースを閲覧
)
テンプレート:META Related articles start
(
ソースを閲覧
)
テンプレート:Man
(
ソースを閲覧
)
テンプレート:Note
(
ソースを閲覧
)
テンプレート:Pkg
(
ソースを閲覧
)
テンプレート:Related
(
ソースを閲覧
)
テンプレート:Related articles end
(
ソースを閲覧
)
テンプレート:Related articles start
(
ソースを閲覧
)
パッケージにパッチを適用
に戻る。
検索
検索
パッケージにパッチを適用のソースを表示
話題を追加