openSUSE:OSC
なお、現時点ではまだ開発途中で一般的な利用には適しませんが、 osc2 と呼ばれる新しいツールも存在することにご注意ください。
目次
概要
osc は Python 言語で書かれたプログラムで、コマンドラインインターフェイスのほか、他の Python プログラムから使用できる Python モジュールも提供しています。
osc はコマンドラインインターフェイスのクライアントで、 subversion に似た動作をします。 Build Service に対してはソースコードのリポジトリにアクセスするためのクライアントとして動作するほか、メタデータの編集や構築結果の問い合わせなどを行なうことができます。
ダウンロードとインストール
osc は最近の openSUSE Linux ディストリビューションの場合、インストールしてすぐに使うことができます。インストールを行ないたい場合は、下記のように実行してください:
どうしても標準で使用可能なものよりもっと新しいバージョンをお使いになりたい場合は、 openSUSE ツールリポジトリ 内にあるバージョンをお使いください。このリポジトリには、 openSUSE 以外の様々なディストリビューション (SLES, Fedora, Mandriva, Debian など) に対するパッケージも用意されています。なお、 osc のソースコードをお読みになりたい場合は、下記のように実行して git のソースコードをダウンロードしてください:
なお、 osc を動作させるには python-xml が必要となりますが、通常は zypper を実行することで自動的にインストールされます (git からダウンロードしてコンパイルしたような場合は別です) 。
主な機能
認証
osc を初めて起動すると、まずは認証情報を入力するように求められます。入力した認証情報は ~/.oscrc 内に保存されます。パスワードは暗号化されることなくそのまま保存されますので、ファイルシステムのパーミッションなどの設定など、 ~/.oscrc ファイルの取り扱いにはご注意ください。
python-keyring は openSUSE 内にも用意されていて、通常は osc をインストールすると、自動的にインストールされるようになっています (osc RPM パッケージが推奨するように設定されています) 。なお、後からインストールしたい場合は、 手作業でインストール することもできます (ただし、
osc
を初めて起動するよりも前に実行することをお勧めします) し、 osc をインストールする前に 必要なリポジトリ を追加してから実施してもかまいません。 キーリングを使用したい場合で、既に osc を使ってしまっている場合は、まず ~/.oscrc から認証情報を削除する必要があります。その後
osc
を起動しなおすと、認証情報を尋ねられますので、そこで再度認証情報を入力してください。なお、その際には .oscrc ファイルの
[general]
セクションにある #use_keyring = 1
のコメントを外す必要があります (osc のバージョンによっても異なる場合があります) 。python-keyring と Gnome keyring を利用した環境で、上記のように設定すると、うまく動作しないという報告があります。このような場合は python-keyring をアンインストールし、 keyring=1 の代わりに server セクション内に gnome_keyring=1 を追加してください。
使用例
下記に使用例の入門編を示します。なお、 Build Service チュートリアル にはより詳しい説明があります。
コマンドに対する使用方法の表示
osc help osc help <cmd>
サーバ内の既存のコンテンツを表示する
osc ls # プロジェクトの一覧 osc ls Apache # プロジェクト内のパッケージの一覧 osc ls Apache subversion # プロジェクト内のパッケージ内にあるファイルの一覧
コンテンツのチェックアウト
osc co Apache # プロジェクト全体 osc co Apache subversion # パッケージ指定 osc co Apache subversion foo # パッケージ内のファイル指定
作業ディレクトリの更新
osc up osc up <ディレクトリ> osc up * # プロジェクトのディレクトリから実行した場合は、すべてのパッケージを更新することができます osc up # プロジェクトのディレクトリから実行した場合は、すべてのパッケージを更新するとともに、 新しく追加されたパッケージもチェックアウトしますs
変更されたコンテンツのアップロード
osc ci # 現在のディレクトリにあるものをアップロード osc ci <ファイル 1> <ファイル 2> # 指定したファイルのみ osc ci <ディレクトリ 1> <ディレクトリ 2> ... # 複数のパッケージ osc ci -m "updated foobar" # コミットメッセージの指定
コミットログの表示
osc log
状態の表示 (どのファイルをローカルで編集したか)
osc st osc st <ディレクトリ>
osc up で変更点を自動的にマージ (合成) できない場合、ファイルは 'C' (conflict; 矛盾) 状態になり、 <<<<<<<
と >>>>>>>
の行で矛盾点が表示されるようになります。矛盾を解決した後は、下記のように実行してください:
osc resolved <ファイル>
次回の 'チェックイン' でファイルを追加または削除するように指定する
osc add foo osc rm foo
ローカルのディレクトリにあるとおりにファイルを追加または削除する
osc addremove
変更点を確認するため diff を生成する
osc diff [ファイル]
パッケージの構築結果を表示する
osc results osc results <プラットフォーム>
パッケージのログファイルを表示する (パッケージのディレクトリ内で実行する必要があります)
osc buildlog <プラットフォーム> <アーキテクチャ>
Yum/YaST/smart で利用できるパッケージソースを示す、 .repo ファイルの URL を表示する
osc repourls [ディレクトリ]
すべてのリポジトリ・すべてのアーキテクチャに対して、パッケージの再構築を開始する
osc rebuildpac [ディレクトリ]
ローカル環境でパッケージを構築する
osc build <プラットフォーム> <アーキテクチャ> <spec ファイル> [--clean|--noinit|...]
設定済みのプラットフォーム、およびビルドターゲットを表示する
osc platforms [project]
プロジェクトで利用可能なビルドターゲットを表示する
osc repos
メタ情報を表示する
osc meta prj <プロジェクト> osc meta pkg <プロジェクト> <パッケージ> osc meta user <ユーザ名> osc meta prjconf <プロジェクト>
メタ情報を編集する。パッケージやプロジェクトが存在しない場合は、新しく作成する。下記を実行すると、 XML メタデータを編集するためのエディタが起動します。 XML について詳しくわからない場合は、 Web クライアント をお使いください。
osc meta prj -e <プロジェクト> osc meta pkg -e <プロジェクト> <パッケージ> osc meta prjconf -e <プロジェクト>
(The project configuration (prjconf) may well be empty. It is needed in special cases only.)
spec ファイルから取得したメタデータでメタデータを更新する
osc updatepacmetafromspec <dir>
パッケージの追跡
osc を利用することで、パッケージを svn のようなやり方で管理することができます。このような仕組みをパッケージの追跡と呼びます。この機能を利用するには、 ~/.oscrc の [general] セクション内で、下記のように指定する必要があります:
# パッケージを svn のようなやり方で管理する do_package_tracking = 1
新しいパッケージをプロジェクト内に追加する
osc mkpac <パッケージ>
既存のディレクトリ内で、プロジェクトにファイルを追加する
osc add <ディレクトリ>
パッケージとパッケージに属するファイルを削除する
osc deletepac <パッケージ>
上記のコマンドは、いずれもローカルのディレクトリに対する作業のみを実施します。 Build Service 内に作業結果を送信したい場合は、 コミット (osc ci -m <メッセージ>
) を実行してください。
status
コマンドでもパッケージの状態を表示することができます
osc st
ドキュメンテーション
osc にはマニュアルページのほか、 チートシート も用意されています。
何か問題を見つけた場合は?
まずはパッケージをチェックアウトします:
必要に応じて修正して、問題がなければ送信してください:
プラグインを介した osc の拡張
osc は プラグインで拡張することができます 。プラグインでは動作を変更することができるほか、独自のコマンドを追加することもできます。詳しくは openSUSE:OSC プラグイン をお読みください。
設定の移行
バージョン 0.114 では設定の処理に対していくつかの整理が行なわれているため、下記のようなオプションが廃止されています:
- apisrv
- scheme
上記に代わる目的で、下記の新しいオプションが追加されています:
-
apiurl = <プロトコル>://<その他情報> # ここで指定した値を既定の URL として使用します。何も指定しない場合は、システムの既定値 (https://api.opensuse.org) を使用します。
後方互換性を維持する目的で、これらのオプションは現在も動作するようになっていますが、将来的には削除される予定です。なお、これらのオプションを使用していると、警告メッセージを表示するようになっています。 新しい設定方式では、下記のように記述します:
# entry for an apiurl [<プロトコル>://<API URL>] user = <ユーザ名> password = <パスワード> ...
移行作業を行なう前に、あらかじめ ~/.oscrc のバックアップを採取しておいてください!
何らかの理由で移行がうまくいかなかった場合は電子メールにてお尋ねいただくか、もしくは opensuse-buildservice メーリングリスト (英語) もしくは #opensuse-buildservice IRC チャンネル (英語) にてお尋ねください。
移行ケース 1 (apisrv のみ)
apisrv オプションは既定の API ホストを指定する際に使用するものです。 apisrv を指定しない場合は、規定値 ("api.opensuse.org") を使用します。 現在の [general] セクションが下記のようになっていた場合:
[general] ... apisrv = <何らかのホスト> # もしくは apisrv = <プロトコル>://<何か>
apisrv は新しい apiurl オプションに置き換えることができます。具体的には、下記のようになります:
[general] ... apiurl = <プロトコル>://<何か>
もしも apisrv の "<プロトコル>" に何も指定がない場合は、 https を使用してください。また、上述のとおり、すべての apiurl セクションが上記の書式になっていることをご確認ください。すべての移行が終わったら、 apisrv を削除することができます。
移行ケース 2 (スキームのみ)
たとえば現在の [general] セクションが下記のようになっていた場合:
[general] ... scheme = <プロトコル>
この場合は、それぞれの apiurl セクションが存在していることになります。たとえば下記のようになります:
[<ホスト>] user = <ユーザ名> password = <パスワード> ...
これは、下記のように変換することができます:
[<プロトコル>://<ホスト>] user = <ユーザ名> password = <パスワード> ...
変換が終わったら、 scheme オプションを [general] セクションから削除することができます (なお、すべてのセクションを新しい形式に変換してから実施してください) 。
移行ケース 3 (apisrv とスキームの両方)
たとえば、現在の [general] セクションが下記のようになっていた場合:
[general] ... apisrv = <ホスト> scheme = <プロトコル>
上述のとおり、これは apiurl セクションに変換することができます。基本的にはすべての apiurl セクションを変更することになります。
xen を利用した osc のビルド
下記を実行するには、 xen パッケージと xen カーネルをインストールし、起動しておく必要があります。 xen でローカルビルドを実行するには、 ~/.oscrc 内の [general] セクションに下記を指定する必要があります:
build-type=xen build-device=/tmp/FILE.root build-swap=/tmp/FILE.swap build-memory=512
指定したあとは、下記のようにして 2 つのファイルを作成します:
dd if=/dev/zero of=/tmp/FILE.root bs=1M count=4096 # ルートディレクトリ用の 4GB パーティション。巨大なプロジェクトの場合は、 8GB で作成してください。 mkfs.ext3 /tmp/FILE.root # デバイスノードに属していないために警告メッセージが表示されますが、 "y" を指定して続けてください。 dd if=/dev/zero of=/tmp/FILE.swap bs=1M count=512 # 必要であればサイズを変更してお使いください mkswap /tmp/FILE.swap
サイズやファイルシステムを変更した場合は、 build-vmdisk-* オプションもそれに合わせて変更してください。
クロスコンパイル機能を利用したい場合は、 /etc/sysconfig/kernel 内に下記を追加する必要もあります:
- INITRD_MODULES に binfmt_misc
- DOMU_INITRD_MODULES に binfmt_misc
- MODULES_LOADED_ON_BOOT に binfmt_misc
あとは mkinitrd で initrd を再作成し、 osc build を実行してください。
.oscrc チートシート
[general] セクション
ストレージ:
# ダウンロードしたパッケージを下記のディレクトリにキャッシュします。書き込み可能でなければなりません。 # 既定値: packagecachedir = /var/tmp/osbuild-packagecache
# chroot 環境を構築するためのルートディレクトリ。rootdir to setup the chroot environment # %(repo)s や %(arch)s のような変数を使用することもできます # /<path>/%(repo)s-%(arch)s-%(project)s-%(package)s # 既定値: build-root = /var/tmp/build-root/
API 通信:
# 使用する API サーバを指定します (ホスト名[:ポート]) # (認証情報を指定する場合は、 [api.opensuse.org] のセクション内で指定します) # 既定値: apisrv = api.opensuse.org
# API サーバとの通信プロトコルを指定します (http または https) # 既定値: scheme = https
API ホスト:
# API ホストには別名 (aliases) を指定して参照することもできます。例: 'osc -A 別名 ...' # API ホストのセクション内で、 API ホストの別名を指定します。 # https://api.opensuse.org # user=jdoe # aliases=
ローカルビルド:
# root で構築を行なう際のラッパー (sudo, su -, ...) # 既定値: su-wrapper = su -c # 下記のように指定すると、パスワードを不要にすることもできます: #su-wrapper = sudo #sudoers 側では下記のように指定してください: # <username> ALL = NOPASSWD: /usr/bin/build
# デバッグなどを簡略化および便利にする目的で、 osc は内部でパッケージに対する vim gdb トレースを追加する # ことができます。これは構築環境の chroot 以下にインストールするものです: #extra-pkgs=
# build-type - 構築タイプを指定します。下記のいずれかを指定します。 # * empty -> chroot # * xen -> xen VM # * kvm -> kvm VM (要テスト) # 既定値: 未設定 #build-type=xen
# build-device - VM で使用するルートファイルシステムを指定します。 # 既定値: 未設定 #build-device=/tmp/FILE.root
# build-swap - VM で使用するスワップファイルシステムを指定します。 # 既定値: 未設定 #build-swap=/tmp/FILE.swap
# build-memory - VM に割り当てるメモリ量を指定します。 # 既定値: 未設定 #build-memory=512
貢献: バグ報告や開発など
開発は下記の URL で行なっています: https://github.com/openSUSE/osc
新しい問題を見つけた場合は、下記で報告してください: https://github.com/openSUSE/osc/issues/new