10月17と18日に初のアジア地域でのopenSUSE Summit が北京航空航天大学で開催されました。 46-P1050093

顔を合わせることが重要

openSUSEの開発は世界中からの多くの人が関わっているため、主なコミュニケーション手段は、メールやオンラインシステムを通して行われます。openSUSE.Asia Summit の重要な目的の1つは、普段オンラインでしか交流の無い人と実際に会うことです。実際に、会場入りすると、次々と挨拶が始まります。まずはopenSUSE.Asia Summitの準備を一緒にしてきた運営メンバー、そして日本語入力まわりを協力してパッケージングしているHillwood(中国人)と出会いました。

実際に会うことで初めて「どのような人か」分かることは多く、今後のオンラインコミュニケーションにも役立つのではないかと思います。 Asia Summitの発起人で、台湾のコミュニティメンバーのsakanaは「イベントの規模や、話す言葉は重要ではない。会う機会を作ることが重要」といっていました。実際に、今回もほとんどのセッションが中国語でした。

openSUSEの今後の方向性

基調講演では、openSUSE Board長のRichard BrownとSUSEのエンジニアリング副社長であるRalf FlaxaがともにopenSUSEとSLESの今後の役割についてふれました。13.2のリリースと同時に、ローリングリリースのTumbleweedがFactoryのスナップショットベースとなり、より最新のフルパッケージがディストリビューションとして提供されます。13.2に向けて整備してきた自動テストフレームワークopenQAがこれを可能にしました。

一方、エンタープライズ向けのSLESと、新しさを求めるopenSUSEの間にはギャップがあります。このギャップを埋めるアイデアとして、バージョン番号付きのopenSUSEのリリースサイクルを見直すこと、長期サポートをするEvergreenプロジェクトが紹介されました。

23-P1050024

主な講演

Max Linは13.2以降のリリースの鍵となる、openQAとStagingプロジェクトの紹介を行いました(2セッション)。この2つの役割を簡単に説明すると、パッケージメンテナーによって更新されたパッケージは Factory に取り込む前に、まずはStagingプロジェクトに送られ、Staging プロジェクトのパッケージとFactoryの他のパッケージを合わせた状態でテストが行われます。このテストに使われるフレームワークがopenQAです。OSを仮想マシンで起動し、アプリケーションの起動・キーの入力などから構成されるテストケースを自動で実行します。openQAはGUIのテストにも対応しており、画面上に表示されている文字列が期待したものと同じかを判定することもできます。

その他には、Gary Linによるセキュアブートが有効な環境下でopenSUSEを動かす仕組みの解説もありました。現在のセキュアブートの環境では、Microsoftの鍵で署名されたブートローダーしか起動できませんが、署名されたプリローダーのShimを通してShimの鍵で署名されたGRUBを起動できます。また、マシン所有者のカスタムブートローダーやカーネルはmachine owner keyという鍵を用いて署名し、セキュアに起動できることが紹介されました。ブートローダーやカーネルの署名はOBSを通して簡単に行うこともできます。

台湾・日本・インド・北京のopenSUSEコミュニティの活動についての紹介も行いました。(日本は筆者が担当)インドコミュニティでは頻繁にパーティを開くようで、これがコミュニティを盛り上げる秘訣だと言っていたのが印象的でした。 私の発表スライド「A closer look at fonts and font rendering system on openSUSE」のスライドはこちらです。Notoフォントの話や、fontconfig、ヒンティングについて話しました:

ワークショップ

会場で実際に手を動かすワークショップもいくつか開催されました。OBSワークショップでは学生ボランティアのメンバーが初めてのパッケージングに挑戦していました。

昼食は吉野家! (#matsuyanow ならず)

北京の町中にはセブンイレブンを始めとする日本でお馴染みのお店がちょくちょく見られますが、吉野家もそのうちの1つです。Summitの昼食は2日とも吉野家でした。とても人気があるようで、お昼の大混雑の中、参加者全員でお店に押しかけました(残念ながら、OSC界隈で人気のある松屋は見当たりません)。お店の雰囲気は日本のハンバーガーチェーン店に似ています。牛丼・豚丼・鶏丼・きのこ丼と一緒にコーラを頼むのが定番だそうです。

27-P1050040 28-P1050041 45-P1050091

ライトニングトーク

OSCでお馴染みの、最後のLT大会にしてみました。時間を拡大して当日申し込みを可能にしてみました。中でも面白かった発表は、Justin Wongによるgdanmakuの紹介です。gdanmakuはニコニコ動画のようなコメントを、スクリーン上に表示するアプリケーションで、LT会場からブラウザ経由でコメントを投稿していました。

gdanmaku

その他、食べ物など

10-P1040991 20-P1050017 34-P1050058 35-P1050061 56-P1050168 55-P1050166 57-P1050163

次回以降は?

2日間を通して、アニメが好きだとか、今度日本に行くけど、どこに行くべきか、次回は秋葉原で開催して欲しいといった話題が上がっていました。次回は台湾になりそうですが、より多くの人が日本から参加してもらえれば…と思います。(写真は主にボランティアのみなさん)

volunteers at openSUSE.Asia Summit 2014

JAVAのバグについて

By 杜若 桔梗 @ 2014-11-15 22:48

前回の投稿からずいぶんと間が開いてしまいました。桔梗です。

今回は珍しくLinux上でとあるソフトを動かしたときのお話です。

みんなも知っているSendmailというMTAがありますね。これの商用製品のアドオンという形で公開されている製品があるのですが、
この導入作業で遭遇したトラブルのお話です。
まあ、真犯人はバグだらけのJDK1.7系列ということなのですが、なかなか見つける手順というものは探してもないものですよね。
さっくりとお話をしますと、CoreDUMPが原因でフェイルオーバーするシステムがあると。原因はなんでしょうか、とう調査依頼です。
それならgdbで出力されたCoreをみてあげればいいわけです。コマンドライン上からは「gdb Coreを出力した実行ファイル Coreファイル」です。
その後に「thread apply all bt」と打つことですべてのスレッドをバックトレースすることができます。
これで、問題を起こしたスレッド、言い換えればCoreファイルを出力したスレッドの動きを追うことができます。
このときはメモリ周りのエラーでしたので重点的にGlibcやらLinux Kernel側を追っていました。今だからいえますが、これは思いっきり見当違いだったわけです。
真犯人は一番最初のスレッドにありました。ContinueInNewThreadだと?この後のスレッドはほとんどがsem_waitやら、pthread_cond_waitやら続いていました。
そこで、JDKのソースを探してみたところ・・・・・・

OpenJDK / jdk7u / jdk7u / hotspot/src/os/posix/launcher/java_md.cの1888行目以降を見てください。

ContinueInNewThread(int (JNICALL *continuation)(void *), jlong stack_size, void * args) {
int rslt;
#if defined(__linux__) || defined(_ALLBSD_SOURCE)
pthread_t tid;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);

if (stack_size > 0) {
pthread_attr_setstacksize(&attr, stack_size);
}

if (pthread_create(&tid, &attr, (void *(*)(void*))continuation, (void*)args) == 0) {
void * tmp;
pthread_join(tid, &tmp);
rslt = (int)(intptr_t)tmp;
} else {
/*
* Continue execution in current thread if for some reason (e.g. out of
* memory/LWP) a new thread can’t be created. This will likely fail
* later in continuation as JNI_CreateJavaVM needs to create quite a
* few new threads, anyway, just give it a try..
*/
rslt = continuation(args);
}

pthread_attr_destroy(&attr);

とありますね。pthread_join()のところで場合によってはデッドロックが発生しますよね、これ。
たしかこの問題はJAVA1.8(8)で解決されていたように思いますがいかがでしょうか。

詳しい解説はこれから。

1888行目からの処理ですが、
pthread_createで pthreadを起動して、pthread_join でpthreadの終了待ちをしています、
この pthread_join は、ブロッキング関数の為、pthread_create で起動した処理が終了しないと、
デッドロックにはまって、ContinueInNewThread が終了せず、pthreadのIDが、スタックの変数の為、メソッドの外から終了させることもできません。

このソースでは、ContinueInNewThread で作ったソースがタイムアウトで終了する事もなく、外から殺す事も出来ない為、引き渡した処理によってはデッドロックが発生する致命的なバグです。

私も私でよくこんなもん見つけたよね・・・・・・

もちろん、openSUSEにはopenJDKが導入されています。できるだけ、openJDK8を利用した方がいいと思います。

12月30日(火) コミックマーケット87に参加します。場所は 西い35a です。
配布物は、いつもの Geeko Magazine を拡大した Geeko Magazine を予定しています。openSUSE について、盛りだくさんで貴重な1冊にしたいと考えていますのでよろしくお願いします。

現段階では次のような内容を予定しています。

  •  特集: openSUSE で同人活動(原稿書きや入稿データ作成、お絵かきなど)
  •  小説
  •  openSUSE 女子部 (イケメン?)

詳細は決まり次第お知らせします

執筆者募集

今回の Geeko Magazine の発行への貢献者を募集しています。

記事の提供

  •  特集枠: 上記のお題に沿った記事を提供して下さい(特に音楽とか、誰か書きませんか?)
  •  ネタ枠: ちょっと見に行ってみようかなと思うような、ネタを募集しています
  •  自由枠: 他の人の記事の挿絵、イラスト、漫画、特集枠に入らない技術ネタ

当日のスタッフ

  •  コスプレ(と衣装)

貢献して頂いた方には、できあがった Geeko Magazine を進呈します。

応募方法: コメント、Twitter、opensuse-ug のメーリングリスト、Facebook など何かしらの方法でお知らせ下さい。
記事の最終締め切り: 11月30日(ネタ枠はできるだけ早い方が良い)
フォーマット: テキストと画像など
レイアウトや文章等の調整はこちらで行います。

Geeko Magazine が欲しい人募集

いつもの A4 1枚の Geeko Magazine とは異なり、ある程度の印刷代がかかる見込みです。多くの部数を作成すると、単価は安くはなります。(50部であれば500円程度)

そこで、どの程度需要があるかを調査するために、事前予約を受け付ける予定です。また会場・または関東エリアでは受け取れない人のために、各地方で欲しい人に頒布して頂ける方がいれば、ご協力をお願いします。

 

openSUSE.Asia Summit のレポートはもう少しお待ち下さい。