「DeveloperWiki:パッケージャになる方法」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
 
 
(同じ利用者による、間の19版が非表示)
1行目: 1行目:
[[Category:DeveloperWiki]]
+
[[カテゴリ:DeveloperWiki]]
  +
[[en:DeveloperWiki:HOWTO Be A Packager]]
== Follow Package Guidelines ==
 
  +
== パッケージガイドラインに従う ==
   
  +
パッケージガイドラインは Arch Linux ドキュメントにあります。しっかりと従ってください。
Package guidelines can be found in the Arch Linux documentation.
 
Please follow them closely.
 
   
[[Arch packaging standards]]
+
[[Arch パッケージガイドライン]]
   
  +
== 準備とセットアップ ==
   
  +
=== パッケージのインストール ===
== Preparation and Setup ==
 
   
  +
{{ic|devtools}} と {{ic|namcap}} パッケージがインストールされていることを確認してください。
=== Installing the Packages ===
 
   
  +
=== SSH 設定 ===
Make sure you have the packages {{ic|devtools}} and {{ic|namcap}} installed.
 
   
  +
SSH エージェントに複数の SSH キーを登録している場合、Arch のサーバーと接続する際に正しいキーが使われるようにする必要があります。
=== SSH Config ===
 
  +
さらに、ローカルのユーザー名が Arch のサーバーに接続する際に使うユーザー名と異なる場合も同じように設定する必要があります。
   
  +
例の {{ic|~/.ssh/config}} の抜粋:
If you have multiple SSH keys in your SSH Agent, you will need to make sure that the correct key is being used to contact the Arch servers.
 
Also, when your local username differs from the one being used on the Arch servers, you need to take care of that too.
 
 
Example {{ic|~/.ssh/config}} excerpt:
 
 
<pre>
 
<pre>
 
host repos.archlinux.org
 
host repos.archlinux.org
29行目: 28行目:
 
</pre>
 
</pre>
   
=== makepkg Config ===
+
=== makepkg 設定 ===
   
Make sure to configure your {{ic|~/.makepkg.conf}} with the correct {{ic|PACKAGER}} and {{ic|GPGKEY}} variables.
+
{{ic|~/.makepkg.conf}} で正しい {{ic|PACKAGER}} {{ic|GPGKEY}} 変数を設定していることを確認してください。
  +
間違った署名が付けられていたり {{ic|PACKAGER}} がなかったりすると、パッケージをリポジトリに入れることができません。
Wrong signatures or missing {{ic|PACKAGER}} will prevent your packages from entering the repository.
 
   
 
<pre>
 
<pre>
39行目: 38行目:
 
</pre>
 
</pre>
   
  +
=== 非再帰的チェックアウトを使ったローカルの SVN セットアップ ===
=== Local SVN Setup using Non-Recursive Checkouts ===
 
   
  +
SVN は範囲を絞ったチェックアウトが可能なため、空のローカルチェックアウトを初期化して、必要なパッケージだけを後で取得することができます。
As SVN provides the ability to do scoped checkouts you can initialize an empty local checkout and later on only fetch the packages that you want.
 
  +
ローカルチェックアウトをセットアップするには以下のコマンドを実行します。
To setup the local checkouts run the following commands.
 
   
For core, extra, testing and staging repos:
+
coreextratestingstaging リポジトリには以下のコマンドを使用します。
   
 
svn checkout -N svn+ssh://svn-packages@repos.archlinux.org/srv/repos/svn-packages/svn svn-packages
 
svn checkout -N svn+ssh://svn-packages@repos.archlinux.org/srv/repos/svn-packages/svn svn-packages
   
For community, community-testing, community-staging, multilib, multilib-testing, multilib-staging:
+
communitycommunity-testingcommunity-stagingmultilibmultilib-testingmultilib-staging リポジトリには以下のコマンドを使用します。
   
 
svn checkout -N svn+ssh://svn-community@repos.archlinux.org/srv/repos/svn-community/svn svn-community
 
svn checkout -N svn+ssh://svn-community@repos.archlinux.org/srv/repos/svn-community/svn svn-community
   
  +
これは {{ic|svn-packages}} と {{ic|svn-community}} という名前の2つのディレクトリを作成します。中身は空ですが、svn リポジトリとして正しくセットアップされています。
This creates two directories named {{ic|svn-packages}} and {{ic|svn-community}} which contain nothing but are properly setup as svn repositories.
 
   
=== Helper Scripts (optional) ===
+
=== ヘルパースクリプト (任意) ===
   
 
==== ch ====
 
==== ch ====
   
  +
このシェルスクリプトはパッケージをビルドするために chroot をセットアップして維持することを素晴しく簡単にします。
This shell script eases setting up and maintaining the chroots for building the packages immensely.
 
The script has been developed by [https://www.archlinux.org/people/developers/#bluewind Bluewind] and can be found here: [https://git.server-speed.net/users/flo/bin/plain/ch ch].
+
スクリプトは [https://www.archlinux.org/people/developers/#bluewind Bluewind] により開発され、[https://git.server-speed.net/users/flo/bin/plain/ch ch] から入手できます。
   
  +
スクリプトは [[Btrfs]] に依存しているため、Btrfs ボリュームを作る必要があります (20GiB あればほとんどの場合十分です)。ファイル・論理ボリューム・専用のパーティションのどれでも構いません。
As this script relies on [[Btrfs]], you have to create a Btrfs volume (20GiB is mostly sufficient), which can either be a file, a logical volume or a dedicated partition.
 
  +
さらにデフォルトでこのスクリプトは chroot のための Btrfs ボリュームが {{ic|/mnt/chroots/arch}} にマウントされていることを想定しています。
Furthermore by default this script assumes that the Btrfs for the chroots is mounted at {{ic|/mnt/chroots/arch}}.
 
   
  +
その後、以下のコマンドで 64bit パッケージを作ることができます。
Afterwards you can create a 64bit package using:
 
   
 
ch build 64
 
ch build 64
   
  +
(自動的かつ便利に、全ての必要な引数と共に makechrootpkg コマンドが呼び出されます。)
(automatically and conveniently invokes makechrootpkg with all required arguments)
 
   
  +
詳しい情報については、スクリプトの先頭を参照してください。説明と使用例があります。
For further details please take a look at the head of the script, it provides some explanations and usage examples.
 
   
  +
== ワークフロー ==
   
  +
=== ローカルリポジトリのチェックアウト・更新 ===
== The Workflow ==
 
 
=== Checkout/update your Local Repository ===
 
 
cd svn-community
 
cd svn-community
  +
# 特定のパッケージをアップデート
# update a specific package
 
 
svn update <package_name>
 
svn update <package_name>
  +
# 全てのパッケージをアップデート
# update all packages
 
 
svn update
 
svn update
   
  +
=== 新しいパッケージの追加 ===
=== Adding a new Package ===
 
  +
このステップは新しいパッケージを初めてリポジトリに追加するときだけ必要です。
This step is only required when adding a new package to the repository for the first time.
 
 
cd svn-community
 
cd svn-community
 
mkdir -p new-package/{repos,trunk}
 
mkdir -p new-package/{repos,trunk}
92行目: 90行目:
 
svn commit
 
svn commit
   
  +
=== 必要なパッケージの更新 ===
=== Updating the needed Package ===
 
 
svn update some-package
 
svn update some-package
   
=== Change and build ===
+
=== 変更とビルド ===
It is '''mandatory''' to build your package using a clean [[DeveloperWiki:Building_in_a_Clean_Chroot|chroot]].
+
パッケージをクリーンな [[:en:DeveloperWiki:Building_in_a_Clean_Chroot|chroot]] を使ってビルドすることが '''必須''' です。
To ensure this, build with the scripts provided by devtools (i.e. {{ic|extra-x86_64-build}} for [[Official_repositories#extra|extra]] and [[Official_repositories#community|community]], {{ic|multilib-build}} for [[Official_repositories#multilib|multilib]], {{ic|multilib-staging-build}} for [[Official_repositories#Staging_repositories|multilib-staging]], {{ic|multilib-testing-build}} for [[Official_repositories#multilib-testing|multilib-testing]], {{ic|staging-x86_64-build}} for [[Official_repositories#Staging_repositories|staging]] and [[Official_repositories#Staging_repositories|community-staging]], {{ic|testing-x86_64-build}} for [[Official_repositories#testing|testing]] and [[Official_repositories#community-testing|community-testing]]).
+
これを確実にするために、devtools により提供されるスクリプトを使ってビルドしてください (例えば {{ic|extra-x86_64-build}} [[公式リポジトリ#extra|extra]] [[公式リポジトリ#community|community]] に、{{ic|multilib-build}} [[公式リポジトリ#multilib|multilib]] に、{{ic|multilib-staging-build}} [[公式リポジトリ#Staging_repositories|multilib-staging]] に、{{ic|multilib-testing-build}} [[公式リポジトリ#multilib-testing|multilib-testing]] に、{{ic|staging-x86_64-build}} [[公式リポジトリ#Staging_repositories|staging]] [[公式リポジトリ#Staging_repositories|community-staging]] に、{{ic|testing-x86_64-build}} [[公式リポジトリ#testing|testing]] [[公式リポジトリ#community-testing|community-testing]] に使います)
   
 
cd some-package/trunk/
 
cd some-package/trunk/
103行目: 101行目:
 
extra-x86_64-build
 
extra-x86_64-build
   
  +
あるいは、[[#ch|ch]] ヘルパーを使っている場合は単純に以下を実行してください。
Or, if you are using the [[DeveloperWiki:HOWTO_Be_A_Packager#ch|ch]] helper, simply do:
 
 
cd some-package/trunk/
 
cd some-package/trunk/
 
$EDITOR PKGBUILD
 
$EDITOR PKGBUILD
110行目: 108行目:
 
ch build 64
 
ch build 64
   
=== Run namcap on both PKGBUILD and Package ===
+
=== PKGBUILD とパッケージに namcap を実行 ===
  +
{{Note|これは devtools のビルドスクリプトを使うと自動的に実行されます。}}
{{Note|This is automatically done, when using the devtools build scripts.}}
 
 
namcap PKGBUILD
 
namcap PKGBUILD
 
namcap some-package-1.0-1-x86_64.pkg.tar.xz
 
namcap some-package-1.0-1-x86_64.pkg.tar.xz
   
=== Run checkpkg on the Package ===
+
=== パッケージの checkpkg を実行 ===
  +
パッケージをビルドしたディレクトリで実行して、現在リポジトリにあるパッケージのバージョンと比較したファイルリストの差分を得ることができます。
Run in the directory with your freshly built package to get a file list diff compared with the package version currently in the repos.
 
 
checkpkg
 
checkpkg
   
  +
{{Note|これは新しいパッケージを初めてリポジトリに追加するときには省略できます (例えば [[AUR]] から [[公式リポジトリ#community|community]] にパッケージをインポートしたとき)。}}
{{Note|This can be skipped when adding a new package to the repository for the first time (e.g. by importing it from [[AUR]] to [[Official_repositories#community|community]]).}}
 
   
  +
=== 識別された soname の変更に sogrep を実行 ===
=== Run sogrep on identified soname change ===
 
  +
[[#パッケージの checkpkg を実行|checkpkg]] が共有オブジェクト名 (別名 soname) の変更を {{ic|package}} のライブラリ {{ic|package.so}} で見つけた場合、直接それに依存するパッケージをリビルドすることが '''必要''' です。
If [[DeveloperWiki:HOWTO_Be_A_Packager#Run_checkpkg_on_the_Package|checkpkg]] identified a shared object name (aka. soname) change in {{ic|package}}'s library {{ic|package.so}}, it is '''required''' to rebuild packages directly depending on it.
 
   
  +
リポジトリ (例えば {{ic|extra}} や {{ic|community}}) 内のどのパッケージが {{ic|package}} 内のライブラリに依存しているかを特定するには、sogrep を使ってください ({{man|1|sogrep}} も参照)。
To identify which packages rely on a given library in {{ic|package}} in a repository (e.g. {{ic|extra}} or {{ic|community}}), use sogrep (see {{man|1|sogrep}}).
 
 
sogrep <repository> package.so
 
sogrep <repository> package.so
   
  +
([[#ワークフロー|ワークフロー]] の残りのステップを実行することで) 対応する staging 環境で {{ic|package}} をビルドしたら、特定された依存パッケージの [https://www.archlinux.org/todo/ TODO] を作成して、依存パッケージのメンテナが新しいバージョンの {{ic|package}} に対してリビルドできるようにします。
Build {{ic|package}} for its respective [[Official_repositories#Staging_repositories|staging]] environment (by following the remaining steps in [[DeveloperWiki:HOWTO_Be_A_Packager#The_Workflow|The Workflow]]) and create a [https://www.archlinux.org/todo/ TODO] with the identified dependants, so their maintainers can rebuild them against the new version of {{ic|package}}.
 
   
{{Note|First sync with [https://www.archlinux.org/people/trusted-users/ trusted users] and/ or [https://www.archlinux.org/people/developers/ developers], if any packages currently in the [[Official_repositories#Staging_repositories|staging]] environment block the rebuilds against {{ic|package}}.}}
+
{{Note|はじめに [https://www.archlinux.org/people/trusted-users/ trusted users] [https://www.archlinux.org/people/developers/ developers] と同期してください。[[公式リポジトリ#Staging_repositories|staging]] 環境に現在パッケージがあれば、{{ic|package}} に対するリビルドをブロックします。}}
   
=== Use devtools to sign, upload and commit ===
+
=== devtools を使って署名・アップロード・コミット ===
  +
パッケージに満足したら、全ての変更がリポジトリに追跡されていることを確認する必要があります。
Once you are satisfied with the package, you need to make sure all your changes are tracked in the repository.
 
  +
以下のコマンドを {{ic|some-package/trunk/}} ディレクトリで実行します。
Run:
 
   
 
svn status
 
svn status
   
  +
そして、注意深く出力を確認してください。
in the {{ic|some-package/trunk/}} directory and check the output carefully.
 
  +
例えば新しい {{ic|some-package.install}} ファイルを追加したとすると、svn にそのファイルを追跡するように伝える必要があります。例:
If, for example, you have added a new {{ic|some-package.install}} file, you need to tell svn to track that file, e.g.:
 
   
 
svn add some-package.install
 
svn add some-package.install
   
  +
バイナリパッケージ・makepkg ログなどは '''絶対に''' リポジトリに追加しないように確認してください。
Make sure to '''never''' add the binary packages, makepkg logs, etc. to the repository!
 
   
When you're ready to proceed, you can run the devtools scripts to sign, upload and commit your work (i.e. {{ic|communitypkg}} for [[Official_repositories#community|community]], {{ic|community-stagingpkg}} for [[Official_repositories#Staging_repositories|community-staging]], {{ic|community-testingpkg}} for [[Official_repositories#community-testing|community-testing]], {{ic|extrapkg}} for [[Official_repositories#extra|extra]], {{ic|gnome-unstablepkg}} for [[Official_repositories#gnome-unstable|gnome-unstable]], {{ic|kde-unstablepkg}} for [[Official_repositories#kde-unstable|kde-unstable]], {{ic|multilibpkg}} for [[Official_repositories#multilib|multilib]], {{ic|multilib-stagingpkg}} for [[Official_repositories#Staging_repositories|multilib-staging]], {{ic|multilib-testingpkg}} for [[Official_repositories#multilib-testing|multilib-testing]], {{ic|stagingpkg}} for [[Official_repositories#Staging_repositories|staging]], {{ic|testingpkg}} for [[Official_repositories#testing|testing]]), e.g.:
+
進める準備ができたら、devtools スクリプトを実行して変更を署名・アップロード・コミットすることができます (例えば {{ic|communitypkg}} [[公式リポジトリ#community|community]] に、{{ic|community-stagingpkg}} [[公式リポジトリ#Staging_repositories|community-staging]] に、{{ic|community-testingpkg}} [[公式リポジトリ#community-testing|community-testing]] に、{{ic|extrapkg}} [[公式リポジトリ#extra|extra]] に、{{ic|gnome-unstablepkg}} [[公式リポジトリ#gnome-unstable|gnome-unstable]] に、{{ic|kde-unstablepkg}} [[公式リポジトリ#kde-unstable|kde-unstable]] に、{{ic|multilibpkg}} [[公式リポジトリ#multilib|multilib]] に、{{ic|multilib-stagingpkg}} [[公式リポジトリ#Staging_repositories|multilib-staging]] に、{{ic|multilib-testingpkg}} [[公式リポジトリ#multilib-testing|multilib-testing]] に、{{ic|stagingpkg}} [[公式リポジトリ#Staging_repositories|staging]] に、{{ic|testingpkg}} [[公式リポジトリ#testing|testing]] に使います)、例:
   
 
extrapkg "update to 1.2.3, add post_upgrade hook to fix permissions"
 
extrapkg "update to 1.2.3, add post_upgrade hook to fix permissions"
   
  +
簡潔なコミットメッセージを書くようにしてください。
Please try to write concise commit messages.
 
  +
パッケージが単純なアップストリームの変更であればそれで構いませんが、何かより複雑な変更があれば、適切なコミットメッセージを書いて知らせてください。
If the package is simply an upstream change, that is fine, but if anything more complex changes, please inform us by writing an appropriate commit message.
 
   
  +
これはパッケージと署名を、{{ic|repos.archlinux.org}} 上にあるユーザーの {{ic|~/staging}} ディレクトリ以下のリポジトリ特有の場所にアップロードします。
This will upload the package and its signature to their repository specific location in your user's {{ic|~/staging}} directory on {{ic|repos.archlinux.org}}.
 
   
=== Update the Repository ===
+
=== リポジトリの更新 ===
  +
{{ic|db-update}} を使って一連のリポジトリから、呼び出されたパッケージに従って新しいパッケージを探すことができます。
Using {{ic|db-update}} will find new packages for a set of repositories, depending on which is being called.
 
   
To release uploaded packages to [[Official_repositories#core|core]], [[Official_repositories#extra|extra]], [[Official_repositories#gnome-unstable|gnome-unstable]], [[Official_repositories#kde-unstable|kde-unstable]], [[Official_repositories#Staging_repositories|staging]], or [[Official_repositories#testing|testing]] use:
+
アップロードされたパッケージを [[公式リポジトリ#core|core]][[公式リポジトリ#extra|extra]][[公式リポジトリ#gnome-unstable|gnome-unstable]][[公式リポジトリ#kde-unstable|kde-unstable]][[公式リポジトリ#Staging_repositories|staging]][[公式リポジトリ#testing|testing]] にリリースする場合は次のコマンドを使用します。
   
 
ssh repos.archlinux.org "/packages/db-update"
 
ssh repos.archlinux.org "/packages/db-update"
   
To release uploaded packages to [[Official_repositories#community|community]], [[Official_repositories#Staging_repositories|community-staging]], [[Official_repositories#community-testing|community-testing]], [[Official_repositories#multilib|multilib]], [[Official_repositories#Staging_repositories|multilib-staging]], or [[Official_repositories#multilib-testing|multilib-testing]] use:
+
アップロードされたパッケージを [[公式リポジトリ#community|community]][[公式リポジトリ#Staging_repositories|community-staging]][[公式リポジトリ#community-testing|community-testing]][[公式リポジトリ#multilib|multilib]][[公式リポジトリ#Staging_repositories|multilib-staging]][[公式リポジトリ#multilib-testing|multilib-testing]] にリリースするには次のコマンドを使用します。
   
 
ssh repos.archlinux.org "/community/db-update"
 
ssh repos.archlinux.org "/community/db-update"
   
== Other Operations ==
+
== 他の操作 ==
   
=== Removing a Package ===
+
=== パッケージの削除 ===
  +
{{ic|db-remove}} を使用して、指定したバイナリリポジトリからパッケージを削除することができます。
Using {{ic|db-remove}} will remove a package from a specific binary repository.
 
   
To remove a package from [[Official_repositories#core|core]], [[Official_repositories#extra|extra]], [[Official_repositories#gnome-unstable|gnome-unstable]], [[Official_repositories#kde-unstable|kde-unstable]], [[Official_repositories#Staging_repositories|staging]], or [[Official_repositories#testing|testing]] use:
+
[[公式リポジトリ#core|core]][[公式リポジトリ#extra|extra]][[公式リポジトリ#gnome-unstable|gnome-unstable]][[公式リポジトリ#kde-unstable|kde-unstable]][[公式リポジトリ#Staging_repositories|staging]][[公式リポジトリ#testing|testing]] からパッケージを削除するには以下のコマンドを使用します。
   
 
ssh repos.archlinux.org "/packages/db-remove <repo> <arch> <package_name>"
 
ssh repos.archlinux.org "/packages/db-remove <repo> <arch> <package_name>"
   
  +
e.g.
 
   
 
ssh repos.archlinux.org "/packages/db-remove core x86_64 openssh"
 
ssh repos.archlinux.org "/packages/db-remove core x86_64 openssh"
   
To remove a package from [[Official_repositories#community|community]], [[Official_repositories#Staging_repositories|community-staging]], [[Official_repositories#community-testing|community-testing]], [[Official_repositories#multilib|multilib]], [[Official_repositories#Staging_repositories|multilib-staging]], or [[Official_repositories#multilib-testing|multilib-testing]] use:
+
[[公式リポジトリ#community|community]][[公式リポジトリ#Staging_repositories|community-staging]][[公式リポジトリ#community-testing|community-testing]][[公式リポジトリ#multilib|multilib]][[公式リポジトリ#Staging_repositories|multilib-staging]][[公式リポジトリ#multilib-testing|multilib-testing]] からパッケージを削除するには以下のコマンドを使用します。
   
 
ssh repos.archlinux.org "/community/db-remove <repo> <arch> <package_name>"
 
ssh repos.archlinux.org "/community/db-remove <repo> <arch> <package_name>"
   
  +
e.g.
 
   
 
ssh repos.archlinux.org "/community/db-remove community x86_64 jack2"
 
ssh repos.archlinux.org "/community/db-remove community x86_64 jack2"
   
  +
リポジトリからパッケージを完全に削除した場合、パッケージディレクトリ全体をバージョンコントロールからも削除することが推奨されます。
If removing the package from the repositories altogether, it is encouraged to remove the entire package directory from version control as well.
 
   
 
svn update <package_name>
 
svn update <package_name>
191行目: 189行目:
 
svn commit <package_name> -m "Deleting <package_name> because of reason."
 
svn commit <package_name> -m "Deleting <package_name> because of reason."
   
  +
上記のコマンドは時々以下のようなメッセージを出力します。
Sometime the previous command yields:
 
 
svn: E155035: "'/path/to/pkg/<PKG>' is the root of a working copy and cannot be deleted"
 
svn: E155035: "'/path/to/pkg/<PKG>' is the root of a working copy and cannot be deleted"
   
  +
リモートから削除するには以下のコマンドを使用できます。
You can remotely remove it with:
 
 
svn rm svn+ssh://svn-packages@repos.archlinux.org/srv/repos/svn-packages/svn/<PKG>
 
svn rm svn+ssh://svn-packages@repos.archlinux.org/srv/repos/svn-packages/svn/<PKG>
   
  +
=== リポジトリ間でのパッケージの移動 ===
=== Moving a package between repos ===
 
  +
{{ic|db-move}} を使って2つのバイナリリポジトリ間でパッケージを移動できます。
Using {{ic|db-move}} will move a package between two binary repositories.
 
   
To move a package somewhere between [[Official_repositories#core|core]], [[Official_repositories#extra|extra]], [[Official_repositories#gnome-unstable|gnome-unstable]], [[Official_repositories#kde-unstable|kde-unstable]], [[Official_repositories#Staging_repositories|staging]], or [[Official_repositories#testing|testing]] use:
+
パッケージを [[公式リポジトリ#core|core]][[公式リポジトリ#extra|extra]][[公式リポジトリ#gnome-unstable|gnome-unstable]][[公式リポジトリ#kde-unstable|kde-unstable]][[公式リポジトリ#Staging_repositories|staging]][[公式リポジトリ#testing|testing]] の間で移動するには以下のコマンドを使用します。
   
 
ssh repos.archlinux.org "/packages/db-move <from_repo> <to_repo> <package_name>"
 
ssh repos.archlinux.org "/packages/db-move <from_repo> <to_repo> <package_name>"
   
  +
例:
e.g.:
 
   
 
ssh repos.archlinux.org "/packages/db-move testing core openssh"
 
ssh repos.archlinux.org "/packages/db-move testing core openssh"
   
   
To move a package somewhere between [[Official_repositories#community|community]], [[Official_repositories#Staging_repositories|community-staging]], [[Official_repositories#community-testing|community-testing]], [[Official_repositories#multilib|multilib]], [[Official_repositories#Staging_repositories|multilib-staging]], or [[Official_repositories#multilib-testing|multilib-testing]] use:
+
パッケージを [[公式リポジトリ#community|community]][[公式リポジトリ#Staging_repositories|community-staging]][[公式リポジトリ#community-testing|community-testing]][[公式リポジトリ#multilib|multilib]][[公式リポジトリ#Staging_repositories|multilib-staging]][[公式リポジトリ#multilib-testing|multilib-testing]] の間で移動するには以下のコマンドを使用します。
   
 
ssh repos.archlinux.org "/community/db-move <from_repo> <to_repo> <package_name>"
 
ssh repos.archlinux.org "/community/db-move <from_repo> <to_repo> <package_name>"
   
  +
例:
e.g.:
 
   
 
ssh repos.archlinux.org "/community/db-move community-testing community jack2"
 
ssh repos.archlinux.org "/community/db-move community-testing community jack2"
   
  +
代わりに、testing から移動することはとても一般的なため、ヘルパースクリプトがあります。
Alternatively, the move from testing is so common, that there are helper scripts:
 
   
 
/packages/testing2x openssh bzip2 coreutils
 
/packages/testing2x openssh bzip2 coreutils
 
/packages/testing2x64 openssh bzip2 coreutils
 
/packages/testing2x64 openssh bzip2 coreutils
   
  +
これらのスクリプトはコマンドラインのパッケージが ''core'' か ''extra'' のどちらかにある場合にのみ機能します。
These scripts only work if the packages on the commandline are either in ''core'' or ''extra''.
 
If a package is only in testing, you have to use ''testing2core'', ''testing2core64'', ''testing2extra'' or ''testing2extra64''.
+
パッケージが testing にしかない場合、''testing2core''''testing2core64''''testing2extra''''testing2extra64'' を使う必要があります。
   
For the special case of moving a binary package and its version controlled [[PKGBUILD]] (and potentially additional files) between [[Official_repositories#community|community]] and [[Official_repositories#extra|extra]] (either direction), there are the two devtools helper scripts {{ic|community2extra}} and {{ic|extra2community}}.
+
バイナリパッケージとバージョンコントロールされた [[PKGBUILD]] (と潜在的な追加のファイル) [[公式リポジトリ#community|community]] [[公式リポジトリ#extra|extra]] の間 (両方の向き) で移動する特別なケースのために、2つの devtools ヘルパースクリプト {{ic|community2extra}} {{ic|extra2community}} があります。
   
E.g. to move a a package from [[Official_repositories#community|community]] to [[Official_repositories#extra|extra]], use:
+
例えば [[公式リポジトリ#community|community]] から [[公式リポジトリ#extra|extra]] に移動するには以下のコマンドを使用します。
 
community2extra <package_name>
 
community2extra <package_name>
   
=== "Tagging" releases ===
+
=== リリースの "タグ付け" ===
   
Fetch the package dir using {{ic|archco}} or {{ic|communityco}} or from an svn checkout.
+
パッケージディレクトリを {{ic|archco}} {{ic|communityco}}、あるいは svn checkout を使って取得します。
  +
その後:
Then:
 
 
cd package-name/trunk
 
cd package-name/trunk
 
archrelease extra-x86_64
 
archrelease extra-x86_64
   
  +
これは {{ic|extra-x86_64}} という名前のディレクトリ内に trunk エントリーの svn コピーを作成して、このパッケージが ''x86_64'' アーキテクチャの extra リポジトリに入っていることを示されます。
This makes an svn copy of the trunk entries in a directory named {{ic|extra-x86_64}} indicating that this package is in the extra repository for the ''x86_64'' architecture.
 
  +
これは {{ic|extrapkg}} のようなツールを使っているときは自動的に実行されます ([[#devtools を使って署名・アップロード・コミット|Use devtools to sign, upload and commit]] を参照してください)。
This will be done automatically when using tools such as {{ic|extrapkg}} (see [[DeveloperWiki:HOWTO_Be_A_Packager#Use_devtools_to_sign.2C_upload_and_commit|Use devtools to sign, upload and commit]]).
 
 
   
== Miscellaneous Stuff ==
+
== その他 ==
   
  +
=== チェックアウトのクリーンアップ ===
=== Cleaning up your checkout ===
 
   
  +
非再帰的チェックアウトを維持していると、もう追跡していないパッケージを除去したい場合は以下のコマンドを実行します。
Since you are now maintaining a non-recursive checkout, you may want to get rid of packages that you are no longer tracking:
 
   
 
svn update package1 package2 --set-depth exclude
 
svn update package1 package2 --set-depth exclude
   
  +
あるいは、トップレベルを空にしたい場合は以下のコマンドを実行します。
Or if you want an empty toplevel again:
 
   
 
svn update --set-depth empty
 
svn update --set-depth empty
   
  +
=== 毎回のパスワード入力を省略する ===
=== Avoid having to enter your password all the time ===
 
   
  +
{{ic|extrapkg}} や他の devtools を使っているとき、かなり多くの ssh コネクションが確立され、それは ssh キーと ssh エージェントを使っていても変わりません。
When working with {{ic|extrapkg}} and the other devtools, quite a few ssh connections are established, even when using ssh keys and the ssh agent.
 
  +
しかし、これは対処できます。
You can work around that.
 
   
Add this to your {{ic|~/.ssh/config}}:
+
{{ic|~/.ssh/config}} に以下の行を追加してください。
   
 
ControlPath ~/.ssh/master-%h-%p-%r
 
ControlPath ~/.ssh/master-%h-%p-%r
264行目: 261行目:
 
Host repos.archlinux.org
 
Host repos.archlinux.org
   
  +
ここで、作業を始める前に、ssh セッションを以下のコマンドで開いてください。
Now, before you start working, open a ssh session with
 
   
 
ssh -M repos.archlinux.org
 
ssh -M repos.archlinux.org
   
  +
パスワードを入力して、作業を終えるまでこのセッションを開いたままにしておいてください。
Enter your password and leave that session open until you are finished.
 
  +
全ての ssh セッション (scp や svn+ssh を含めて) はこのコネクションを通してトンネルされます。
All ssh sessions (including scp and svn+ssh) will now be tunneled through this connection.
 

2020年5月18日 (月) 15:06時点における最新版

パッケージガイドラインに従う

パッケージガイドラインは Arch Linux ドキュメントにあります。しっかりと従ってください。

Arch パッケージガイドライン

準備とセットアップ

パッケージのインストール

devtoolsnamcap パッケージがインストールされていることを確認してください。

SSH 設定

SSH エージェントに複数の SSH キーを登録している場合、Arch のサーバーと接続する際に正しいキーが使われるようにする必要があります。 さらに、ローカルのユーザー名が Arch のサーバーに接続する際に使うユーザー名と異なる場合も同じように設定する必要があります。

例の ~/.ssh/config の抜粋:

host repos.archlinux.org
	hostname repos.archlinux.org
	port 22
	user foobar
	IdentityFile ~/.ssh/id_arch
	IdentitiesOnly yes

makepkg 設定

~/.makepkg.conf で正しい PACKAGERGPGKEY 変数を設定していることを確認してください。 間違った署名が付けられていたり PACKAGER がなかったりすると、パッケージをリポジトリに入れることができません。

PACKAGER="Foo Bar <foo.bar@archlinux.org>"
GPGKEY="0x0123456789abcdef"

非再帰的チェックアウトを使ったローカルの SVN セットアップ

SVN は範囲を絞ったチェックアウトが可能なため、空のローカルチェックアウトを初期化して、必要なパッケージだけを後で取得することができます。 ローカルチェックアウトをセットアップするには以下のコマンドを実行します。

core・extra・testing・staging リポジトリには以下のコマンドを使用します。

  svn checkout -N svn+ssh://svn-packages@repos.archlinux.org/srv/repos/svn-packages/svn svn-packages

community・community-testing・community-staging・multilib・multilib-testing・multilib-staging リポジトリには以下のコマンドを使用します。

  svn checkout -N svn+ssh://svn-community@repos.archlinux.org/srv/repos/svn-community/svn svn-community

これは svn-packagessvn-community という名前の2つのディレクトリを作成します。中身は空ですが、svn リポジトリとして正しくセットアップされています。

ヘルパースクリプト (任意)

ch

このシェルスクリプトはパッケージをビルドするために chroot をセットアップして維持することを素晴しく簡単にします。 スクリプトは Bluewind により開発され、ch から入手できます。

スクリプトは Btrfs に依存しているため、Btrfs ボリュームを作る必要があります (20GiB あればほとんどの場合十分です)。ファイル・論理ボリューム・専用のパーティションのどれでも構いません。 さらにデフォルトでこのスクリプトは chroot のための Btrfs ボリュームが /mnt/chroots/arch にマウントされていることを想定しています。

その後、以下のコマンドで 64bit パッケージを作ることができます。

  ch build 64

(自動的かつ便利に、全ての必要な引数と共に makechrootpkg コマンドが呼び出されます。)

詳しい情報については、スクリプトの先頭を参照してください。説明と使用例があります。

ワークフロー

ローカルリポジトリのチェックアウト・更新

  cd svn-community
  # 特定のパッケージをアップデート
  svn update <package_name>
  # 全てのパッケージをアップデート
  svn update

新しいパッケージの追加

このステップは新しいパッケージを初めてリポジトリに追加するときだけ必要です。

  cd svn-community
  mkdir -p new-package/{repos,trunk}
  cd new-package
  cp /usr/share/pacman/PKGBUILD.proto trunk/PKGBUILD
  $EDITOR trunk/PKGBUILD
  svn add .
  svn commit

必要なパッケージの更新

  svn update some-package

変更とビルド

パッケージをクリーンな chroot を使ってビルドすることが 必須 です。 これを確実にするために、devtools により提供されるスクリプトを使ってビルドしてください (例えば extra-x86_64-buildextracommunity に、multilib-buildmultilib に、multilib-staging-buildmultilib-staging に、multilib-testing-buildmultilib-testing に、staging-x86_64-buildstagingcommunity-staging に、testing-x86_64-buildtestingcommunity-testing に使います)。

  cd some-package/trunk/
  $EDITOR PKGBUILD
  extra-x86_64-build

あるいは、ch ヘルパーを使っている場合は単純に以下を実行してください。

  cd some-package/trunk/
  $EDITOR PKGBUILD
  ch clean 64
  ch update 64
  ch build 64

PKGBUILD とパッケージに namcap を実行

ノート: これは devtools のビルドスクリプトを使うと自動的に実行されます。
  namcap PKGBUILD
  namcap some-package-1.0-1-x86_64.pkg.tar.xz

パッケージの checkpkg を実行

パッケージをビルドしたディレクトリで実行して、現在リポジトリにあるパッケージのバージョンと比較したファイルリストの差分を得ることができます。

   checkpkg
ノート: これは新しいパッケージを初めてリポジトリに追加するときには省略できます (例えば AUR から community にパッケージをインポートしたとき)。

識別された soname の変更に sogrep を実行

checkpkg が共有オブジェクト名 (別名 soname) の変更を package のライブラリ package.so で見つけた場合、直接それに依存するパッケージをリビルドすることが 必要 です。

リポジトリ (例えば extracommunity) 内のどのパッケージが package 内のライブラリに依存しているかを特定するには、sogrep を使ってください (sogrep(1) も参照)。

   sogrep <repository> package.so

(ワークフロー の残りのステップを実行することで) 対応する staging 環境で package をビルドしたら、特定された依存パッケージの TODO を作成して、依存パッケージのメンテナが新しいバージョンの package に対してリビルドできるようにします。

ノート: はじめに trusted usersdevelopers と同期してください。staging 環境に現在パッケージがあれば、package に対するリビルドをブロックします。

devtools を使って署名・アップロード・コミット

パッケージに満足したら、全ての変更がリポジトリに追跡されていることを確認する必要があります。 以下のコマンドを some-package/trunk/ ディレクトリで実行します。

  svn status

そして、注意深く出力を確認してください。 例えば新しい some-package.install ファイルを追加したとすると、svn にそのファイルを追跡するように伝える必要があります。例:

  svn add some-package.install

バイナリパッケージ・makepkg ログなどは 絶対に リポジトリに追加しないように確認してください。

進める準備ができたら、devtools スクリプトを実行して変更を署名・アップロード・コミットすることができます (例えば communitypkgcommunity に、community-stagingpkgcommunity-staging に、community-testingpkgcommunity-testing に、extrapkgextra に、gnome-unstablepkggnome-unstable に、kde-unstablepkgkde-unstable に、multilibpkgmultilib に、multilib-stagingpkgmultilib-staging に、multilib-testingpkgmultilib-testing に、stagingpkgstaging に、testingpkgtesting に使います)、例:

  extrapkg "update to 1.2.3, add post_upgrade hook to fix permissions"

簡潔なコミットメッセージを書くようにしてください。 パッケージが単純なアップストリームの変更であればそれで構いませんが、何かより複雑な変更があれば、適切なコミットメッセージを書いて知らせてください。

これはパッケージと署名を、repos.archlinux.org 上にあるユーザーの ~/staging ディレクトリ以下のリポジトリ特有の場所にアップロードします。

リポジトリの更新

db-update を使って一連のリポジトリから、呼び出されたパッケージに従って新しいパッケージを探すことができます。

アップロードされたパッケージを coreextragnome-unstablekde-unstablestagingtesting にリリースする場合は次のコマンドを使用します。

  ssh repos.archlinux.org "/packages/db-update"

アップロードされたパッケージを communitycommunity-stagingcommunity-testingmultilibmultilib-stagingmultilib-testing にリリースするには次のコマンドを使用します。

  ssh repos.archlinux.org "/community/db-update"

他の操作

パッケージの削除

db-remove を使用して、指定したバイナリリポジトリからパッケージを削除することができます。

coreextragnome-unstablekde-unstablestagingtesting からパッケージを削除するには以下のコマンドを使用します。

  ssh repos.archlinux.org "/packages/db-remove <repo> <arch> <package_name>"

  ssh repos.archlinux.org "/packages/db-remove core x86_64 openssh"

communitycommunity-stagingcommunity-testingmultilibmultilib-stagingmultilib-testing からパッケージを削除するには以下のコマンドを使用します。

  ssh repos.archlinux.org "/community/db-remove <repo> <arch> <package_name>"

  ssh repos.archlinux.org "/community/db-remove community x86_64 jack2"

リポジトリからパッケージを完全に削除した場合、パッケージディレクトリ全体をバージョンコントロールからも削除することが推奨されます。

   svn update <package_name>
   svn rm --force <package_name>
   svn commit <package_name> -m "Deleting <package_name> because of reason."

上記のコマンドは時々以下のようなメッセージを出力します。

   svn: E155035: "'/path/to/pkg/<PKG>' is the root of a working copy and cannot be deleted"

リモートから削除するには以下のコマンドを使用できます。

   svn rm svn+ssh://svn-packages@repos.archlinux.org/srv/repos/svn-packages/svn/<PKG>

リポジトリ間でのパッケージの移動

db-move を使って2つのバイナリリポジトリ間でパッケージを移動できます。

パッケージを coreextragnome-unstablekde-unstablestagingtesting の間で移動するには以下のコマンドを使用します。

  ssh repos.archlinux.org "/packages/db-move <from_repo> <to_repo> <package_name>"

例:

  ssh repos.archlinux.org "/packages/db-move testing core openssh"


パッケージを communitycommunity-stagingcommunity-testingmultilibmultilib-stagingmultilib-testing の間で移動するには以下のコマンドを使用します。

  ssh repos.archlinux.org "/community/db-move <from_repo> <to_repo> <package_name>"

例:

  ssh repos.archlinux.org "/community/db-move community-testing community jack2"

代わりに、testing から移動することはとても一般的なため、ヘルパースクリプトがあります。

  /packages/testing2x openssh bzip2 coreutils
  /packages/testing2x64 openssh bzip2 coreutils

これらのスクリプトはコマンドラインのパッケージが coreextra のどちらかにある場合にのみ機能します。 パッケージが testing にしかない場合、testing2coretesting2core64testing2extratesting2extra64 を使う必要があります。

バイナリパッケージとバージョンコントロールされた PKGBUILD (と潜在的な追加のファイル) を communityextra の間 (両方の向き) で移動する特別なケースのために、2つの devtools ヘルパースクリプト community2extraextra2community があります。

例えば community から extra に移動するには以下のコマンドを使用します。

   community2extra <package_name>

リリースの "タグ付け"

パッケージディレクトリを archcocommunityco、あるいは svn checkout を使って取得します。 その後:

  cd package-name/trunk
  archrelease extra-x86_64

これは extra-x86_64 という名前のディレクトリ内に trunk エントリーの svn コピーを作成して、このパッケージが x86_64 アーキテクチャの extra リポジトリに入っていることを示されます。 これは extrapkg のようなツールを使っているときは自動的に実行されます (Use devtools to sign, upload and commit を参照してください)。

その他

チェックアウトのクリーンアップ

非再帰的チェックアウトを維持していると、もう追跡していないパッケージを除去したい場合は以下のコマンドを実行します。

  svn update package1 package2 --set-depth exclude

あるいは、トップレベルを空にしたい場合は以下のコマンドを実行します。

  svn update --set-depth empty

毎回のパスワード入力を省略する

extrapkg や他の devtools を使っているとき、かなり多くの ssh コネクションが確立され、それは ssh キーと ssh エージェントを使っていても変わりません。 しかし、これは対処できます。

~/.ssh/config に以下の行を追加してください。

  ControlPath ~/.ssh/master-%h-%p-%r
  
  Host repos.archlinux.org

ここで、作業を始める前に、ssh セッションを以下のコマンドで開いてください。

  ssh -M repos.archlinux.org

パスワードを入力して、作業を終えるまでこのセッションを開いたままにしておいてください。 全ての ssh セッション (scp や svn+ssh を含めて) はこのコネクションを通してトンネルされます。