基本的なチェックも兼ねてLS-GL本体によるネイティブコンパイラでのビルドを行ってみました(先日Ver1.11に上げたのでやり直しました)。
シリアル接続によるログインでは使い勝手が悪いので、sshによる接続が可能なように設定します。sshdそのものは標準で入っているのでシリアル接続にてログインし一通りの設定を行いました。Windowsマシンからputtyによる接続を前提に適当なユーザを作成し、ssh用のkeyを生成し、先のアカウントの~ディレクトリに.ssh/authorized_keysを配置します。.sshはchmod 700、authorized_keysはchmod 600にしておきます。sshdが起動時に実行されるように/etc/rcSにsshd &を適当に追加し、/etc/sshd_configを編集してrootでのログインを禁止、パスワードによるログインを禁止(パスフレーズのみ許可)にして動作確認します。
前に作成したsuコマンドにてログイン後に一般ユーザからrootに成れるようにしておきます。
/usr/local/srcをビルド用のディレクトリとしました。/usr/local/srcは/mnt/disk1/share/にsrcディレクトリを作成し/usr/localからシンボリックリンクさせておきます。
BerkeleyDBやzlib、openssl、perl等は標準で入っていますが、いずれもヘッダファイルがなかったりライブラリが足りなかったりでビルドで使えない状態ですので使えるように設定しました(怪しさ120%ですが…):
ソースCDのdb-4.2.52.NC_arm.tgzよりbuild_unix配下の*.hを本体の/usr/local/BerkeleyDB.4.2の下にincludeディレクトリを作成してコピー
ソースCDのopenssl-0.9.7e_arm.tgzを/usr/local/srcにて展開し、その中のincludeディレクトリを/usr/local/sslからシンボリックリンク
よく考えたら/usr/local/develop/include/opensslとしてリンク張った方がいいですね…、/usr/local/sslへのリンクも残しておきます。
ソースCDのzlib-1.2.3_arm.tgzよりzconf.hとzlib.hを/usr/local/develop/includeにコピー
ソースCDのperl-5.8.8_arm.tgzより(どこでも構いませんが"/"のパーティションには余裕がないので)/usr/local/develop/libにて展開する(するとperl-5.8.8というディレクトリ以下に展開される)。
/usr/local/develop/lib/perl-5.8.8/libにCOREディレクトリを作成しperl-5.8.8.配下にある*.hとreentr.incを全てCOREディレクトリにコピーする。又、libperl.aも/usr/local/develop/libにコピーする。perl-5.8.8/lib以外は不要なので全て削除する(本当?w)。perl-5.8.8/にsite_perlディレクトリを作成する。
/usr/local/lib/perl5に移動しその配下にある5.8.8、site_perlディレクトリをmvコマンドでリネームし、先に展開した/usr/local/develop/lib/perl-5.8.8/libとsite_perlに、それぞれ5.8.8、site_perlの名前でシンボリックリンクを作成する。
/usr/local/develop/lib/perl-5.8.8/lib/Config.pmを編集して適当(w)に設定する
# tie returns the object, so the value returned to require will be true.
tie %Config, 'Config', {
#archlibexp => '/usr/local/lib/perl5/5.8.8/armv5tejl-linux',
archlibexp => '/usr/local/lib/perl5/5.8.8',
archname => 'armv5tejl-linux',
cc => 'gcc',
d_readlink => 'define',
d_symlink => 'define',
dlsrc => 'dl_dlopen.xs',
dont_use_nlink => undef,
exe_ext => '',
inc_version_list => ' ',
intsize => '4',
ldlibpthname => 'LD_LIBRARY_PATH',
libpth => '/usr/local/develop/lib /usr/local/lib /lib /usr/lib',
osname => 'linux',
osvers => '2.6.16-arm1a',
path_sep => ':',
privlibexp => '/usr/local/lib/perl5/5.8.8',
scriptdir => '/usr/local/bin',
sitearchexp => '/usr/local/lib/perl5/site_perl/5.8.8/armv5tejl-linux',
sitelibexp => '/usr/local/lib/perl5/site_perl/5.8.8',
useithreads => undef,
usevendorprefix => undef,
version => '5.8.8',
};
osversを変更した場合はErrno.pmもosversに合わせて変更する:
"$Config{'archname'}-$Config{'osvers'}" eq
"armv5tejl-linux-2.6.16-arm1a" or
die "Errno architecture (armv5tejl-linux-2.6.16-arm1a) does not match executable architecture ($Config{'archname'}-$Config{'osvers'})";
CPANを起動して初期設定でいろいろと聞かれるが、.cpanのPATHだけ"/"のパーティション以外を設定、それ以外はデフォルトで適当wに:
$ perl -MCPAN -e shell
/usr/local/lib/perl5/5.8.8/CPAN/Config.pm initialized.
CPAN is the world-wide archive of perl resources. It consists of about
100 sites that all replicate the same contents all around the globe.
Many countries have at least one CPAN site already. The resources
found on CPAN are easily accessible with the CPAN.pm module. If you
want to use CPAN.pm, you have to configure it properly.
If you do not want to enter a dialog now, you can answer 'no' to this
question and I'll try to autoconfigure. (Note: you can revisit this
dialog anytime later by typing 'o conf init' at the cpan prompt.)
Are you ready for manual configuration? [yes]
The following questions are intended to help you with the
configuration. The CPAN module needs a directory of its own to cache
important index files and maybe keep a temporary mirror of CPAN files.
This may be a site-wide directory or a personal directory.
First of all, I'd like to create this directory. Where?
CPAN build and cache directory? [/root/.cpan] /usr/local/develop/lib/perl-5.8.8/.cpan
後はCPANを更新するなりモジュールを追加するなりする
cpan> install Bundle::CPAN
cpan> reload cpan
cpan> install CGI ←当方の用途では必要だったので追加
cpan> install Encode ←同上
ほとんど自動的にビルドや更新、インストールが実行されていきますが、先の.cpan/buildに各モジュールのソースが残っているので、失敗した場合などは、当該ソースのディレクトリに移動して、makeやmake test、make install等手動で行えます(ものによってはインストールにgccが必要です)。
これで、取りあえずは完了。
追記 2008/08/27:f/wを1.15に更新した時に不覚にもperlのモジュールを全部削除してしまったので、やり直しの際の記録を加筆修正
configure時に実行されるawkやsedなどbusyboxのものではconfigureに失敗することがあったので、これらの基本コマンドをビルドしてみます(少々乱暴ですがrootで作業しちゃってます、又インストr−ルは全て/usr/local/developに対して行っています):
GNUのサイトよりgawk-3.1.5.tar.gzをダウンし作業ディレクトリで展開してビルドします、その前にexportで/usr/local/develop/binにパスを通しておきます:
export PATH=/usr/local/develop/bin:$PATH
cd gawk-3.1.5
./configure --prefix=/usr/local/develop
make
make install
同様にsed-4.1.tar.gzをダウンし展開してビルドします:
cd sed-4.1
./configure \
--prefix=/usr/local/develop
make
make install
grep-2.5.3.tar.bz2をダウンし、展開、ビルドします:
cd grep-2.5.3
./configure \
--prefix=/usr/local/develop
make
make install
coreutils-6.9.tar.gzをダウンし、展開、ビルドします:
tar xvzf coreutils-6.9.tar.gz
mkdir build_core
cd build_core
../coreutils-6.9/configure --prefix=/usr/local/develop
make
make install
readline-5.2.tar.gzとパッチ(readline52-001〜readline52-007)をGNUのftpからダウンし、展開、ビルドします:
tar xvzf readline-5.2.tar.gz
cd readline-5.2
patch -p0 < ../readline52-001
・
・(中略)
・
patch -p0 < ../readline52-007
./configure --prefix=/usr/local/develop --with-curses
make
make install
gettext-0.16.tar.gzをダウンし、展開、ビルドします:
cd gettext-0.16
./configure --prefix=/usr/local/develop
make
make install
libxml2-2.6.27.tar.gzをダウンし、展開、ビルドします:
cd libxml2-2.6.27.tar.gz
./configure --prefix=/usr/local/develop
make
make install
結論から言うとビルドできませんでした…orz。configure時に警告が出てmakeにも失敗します:
libltdlディレクトリのconfigureにてargz.h、assert.h、 ctype.h、errno.h、 malloc.h、stdio.hにて以下のようなメッセージが出てしまいます:configure: WARNING: argz.h: present but cannot be compiled
configure: WARNING: argz.h: check for missing prerequisite headers?
configure: WARNING: argz.h: see the Autoconf documentation
configure: WARNING: argz.h: section "Present But Cannot Be Compiled"
configure: WARNING: argz.h: proceeding with the preprocessor's result
configure: WARNING: argz.h: in the future, the compiler will take precedence
configure: WARNING: ## ---------------------------------- ##
configure: WARNING: ## Report this to bug-libtool@gnu.org ##
configure: WARNING: ## ---------------------------------- ##一応、configureは完了するのでそのままmakeしてみますが、errorの嵐です。
ホストマシン上でのクロスコンパイルは出来たようですが、本体だとダメです。autoconfし直してみたりはしたのですが、解決方法がわかりません。
新しいdevelop環境でVineのautoconf、automakeのSRPMからビルドしたものと入れ替え、同じくVineのlibtoolをSRPMからビルドしたら先のエラーもなくビルドに成功しました。但し、specには若干手をいれmake前にaclocal、autoconfを実行させています。又、autoconfですがdirnameとbasenameはbusyboxのではmake checkに失敗してしまうのでcoreutilsのを使う必要があります。automakeではgetconfが必要です。
patchやdiff等のコマンドもビルドしましたが、--prefixだけ指定したconfigureでmakeしました。
これで最低限必要そうなものは入ったとは思いますが、足りなければ適宜追加することにします。また間違いやこうすればうまく行くなどのノウハウ等送って頂けると助かります。