Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

野良ビルドから見たGentoo

4,379 views

Published on

Published in: Technology

野良ビルドから見たGentoo

  1. 1. 野良ビルドから見た Gentoo〜ビルドのおとしあなと QA 〜
  2. 2. ビルドなんて./configure makemake installでだいたいすむ
  3. 3. そう思っていると 思わぬおとしぁなが待っている 今日のメインテーマ( 時代は cmake とかそういう話じゃないよ )
  4. 4. build process● unpack● (patch あてたりする )● ./configure● make● (make test)● make install● いろいろする
  5. 5. unpack● 特に注目するようなところはない● 一応 unpack hoge fuga とかするだけで展開 するように – gz – xz – bz2
  6. 6. configure● econf コマンド – ./configure – --prefix=/usr – --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu – --mandir=/usr/share/man --infodir=/usr/share/info – --datadir=/usr/share --sysconfdir=/etc --localstatedir=/var/lib – --libdir=/usr/lib64 – --disable-dependency-tracking – --disable-silent-rules
  7. 7. --disable-dependency-tracking● automake の機能 dependency-tracking – コードのの依存をチェック – 依存によってリビルドが行なわれてべんり● ただし – 依存チェックのコスト – 一回だけならただのムダ
  8. 8. --disable-silent-rules● silent rules● Linux kernel の出力 CC foo LD foo● デバッグにはふべん
  9. 9. patch あてる● patch あてて build できたぞ ! => 新しいバージョン出る => あれ、 patch どこいった ?● /etc/portage/patches – <package name> – <package name>-<version> – <package name>-<revision>
  10. 10. make のおとしあな● Makefile がおかしい – “cd hoge;make” とか書いている – CFLAGS ・ LDFLAGS が反映されない – gcc 直接よんでる – リンクがおかしい● こっそり – command not found – file dose not exist
  11. 11. make 対策● ビルドログの監視● -frecord-gcc-switches – .GCC.command.line section● --hash-style=gnu – ELF でのシンボル・ルックアップ – .hash section● ld.gold を使う
  12. 12. build log 監視● command not found 以外にも● gcc の警告 – Strict Aliasing – Implicit Declarations – Used Uninitialized – Invalid X<=Y<=Z Comparisons – Non-Null Required – Truncating Pointers
  13. 13. strict aliasingint X int X; float *Y;float Y ------------- X = 1; *Y = 3.14; printf("%dn", X);
  14. 14. underlinking 1/2 LibraryProgram Bar foo Library Nyoro Link Use
  15. 15. --as-needed LibraryProgram Bar foo Library Nyoro Link Use
  16. 16. New nyoro Library Program Bar fooRebuild Library Nyoro Link Use Library Nyoro
  17. 17. underlinking 2/2 LibraryProgram Bar foo Library Nyoro Link Use
  18. 18. underlinking 2/2 LibraryProgram Bar fooBroken Library Nyoro-1.0 Link Use Library Nyoro-2.0
  19. 19. underlinking 2/2 LibraryProgram Bar fooBroken Library Nyoro-1.0 Link Use Library Nyoro-2.0
  20. 20. make install のおとしぁな● root で実行されてる – 変なとこさわるかも ● 突然 rm -r /usr されたりな● インストールしたバイナリがやばいかも – RUNPATH ・ TEXTREL ・ EXECSTACK – DT_NEEDED – SONAME – world writable – debug 情報ついたまま
  21. 21. 他にもいろいろ● めっちゃ容量使うやつ – /usr とか /var とかの容量事前確認 – メモリとかも● gcc のバージョン・カーネルの設定などの チェック● ABI の更新による rebuild
  22. 22. ABI rebuildProgram Library foo Nyoro-1.0 Library Nyoro-1.1 Link Use
  23. 23. ABI rebuildProgram Library foo Nyoro-1.0 Library Nyoro-1.1 Link Use
  24. 24. ABI rebuildProgram Library foo Nyoro-1.0 Library Update Nyoro-1.1 Link Use
  25. 25. ABI rebuildProgram Library foo Nyoro-1.0 Rebuild Library Update Nyoro-1.1 Link Use
  26. 26. ABI rebuildProgram Library foo Nyoro-1.0 Library Nyoro-1.1 Link Use
  27. 27. 個別まとめ● Gentoo 使っている人むけまとめ – portage 裏でいろいろやってるやべえ !● 野良ビルドしている人むけまとめ – いろいろおとしあな多いやばい ! – portage べんりかも !● なんかパッケージ書いてる人むけまとめ – 頭の片隅において対策しとこう ● とくに underlinking とか SONAME とか● 他の distro の人 – うちの distro での build について次回発表するよ ! – Nix の patchelf とかおもしろそうなんだけど ( チラッ
  28. 28. 全体まとめ● コンパイルだからめんどい、わけではない – いやたしかに時間はかかるんやけどね● むしろいろいろチェックしてくれててべんり でよい● ビルドシステム極めてる● いまからインストールしてみよう
  29. 29. おまけ● Gentoo に興味あるけど・・・でも・・・ ブラウザで Gentoo 体験 http://bit.ly/9VG7xz

×