分12autopkgtestいろいろなフェーズのテストが自動化される中,動作確認だけは依然としてほぼ手動な状態です。たしかに不具合によって確認すべきことがばらばらですし,ソフトウェアによってはユーザーのグラフィカルな操作も必要ですので,そう簡単には自動化できないものではあります。それでも可能な限り自動化できないか,と考えるのが人間の性というもの。ライブラリパッケージなどは,そのライブラリをリンクするプログラムを作ってビルドして出力結果を確認するスクリプトを作れば自動化可能です。そんな考えのもとに提案されたのが「autopkgtest」という仕組みです。autopkgtestの仕組みautpkgtestはバイナリパッケージに対して,debian/tests/以下に記載されたテストを実行する仕組みです。状況やテスト内容に従って,対象のバイナリパッケージやテストに必要なパッケージがインストールされますし,複数のテストを記載すればそれを順番に実行してくれます。最近のソフトウェアには,最初からテストプログラムが付随しているものも多く存在します。これらはソースパッケージからバイナリパッケージへビルドするときに自動的に実行されますし,テストが失敗すればビルド自体がエラーになることが一般的です。これらはあくまでソフトウェアをビルドした結果を対象としたテストです。それをバイナリパッケージとして構築し,システムにインストールしたあとも正しく動くかどうかというとそれはまた別の話です。autopkgtestは,パッケージインストール後にソースパッケージに含まれているテストを実行する仕組みも存在します。8としてDRAFT段階にあります。Ubuntuでは既にいくつかのパッケージはautopkgtestを導入しています。導入されたパッケージについては,QAチームのJenkins上でテストが実行され,その結果が表示されます。サンプルで試してみるでは実際に試してみましょう。テストしたい環境でautopkgtestパッケージをインストールしておきます。autopkgtestいきなりテストを書くのではなく,既にあるテストを確認してみましょう。シンプルな例としてlibxml2が存在します。pkg-configこのうちcontrolがテストの設定を行うファイルです。Testsフィールドで「build」と「python」という名前のテストを実行することを宣言し,Dependsフィールドでテストを行うには「libxml2-dev,python-libxml2,build-essential,pkg-config」パッケージが必要なことを指定しています。テストごとに同名のファイルを作って,そこにテストを記述します。buildはlibxml2ライブラリを使うC言語のプログラムをビルドし,実行しています。リンク先を見てもらうとわかるとおり,これはただのシェルスクリプトです。pythonのほうもlibxml2のPythonバインディングを使ったテストになっています。このテストを実行するにはadt-runコマンドを使用します。done.「build」と「python」テストがそれぞれ実行され,「⁠PASS」と表示されていることがわかります。ちなみに上記を実行すると「手元の環境に」libxml2とdebian/tests/controlファイルのDependsに指定したパッケージがインストールされるので注意してください。「--no-build-binaries」は指定したソースパッケージをビルドしないことを意味します。バイナリパッケージが必要になる場合は適宜アーカイブからインストールします。「--built-tree」はソースパッケージのビルドツリーを指定します。要するにソースパッケージを展開した先です。これ以外にも「--source」でソースパッケージそのものを指定できます。次のようにパッケージ名そのものを指定した場合は,/tmpにソースパッケージを展開する所から自動で行ってくれます。server」の設定になります。テストはできるだけクリーンな環境で行うべきです。パッケージをインストールして動作をテストするなら何らかの仮想環境で行うことになります。server」を選ぶことで,複数の種類の仮想環境を切り替えて使うことができます。「adt-virt-null」はダミーの仮想環境で,ホストをそのまま仮想環境であると想定して使用します。よって先程述べたように,ホストにテスト対象のパッケージや依存パッケージがインストールされることになります。adt-virt-lxcを使うautopkgtestではLXCも仮想環境として使用できます。これはautopkgtestの2.4以降で追加された機能なので,Debianならjessie以降,UbuntuならTrustyが必要です。LXCをインストールした上で,ベースとなるLXCコンテナーを作成しておきます。Imageを使用するテンプレートです。EC2などと同様に,cloud-config用のUserDataを渡すこともできます。-h」を参照してください。通常のubuntuテンプレートでもかまいません。trusty」は作成するコンテナーのリリースを指定しています。実際に作成されたコンテナーは次のコマンドで確認できます。NO次に,autopkgtestを今度はadt-virt-lxcを使って実行しましょう。done.「adt-virt-lxc」に渡している「--ephemeral」は,テスト用のコンテナーを複製する代わりに,lxc-start-ephemeralコマンドによりoverlayfsを使った一時的なコピーを作成してそれを使用します。よってtrusty-cloudコンテナーそのものには影響を与えません。テスト中にlxc-lsを実行すれば,新しいコンテナーが作成され,起動していることがわかるでしょう。NOちなみにtrusty-cloudコンテナーを今後もテスト環境のベースコンテナーとして使い続けるなら,定期的にパッケージリストを更新する必要があります。これは普通にコンテナーを起動して,アップグレードしてください。今後はadt-virt-lxc側でアップグレードできる仕組みが追加されるはずです。haltまとめ現在どのパッケージがautopkgtestに対応しているかは次のコマンドで確認できます。/var/lib/apt/lists/*SourcesDebianのsidだと254個,UbuntuのTrustyだと(Ubuntu独自パッケージの分嵩上げされて)312個表示されます。Touch関連のライブラリとコアパッケージの対応が急務となっています。よってautopkgtestによるテストコードは,今後さまざまなパッケージに追加されることでしょう。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。