ラベル ie-developers の投稿を表示しています。 すべての投稿を表示
ラベル ie-developers の投稿を表示しています。 すべての投稿を表示

2017/10/07

Akatsuki を OSS 化した

Akatsuki を OSS 化して GitHub で公開しました



Akatsuki とは琉球大学情報工学科のシステムです。具体的には
  • 学生のIP申請
    • 対応するドメインを内向き DNS へと登録
    • その IP を DHCP で配れるように
  • 学生のVM新規作成/起動
  • 学生のパスワード変更
    • unix login
    • 802.11X で無線に繋ぐ際の RADIUS を提供
といったことができます。


つまり今まで記事で部分部分を解説していたものの本体です。
関連している記事は以下。


公開にあたって

もちろん大学の内部情報をそのまま GitHub に投げるわけにはいきません。
なので、こいつは OSS 化用にいじってあります。
具体的には漏れたらまずい情報を消してあります。
あとライセンスは MIT だし気にせず自分でいじって公開していく。

その手順として
  • $ git rm very-important-information
    • で公開してはいけない情報を消して
  • $ git commit
    • コミットします。
  • $ git rebase -i --root
    • その後に rebase します。
    • 全部 fixup して一つのコミットにまとめてしまいます
    • fixup しないと復元ができてしまうので、消しても意味がない。
    • ということで、逆に言えばこの手順を踏めばアカンやつを隠蔽できます。


まとめ

所謂実績の一つとして見てもらえると良いかなー、と思って OSS 化しました。
ということで、大学生/大学院生時代にしていた仕事の1つが OSS になりました。

2015/12/06

Homebrew で debug symbols を埋め込んだ LLVM の bottle を作る

Homebrew の bottle を使って debug information が埋め込まれた LLVM を配ってみんなで読もう、ということになったのでそのログ。


環境

  • OSX Yosemite 10.10.5
  • Homebrew 0.9.5
  • LLVM 3.8
  • あと自分のマシンじゃないのでチェックしてないけれど El Capitan (10.11.1?)


Release Build の LLVM の bottle 化

私が所属している研究室では Continuation Based C (CbC) という言語を開発していて、LLVM implemented 版があるのでまずはそいつで bottle で作れないかをチェック。
formula は github の ie-developers/ie/cbc にあります。

普通に build した LLVM を bottle にするのは結構簡単で、
  • brew install --build-bottle ie-developers/ie/cbc
  • brew bottle cbc
とか。 これで build された binary を固めたやつが current directory にできます。
ついでにこうやって書いてね、って出力が sha256 と共に出てくるのでそいつを formula に追記して、 bottle を公開用サーバか何かに置けばOK.


LLVM 3.8 の build を bottle 化

いつからか LLVM は build を repository の top でやると怒るようになってます。
具体的には ./configure をすると怒ってくる。
そいつを回避するために Homebrew 公式の llvm は mktemp を使っているようです。
なので mktemp を使ってやれば最近の LLVM も bottle 化することができます。


LLVM 3.8 を debug information 付きで build して bottle 化

ひとまず LLVM 3.8 を debug information 付きで build する手順としては

  • git clone http://llvm.org/git/llvm
  • mkdir llvm_build
  • cd llvm_build
  • ../llvm/configure --enable-debug-runtime --enable-debug-symbols --disable-optimized --enable-assertions
  • make -j 3
とか。
Debug+Assets って directory に bin と lib ができるのでそいつで追えます。
具体的には
  • lldb Debug+Assets/bin/clang
とかできます。


LLVM 3.8 を debug information 付きで build

Homebrew は build する時のディレクトリは build 時に生成して install 後に捨ててしまうっぽいです。
なので build 場所を変えてバイナリを残すように。
formula の prefix ってメソッドがインストール先のディレクトリを返してくれるので、その下で build しちゃいます。(ちなみに prefix の値は "/usr/local/Cellar/llvm_original/llvm3.8/" とか。)

インストール先のディレクトリで直接 build するれば、Debug+Assets が bottle に入るんじゃないかって魂胆。
あと、 Homebrew は make する時に CFLAGS とかを変更しちゃう superenv ってのがあるらしく、そいつは勝手に -g とかを落とすっぽいです。
なので build する時に --env=std とかすると良いらしい

ってなわけで
  • brew install --env=std --build-bottle ie-developers/ie/llvm_original
  • brew bottle
とかすると OK。
ちなみに圧縮前は8.9Gで圧縮後は2.1Gほど。
あと LLVM はとりあえず make するとこで止めてます。ファイル多くなっちゃいますし。


bottle を展開して lldb で追う

あとは落として追えば良いです。
が、 brew が build 時に buildpath を /private/tmp に作っちゃうのでそのパスを解決してやれば良い。

とか。

これで
  • lldb /usr/local/Cellar/llvm_original/llvm3.8/build/Debug+Asserts/bin/clang
  • l main
とかしてソースが表示されます。やったね。
ちなみにこの path は Yosemite の場合なので El Capitan の path はまた別です。
lldb が l main して時にファイルが無いって文句言うはずなのでそれを解決できように symlink 貼れば良いはず。


よもやまばなし

以下適当に本筋と関係無い話。

Cmake で build

Brew 公式の lldb は cmake で make してるっぽいです。
formula の中では std_cmake_args ってものを持ってるらしく、そいつが  -DCMAKE_BUILD_TYPES=Release を突っこむっぽいです。
なので CMAKE_BUILD_TYPES=Debug とか入れても弾かれる。
RelWithDebugInfo とかもあるのでそいつでもいけるかも?

superenv を見つけた話

どうも -g が有効じゃないっぽいのでログを漁ってたら
  • superenv removed:  -g -Wcast-qual -m64 -Wall -W -Wwrite-strings

とかあったので調べてみました。ログつよい。
ちなみにログの場所は
  • less ~/Library/Logs/Homebrew/llvm_original/02.make.cc
とかです。
superenv は -g を落として -O2 とかを入れてくれるっぽいので brew は Debug Build は基本入れない方針っぽいです。
もちろん --env=std で回避手段があるのは流石ですが。

Mach-O

ちなみに -g が効かないのを探すために Mach-O の仕様とか dSYM とか DWARF とか symbols コマンドとか dsymutil とか調べたりしてました。
その辺の hello.c とかコンパイルすると dSYM が作られて、そいつを消すと追えなかったのでこの辺が問題なのかなー、とか思ってゴニョゴニョしてました。
結果的にはハズレか。

make install してない

どうせ Debug+Assets が残ってないと追えないので make install はしてません。
なので brew link とかは効かないです。
make install した clang も Debug+Assets の debug symbols を見にいくはずなので、二重に clang 作るのは容量的に勿体ないかな、と。


参考文献とか

2014/04/01

Haskell 勉強会をやってみた

2014/03/26(Wed) - 2014/03/28(Fri) に Haskell 勉強会 in ie なるイベントをやってみました。
資料とかはこの辺

Haskell 気になっている人達ですごいH本を読んでみよう、というイベントです。
Haskell は個性的っぽいので、どんな言語なのか知ってみよう、という趣旨でした。
加えて、 Haskell って何、勉強会って何するの、って人達もターゲットにしていて、勉強会とか良く分からなくても良いから来よう、というスタンスで人を集めてたりもしました。

参加者側の話


参加者は基本的にすごいH本を読んでもらって、分からないところを相談するなり、尋ねてもらうなり、というスタイルでした。

Haskell についてとか思ったこととか、参加者の感想とか
  • Haskell すごい、って感想は来る
    • 短かくかけるとか
    • 綺麗とか
  • でもHaskell何に使うの、という質問も飛んでくる
    • 便利なのは分かった
    • が、何に使うの
    • IO が遠いとか(8章で Hello World だから)
  • 型が便利
    • 質問されたら「まず型を見よう」って言ってた
    • で、だいたいはそれで説明可能だった
    • 型便利

 

主催側の話


進め方としては、割といろいろやっている人とか上級生な人を上級者、Haskell に触ったことが無いとか下級生な人を初心者にして、ペアプロチックなペア読みをしてみよう、ってなアイディアを実行してみました。


実際やってみたペア読みについて
  • 本が読める人どうしをペアにするともくもくになる
  • まったく分かんない、って人をペアにすると良いのかも
  • ペアによって進め方を自由にしていたので、進める速度も進め方も違う
  • 他人がいる感はあるので、強制的に読むことができる
といった感じ。
なので新入生とかに向けてやると良いのかもしれない。

あと主催側で思ったこととか
  • 時間の枠は割と可変にしてたのは良かった
    • 遅刻対策とか
    • 人によって来る時間が違うとか
  • でも、時間長すぎるの結構きつい
    • 10:00 - 18:00 を3日は結構しんどかった
    • 午後だけとかにした方が良いのかな
    • でも3日かけて8章読むのも結構厳しめだったし、勉強会でやることを考えた方が良いのかも。
      • 短かいスパンでだーっとやる方向と、長いスパンで続ける方向な勉強会があるしなー、すごいH本はどっち向きかなー、とか
      • 本を読むのは長い方が良いんかな、とか。

感想

Haskell おもしろいなー、って言ってくれてる人もいたのでそれで良いかな、と。
元々、初心者な人達の興味を広げるために、って趣旨だったので。
ただ、上級者の人達はもっと具体的に何ができるの、とかの話も気になると思うので、そこの解答は必要そう。