2016年9〜10月の活動

ここ2ヶ月ぐらいの活動を記録しておきます。 Debian関係 Namazuのbuild-arch/build-arch-indep対応 ChaSen symbolsの主要arch対応 qemu-debootstrapの利用 porterboxの利用 ChaSenに関しては前回の投稿とも関係があるのですが、とりあえずは主要(公式リリース)アーキテクチャのみ、一通りlibchasen2.symbolsの更新を行いました。 恥ずかしながら今回はじめてporterboxを使いました。これまでporterboxにログインしたことはあっても結局使い方がよくわからなくて諦めたりしていたのですが、たまたまログインしたホストのmotd(ログイン時に表示されるメッセージ)にschrootの使い方へのリンクhttps://dsa.debian.org/doc/schroot/が掲載されていて、それではじめて使い方を理解した次第です。 しかし、qemu-debootstrapでどうにかなる範囲についてはそちらで対応しました。 第12回 カーネル/VM探検隊参加 qemu-debootstrapについてそれなりに理解を深めたので、その紹介という形で発表をしてきました。   Qiitaへの投稿 MySQL 5.5でのCVE-2016-6662対応について 写経で使うツール symlinkを使わずにホームディレクトリの設定ファイル(dotfile)を管理する 写経に関する記事のストック数が多いのが以外です。 FSIJ月例会(予定) 今月10月の28日に、いつもの場所(東京体育館)、いつもの時間(18:30〜19:30)で勉強会が開催予定です。 10月の技術講座 テーマ: 特別じゃないGnuPG GnuPG 2.1のお話だそうで、期待できます。今の時点でのDebian stable(8.x/Jessie)ではまだ標準のGnuPGが1.4系なのですが、次のリリースには2.1が標準になる予定なので、大いに参考になることでしょう。

C++ template instanceのシンボルを隠す

ここ数日、C++がらみで苦労しています。自分がC++を覚えたのが学生の頃、20年以上前になるので、今時のC++についていけていません。 ChaSenのライブラリをビルドしていると、基本的にABIとしてはC言語の範囲でしか定義していないのに、一部のC++シンボルがexportされてしまいます。ざっと調べてみたところ、どうやらtemplateのインスタンスを定義した場合には有無をいわさず外部参照できてしまうようです。 GCC拡張であればvisibilityの制御でこの挙動を変えられるようなので、pragmaを使ってdartsのインスタンスシンボルを隠すことはできるようになりました(参考: Visibility – GCC Wiki)。 そもそもなぜこんなことをする必要があるかいうと、Debian packageのsymbolsの仕組みに引っかかるからです。C++のsymbol name mangling ruleはgccのメジャーバージョンが上がると微妙に変わることがあって、現在stable標準のgcc 5.xとunstable標準のgcc 6.xでまさにこれが影響しています。これまでビルドしていたライブラリのシンボル情報をdebian/<package-name>.symbols.<arch>という名前で保存していて、ビルド結果のバイナリーに含まれるシンボルがこのファイルと異なった場合、ビルドエラーとなるようになっています。これはABI互換性が壊れないことを保証するための仕組みです。 そもそも内部で使っているだけのC++シンボルが見えてしまっているのを回避して、この問題を根本から対応したかったのでした。 しかしまだ一部の標準ライブラリのC++ template instance symbol(std::ctype<char>とか)が残ってしまっているので、それをどうしたものかと苦慮しているところです。  

Published
Categorized as Debian