SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
野良ビルドから見た 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

Mais conteúdo relacionado

Mais procurados

197x Timer with Your Messages
197x Timer with Your Messages197x Timer with Your Messages
197x Timer with Your Messages
Kuniaki Igarashi
 
Perlワンライナーで全てのモジュールにuse v5.8.0つける!
Perlワンライナーで全てのモジュールにuse v5.8.0つける!Perlワンライナーで全てのモジュールにuse v5.8.0つける!
Perlワンライナーで全てのモジュールにuse v5.8.0つける!
debug-ito
 
EC2でkeepalived+LVS(DSR)
EC2でkeepalived+LVS(DSR)EC2でkeepalived+LVS(DSR)
EC2でkeepalived+LVS(DSR)
Sugawara Genki
 
Gentooでルータ作った話
Gentooでルータ作った話Gentooでルータ作った話
Gentooでルータ作った話
Yuichi Nagayama
 
MacPort_&_FTP_ver1.0
MacPort_&_FTP_ver1.0MacPort_&_FTP_ver1.0
MacPort_&_FTP_ver1.0
Satoshi Kume
 

Mais procurados (20)

Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
 
FreeBSD jail+vnetと戯れた話
FreeBSD jail+vnetと戯れた話FreeBSD jail+vnetと戯れた話
FreeBSD jail+vnetと戯れた話
 
197x Timer with Your Messages
197x Timer with Your Messages197x Timer with Your Messages
197x Timer with Your Messages
 
Perlワンライナーで全てのモジュールにuse v5.8.0つける!
Perlワンライナーで全てのモジュールにuse v5.8.0つける!Perlワンライナーで全てのモジュールにuse v5.8.0つける!
Perlワンライナーで全てのモジュールにuse v5.8.0つける!
 
Elog and Ebuild Phase Hook
Elog and Ebuild Phase HookElog and Ebuild Phase Hook
Elog and Ebuild Phase Hook
 
2016 0626 ubuntu 1604 LTS party LT
2016 0626 ubuntu 1604 LTS party LT2016 0626 ubuntu 1604 LTS party LT
2016 0626 ubuntu 1604 LTS party LT
 
OSunC Chiba LT Ubuntu 14.04 to 16.04.1 upgrade with ConfigDrive cloud image
OSunC Chiba LT Ubuntu 14.04 to 16.04.1 upgrade with ConfigDrive cloud imageOSunC Chiba LT Ubuntu 14.04 to 16.04.1 upgrade with ConfigDrive cloud image
OSunC Chiba LT Ubuntu 14.04 to 16.04.1 upgrade with ConfigDrive cloud image
 
EC2でkeepalived+LVS(DSR)
EC2でkeepalived+LVS(DSR)EC2でkeepalived+LVS(DSR)
EC2でkeepalived+LVS(DSR)
 
Introduction to Ostinato , network packet crafting and generator.
Introduction to Ostinato, network packet crafting and generator.Introduction to Ostinato, network packet crafting and generator.
Introduction to Ostinato , network packet crafting and generator.
 
Froyo DalvikVM JIT
Froyo DalvikVM JITFroyo DalvikVM JIT
Froyo DalvikVM JIT
 
第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西
 
Linux kernelのbspとupstream
Linux kernelのbspとupstreamLinux kernelのbspとupstream
Linux kernelのbspとupstream
 
勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る
勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る
勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る
 
Gentooでルータ作った話
Gentooでルータ作った話Gentooでルータ作った話
Gentooでルータ作った話
 
Yocto Project ハンズオン プレゼン用資料
Yocto Project ハンズオン プレゼン用資料Yocto Project ハンズオン プレゼン用資料
Yocto Project ハンズオン プレゼン用資料
 
Bundler kanazawa.rb meetup #2 2012/09/19
Bundler kanazawa.rb meetup #2 2012/09/19Bundler kanazawa.rb meetup #2 2012/09/19
Bundler kanazawa.rb meetup #2 2012/09/19
 
Getting started raspberry pi osc hamamatsu
Getting started raspberry pi osc hamamatsuGetting started raspberry pi osc hamamatsu
Getting started raspberry pi osc hamamatsu
 
GPD WINでStretchを動かす
GPD WINでStretchを動かすGPD WINでStretchを動かす
GPD WINでStretchを動かす
 
Bug for Install Linux on Atom Z8700 Portabook ポータブックのLinuxインストールバグ対策 2018 #東海道らぐ
Bug for Install Linux on Atom Z8700 Portabook ポータブックのLinuxインストールバグ対策 2018 #東海道らぐBug for Install Linux on Atom Z8700 Portabook ポータブックのLinuxインストールバグ対策 2018 #東海道らぐ
Bug for Install Linux on Atom Z8700 Portabook ポータブックのLinuxインストールバグ対策 2018 #東海道らぐ
 
MacPort_&_FTP_ver1.0
MacPort_&_FTP_ver1.0MacPort_&_FTP_ver1.0
MacPort_&_FTP_ver1.0
 

Destaque

Xとかオワコン?
Xとかオワコン?Xとかオワコン?
Xとかオワコン?
Naohiro Aota
 
みんな大好き! Hello, World
みんな大好き! Hello, Worldみんな大好き! Hello, World
みんな大好き! Hello, World
Naohiro Aota
 
自分色のLinuxホームサーバーを作ってみよう
自分色のLinuxホームサーバーを作ってみよう自分色のLinuxホームサーバーを作ってみよう
自分色のLinuxホームサーバーを作ってみよう
Masahiko Hashimoto
 
Isha forest flower-apr 2014
Isha forest flower-apr 2014Isha forest flower-apr 2014
Isha forest flower-apr 2014
Bhim Upadhyaya
 
Green it vmug presentation v1
Green it vmug presentation v1Green it vmug presentation v1
Green it vmug presentation v1
subtitle
 
Vmug hyper v overview
Vmug hyper v overviewVmug hyper v overview
Vmug hyper v overview
subtitle
 
Swh&pcn in new orleans 11 march2013
Swh&pcn in new orleans 11 march2013Swh&pcn in new orleans 11 march2013
Swh&pcn in new orleans 11 march2013
Charles Figley
 
Theres nothing like a good book
Theres nothing like a good bookTheres nothing like a good book
Theres nothing like a good book
Molly Smart
 
3.1. cum atragi fonduri cu ideea ta. sisteme de solicitari
3.1. cum atragi fonduri cu ideea ta. sisteme de solicitari3.1. cum atragi fonduri cu ideea ta. sisteme de solicitari
3.1. cum atragi fonduri cu ideea ta. sisteme de solicitari
Ruxandra Popa
 

Destaque (20)

Xとかオワコン?
Xとかオワコン?Xとかオワコン?
Xとかオワコン?
 
Install Linux CentOS 7.0
Install Linux CentOS 7.0Install Linux CentOS 7.0
Install Linux CentOS 7.0
 
みんな大好き! Hello, World
みんな大好き! Hello, Worldみんな大好き! Hello, World
みんな大好き! Hello, World
 
Btrfs
BtrfsBtrfs
Btrfs
 
自分色のLinuxホームサーバーを作ってみよう
自分色のLinuxホームサーバーを作ってみよう自分色のLinuxホームサーバーを作ってみよう
自分色のLinuxホームサーバーを作ってみよう
 
Btrfs current status and_future_prospects
Btrfs current status and_future_prospectsBtrfs current status and_future_prospects
Btrfs current status and_future_prospects
 
Unit6, Lesson3 (Women of the Revolution)
Unit6, Lesson3 (Women of the Revolution)Unit6, Lesson3 (Women of the Revolution)
Unit6, Lesson3 (Women of the Revolution)
 
Narendra modi
Narendra modiNarendra modi
Narendra modi
 
Isha forest flower-apr 2014
Isha forest flower-apr 2014Isha forest flower-apr 2014
Isha forest flower-apr 2014
 
Gurustrotam in sanskrit and hindi
Gurustrotam in sanskrit and hindiGurustrotam in sanskrit and hindi
Gurustrotam in sanskrit and hindi
 
4738
47384738
4738
 
Green it vmug presentation v1
Green it vmug presentation v1Green it vmug presentation v1
Green it vmug presentation v1
 
Vmug hyper v overview
Vmug hyper v overviewVmug hyper v overview
Vmug hyper v overview
 
Swh&pcn in new orleans 11 march2013
Swh&pcn in new orleans 11 march2013Swh&pcn in new orleans 11 march2013
Swh&pcn in new orleans 11 march2013
 
Theres nothing like a good book
Theres nothing like a good bookTheres nothing like a good book
Theres nothing like a good book
 
South Africa 2010
South Africa 2010South Africa 2010
South Africa 2010
 
Building Loyalty Like Gaga
Building Loyalty Like Gaga Building Loyalty Like Gaga
Building Loyalty Like Gaga
 
3.1. cum atragi fonduri cu ideea ta. sisteme de solicitari
3.1. cum atragi fonduri cu ideea ta. sisteme de solicitari3.1. cum atragi fonduri cu ideea ta. sisteme de solicitari
3.1. cum atragi fonduri cu ideea ta. sisteme de solicitari
 
Introduktion til elektroniske ressourcer for historie
Introduktion til elektroniske ressourcer for historieIntroduktion til elektroniske ressourcer for historie
Introduktion til elektroniske ressourcer for historie
 
How to video embed
How to video embedHow to video embed
How to video embed
 

Semelhante a 野良ビルドから見たGentoo

Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開
Shogo Kawahara
 
今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて
Takuto Matsuu
 
Symfony2 workshop-0 (nagoya 2011/2/10)
Symfony2 workshop-0 (nagoya 2011/2/10)Symfony2 workshop-0 (nagoya 2011/2/10)
Symfony2 workshop-0 (nagoya 2011/2/10)
Hidenori Goto
 

Semelhante a 野良ビルドから見たGentoo (20)

Composer
 Composer Composer
Composer
 
Fab
FabFab
Fab
 
Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開
 
LibreOfficeをビルドしてみよう(Windows)
LibreOfficeをビルドしてみよう(Windows)LibreOfficeをビルドしてみよう(Windows)
LibreOfficeをビルドしてみよう(Windows)
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて
 
Symfony2 workshop-0 (nagoya 2011/2/10)
Symfony2 workshop-0 (nagoya 2011/2/10)Symfony2 workshop-0 (nagoya 2011/2/10)
Symfony2 workshop-0 (nagoya 2011/2/10)
 
NPCA夏合宿 2014 講義資料
NPCA夏合宿 2014 講義資料NPCA夏合宿 2014 講義資料
NPCA夏合宿 2014 講義資料
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
 
Xcode グループとフォルダー参照 #yhios
Xcode グループとフォルダー参照 #yhiosXcode グループとフォルダー参照 #yhios
Xcode グループとフォルダー参照 #yhios
 
openSUSE におけるパッケージ管理入門
openSUSE におけるパッケージ管理入門openSUSE におけるパッケージ管理入門
openSUSE におけるパッケージ管理入門
 
Pdp11 on-fpga
Pdp11 on-fpgaPdp11 on-fpga
Pdp11 on-fpga
 
Yesod on Heroku
Yesod on HerokuYesod on Heroku
Yesod on Heroku
 
go-apt-cacher/mirror
go-apt-cacher/mirrorgo-apt-cacher/mirror
go-apt-cacher/mirror
 
クラウドコラボレーションサーバ「Collabora Online」を構築してみた
クラウドコラボレーションサーバ「Collabora Online」を構築してみたクラウドコラボレーションサーバ「Collabora Online」を構築してみた
クラウドコラボレーションサーバ「Collabora Online」を構築してみた
 
LibreOfficeの最近の動向とDebianでのLibreOfficeパッケージについて
LibreOfficeの最近の動向とDebianでのLibreOfficeパッケージについてLibreOfficeの最近の動向とDebianでのLibreOfficeパッケージについて
LibreOfficeの最近の動向とDebianでのLibreOfficeパッケージについて
 
Metro
MetroMetro
Metro
 
nftables: the Next Generation Firewall in Linux
nftables: the Next Generation Firewall in Linuxnftables: the Next Generation Firewall in Linux
nftables: the Next Generation Firewall in Linux
 
静的サイトどこにする?
静的サイトどこにする?静的サイトどこにする?
静的サイトどこにする?
 
Raspberry Pi and WebIOPi
Raspberry Pi and WebIOPiRaspberry Pi and WebIOPi
Raspberry Pi and WebIOPi
 

Último

Último (11)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 

野良ビルドから見た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