玄箱Pro、直します。

超初心者が、玄箱PROでLinuxを勉強する無謀なブログです。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
別窓 | スポンサー広告
∧top | under∨

ビルド練習で四苦八苦(1)~wget編~

ひとまず何か適当にビルドして慣れていこうと思いまして、玄箱Proをまたもや工場出荷状態まで戻しました。

HDDを完全消去して再度背面ボタンでフォーマット。
共有フォルダにCD-ROM内のhddrootfs.tar.gzをコピーして

~ # mkdir /mnt/disk1/devel
~ # cd /mnt/disk1
/mnt/disk1 # tar xvzf hddrootfs.tar.gz -C /mnt/disk1/devel


これで開発環境が/mnt/disk1/devel以下に構築されました。

余談ですが、ある作業中にchrootし忘れて./configureをしたら

configure: error: no acceptable C compiler found in $PATH


とエラーが出ました。導入したはずのコンパイラがない・・。
なんかやっとchrootの意味がわかったかも(笑)。

さて、余談で知ったふうに「./configure」などという言葉を使いましたが、これこそ私にとっての難関でした。
いや、現在進行形ですから「難関です」。

ためしにwgetというものをソースからビルドしてみようかと思います。
ソースをGNUから取ってきまして共有フォルダ(/mnt/disk1)にWindowsからコピーします。
そして

~ # cd /mnt/disk1
/mnt/disk1 # tar xvzf wget-1.10.2.tar.gz -C /mnt/disk1/devel/


するとズラズラ~と展開していきました。
再度プロンプトが出たら

/mnt/disk1 # cd
~ # chroot /mnt/disk1/devel


で開発環境に切り替えます。

BusyBox v1.1.1 (2006.11.29-02:37+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

/ # cd ./wget-1.10.2


としたところから、いよいよビルド開始です。

まずは

/wget-1.10.2 # ./configure


と入力。
お、なんかメッセージがズラズラ~と・・ありゃすぐ止まりました。

configure: configuring for GNU Wget 1.10.2
checking build system type... armv5tejl-unknown-linux-gnu
checking host system type... armv5tejl-unknown-linux-gnu
checking whether make sets $(MAKE)... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking how to run the C preprocessor... gcc -E
configure: error: C preprocessor "gcc -E" fails sanity check
See `config.log' for more details.


gcc -Eって何だ。
Manpage of GCCによると

-E

プリプロセス処理が終了したところで停止します。コンパイルはしません。出力はプリプロセス済みのソースコードであり、標準出力へと送られます。
GCC はプリプロセスを必要としない入力ファイルを全て無視します。



とのこと。なんのこっちゃ意味がわかりません。
まぁ実験なんであまり気張らずに、思いつくままにまずは入力してみます。
そういえば前回「--prefix」というものを使いましたので、「導入先」ということしかわからないまま今回もつけてみました。
前回、「標準ファームにlighttpd(1)」で記事中にあった「/opt」を今回も使ってみようかと思います。

/wget-1.10.2 # ./configure --prefix=/opt
configure: configuring for GNU Wget 1.10.2
checking build system type... armv5tejl-unknown-linux-gnu
checking host system type... armv5tejl-unknown-linux-gnu
checking whether make sets $(MAKE)... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking how to run the C preprocessor... /lib/cpp
configure: error: C preprocessor "/lib/cpp" fails sanity check
See `config.log' for more details.


んん・・・今度はさっきと違うぞ・・。
てか「--prefix」ってあるのと無いのじゃ結果が違ってくるんだ。単なる「保存先」とはわけが違うのかな・・。
で、今度は「/lib/cpp」と。
Wikipediaで調べると

プログラム言語C言語の標準プリプロセッサであるC Preprocessorの略。


って何じゃそりゃ。これがどうしたっていうんだ!!
ひとまず開発環境を

/wget-1.10.2 # exit


で抜けて探してみました。

/ # find -name cpp
./mnt/disk1/devel/usr/bin/cpp
./mnt/disk1/devel/usr/lib/cpp
./mnt/disk1/devel/usr/src/perl-5.8.8/qnx/cpp


一番最後のはperlのっぽいので1番か2番だろうなぁ。
まず怪し目の2番。

/ # cd /mnt/disk1/devel/usr/lib
/mnt/disk1/devel/usr/lib # ls -l | grep cpp
lrwxrwxrwx 1 root root 10 Jul 30 17:05 cpp -> ../bin/cpp


やっぱりリンクかぁ。てことはオオモトは1番ですね。
そこで

/mnt/disk1/devel/usr/bin # ln -s cpp /mnt/disk1/devel/lib


で対処。再度chrootに切り替えてチャレンジ。

/ # chroot /mnt/disk1/devel
/ # cd ./wget-1.10.2
/wget-1.10.2 # ./configure --prefix=/opt


すると、またもや同じ「/lib/cpp」エラー。う~ん、リンクじゃダメなのかなぁ。
それなら

/wget-1.10.2 # exit
/ # rm /mnt/disk1/devel/lib/cpp
/ # cp /mnt/disk1/devel/usr/bin/cpp /mnt/disk1/devel/lib


とコピー。そして再々チャレンジ。

/ # chroot /mnt/disk1/devel
/ # cd ./wget-1.10.2
/wget-1.10.2 # ./configure --prefix=/opt


おお!!!なんか良かったっぽい(笑)。
ズラズラ出てます。そして

creating po/Makefile
/wget-1.10.2 #


と止まりました。無事にMakefileは作れたらしいです。
今のところネックは

・./configureにつける「--prefix=」
・mnt/disk1/devel/lib/cppは「/mnt/disk1/devel/usr/bin/cpp」のコピー

です。

(2007.8.3追記)
もう一度、はじめから実験してみましたが、どうやら「--prefix=/opt」は関係ないみたいです。最初から/libにcppを用意しておいてやるとすんなり./configureだけでmakefile作ってくれました。


さて、今の状態で/optには何が入ってるんでしょうか。
ということで

/ # ls
bin      sys      wget-1.10.2
boot     home     root     tmp
dev      lib     sbin     usr
etc      mnt     share     var



・・ない。/optなんてない
んんんんん・・。あ、なるほど。
prefixって「保存先フォルダ」って感じの実効性のものじゃなくて、Makefileに組み込むための設定なんですね・・?
つまり今現在このディレクトリがなくても問題はないんだ・・。むむ・・。
さて、いよいよmakeです。人生初の自力makeです(笑)。

/wget-1.10.2 # make


ズラズラ~と気持ちのいい感じ。
するとログが

make[1]: Entering directory `/wget-1.10.2/po'
file=./`echo bg | sed 's,.*/,,'`.gmo \
&& rm -f $file && PATH=../src:$PATH msgfmt -o $file bg.po
/bin/sh: msgfmt: not found
make[1]: *** [bg.gmo] Error 127
make[1]: Leaving directory `/wget-1.10.2/po'
make: *** [po] Error 2
/wget-1.10.2 #


と止まりました。
「/bin/sh: msgfmt: not found」。
msgfmt・・メッセージフォーマットかな?
これ何?調べると「gettextというパッケージに入っているらしい」とのこと。
うへぇ・・もうわけわかりませんよ・・。

何とかそのgettextのソースを落として展開。

/mnt/disk1 # tar xvzf gettext-0.16.1.tar.gz -C /mnt/disk1/devel


そして

/mnt/disk1 # cd
~ # chroot /mnt/disk1/devel
/ # cd ./gettext-0.16.1
/gettext-0.16.1 # ./configure


すると

configure: error: C preprocessor "/lib/cpp" fails sanity check
See `config.log' for more details.
configure: error: ./configure failed for autoconf-lib-link
/gettext-0.16.1 #



またcpp・・。もうダメポ・・。

(2007.8.2追記)
Pyon's Diaryさんの「KURO-BOX/PRO (其乃廿參) Debian (etch) を入れる。」によると、wgetのエラーについて

コンパイルがエラーで終了するが、「玄箱 PRO の Debian Etch 化の手順」に據れば此は gettext の msgfmt が無い爲に起こるが、実用上は無視して構は無いとの事。


と解説されていました。実際にmake installしてみると、エラーは出たものの確かに/mnt/disk1/devel/opt/binにwgetがありました。嬉しいやらしっくりこないやら(笑)。
しかも/lib/cppの問題をとっくに解決されていたみたいだし・・もっと早くここ読んでおけば良かった・・。

スポンサーサイト
別窓 | 標準ファームで遊ぶ | コメント:1 | トラックバック:0
∧top | under∨
<<外部への接続設定 | 玄箱Pro、直します。 | 標準ファームにlighttpd(1)>>

この記事のコメント

このコメントは管理者の承認待ちです
2011-03-14 Mon 09:02 | | #[ 内容変更]
∧top | under∨

コメントの投稿

 

管理者だけに閲覧
 

この記事のトラックバック

トラックバックURL

FC2ブログユーザー専用トラックバックURLはこちら
∧top | under∨
| 玄箱Pro、直します。 |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。