「DeveloperWiki:パッケージャになる方法」の版間の差分
(→パッケージの checkpkg を実行: 訳出) |
(→毎回のパスワード入力を省略する: 訳出) |
||
(同じ利用者による、間の7版が非表示) | |||
120行目: | 120行目: | ||
=== 識別された soname の変更に sogrep を実行 === |
=== 識別された soname の変更に sogrep を実行 === |
||
− | + | [[#パッケージの checkpkg を実行|checkpkg]] が共有オブジェクト名 (別名 soname) の変更を {{ic|package}} のライブラリ {{ic|package.so}} で見つけた場合、直接それに依存するパッケージをリビルドすることが '''必要''' です。 |
|
+ | リポジトリ (例えば {{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 [[公式リポジトリ#Staging_repositories|staging]] environment (by following the remaining steps in [[#ワークフロー|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| |
+ | {{Note|はじめに [https://www.archlinux.org/people/trusted-users/ trusted users] や [https://www.archlinux.org/people/developers/ developers] と同期してください。[[公式リポジトリ#Staging_repositories|staging]] 環境に現在パッケージがあれば、{{ic|package}} に対するリビルドをブロックします。}} |
=== devtools を使って署名・アップロード・コミット === |
=== 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! |
||
− | + | 進める準備ができたら、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}}. |
||
=== リポジトリの更新 === |
=== リポジトリの更新 === |
||
+ | {{ic|db-update}} を使って一連のリポジトリから、呼び出されたパッケージに従って新しいパッケージを探すことができます。 |
||
− | Using {{ic|db-update}} will find new packages for a set of repositories, depending on which is being called. |
||
− | + | アップロードされたパッケージを [[公式リポジトリ#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" |
||
− | + | アップロードされたパッケージを [[公式リポジトリ#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" |
||
165行目: | 165行目: | ||
=== パッケージの削除 === |
=== パッケージの削除 === |
||
+ | {{ic|db-remove}} を使用して、指定したバイナリリポジトリからパッケージを削除することができます。 |
||
− | Using {{ic|db-remove}} will remove a package from a specific binary repository. |
||
− | + | [[公式リポジトリ#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" |
||
− | + | [[公式リポジトリ#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> |
||
189行目: | 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> |
||
=== リポジトリ間でのパッケージの移動 === |
=== リポジトリ間でのパッケージの移動 === |
||
+ | {{ic|db-move}} を使って2つのバイナリリポジトリ間でパッケージを移動できます。 |
||
− | Using {{ic|db-move}} will move a package between two binary repositories. |
||
− | + | パッケージを [[公式リポジトリ#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" |
||
− | + | パッケージを [[公式リポジトリ#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''. |
||
− | + | パッケージが testing にしかない場合、''testing2core''・''testing2core64''・''testing2extra''・''testing2extra64'' を使う必要があります。 |
|
− | + | バイナリパッケージとバージョンコントロールされた [[PKGBUILD]] (と潜在的な追加のファイル) を [[公式リポジトリ#community|community]] と [[公式リポジトリ#extra|extra]] の間 (両方の向き) で移動する特別なケースのために、2つの devtools ヘルパースクリプト {{ic|community2extra}} と {{ic|extra2community}} があります。 |
|
− | + | 例えば [[公式リポジトリ#community|community]] から [[公式リポジトリ#extra|extra]] に移動するには以下のコマンドを使用します。 |
|
community2extra <package_name> |
community2extra <package_name> |
||
=== リリースの "タグ付け" === |
=== リリースの "タグ付け" === |
||
− | + | パッケージディレクトリを {{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]] を参照してください)。 |
|
− | |||
== その他 == |
== その他 == |
||
243行目: | 242行目: | ||
=== チェックアウトのクリーンアップ === |
=== チェックアウトのクリーンアップ === |
||
+ | 非再帰的チェックアウトを維持していると、もう追跡していないパッケージを除去したい場合は以下のコマンドを実行します。 |
||
− | 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 |
||
253行目: | 252行目: | ||
=== 毎回のパスワード入力を省略する === |
=== 毎回のパスワード入力を省略する === |
||
+ | {{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. |
||
− | + | {{ic|~/.ssh/config}} に以下の行を追加してください。 |
|
ControlPath ~/.ssh/master-%h-%p-%r |
ControlPath ~/.ssh/master-%h-%p-%r |
||
262行目: | 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 ドキュメントにあります。しっかりと従ってください。
準備とセットアップ
パッケージのインストール
devtools
と namcap
パッケージがインストールされていることを確認してください。
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
で正しい PACKAGER
と GPGKEY
変数を設定していることを確認してください。
間違った署名が付けられていたり 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-packages
と svn-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-build
は extra と community に、multilib-build
は multilib に、multilib-staging-build
は multilib-staging に、multilib-testing-build
は multilib-testing に、staging-x86_64-build
は staging と community-staging に、testing-x86_64-build
は testing と community-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 を実行
namcap PKGBUILD namcap some-package-1.0-1-x86_64.pkg.tar.xz
パッケージの checkpkg を実行
パッケージをビルドしたディレクトリで実行して、現在リポジトリにあるパッケージのバージョンと比較したファイルリストの差分を得ることができます。
checkpkg
識別された soname の変更に sogrep を実行
checkpkg が共有オブジェクト名 (別名 soname) の変更を package
のライブラリ package.so
で見つけた場合、直接それに依存するパッケージをリビルドすることが 必要 です。
リポジトリ (例えば extra
や community
) 内のどのパッケージが package
内のライブラリに依存しているかを特定するには、sogrep を使ってください (sogrep(1) も参照)。
sogrep <repository> package.so
(ワークフロー の残りのステップを実行することで) 対応する staging 環境で package
をビルドしたら、特定された依存パッケージの TODO を作成して、依存パッケージのメンテナが新しいバージョンの package
に対してリビルドできるようにします。
devtools を使って署名・アップロード・コミット
パッケージに満足したら、全ての変更がリポジトリに追跡されていることを確認する必要があります。
以下のコマンドを some-package/trunk/
ディレクトリで実行します。
svn status
そして、注意深く出力を確認してください。
例えば新しい some-package.install
ファイルを追加したとすると、svn にそのファイルを追跡するように伝える必要があります。例:
svn add some-package.install
バイナリパッケージ・makepkg ログなどは 絶対に リポジトリに追加しないように確認してください。
進める準備ができたら、devtools スクリプトを実行して変更を署名・アップロード・コミットすることができます (例えば communitypkg
は community に、community-stagingpkg
は community-staging に、community-testingpkg
は community-testing に、extrapkg
は extra に、gnome-unstablepkg
は gnome-unstable に、kde-unstablepkg
は kde-unstable に、multilibpkg
は multilib に、multilib-stagingpkg
は multilib-staging に、multilib-testingpkg
は multilib-testing に、stagingpkg
は staging に、testingpkg
は testing に使います)、例:
extrapkg "update to 1.2.3, add post_upgrade hook to fix permissions"
簡潔なコミットメッセージを書くようにしてください。 パッケージが単純なアップストリームの変更であればそれで構いませんが、何かより複雑な変更があれば、適切なコミットメッセージを書いて知らせてください。
これはパッケージと署名を、repos.archlinux.org
上にあるユーザーの ~/staging
ディレクトリ以下のリポジトリ特有の場所にアップロードします。
リポジトリの更新
db-update
を使って一連のリポジトリから、呼び出されたパッケージに従って新しいパッケージを探すことができます。
アップロードされたパッケージを core・extra・gnome-unstable・kde-unstable・staging・testing にリリースする場合は次のコマンドを使用します。
ssh repos.archlinux.org "/packages/db-update"
アップロードされたパッケージを community・community-staging・community-testing・multilib・multilib-staging・multilib-testing にリリースするには次のコマンドを使用します。
ssh repos.archlinux.org "/community/db-update"
他の操作
パッケージの削除
db-remove
を使用して、指定したバイナリリポジトリからパッケージを削除することができます。
core・extra・gnome-unstable・kde-unstable・staging・testing からパッケージを削除するには以下のコマンドを使用します。
ssh repos.archlinux.org "/packages/db-remove <repo> <arch> <package_name>"
例
ssh repos.archlinux.org "/packages/db-remove core x86_64 openssh"
community・community-staging・community-testing・multilib・multilib-staging・multilib-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つのバイナリリポジトリ間でパッケージを移動できます。
パッケージを core・extra・gnome-unstable・kde-unstable・staging・testing の間で移動するには以下のコマンドを使用します。
ssh repos.archlinux.org "/packages/db-move <from_repo> <to_repo> <package_name>"
例:
ssh repos.archlinux.org "/packages/db-move testing core openssh"
パッケージを community・community-staging・community-testing・multilib・multilib-staging・multilib-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
これらのスクリプトはコマンドラインのパッケージが core か extra のどちらかにある場合にのみ機能します。 パッケージが testing にしかない場合、testing2core・testing2core64・testing2extra・testing2extra64 を使う必要があります。
バイナリパッケージとバージョンコントロールされた PKGBUILD (と潜在的な追加のファイル) を community と extra の間 (両方の向き) で移動する特別なケースのために、2つの devtools ヘルパースクリプト community2extra
と extra2community
があります。
例えば community から extra に移動するには以下のコマンドを使用します。
community2extra <package_name>
リリースの "タグ付け"
パッケージディレクトリを archco
か communityco
、あるいは 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 を含めて) はこのコネクションを通してトンネルされます。