うちのdebian26パッケージビルド環境 Edit

  • こんな環境でsh4のdebianパッケージをビルドしています。
    (distccメインでやっています。dodesというもっと進んだ方法があるようですが、まだ試していません。)
    プロバイダOCN---ルータ-+-(192.168.1.x)
                           |
                           +- LANDISK(HP公開用)
                |
                +- LANDISK0(開発機…distccクライアント)
                           |
                           +- iMac G5(distccサーバにできないかな?)
                           |
                           +- Windows XP -+-(192.168.0,x)
                                          |
                                          +-colinux (distccサーバ)
    

colinuxの立ち上げ Edit

  • 詳細は省略します。
    ツボとしては、
    • インストールダイアログでdebian環境をインストールするを選択する。
    • 環境立ち上げ後、Window XPのポート3632をcolinux側にフォワードする。
    ことです。

    distcc.jpg

colinux上にクロス開発環境を構築 Edit

  • debian/sarge環境の準備。
    • debianは既にはいってますよね?
      debian26はsargeベースなので、colinuxの側の環境もsargeへdistupgradeしておきます。

  • i386の開発環境を入れます。
    • dpkg-dev,gcc,g++,gcc-3.4-base  … 開発環境基本セット
    • binutils-multiarch … マルチアーキテクチャ対応のbinutilsを入れます。
    • dpkg-cross … クロス環境サポートのdpkg
      # apt-get install dpkg-dev gcc g++ gcc-3.4-base binutils-multiarch dpkg-cross
      
    • /etc/dpkg-cross/cross-compile 編集
      次の1行を加えます。
      default_arch = sh4
      
  • sh4のクロスコンパイラセットを入れます。
    http://eggplant.ddo.jp/www/download/debian26/CROSS/sh4-cross-20050910.tgz
    http://iohack.sourceforge.jp/kogiidena/debian26/CROSS/sh4-cross-20050910.tgz
    を取得して中身を全てdpkg -i でインストールします。

    • 中身
      binutils-sh4-linux_2.15-5_i386.deb
      cpp-3.4-sh4-linux_3.4.3-13_i386.deb
      g++-3.4-sh4-linux_3.4.3-13_i386.deb
      gcc-3.4-sh4-linux_3.4.3-13_i386.deb
      libc6-dev-sh4-cross_2.3.5-6_all.deb
      libc6-sh4-cross_2.3.5-6_all.deb
      libdb1-compat-sh4-cross_2.1.3-7_all.deb
      libgcc1-sh4-cross_3.4.3-13_all.deb
      libncurses5-dev-sh4-cross_5.4-4_all.deb
      libncurses5-sh4-cross_5.4-4_all.deb
      libstdc++6-dev-sh4-cross_3.4.3-13_all.deb
      libstdc++6-sh4-cross_3.4.3-13_all.deb
      linux-kernel-headers-sh4-cross_2.6.13+0rc3-1.1_all.deb
      
    • SH4用のライブラリをクロス環境へ追加したい時は!
      # dpkg-cross -i 追加したライブラリ_sh4.deb
      
      (ちなみに、本方法でインストールしたSH4用のパッケージ(主にライブラリ)類は全て
      /usr/sh4-linux下に配置され、クロスビルド用に使用されます。)

      以上でクロスビルド環境の構築は終了です。
      この状態で、/usr/sh4-linuxの下にクロスビルド環境一式がインストールされています。

  • クロスビルド環境のテスト
    • hello.c
      #include<stdio.h>
      #include<stdlib.h>
      
      int main()
      {
         printf("Hello sh4-cross-build world !\n");
      }
      
      を作成後、ビルド。
      fileコマンドで生成オブジェクトのアーキテクチャを確認します。
      colinux:~# sh4-linux-gcc hello.c -o hello
      colinux:~# file hello
      hello: ELF 32-bit LSB executable, Hitachi SH, version 1 (SYSV),
      for GNU/Linux 2.3.99, dynamically linked (uses shared libs), not stripped
      
    • debianパッケージのクロスビルド
      クロスビルドに対応したパッケージ(数はすくないですが)をビルドすることが可能です。
      (dpkg-buildpackage コマンドに-ash4オプションを追加する。)
      • binutils
        colinux:~# apt-get source binutils
        colinux:~# cd binutils-2.15
        
        ビルドに依存するパッケージをチェック
        colinux:~/binutils-2.15# dpkg-checkbuilddeps
        
        全ての依存関係が解消されるまで、apt-get install で該当パッケージをインストール。そして、
        colinux:~/binutils-2.15# dpkg-buildpackage -ash4
        

distcc環境の構築 Edit

  • colinux側の設定
    • distccをapt-getします。
      colinux:~# apt-get install distcc
      
    • /etc/default/distccの編集
      STARTDISTCC="true"
      ALLOWEDNETS="192.168.0.0/24 192.168.1.0/24 127.0.0.1"  ← 接続許可するクライアントのIP
      PATH=/usr/sh4-linux/distcc/bin:$PATH                   ← クロスコンパイラのパス設定
      
    • パス上にクロスコンパイラを用意
      パスのトップに/usr/sh4-linux/distcc/binを追加したので、その場所に優先して呼び出したいコンパイラを用意します。
      colinux:~# mkdir -p /usr/sh4-linux/distcc/bin
      colinux:~# cd  /usr/sh4-linux/distcc/bin
      colinux:/usr/sh4-linux/distcc/bin# 
      colinux:/usr/sh4-linux/distcc/bin# ln -s /usr/bin/sh4-linux-gcc gcc
      colinux:/usr/sh4-linux/distcc/bin# ln -s /usr/bin/sh4-linux-gcc cc
      colinux:/usr/sh4-linux/distcc/bin# ln -s /usr/bin/sh4-linux-gcc sh4-linux-gcc
      colinux:/usr/sh4-linux/distcc/bin# ln -s /usr/bin/sh4-linux-g++ g++
      colinux:/usr/sh4-linux/distcc/bin# ln -s /usr/bin/sh4-linux-g++ c++
      colinux:/usr/sh4-linux/distcc/bin# ln -s /usr/bin/sh4-linux-g++ sh4-linux-g++
      colinux:/usr/sh4-linux/distcc/bin# ls
      c++  cc  g++  gcc  sh4-linux-g++ sh4-linux-gcc
      
    • distccサーバdistccdの起動
      colinux:~# /etc/init.d/distcc start
      Starting Distributed Compiler Daemon: distccd.
      
  • LANDISK側の設定
    • distccのインストール
      (クライアント側なのでサーバは起動させないこと!)
      landisk:~# apt-get install distcc
      
    • 〜/.distcc/hosts
      ホームディレクトリに〜/.distcc/hostsを用意し、そこに、distccサーバのIPアドレスを記述します。
      colinuxの例では、ポートフォワードを行うWindows XPのIPアドレスを記述します。
      192.168.1.2    ← distccサーバのIPアドレス
      
    • コンパイラの指定
      /usr/lib/distcc/bin ディレクトリを作成し、distccコマンドへのリンクを
      呼び出すコンパイラ名で作成します。
      landisk:~# mkdir -p /usr/lib/distcc/bin
      landisk:~# cd /usr/lib/distcc/bin
      landisk:/usr/lib/distcc/bin# ln -s /usr/bin/distcc gcc
      landisk:/usr/lib/distcc/bin# ln -s /usr/bin/distcc cc
      landisk:/usr/lib/distcc/bin# ln -s /usr/bin/distcc g++
      landisk:/usr/lib/distcc/bin# ln -s /usr/bin/distcc c++
      landisk:/usr/lib/distcc/bin# ln -s /usr/bin/distcc sh4-linux-gcc
      landisk:/usr/lib/distcc/bin# ln -s /usr/bin/distcc sh4-linux-g++
      landisk:/usr/lib/distcc/bin# ls
      c++  cc  g++  gcc  sh4-linux-g++  sh4-linux-gcc
      
      これらコマンドが呼び出されると、distccサーバ側の同名コマンドがパス設定に従い呼び出されます。

    • パス設定
      LANDISK側で、先ほどリンクしたコンパイラが優先して呼ばれるように、パス設定を行います。
      export PATH=/usr/lib/distcc/bin:$PATH
      
    以上で準備完了です。

  • distccの動作概要
    LANDISK側でセルフコンパイルするのと全く同じコマンドでクロスビルドを行うことができます。
    ビルドを実行すると、
    (1)LANDIK側のパス設定に従い/usr/lib/distcc/bin下のコンパイラが呼ばれます。
    (2)本コンパイラの実態はdistccです。
    (3)distccはcolinuxサーバに接続し、同名のコマンド(コンパイラ)を実行します。
    (4)distccサーバはビルド結果をdistccクライアントに返信します。
    このようなシーケンスでクロスビルドが行われます。

  • 補足
    gccは、通常、cpp,cc1,as,ldの4つのフェーズでコンパイルを行いますが、
    distccサーバが処理するのは、cc1とasのフェーズだけです。
    cppとldは、distccクライアント(LANDISK)側で実行されます。
    従って、colinux側のincludeファイルやlibは、distccのビルド結果に影響しません。
    (つまり、colonux側にincludeやlibがなくてもクロスビルドできるということ!)

  • 運用にあたって
    colinux上のクロス環境のほうがLANDISKに比べ、約一桁程度高速にビルドできるよう感じました。
    従って、パッケージ作成にあたり、xtermを4つ開いて、4個のパッケージを同時にビルドしていました。


Counter: 4206, today: 1, yesterday: 1

添付ファイル: filedistcc.jpg 195件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-07-18 (火) 13:45:13 (6655d)