[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
SlideShare a Scribd company logo
野良ビルドから見た Gentoo

〜ビルドのおとしあなと QA 〜
ビルドなんて


./configure
   make
make install

でだいたいすむ
そう思っていると
   思わぬおとしぁなが待っている

       今日のメインテーマ

( 時代は cmake とかそういう話じゃないよ )
build process
●
    unpack
●
    (patch あてたりする )
●
    ./configure
●
    make
●
    (make test)
●
    make install
●
    いろいろする
unpack
●
    特に注目するようなところはない
●
    一応 unpack hoge fuga とかするだけで展開
    するように
    –   gz
    –   xz
    –   bz2
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
--disable-dependency-tracking
●
    automake の機能 dependency-tracking
    –   コードのの依存をチェック
    –   依存によってリビルドが行なわれてべんり
●
    ただし
    –   依存チェックのコスト
    –   一回だけならただのムダ
--disable-silent-rules
●
    silent rules
●
    Linux kernel の出力
      CC foo
      LD foo
●
    デバッグにはふべん
patch あてる
●
    patch あてて build できたぞ !
    => 新しいバージョン出る
    => あれ、 patch どこいった ?
●
    /etc/portage/patches
    –   <package name>
    –   <package name>-<version>
    –   <package name>-<revision>
make のおとしあな
●
    Makefile がおかしい
    –   “cd hoge;make” とか書いている
    –   CFLAGS ・ LDFLAGS が反映されない
    –   gcc 直接よんでる
    –   リンクがおかしい
●
    こっそり
    –   command not found
    –   file dose not exist
make 対策
●
    ビルドログの監視
●
    -frecord-gcc-switches
    –   .GCC.command.line section
●
    --hash-style=gnu
    –   ELF でのシンボル・ルックアップ
    –   .hash section
●
    ld.gold を使う
build log 監視
●
    command not found 以外にも
●
    gcc の警告
    –   Strict Aliasing
    –   Implicit Declarations
    –   Used Uninitialized
    –   Invalid X<=Y<=Z Comparisons
    –   Non-Null Required
    –   Truncating Pointers
strict aliasing


int X


               int X; float *Y;
float Y        -------------
               X = 1;
               *Y = 3.14;
               printf("%dn", X);
underlinking 1/2

                     Library
Program                Bar
  foo




                               Library
                               Nyoro



   Link
   Use
--as-needed

                  Library
Program             Bar
  foo




                            Library
                            Nyoro



   Link
   Use
New nyoro

                   Library
  Program            Bar
    foo




Rebuild
                             Library
                             Nyoro



     Link
     Use                     Library
                             Nyoro
underlinking 2/2

                     Library
Program                Bar
  foo




                               Library
                               Nyoro



   Link
   Use
underlinking 2/2

                     Library
Program                Bar
  foo




Broken
                                Library
                               Nyoro-1.0



   Link
   Use                          Library
                               Nyoro-2.0
underlinking 2/2

                     Library
Program                Bar
  foo




Broken                              Library
                                   Nyoro-1.0




   Link
   Use                          Library
                               Nyoro-2.0
make install のおとしぁな
●   root で実行されてる
    –   変なとこさわるかも
        ●   突然 rm -r /usr されたりな
●
    インストールしたバイナリがやばいかも
    –   RUNPATH ・ TEXTREL ・ EXECSTACK
    –   DT_NEEDED
    –   SONAME
    –   world writable
    –   debug 情報ついたまま
他にもいろいろ
●
    めっちゃ容量使うやつ
    –   /usr とか /var とかの容量事前確認
    –   メモリとかも
●
    gcc のバージョン・カーネルの設定などの
    チェック
●
    ABI の更新による rebuild
ABI rebuild

Program             Library
  foo              Nyoro-1.0




                      Library
                     Nyoro-1.1

   Link
   Use
ABI rebuild

Program             Library
  foo              Nyoro-1.0




                      Library
                     Nyoro-1.1

   Link
   Use
ABI rebuild

Program             Library
  foo              Nyoro-1.0




                      Library
                                 Update
                     Nyoro-1.1

   Link
   Use
ABI rebuild

Program             Library
  foo              Nyoro-1.0




   Rebuild

                      Library
                                 Update
                     Nyoro-1.1

   Link
   Use
ABI rebuild

Program             Library
  foo              Nyoro-1.0




                      Library
                     Nyoro-1.1

   Link
   Use
個別まとめ
●
    Gentoo 使っている人むけまとめ
    –   portage 裏でいろいろやってるやべえ !
●
    野良ビルドしている人むけまとめ
    –   いろいろおとしあな多いやばい !
    –   portage べんりかも !
●
    なんかパッケージ書いてる人むけまとめ
    –   頭の片隅において対策しとこう
        ●
            とくに underlinking とか SONAME とか
●
    他の distro の人
    –   うちの distro での build について次回発表するよ !
    –   Nix の patchelf とかおもしろそうなんだけど ( チラッ
全体まとめ
●
    コンパイルだからめんどい、わけではない
    –   いやたしかに時間はかかるんやけどね
●
    むしろいろいろチェックしてくれててべんり
    でよい
●
    ビルドシステム極めてる
●
    いまからインストールしてみよう
おまけ
●
    Gentoo に興味あるけど・・・でも・・・
    ブラウザで Gentoo 体験
    http://bit.ly/9VG7xz

More Related Content

野良ビルドから見たGentoo

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