Home
Packages
Forums
Wiki
GitLab
Security
AUR
Download
コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
目次
コミュニティに貢献
最近の出来事
おまかせ表示
特別ページ
交流
ヘルプ
貢献
最近の更新
最近の議論
新しいページ
統計
リクエスト
ArchWiki
検索
検索
表示
アカウント作成
ログイン
個人用ツール
アカウント作成
ログイン
パッケージにパッチを適用のソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
パッケージにパッチを適用
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
[[Category:パッケージ管理]] [[en:Patching packages]] [[pt:Patching packages]] [[zh-hans:Patching packages]] {{Related articles start}} {{Related|Arch build system}} {{Related articles end}} このドキュメントでは [[Arch Build System]] (ABS) を使ってパッケージにパッチを作成したり適用する手順を説明します。 [[Wikipedia:ja:パッチ|パッチ]] にはファイルにおけるとある行の変更が複数記されています。ソースコードの変更を自動化するのに主に用いられます。 == パッチの作成 == パッチには特定のファイル、あるいは複数のファイルの変更行が含まれています。ソースコードの変更を自動化するときにパッチは使われます。 {{Note|特定の行を変更するだけであれば、{{ic|sed}} を代わりに使用するという手もあります。}} {{ic|diff}} ツールは行毎にファイルを比較します。ツールの出力を保存することでパッチを作成できます (例: {{ic|diff --unified --recursive --text foo bar > patch}})。ディレクトリを指定すると {{ic|diff}} はディレクトリに含まれているファイルを比較します。 # パッケージをビルド済みの場合は {{ic|src}} ディレクトリを削除してください。 # {{ic|makepkg --nobuild}} を実行してください。{{ic|PKGBUILD}} に記述されたソースファイルがダウンロード・展開されます。 # {{ic|src}} ディレクトリに展開されたディレクトリのコピーを2つ作成してください。ひとつは元のまま取っておくコピーで、もうひとつは変更を加えるコピーです。ここでは {{ic|package.orig}} と {{ic|package.new}} と呼称します。 # {{ic|package.new}} ディレクトリのファイルに必要な変更を加えてください。 # {{ic|diff --unified --recursive --text package.orig package.new --color}} を実行してパッチがどのようにできるか確認してください。 # {{ic|diff --unified --recursive --text package.orig package.new > package.patch}} を実行してパッチを作成してください。 # {{ic|package.orig}} ディレクトリに移動して {{ic|patch -p1 < ../package.patch}} でパッチを適用してください。{{ic|makepkg --noextract --install}} で変更を加えたパッケージがビルド・インストールできることを確認します。 {{Note|[[Git]] で {{ic|git diff}} または {{ic|git format-patch}} を使ってパッチを作成することもできます [https://stackoverflow.com/questions/6658313/generate-a-git-patch-for-a-specific-commit]。}} {{ic|diff}} について、さらなる詳細は {{man|1|diff}} や {{man|1|git-diff}} を参照してください。 == パッチの適用 == このセクションでは自分で作成した、あるいはインターネットからダウンロードしてきたパッチを {{ic|PKGBUILD}} の {{ic|prepare()}} 関数で適用する方法を説明します。以下の手順に従ってください: # {{ic|PKGBUILD}} の {{ic|source}} 配列にパッチファイルのエントリを追加してください。元のソース url とは空白で区切られます。ファイルがオンライン上に存在する場合、完全な URL を記入すれば {{ic|src}} ディレクトリに自動的にダウンロード・配置されます。パッチを自分で作成した場合、あるいはインターネット上からパッチを取得できない場合、{{ic|PKGBUILD}} ファイルと同じディレクトリにパッチファイルを置いて、{{ic|source}} 配列にファイルの名前を追加してください。ファイルが {{ic|src}} ディレクトリにコピーされるようになります。{{ic|PKGBUILD}} を再配布する場合、{{ic|PKGBUILD}} とパッチを一緒にする必要があります。 # 次に、パッケージ {{Pkg|pacman-contrib}} に含まれる {{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}} ディレクトリにコピーされています): prepare 関数の例: {{bc|1= prepare() { cd "$pkgname-$pkgver" patch --forward --strip=1 --input="${srcdir}/eject.patch" } }} あるいは、最初に cd せずに、{{ic|patch}} の {{ic|--directory}} フラグを使用することもできます。上記の例は次のようになります: {{bc|1= prepare() { patch --directory="$pkgname-$pkgver" --forward --strip=1 --input="${srcdir}/eject.patch" } }} (ターミナルから) {{ic|makepkg}} を実行してください。全てが上手くいっていれば、パッチが自動的に適用されて、新しいパッケージにはパッチに含まれている変更が追加されているはずです。そうならない場合、patch の {{ic|-p}} オプションを使って実験を行ってみてください ({{ic|--dry-run}} や {{ic|--reverse}} や {{ic|--verbose}} などのオプションが有用でしょう)。詳しくは {{man|1|patch}} を読んでください。 基本的には次のようになっています。{{ic|myversion/}} のファイルにパッチを適用する diff ファイルが作成された場合、diff ファイルは {{ic|myversion/file}} に適用されます。({{ic|PKGBUILD}} で cd した) {{ic|yourversion/}} ディレクトリの中から実行する場合、ファイルにパッチが適用されるときに、{{ic|myversion/}} の部分は省いて {{ic|file}} ファイルに適用されるようにしなくてはなりません。{{ic|1= --strip=1}} でパスからディレクトリが一つ削除されます。しかしながら、開発者が {{ic|myfiles/myversion}} にパッチを適用した場合、ディレクトリを二つ削除する必要があるので、{{ic|1= --strip=2}} を使います。 {{ic|--strip}} オプションを指定しなかった場合、全てのディレクトリ構造が取り除かれます。全てのファイルがベースディレクトリに存在する場合はそれで ok ですが、パッチを作成したのが {{ic|myversion/}} で編集したファイルが {{ic|myversion/src/file}} の場合、{{ic|yourversion}} の中から {{ic|--strip}} オプションを付けずにパッチを実行したときに、{{ic|yourversion/file}} という名前のファイルにパッチが適用されてしまいます。 ほとんどの開発者はパッチを適用するディレクトリの親ディレクトリからパッチを作成するので、通常は {{ic|1= --strip=1}} が適切です。 == quilt を使う == 多数のパッチを管理する場合、{{Pkg|quilt}} を使うことでパッチの適用や更新、パッチをあてたファイルのリバートなどが楽になります。{{Pkg|quilt}} は [https://wiki.debian.org/UsingQuilt Debian] でパッチを管理するのに使われています。基本的な使用方法は [http://www.shakthimaan.com/downloads/glv/quilt-tutorial/quilt-doc.pdf Using Quilt] を見てください。 == 参照 == * http://www.kegel.com/academy/opensource.html — パッチの適用に関する有用な情報
このページで使用されているテンプレート:
テンプレート:Bc
(
ソースを閲覧
)
テンプレート:Ic
(
ソースを閲覧
)
テンプレート:META Related articles start
(
ソースを閲覧
)
テンプレート:Man
(
ソースを閲覧
)
テンプレート:Note
(
ソースを閲覧
)
テンプレート:Pkg
(
ソースを閲覧
)
テンプレート:Related
(
ソースを閲覧
)
テンプレート:Related articles end
(
ソースを閲覧
)
テンプレート:Related articles start
(
ソースを閲覧
)
パッケージにパッチを適用
に戻る。
検索
検索
パッケージにパッチを適用のソースを表示
話題を追加