4 研究ソフトウDebian にしてみる

藤澤

PIC
____________________________________________________________________

4.1 とするソフトウ

にしてみるソフトウ研究発されているグリMPI ライブラリである MC-MPI, および MC-MPI 動作させるのに必要となる, 同じく研究発されている分散GXP 2 つです.

4.2 にするにして

ソフトウにするには, そのソフトウ徴をよくする必要があります. 以下にそれぞれのソフ トウ徴のうち, のありそうなべます.

4.2.1 MC-MPI

MC-MPI C 言語されたコンパイラライブラリによされています. また, Fortran まれており, Fortran インタていますが, これはオブシによりオフにするもでき ます.

Autotools 使しており, ./configure && make && make installというれたコマンドによビルド, インス するができます.

4.2.2 GXP

GXP Python されたコマンド, そのコマンド必要とする Python モジによされてい ます.

インストする, というされておらず, ダウンロして展開しててきたレクトリをどこかに, そこに パスして使うようにられています.

4.3 使する

Debian する方法にはいくつかあるらしいのですが, debhelper 使してみます.

4.4 とりあえず動かしてみる

とりあえずは分の動くかめるため, とはなく使てみます.

MC-MPI GXP 必要とするので, まず GXP からしてみまし.

4.4.1 GXP 使てみる

以下サイトから筆時であるgxp-3.05.tar.bz2ダウンロ, 展開します.

http://www.logos.t.u-tokyo.ac.jp/gxp/

$ mkdir gxp
$ cd gxp
$ #  なんとかして gxp-3.05.tar.bz2  てくる
$ tar jxvf gxp-3.05.tar.bz2
$ cd gxp-3.05

さて, GXP インストなので, このままでも動きます. GXP gxpcコマンド ます.

$ ./gxpc
gxpc: no daemon found, create one
/tmp/gxp-***-default/gxpsession-***-***-2009-03-20-06-46-07-15360-92311801

なく動いているようです.

4.4.2 MC-MPI 使てみる

以下サイトから筆時であるmcmpi-0.21.0.tar.gzダウンロ, 展開します.

http://www.logos.ic.i.u-tokyo.ac.jp/~h_saito/mcmpi/

$ mkdir mcmpi
$ cd mcmpi
$ #  なんとかして mcmpi-0.21.0.tar.gz  てくる
$ tar zxvf mcmpi-0.21.0.tar.gz
$ cd mcmpi-0.21.0

のとおり, Autotools 使しているので以下れたコマンドちます.

$ ./configure
$ make
$ sudo make install

サンプルプログラム属しているので, これをmpicxxコンパイルしてみます.

$ cd app
$ mpicxx -o hello ./hello.cpp
printf: 28: %q: invalid directive
printf: 28: %q: invalid directive
printf: 28: %q: invalid directive
[ g++ -I/usr/local/include    /usr/local/lib/libmpigxp.a -lresolv -lpthread -lnsl -lm  ]
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o: In function ‘_start’:
(.text+0x18): undefined reference to ‘main’
collect2: ld  ステタス 1  了しました

おや, 動かないようです. 調べてみたところどうやら%q使えないもあるようです. これは文字必要ならば るというなので (おそらく), サク\"%s\"えてしまいます. util以下mpicc.in, mpicxx.in, mpif77.in, ビルド直します.

$ cd ..
$ make distclean
$ ./configure
$ make
$ sudo make install

さてめてコンパイルします.

$ cd app
$ mpicxx -o hello ./hello.cpp
[ g++ -I/usr/local/include "-o" "hello" "./hello.cpp" /usr/local/lib/libmpigxp.a -lresolv -lpthread -lnsl -lm  ]

くいたようです. ではしてみまし. まず GXP localhostのみのクラスタ, カレントデ クトリ動します. そこでmpirunによします.

$ gxpc
$ gxpc use ssh localhost
$ gxpc explore localhost
$ gxpc cd ‘pwd‘
$ mpirun -np 1 ./hello
/usr/local/bin/mpirun: 157: Bad substitution

おや, またしてもです. ても

done

, よく分からないじですが, よく調べてみると

        if [ "$CONF_OPT" == "" -o "${CONF_OPT:0:1}" == "#" ] ; then

ちています.

${CONF_OPT:0:1}というBash では動きますが POSIX Shell では動かないようなので, とりあえず Bash 動か すようにしてしまいます.

$ cd ..
$ make distclean
$ ./configure
$ make
$ sudo make install

ではめてしまし.

$ cd app
$ mpirun -np 1 ./hello
INFO: _exchange_end_points: 42498
INFO: _measure_latencies: 23884
INFO: _create_bounding_graph: 26520
INFO: _create_routing_table: 57663
INFO: _create_spanning_tree: 20144
INFO: Env_Init: 172304
Hello 0/1

こそ動きました.

4.5 MC-MPI

まずは MC-MPI します.

4.5.1

とりあえずさきとはレクトリをしたほうがさそうです.

$ mkdir deb_mcmpi
$ cd deb_mcmpi
$ #  なんとかして mcmpi-0.21.0.tar.gz  てくる
$ tar zxvf mcmpi-0.21.0.tar.gz
$ cd mcmpi-0.21.0

ここでさきのバグえておきます.

4.5.2 さらに

MC-MPI では/usr/etc/VERSIONするになているのですが, これはビミなので /usr/share/mcmpi/VERSIONあたりにしておきます. するイル以下のとおりです.

4.5.3 イル

するにはソフトウはもちろんの, インスト方法存関, その したイル必要になります.

dh_makeコマンド使するとこれらをするためのイルしてくれます. この, DEBFULLNAME, DEBEMAILによりできます. この名前, ルアドレスGPG しないとした サインできないのでります.

$ export DEBFULLNAME="Tooru Fujisawa"
$ export DEBEMAIL="arai_a@mac.com"
$ dh_make -e arai_a@mac.com -f ../mcmpi-0.21.0.tar.gz
Type of package: single binary, multiple binary, library, kernel module or cdbs?
 [s/m/l/k/b]
> s

Maintainer name : Tooru Fujisawa
Email-Address   : arai_a@mac.com
Date            : Fri, 20 Mar 2009 06:55:00 +0900
Package Name    : mcmpi
Version         : 0.21.0
License         : blank
Using dpatch    : no
Type of Package : Multi-Binary
Hit <enter> to confirm:
> [ENTER]

途中Type of package聞かれます. MC-MPI ライブラリみますが, メインコンパイラなのでとりあえず single binaryんでおけばよさそうです.

4.5.4 イル

さて, さきほどのdh_makeによ, debianというレクトリされ, このにいろいろなイルんでい ます.

このなのはのものです.

していきまし.

changelog

これはです. ソフトウとはモノです. とりあえず沿以下のようにして おきます.

mcmpi (0.21.0-1) unstable; urgency=low

  * Initial release

 -- Tooru Fujisawa <arai_a@mac.com>  Fri, 20 Mar 2009 06:55:00 +0900

copyright

これはソフトウするイルです. 沿ダウンロ, , ライセンス ます.

This package was debianized by Tooru Fujisawa <arai_a@mac.com> on
Fri, 20 Mar 2009 06:55:00 +0900.

It was downloaded from http://www.logos.ic.i.u-tokyo.ac.jp/~h_saito/mcmpi/

Upstream Author(s):
    Hideo Saito <h_saito@logos.ic.i.u-tokyo.ac.jp>

Copyright:
    (c) 2007 Hideo Saito. All Rights Reserved.

License:
    GPL Version 2

The Debian packaging is (C) 2009, Tooru Fujisawa <arai_a@mac.com> and
is licensed under the GPL, see ‘/usr/share/common-licenses/GPL’.

dirs

これは動的にしてほしいレクトリするイルです. デフルトではusr/bin usr/sbinていますが, usr/sbinらないのでしてしまいます. また, VERSIONusr/share/mcmpiコピ するようにしたのでこれをします.

usr/bin
usr/share/mcmpi

control

これは存関するイルです.

りにむと, まずHomepageダウンロ, Dependsするgxpしておきます. また, バグ Bash 使するにしたのでbashします. 最後短いものと長いものといておき ます.

Source: mcmpi
Subsection: unknown
Priority: extra
Maintainer: Tooru Fujisawa <arai_a@mac.com>
Build-Depends: debhelper (>= 7), autotools-dev
Standards-Version: 3.7.3
Homepage: http://www.logos.ic.i.u-tokyo.ac.jp/~h_saito/mcmpi/

Package: mcmpi
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends} bash gxp
Description: Grid-enabled implementation of MPI
  MC-MPI is a Grid-enabled implementation of MPI, developed by Hideo
  Saito at the University of Tokyo.  Its main features include the
  following:
  - [Firewall and NAT traversal]: MC-MPI constructs an overlay
    network, allowing nodes behind firewalls and nodes without global
    IP addresses to participate in computations.  There is no need to
    perform maual configuration; MC-MPI automatically probes
    connectivity, selects which connections to establish, and performs
    routing.
  - [Locality-aware connection management]: Establishing too many
    connections, especially wide-area connections, results in many
    problems, including but not limited to the follwing: exhaustion of
    system resources (e.g., file descriptors, memory), high message
    reception overhead, and congestion between clusters during
    all-to-all communication.  Therefore, MC-MPI limits the number of
    connections that are established.  If we assume, for simplicity,
    that n processes are distributed equally among c clusters, then at
    most O(log n) connections are established by each process and at
    most O(n log c) connections are established between clusters.  As
    MC-MPI uses a lazy connect strategy, fewer connections are
    established for applications in which few process pairs
    communicate.  The maximum number of connections allowed can be
    controlled by passing the -beta option to mpirun (see Subsection 3).
  - [Locality-aware rank assignment]: Temporarily disabled in this
    version.

rule

これはビルド方法するMakefileです. MC-MPI には Autotools 使ているのでえる 無いハズです. (はありますがそれは...)

4.5.5 スパ

たらdebuildコマンドします. スパバイナリパ両方てみ ます.

まずはスパです.

$ debuild -S

小人さんが張ってくれた, サインをするためのパスフレ聞いてくるので 2 くらいします.

するとスパです. レクトリています.

4.5.6 バイナリパ

さて, 続いてバイナリパです.

$ debuild

configure, makeなんかがている流れていきます.

fortran/.libs/libfortran.a(farg.o): In function ‘mpigxp_getarg’:
*/deb_mcmpi/mcmpi-0.21.0/src/fortran/farg.f:9: undefined reference to ‘_gfortran_getarg_i4’
fortran/.libs/libfortran.a(farg.o): In function ‘mpigxp_iargc’:
*/deb_mcmpi/mcmpi-0.21.0/src/fortran/farg.f:2: undefined  reference to ‘_gfortran_iargc’
fortran/.libs/libfortran.a(initf.o): In function ‘mpi_init__’:
*/deb_mcmpi/mcmpi-0.21.0/src/fortran/initf.c:16: undefined reference to ‘mpigxp_iargc__’
*/deb_mcmpi/mcmpi-0.21.0/src/fortran/initf.c:20: undefined reference to ‘mpigxp_getarg__’
collect2: ld returned 1 exit status

超怒られました. しかもらない Fortran です. 調べてみたところ, このによてはられ るものだそうで, gFortran らないようです. する方法分からないので, ここはいさぎよく Fortran インタ 無効にして直しまし.

debian/ruleイル, ./configureしてる--disable-f77します

        ./configure $(CROSS) --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info \
        CFLAGS="$(CFLAGS)" LDFLAGS="-Wl,-z,defs" --disable-f77

めてビルドします.

$ debuild
...
/usr/bin/install -c -d /usr/etc
/usr/bin/install: ‘/usr/etc’  属性できません: No such file or directory

またまたられました. debuild debian/mcmpi/以下ソフトウインストしてにするハズなのに, インストしようとしています. これはruleイルからレクトリDESTDIRとしてしているのに, Makefile していないためです.

etc/Makefile.in, util/Makefile.in, prefixDESTDIRします.

prefix = $(DESTDIR)@prefix@
$ debuild

しました.

レクトリmcmpi_0.21.0-1_i386.debています.

4.5.7 インストルテスト

存関しいかどうか, インストしてみまし.

$ cd ..
$ sudo dpkg -i mcmpi_0.21.0-1_i386.deb
未選択 mcmpi  選択しています
(タベんでいます ...  現在 219582  イルレクトリインストされています)
(mcmpi_0.21.0-1_i386.deb  から) mcmpi  展開しています...
dpkg:  存関により mcmpi  ができません:
 mcmpi  以下 (depends)  します: gxp ... しかし:
    gxp  はまだインストされていません
dpkg: mcmpi  エラ発生しました (--install):
  存関 -  ります
以 下 エ ラ 発 生しました :
 mcmpi

gxp無いとわれました. 予定通できているようです. とりあえずしておきます.

$ sudo apt-get remove --purge mcmpi

4.6 GXP

さて, 無いとわれた GXP ります.

4.6.1

こちらもさきとはレクトリをします. ただし, したでは 3.03 たの , ンアテストねて 3.03 をまずります.

$ mkdir deb_gxp
$ cd deb_gxp
$ #  なんとかして gxp-3.03.tar.bz2  てくる
$ tar jxvf gxp-3.03.tar.bz2
$ cd gxp-3.03
4.6.2 イル

ほぼ同様です.

$ export DEBFULLNAME="Tooru Fujisawa"
$ export DEBEMAIL="arai_a@mac.com"
$ dh_make -e arai_a@mac.com -f ../gxp-3.03.tar.bz2
Type of package: single binary, multiple binary, library, kernel module or cdbs?
 [s/m/l/k/b]
> s

Maintainer name : Tooru Fujisawa
Email-Address   : arai_a@mac.com
Date            : Fri, 20 Mar 2009 07:15:35 +0900
Package Name    : gxp
Version         : 3.03
License         : blank
Using dpatch    : no
Type of Package : Single
Hit <enter> to confirm:
> [ENTER]

GXP からればコマンド 1 つなので, これもsingle binaryでよさそうです.

4.6.3 イル

さ て , これらをするえなければならないがあります. GXP インストされていないため, したにどこにいてどのように使うかをめなければいけません.

/usr/share/gxp以下イルコピ, /usr/bin/gxpc/usr/share/gxp/gxpcリンクするにし ます.

changelog

はしません.

gxp (3.03-1) unstable; urgency=low

  * Initial release

 -- Tooru Fujisawa <arai_a@mac.com>  Fri, 20 Mar 2009 07:15:35 +0900

copyright

こちらもはしません.

This package was debianized by Tooru Fujisawa <arai_a@mac.com> on
Fri, 20 Mar 2009 07:15:35 +0900.

It was downloaded from http://www.logos.t.u-tokyo.ac.jp/gxp/

Upstream Author(s):
    Dun Nan
    Kenjiro Taura
    Yoshikazu Kamoshida

Copyright:
    (c) 2008 by Kenjiro Taura. All rights reserved.
    (c) 2007 by Kenjiro Taura. All rights reserved.
    (c) 2006 by Kenjiro Taura. All rights reserved.
    (c) 2005 by Kenjiro Taura. All rights reserved.

License:
    GPL Version 2

The Debian packaging is (C) 2009, Tooru Fujisawa <arai_a@mac.com> and
is licensed under the GPL, see ‘/usr/share/common-licenses/GPL’.

dirs

さて, GXP インストていないので, インスト直接ruleになります. できるだけ らしたいので, 必要レクトリはこちらにいてしまいまし.

usr/bin
usr/share
usr/share/gxp

control

GXP Python モジているので, これらをインストバイトココンパイルしてあげる を し て あ げ な け れ ば い け ま せ ん . このにしてくれるのがdh_pycentralです. このために, 2 XS-Python-Version: allします.

また, GXP キテクチ存しないので, Architectureallにします. ただし, Python 必要 なるのでDependspython, またのためにdh_pycentral必要になるので, Depends, Build-Depends python-centralします.

Source: gxp
Subsection: unknown
Priority: extra
Maintainer: Tooru Fujisawa <arai_a@mac.com>
Build-Depends: debhelper (>= 7)
Standards-Version: 3.7.3
XS-Python-Version: all
Homepage: http://www.logos.t.u-tokyo.ac.jp/gxp/

Package: gxp
Architecture: all
Depends: ${shlibs:Depends}, ${misc:Depends}, python
XS-Python-Version: all
Description: parallel/distributed shell
 GXP is a parallel/distributed shell, plus a parallel task execution engine
 that runs your Makefile in parallel on distributed machines.
 Very easy to install
 (no need to compile. install it on YOUR machine and use it on ALL machines).

rule

まず, Makefile無いので$(MAKE)コメントアウトします.

そして, $(MAKE) DESTDIR=$(CURDIR)/debian/gxp installのようなインストコマンド します. 展開しててきたもの, としたいのですが, debianレクトリがあるのでイル ます.

        cp -r ChangeLog License README doc ex expectd.py gxpbin gxpc gxpc.py gxpd.py gxpm.py ifconfig.py inst_local.py \
        inst_remote.py inst_remote_stub.py ioman.py misc mkrelease opt.py $(CURDIR)/debian/gxp/usr/share/gxp
        ln -s $(CURDIR)/debian/gxp/usr/share/gxp/gxpc $(CURDIR)/debian/gxp/usr/bin/gxpc

また, dh_pycentral動かすために, dh_pythonあたりにdh_pycentralいておきます.

#       dh_python
        dh_pycentral
4.6.4 スパ

まずはスパります.

$ debuild -S

もなく了します.

4.6.5 バイナリパ

さ て , 続いてバイナリパです.

$ debuild
...
E: gxp: missing-dep-for-interpreter expect => expect (./usr/share/gxp/gxpbin/ssh_passwd)
E: gxp: missing-dep-for-interpreter expect => expect (./usr/share/gxp/gxpbin/su_cmd)
...

途中エラています. これはssh_passwd, su_cmd/usr/bin/expect使しているのに, Dependsてい ないというなので, debian/controlします.

Depends: ${shlibs:Depends}, ${misc:Depends}, python, python-central, expect

ではビルド直します.

$ debuild

もなく了し, レクトリgxp_3.03-1_all.debができています.

4.6.6 ンア

さて, をしているGXP しい3.05 リリされたのでこれを反映 ます.

debhelper にはしい, 動化するためのがあります. debian/watchイル以下のよ うにします. (というか, SourceForge モノにあるので張子だけえます)

version=3
http://sf.net/gxp/gxp-(.*)\.tar\.bz2

2 URL パタです. ここから動的に探してとしてくれ ます.

$ uscan -verbose
-- Scanning for watchfiles in .
-- Found watchfile in ./debian
-- In debian/watch, processing watchfile line:
   http://sf.net/gxp/gxp-(.*)\.tar\.bz2
-- Found the following matching hrefs:
     /sites/download.sourceforge.net/pub/sourceforge/g/gx/gxp/gxp-3.02.tar.bz2
     /sites/download.sourceforge.net/pub/sourceforge/g/gx/gxp/gxp-3.02.tar.bz2
     /sites/download.sourceforge.net/pub/sourceforge/g/gx/gxp/gxp-3.03.tar.bz2
     /sites/download.sourceforge.net/pub/sourceforge/g/gx/gxp/gxp-3.03.tar.bz2
     /sites/download.sourceforge.net/pub/sourceforge/g/gx/gxp/gxp-3.05.tar.bz2
     /sites/download.sourceforge.net/pub/sourceforge/g/gx/gxp/gxp-3.05.tar.bz2
Newest version on remote site is 3.05, local version is 3.03
 => Newer version available from
    http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/g/gx/gxp/gxp-3.05.tar.bz2
-- Downloading updated package gxp-3.05.tar.bz2
-- Successfully downloaded updated package gxp-3.05.tar.bz2
    and symlinked gxp_3.05.orig.tar.bz2 to it
-- Scan finished

, いうじで 3.05 ダウンロされました. これを展開, 単に現在同じようなにするができ ます.

$ uupdate ../gxp-3.05.tar.bz2
New Release will be 3.05-0ubuntu1.
-- Untarring the new sourcecode archive ../gxp-3.05.tar.bz2
Success!  The diffs from version 3.03-1 worked fine.
Remember: Your current directory is the OLD sourcearchive!
Do a "cd ../gxp-3.05" to see the new package
$ cd ../gxp-3.05/

はて, がおかしなになています. これはdebian/changelogにのみするので, これをえておき ます.

gxp (3.05-1) unstable; urgency=low

  * New upstream release

 -- Tooru Fujisawa <arai_a@mac.com>  Fri, 20 Mar 2009 07:32:35 +0900

gxp (3.03-1) unstable; urgency=low

  * Initial release

 -- Tooru Fujisawa <arai_a@mac.com>  Fri, 20 Mar 2009 07:15:35 +0900

あとはビルド直せば了です.

$ debuild -S
$ debuild
...
E: gxp: ruby-script-but-no-ruby-dep ./usr/share/gxp/gxpbin/tmsub.rb
...

さて, Ruby 必要になたようなので, これをdebian/controlします.

Depends: ${shlibs:Depends}, ${misc:Depends}, python, python-central, expect, ruby1.8

ではビルド直します.

$ debuild
4.6.7 インストルテスト

GXP 存関無いのでインストできるハズです.

$ cd ..
$ sudo dpkg -i gxp_3.05-1_all.deb
...
 gxp  以下 (depends)  します: expect ... しかし:
    expect  はまだインストされていません
...

たらexpectてませんでした.

$ apt-get remove --purge gxp
$ sudo apt-get install expect
$ sudo dpkg -i gxp_3.05-1_all.deb
未選択 gxp  選択しています
(タベんでいます ...  現在 219600  イルレクトリインストされています)
(gxp_3.05-1_all.deb  から) gxp  展開しています...
gxp (3.05-1)  しています ...

続いて MC-MPI インストします.

$ cd ../deb_mcmpi
$ sudo dpkg -i mcmpi_0.21.0-1_i386.deb
未選択 mcmpi  選択しています
(タベんでいます ...  現在 219699  イルレクトリインストされています)
(mcmpi_0.21.0-1_i386.deb  から) mcmpi  展開しています...
mcmpi (0.21.0-1)  しています ...

しくインストできました.

50 エリア Debian 2009 3
____________________________________________________________________________________________