玄箱Pro、直します。

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

スポンサーサイト

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

標準ファームにapache(1)

lighttpdの件では苦戦しています・・。
config.logを読み込んでいる状態ですので、玄箱PROそのものは何もすることがなく、気分転換に何かをビルドしてみようか、と。

というわけでapacheです。
いつも通り、標準ファーム・フラッシュブートでHDD内に開発環境を整え、wget、tarを導入しています。
あと、/mnt/disk1/devel/usr/bin/lddの一行目を

sh → bash


に変えています。

いきなり結論から言いますと、Apache2.2.4(Apache HTTP Server 2.2.4)はビルドできませんでしたが、Apache1.3.37なら成功したっぽいです。
まだ設定途中で実際には起動を確認していません。

/mnt/disk1/develにchrootし、/mnt/disk1/devel/srcをmkdir。

/src # wget http://www.ring.gr.jp/archives/net/apache/httpd/apache_1.3.37.tar.gz
/src # tar xzf apache_1.3.37.tar.gz
/src # cd ./apache_1.3.37/
/src/apache_1.3.37 # ./configure


と、特別変わったこともせず(出来ず)すんなりとMakefileが作成されます。
すんなり終わるのかな、と思っていたら

/src/apache_1.3.37 # make
===> src
make[1]: Entering directory `/src/apache_1.3.37'
make[2]: Entering directory `/src/apache_1.3.37/src'
Makefile:8: *** missing separator. Stop.
make[2]: Leaving directory `/src/apache_1.3.37/src'
make[1]: *** [build-std] Error 2
make[1]: Leaving directory `/src/apache_1.3.37'
make: *** [build] Error 2
/src/apache_1.3.37 #


とエラーが出ます。
とりあえずよくわからないという理由で先に進めます(笑)。

/src/apache_1.3.37 # make install
make[1]: Entering directory `/src/apache_1.3.37'
===> src
make[2]: Entering directory `/src/apache_1.3.37'
make[3]: Entering directory `/src/apache_1.3.37/src'
Makefile:8: *** missing separator. Stop.
make[3]: Leaving directory `/src/apache_1.3.37/src'
make[2]: *** [build-std] Error 2
make[2]: Leaving directory `/src/apache_1.3.37'
make[1]: *** [build] Error 2
make[1]: Leaving directory `/src/apache_1.3.37'
make: *** [install-all] Error 2
/src/apache_1.3.37 #


これもやはりエラー。
wgetやbinutilsの時に「エラーでインストールが終了してもちゃんとインストールされていた」という前例がある以上、今回も「インストール失敗」とは私には言い切れないわけです。
言い切るスキルがないわけです(笑)。

ひとまず次回につづく。
スポンサーサイト
別窓 | 標準ファームで遊ぶ | コメント:0 | トラックバック:0
∧top | under∨

標準ファームにlighttpd(3)

標準ファーム・フラッシュブートの環境でlighttpdを導入しようとしています。

えー、一応前回までのあらすじ。

標準ファーム・フラッシュブートの状態でHDDを背面リセットボタンで初期化し、CD-ROM付属のhddrootfs.tar.gzをマウントされたdisk1に展開し、開発環境を作り、

chroot /mnt/disk1/devel


としてdevel以下で

・GNU wget-1.10.2を導入
・GNU tar-1.16を導入
・GNU binutils-2.17を導入
・bashをshのリンクに


としてlighttpd(最新版として1.4.16)を導入しようとしていました。
すると、configureで

checking how to run the C preprocessor... /lib/cpp
configure: error: C preprocessor "/lib/cpp" fails sanity check
See `config.log' for more details.


とエラーが出てここから先に進めない、とここまでが前回までのあらすじです(笑)。

まず、何からどう調べたらいいのか、これがわかりません。
ひとまず片っ端からググってはみたのですが、いまいち現象が違うようで、しっくりきません。
ひとまず与えられた検証材料といえばconfig.logくらいなので、遠回りなのか正道なのかわかりませんが、まずはこれから解読してみようかと思います。

This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
「このファイルはコンフィギュア中にコンパイラによって生成されたいくつかのメッセージを含んでおり、コンフィギュアに失敗した場合にはデバッグの助けとなります。」


ぜひ助けになってください。

It was created by lighttpd configure 1.4.16, which was
generated by GNU Autoconf 2.61. Invocation command line was

$ ./configure
「GNU Autoconf 2.61によって生成されたlighttpdコンフィギュア1.4.16によって作られています。起動コマンドラインは
$ ./configure
です。」


Autoconfというものもあるんですね・・。
ああ・・いきなりこんなんで大丈夫なんだろうか・・。

Platform.は訳したり検証するものがありませんのでひとまず飛ばします。

## ----------- ##
## Core tests. ##
## ----------- ##


Core tests・・意味はわかりませんがズラズラ~と続きます。
見たところ「checking」で始まり「result」で終わるパターンの羅列っぽいので、これをブロック単位で読んでみます。

configure:2054: checking build system type
configure:2072: result: armv5tejl-unknown-linux-gnu
「調査 ビルドシステムタイプ
結果 armv5tejl-unknown-linux-gnu

configure:2094: checking host system type
configure:2109: result: armv5tejl-unknown-linux-gnu
「調査 ホストシステムタイプ
結果 armv5tejl-unknown-linux-gnu」

configure:2131: checking target system type
configure:2146: result: armv5tejl-unknown-linux-gnu
「調査 ターゲットシステムタイプ
結果 armv5tejl-unknown-linux-gnu」


ここはarmv5tejl-unknown-linux-gnuの連続ですね。
要するに玄箱PROそのもののLinux情報なんでしょうか。

configure:2190: checking for a BSD-compatible install
configure:2246: result: /usr/bin/install -c
「調査 BSD互換install
結果 /usr/bin/install -c」


Linuxを勉強しているとこのBSDという単語は自然と覚えてしまいますが、この/usr/bin/installに-cというオプションらしきものをつけて「結果」としている調査項目は何の事だかさっぱりわかりません。
確認してみると/usr/bin/installがありました。
--helpで-cの説明を見てみると「copy the file, default」だそうで・・。
だめだ・・私には何のヒントにもならない(笑)。

configure:2257: checking whether build environment is sane
configure:2300: result: yes
「調査 ビルド環境が正常かどうか
結果 はい」


これも難しいです。
ビルド環境が正常、とは何を指して言えるんでしょうね・・。
開発環境が整っていないとそもそもconfigureはできないとも思えるんですが・・。

configure:2328: checking for a thread-safe mkdir -p
configure:2367: result: ./install-sh -c -d
「調査 thread-safe mkdir -p
結果 ./install-sh -c -d」


thread-safeが何かわかりません。
mkdirに-pオプションを付けると、「no error if existing, make parent directories as needed」ということで、「すでに存在しているディレクトリでもエラーなしで作成する」という命令になるそうです。
この結果が「./install-sh -c -d」とは・・。
lighttpdディレクトリの中に「install-sh」がありましたので--helpしてみました。

/src/lighttpd-1.4.16 # ./install-sh --help
Usage: ./install-sh [OPTION]... [-T] SRCFILE DSTFILE
or: ./install-sh [OPTION]... SRCFILES... DIRECTORY
or: ./install-sh [OPTION]... -t DIRECTORY SRCFILES...
or: ./install-sh [OPTION]... -d DIRECTORIES...

In the 1st form, copy SRCFILE to DSTFILE.
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
In the 4th, create DIRECTORIES.

Options:
-c (ignored)
-d create directories instead of installing files.
-g GROUP chgrp installed files to GROUP.
-m MODE chmod installed files to MODE.
-o USER chown installed files to USER.
-s strip installed files.
-t DIRECTORY install into DIRECTORY.
-T report an error if DSTFILE is a directory.
--help display this help and exit.
--version display version info and exit.

Environment variables override the default commands:
CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG


これを見る限り、-cはignoredということで「無視する」、-dはcreate directories instead of installingということで「インストールするかわりにディレクトリの作成」らしいです。
あぁぁ、これってmkdir -pと一緒のことかも。
んん~。いまいち理解できませんねぇ・・。

configure:2380: checking for gawk
configure:2410: result: no
「調査 gawk
結果 いいえ」

configure:2380: checking for mawk
configure:2410: result: no
「調査 mawk
結果 いいえ」

configure:2380: checking for nawk
configure:2410: result: no
「調査 nawk
結果 いいえ」

configure:2380: checking for awk
configure:2396: found /usr/bin/awk
configure:2407: result: awk
「調査 awk
発見 /usr/bin/awk
結果 awk」


awkというスクリプト言語とその実装、とWikipediaに載ってました(笑)。
結局これは「awkはあるか?」「ここにあるよ」「あったよ」というやりとりなんでしょうね。

configure:2418: checking whether make sets $(MAKE)
configure:2439: result: yes
「調査 make sets $(MAKE)
結果 はい」


$(MAKE)とは変数でしょうか。さっぱりわかりませんが、「makeが$(MAKE)にセットされているか?」という質問でしょうか。
またもやパス。

configure:2631: checking whether to enable maintainer-specific portions of Makefiles
configure:2640: result: no
「調査 Makefile達の調整特化部分が動作可能か
結果 いいえ」


いやいや、訳も相当アブナイっすよ、これ(笑)。
何の事かわからないものを訳すのって難しいですね・・。
さっぱりわかりません。

configure:2703: checking for gcc
configure:2719: found /usr/bin/gcc
configure:2730: result: gcc
「調査 gcc
発見 /usr/bin/gcc
結果 gcc」


これはさっきのawkと一緒ですかね。
gccあったよー、って感じのほのぼのトークですか。

configure:2968: checking for C compiler version
「調査 Cコンパイラのバージョン」
configure:2975: gcc --version >&5
gcc (GCC) 3.4.4 (release) (CodeSourcery ARM 2005q3-2)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

configure:2978: $? = 0
「gcc --version >&5
gcc(GCC) 3.4.4 (リリース)(ARM 2005q3-2用コード)
Copyright (C) 2004 Free Software Foundation, Inc.
これはフリーソフトです。コピー条件をソースより確認してください。保証はありません。販売あるいは特定の目的の適合はその限りではありません。
終了ステータス 正常」

configure:2985: gcc -v >&5
Reading specs from /usr/lib/gcc/arm-none-linux-gnueabi/3.4.4/specs
Configured with: ../gcc-2005q3/configure --host=arm-none-linux-gnueabi --target=arm-none-linux-gnueabi --build=i386-pc-linux-gnu --enable-languages=c,c++ --prefix=/usr
Thread model: posix
gcc version 3.4.4 (release) (CodeSourcery ARM 2005q3-2)
configure:2988: $? = 0
「gcc -v >&5
/usr/lib/gcc/arm-none-linux-gnueabi/3.4.4/specsからスペックの読み込み
コンフィギュア: ../gcc-2005q3/configure --host=arm-none-linux-gnueabi --target=arm-none-linux-gnueabi --build=i386-pc-linux-gnu --enable-languages=c,c++ --prefix=/usr
Threadモデル:posix
gccバージョン 3.4.4 (リリース)(ARM 2005q3-2用コード)
終了ステータス 正常」

configure:2995: gcc -V >&5
gcc: `-V' option must have argument
configure:2998: $? = 1
「gcc -V >&5
gcc: -Vオプションには引数が必要です
終了ステータス 異常」


稚拙な訳で分かりづらいですが(笑)。
ここのブロックはresultがないっぽいので、終了ステータスだと思われる「$?=」で区切ってみました。
要するにgccに--version、-v、-Vのオプションを与えてその反応を結果としているようです。
このブロックで不明なことは、

1.「>&5」が何を意味するのか
まだ理解できませんが、シェルスクリプトのリダイレクトと関係がある項目でしょうか・・。

2.「Threadモデル:posix」とは、posix規格でありANSI/ISOとは違うのか
いや、知ったような書き方してますが、後々出てくる「You need a ISO C conforming compiler to use the glibc headers」エラー文に関係するのかなぁ、と思いまして今のうちに押さえておきました(笑)。

configure:3021: checking for C compiler default output file name
configure:3048: gcc conftest.c >&5
configure:3051: $? = 0
configure:3089: result: a.out
「調査 Cコンパイラ初期設定出力ファイル名
gcc conftest.c >&5
終了ステータス 正常
結果 a.out」

configure:3106: checking whether the C compiler works
configure:3116: ./a.out
configure:3119: $? = 0
configure:3136: result: yes
「調査 Cコンパイラが作動するかどうか
./a/out
終了ステータス 正常
結果 はい」

configure:3143: checking whether we are cross compiling
configure:3145: result: no
「調査 クロスコンパイルしているか
結果 いいえ」

configure:3148: checking for suffix of executables
configure:3155: gcc -o conftest conftest.c >&5
configure:3158: $? = 0
configure:3182: result:
「調査 実行ファイルのサフィックス
gcc -o conftest conftest.c >&5
終了ステータス 正常
結果 」

configure:3188: checking for suffix of object files
configure:3214: gcc -c conftest.c >&5
configure:3217: $? = 0
configure:3240: result: o
「調査 オブジェクトファイルのサフィックス
gcc -c conftest.c >&5
終了ステータス 正常
結果 o」

configure:3244: checking whether we are using the GNU C compiler
configure:3273: gcc -c conftest.c >&5
configure:3279: $? = 0
configure:3296: result: yes
「調査 GNU Cコンパイラを使っているか
gcc -c conftest.c >&5
終了ステータス 正常
結果 はい」

configure:3301: checking whether gcc accepts -g
configure:3331: gcc -c -g conftest.c >&5
configure:3337: $? = 0
configure:3436: result: yes
「調査 gccが-gオプションを許可しているか
gcc -c -g conftest.c >&5
終了ステータス 正常
結果 はい」

configure:3453: checking for gcc option to accept ISO C89
configure:3527: gcc -c -g -O2 conftest.c >&5
configure:3533: $? = 0
configure:3556: result: none needed
「調査 gccオプションがISO C89を許可しているか
gcc -c -g -O2 conftest.c >&5
終了ステータス 正常
結果 必要なし」

configure:3585: checking for style of include used by make
configure:3613: result: GNU
「調査 makeで使用されるインクルードのスタイル
結果 GNU」

configure:3638: checking dependency style of gcc
configure:3729: result: gcc3
「調査 gccの従属スタイル
結果 gcc3」

configure:3744: checking for a sed that does not truncate output
configure:3798: result: /bin/sed
「調査 出力を切り捨てないsed
結果 /bin/sed」

configure:3801: checking for grep that handles long lines and -e
configure:3875: result: /bin/grep
「調査 長い入力や-eを扱うgrep
結果 /bin/grep」

configure:3880: checking for egrep
configure:3958: result: /bin/grep -E
「調査 egrep
結果 /bin/grep -E」

configure:3974: checking for ld used by gcc
configure:4041: result: /usr/bin/ld
「調査 gccに使用されるld
結果 /usr/bin/ld」

configure:4050: checking if the linker (/usr/bin/ld) is GNU ld
configure:4065: result: yes
「調査 リンカー(/usr/bin/ld)はGNU ldか
結果 はい」

configure:4083: checking for a BSD-compatible install
configure:4139: result: /usr/bin/install -c
「調査 BSD互換install
結果 /usr/bin/install -c」

configure:4154: checking for gawk
configure:4181: result: awk
「調査 gawk
結果 awk」


最初の「初期設定の出力ファイル名」はそのまんまですね。
a.outとなれば正常、ということです。

その次に、実際にこのa.outを実行してCコンパイラが正常に作動しているかを調べています。

そしてクロスコンパイルかどうかの確認、そして
gcc -o conftest conftest.c >&5
を実行して実行ファイルconftestのサフィックスを求めていますが、これがよくわからないんですが・・。
最初からgcc -o conftest conftest.c、つまり「conftest.cをconftestという実行ファイルにコンパイル」としていますよね。
どうしてサフィックスを求めておきながらサフィックスを付けない指定をして、結果として空白(つまり「なし」)を返すのか理解できません。
この一連の作業に何の意味があるのでしょうか・・。

次はリンクせずにコンパイルする-cオプションをつけてオブジェクトファイルのサフィックスを求めます。結果は「o」で正常です。
同じテスト命令文でGNUのCコンパイラかどうか調べています。
そして次。

-gオプションが使えるかどうか、らしいですが、この-gオプションがわからなかったので調べました。
Manpage of GCC

-g
オペレーティングシステムのネイティブのフォーマット (stabs, COFF, XCOFF, DWARF) でデバッグ情報を生成します。GDB はこのデバッグ情報に基づいて動作することができます。

stabs フォーマットを使用するほとんどのシステムにおいては、`-g' を指定すると、GDB だけが使用できる余分なデバッグ情報が使用可能になります。この特別の情報は GDB に対してはよりよいデバッグを行なうことを可能としますが、おそらく他のデバッガに対してはクラッシュ、あるいはそのプログラムを読めなくしてしまいます。この特別な情報の生成を制御するためには `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', `-gdwarf+', `-gdwarf' を使用してください (下記参照)。

他の多くの C コンパイラと異なり、GNU CC は `-g' を `-O' とともに使用することを許しています。最適化されたコードが通る近道は、時には驚くべき結果を生み出すかもしれません。定義したはずの変数が存在しなかったり、制御の流れが予想もしなかった場所に移動したり、結果が定数とわかる計算や、結果がすでに手元にある文は実行されなくなり、ある文がループの外に追い出されて別の場所で実行されたりします。

それにも関わらず、このオプションは最適化された出力のデバッグを可能としています。これによって、バグを含むかもしれないプログラムに対してオプティマイザを使用することができるようになります。


とありましたが・・・まっっっったくわかりません(笑)。
まぁ「使える」らしいのでそれでいいです。

次はISO C89を許可しているか、ですが、さっきの-gの項目でこの-Oに触れていましたね。
先述の「自分で作るLinuxOS」という本には「Makefile中に最適化レベルの項目があり、-O2あるいは-O3とすればそれぞれ最適化レベルを2、3に指定したことになる」とあったので、gccのオプションだとは知りませんでした(汗)。
この-OオプションでISO C89を許可うんぬんがわかる、という前提がすでにわかりません・・・はぁ。
またまた宿題にします。

makeで使われるインクルード。
インクルードは一般英単語として訳すのか、C言語に出てくる#includeなのかわからなかったのでカタカナで濁しました(笑)。
つまりここの意味もまったくわかりません、はい。

gcc3というのは結局バージョンの大別のことでしょうか。

sedとは「stream editor」の略・・だと思います。ネットで検索したらこう言われたので(笑)。

そして-eオプションを扱うgrepを調べています。
またまた-eが何を出力するのか調べてみました。
Manpage of GREPによると

-e PATTERN, --regexp=PATTERN
PATTERN をパターンとして指定します。 - で始まるパターンを保護するために有効です。


パターン入力の支援オプションっぽいです。
いや、よくわかりません・・。

次はegrepの調査です。先ほどのManpage of GREPにも

egrep は grep -E と同じです。


と身も蓋もないことを書いています。確かに結果でもそう言ってます。
では-Eオプションとは何なのでしょうか?

-E, --extended-regexp
PATTERN を拡張された正規表現として扱います (下記参照)。


とのこと。正規表現をgrepに使える、どうやらこれも支援のためのオプションです。

gccが使うld、そのld(リンカー)はGNUか調べて、またBSD互換installです。最初に調査したハズなのにここでもまた調べるんですかね・・。それとも最初のものとは違うのかな。

そしてgawkはawkだ、ということ。これも最初に「gawkはない」としていたので、gawkとくればawkが応答する、ということなんでしょうか。

~このエントリは今後も追記でつづきます。~
別窓 | 標準ファームで遊ぶ | コメント:0 | トラックバック:0
∧top | under∨

標準ファームにlighttpd(2)

さて、/bin/shを/bin/bashのリンクにしたおかげでlddが使えるようになったわけですが、プロンプトが

sh-2.05b# cd ./src
sh-2.05b# pwd
/src


という風に、いちいちpwdで確認しないとどこにいるのかわからなくなってしまいました(笑)。
まぁひとまずコマンドブック片手に

sh-2.05b# PS1="\u@\h:\w # "


と入力すると

root@KUROBOX-PRO:~ #


となりました。

\u→ユーザ名
\h→ホスト名
\w→カレントディレクトリ

ということです。\dで日付も入れられるそうで・・。
これでなんとか居場所がわかるようになりましので、やっと本題の「標準ファームにlighttpd」に戻れます。

標準ファームにlighttpd(1)」では、

■ 標準ファーム・フラッシュブートの玄箱PROへ導入
■ 日経Linux2007年6月号の付属キットを使用して導入


ということで、はっきり言って何の苦労もなく導入できたわけです。
導入=成功としたので、細かい設定やwebサーバとしての実験は一切行っておりません。

次のステップとして、何とかこの結果を「キットを使わずに」実現したいと思います。

実験する玄箱PROは

●標準ファーム・フラッシュブート
HDDのパーティションも完全に消去し、工場出荷の状態です。そこから本体裏のRESETスイッチを長押ししてHDDを初期化します。
CD-ROM付属の「hddrootfs.tar.gz」を、Windowsから見える共有スペース(share)にコピーし、

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


と、開発環境の導入まで済ませておきます。

●wget、tar、binutilsのインストール
wgetはこんな感じ、tarはこんな感じでbinutilsはこういう風に導入しました。

●lighttpd1.4.16のソースをwget
/mnt/disk1/develにchrootしたままwgetでlighttpd1.4.16(現在の最新ソース)を入手。

root@KUROBOX-PRO:/src # wget http://www.lighttpd.net/download/lighttpd-1.4.16.tar.gz


もちろん、外部への接続設定が済んでいないとwgetは使えませんので注意。

●lighttpdソースの解凍・展開
/src(実際は/mnt/disk1/devel/src)にダウンロードしたlighttpdがあるので、それを解凍・展開。

root@KUROBOX-PRO:/src # tar xzf lighttpd-1.4.16.tar.gz


ちなみにこの時のtarがbusyboxなら、おそらくlighttpdは正しく展開されません。GNUのtarなら大丈夫です。
これに気がつくまで時間がかかりました(笑)。みなさんがさんざんサイトに書いてるのにね・・。

●lighttpdのconfigure
いよいよMakefileを作ります。
数回のビルド練習で自信をつけて

root@KUROBOX-PRO:/src # cd ./lighttpd-1.4.16
root@KUROBOX-PRO:/src/lighttpd-1.4.16 # ./configure


とconfigureスタート!
すると、エラーが出て終了しました。

checking how to run the C preprocessor... /lib/cpp
configure: error: C preprocessor "/lib/cpp" fails sanity check
See `config.log' for more details.
root@KUROBOX-PRO:/src/lighttpd-1.4.16#


よく見かけたエラーなんですが、もちろんすでに/usr/bin/cppを/lib/cppにコピーしています。
その上で「動かない」と言われているわけですね(笑)。


う~ん・・・。
玄箱PROに言われたとおり「config.log」を見てみたんですが、何を書いているのかわかりません。
じっくりゆっくり読まないといつまでたっても理解できない自信があります。
素人な私がもっとも怖かった「gccの仕組み」のような領域に立ち入ったらどうしよう、と不安になりつつ、ひとまずlighttpdのconfigure手前で止めて、再びお勉強の時間に入ります(笑)。

この時のconfig.log。

This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.

It was created by lighttpd configure 1.4.16, which was
generated by GNU Autoconf 2.61. Invocation command line was

$ ./configure

## --------- ##
## Platform. ##
## --------- ##

hostname = KUROBOX-PRO
uname -m = armv5tejl
uname -r = 2.6.12.6-arm1
uname -s = Linux
uname -v = #27 Tue Apr 10 22:47:16 JST 2007

/usr/bin/uname -p = unknown
/bin/uname -X = unknown

/bin/arch = unknown
/usr/bin/arch -k = unknown
/usr/convex/getsysinfo = unknown
/usr/bin/hostinfo = unknown
/bin/machine = unknown
/usr/bin/oslevel = unknown
/bin/universe = unknown

PATH: /bin
PATH: /sbin
PATH: /usr/bin
PATH: /usr/sbin
PATH: /usr/local/bin
PATH: /usr/local/sbin


## ----------- ##
## Core tests. ##
## ----------- ##

configure:2054: checking build system type
configure:2072: result: armv5tejl-unknown-linux-gnu
configure:2094: checking host system type
configure:2109: result: armv5tejl-unknown-linux-gnu
configure:2131: checking target system type
configure:2146: result: armv5tejl-unknown-linux-gnu
configure:2190: checking for a BSD-compatible install
configure:2246: result: /usr/bin/install -c
configure:2257: checking whether build environment is sane
configure:2300: result: yes
configure:2328: checking for a thread-safe mkdir -p
configure:2367: result: ./install-sh -c -d
configure:2380: checking for gawk
configure:2410: result: no
configure:2380: checking for mawk
configure:2410: result: no
configure:2380: checking for nawk
configure:2410: result: no
configure:2380: checking for awk
configure:2396: found /usr/bin/awk
configure:2407: result: awk
configure:2418: checking whether make sets $(MAKE)
configure:2439: result: yes
configure:2631: checking whether to enable maintainer-specific portions of Makefiles
configure:2640: result: no
configure:2703: checking for gcc
configure:2719: found /usr/bin/gcc
configure:2730: result: gcc
configure:2968: checking for C compiler version
configure:2975: gcc --version >&5
gcc (GCC) 3.4.4 (release) (CodeSourcery ARM 2005q3-2)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

configure:2978: $? = 0
configure:2985: gcc -v >&5
Reading specs from /usr/lib/gcc/arm-none-linux-gnueabi/3.4.4/specs
Configured with: ../gcc-2005q3/configure --host=arm-none-linux-gnueabi --target=arm-none-linux-gnueabi --build=i386-pc-linux-gnu --enable-languages=c,c++ --prefix=/usr
Thread model: posix
gcc version 3.4.4 (release) (CodeSourcery ARM 2005q3-2)
configure:2988: $? = 0
configure:2995: gcc -V >&5
gcc: `-V' option must have argument
configure:2998: $? = 1
configure:3021: checking for C compiler default output file name
configure:3048: gcc conftest.c >&5
configure:3051: $? = 0
configure:3089: result: a.out
configure:3106: checking whether the C compiler works
configure:3116: ./a.out
configure:3119: $? = 0
configure:3136: result: yes
configure:3143: checking whether we are cross compiling
configure:3145: result: no
configure:3148: checking for suffix of executables
configure:3155: gcc -o conftest conftest.c >&5
configure:3158: $? = 0
configure:3182: result:
configure:3188: checking for suffix of object files
configure:3214: gcc -c conftest.c >&5
configure:3217: $? = 0
configure:3240: result: o
configure:3244: checking whether we are using the GNU C compiler
configure:3273: gcc -c conftest.c >&5
configure:3279: $? = 0
configure:3296: result: yes
configure:3301: checking whether gcc accepts -g
configure:3331: gcc -c -g conftest.c >&5
configure:3337: $? = 0
configure:3436: result: yes
configure:3453: checking for gcc option to accept ISO C89
configure:3527: gcc -c -g -O2 conftest.c >&5
configure:3533: $? = 0
configure:3556: result: none needed
configure:3585: checking for style of include used by make
configure:3613: result: GNU
configure:3638: checking dependency style of gcc
configure:3729: result: gcc3
configure:3744: checking for a sed that does not truncate output
configure:3798: result: /bin/sed
configure:3801: checking for grep that handles long lines and -e
configure:3875: result: /bin/grep
configure:3880: checking for egrep
configure:3958: result: /bin/grep -E
configure:3974: checking for ld used by gcc
configure:4041: result: /usr/bin/ld
configure:4050: checking if the linker (/usr/bin/ld) is GNU ld
configure:4065: result: yes
configure:4083: checking for a BSD-compatible install
configure:4139: result: /usr/bin/install -c
configure:4154: checking for gawk
configure:4181: result: awk
configure:4197: checking how to run the C preprocessor
configure:4237: gcc -E conftest.c
conftest.c:0: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
Send email to arm-gnu@codesourcery.com for instructions.
configure:4243: $? = 1
configure: failed program was:
| /* confdefs.h. */
| #define PACKAGE_NAME "lighttpd"
| #define PACKAGE_TARNAME "lighttpd"
| #define PACKAGE_VERSION "1.4.16"
| #define PACKAGE_STRING "lighttpd 1.4.16"
| #define PACKAGE_BUGREPORT "jan@kneschke.de"
| #define PACKAGE "lighttpd"
| #define VERSION "1.4.16"
| /* end confdefs.h. */
| #ifdef __STDC__
| # include
| #else
| # include
| #endif
| Syntax error
configure:4237: gcc -E conftest.c
conftest.c:0: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
Send email to arm-gnu@codesourcery.com for instructions.
configure:4243: $? = 1
configure: failed program was:
| /* confdefs.h. */
| #define PACKAGE_NAME "lighttpd"
| #define PACKAGE_TARNAME "lighttpd"
| #define PACKAGE_VERSION "1.4.16"
| #define PACKAGE_STRING "lighttpd 1.4.16"
| #define PACKAGE_BUGREPORT "jan@kneschke.de"
| #define PACKAGE "lighttpd"
| #define VERSION "1.4.16"
| /* end confdefs.h. */
| #ifdef __STDC__
| # include
| #else
| # include
| #endif
| Syntax error
configure:4237: gcc -E -traditional-cpp conftest.c
In file included from /usr/include/features.h:307,
from /usr/include/assert.h:36,
from conftest.c:13:
/usr/include/sys/cdefs.h:31: #error "You need a ISO C conforming compiler to use the glibc headers"
configure:4243: $? = 1
configure: failed program was:
| /* confdefs.h. */
| #define PACKAGE_NAME "lighttpd"
| #define PACKAGE_TARNAME "lighttpd"
| #define PACKAGE_VERSION "1.4.16"
| #define PACKAGE_STRING "lighttpd 1.4.16"
| #define PACKAGE_BUGREPORT "jan@kneschke.de"
| #define PACKAGE "lighttpd"
| #define VERSION "1.4.16"
| /* end confdefs.h. */
| #ifdef __STDC__
| # include
| #else
| # include
| #endif
| Syntax error
configure:4237: gcc -E -traditional-cpp conftest.c
In file included from /usr/include/features.h:307,
from /usr/include/assert.h:36,
from conftest.c:13:
/usr/include/sys/cdefs.h:31: #error "You need a ISO C conforming compiler to use the glibc headers"
configure:4243: $? = 1
configure: failed program was:
| /* confdefs.h. */
| #define PACKAGE_NAME "lighttpd"
| #define PACKAGE_TARNAME "lighttpd"
| #define PACKAGE_VERSION "1.4.16"
| #define PACKAGE_STRING "lighttpd 1.4.16"
| #define PACKAGE_BUGREPORT "jan@kneschke.de"
| #define PACKAGE "lighttpd"
| #define VERSION "1.4.16"
| /* end confdefs.h. */
| #ifdef __STDC__
| # include
| #else
| # include
| #endif
| Syntax error
configure:4237: /lib/cpp conftest.c
conftest.c:0: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
Send email to arm-gnu@codesourcery.com for instructions.
configure:4243: $? = 1
configure: failed program was:
| /* confdefs.h. */
| #define PACKAGE_NAME "lighttpd"
| #define PACKAGE_TARNAME "lighttpd"
| #define PACKAGE_VERSION "1.4.16"
| #define PACKAGE_STRING "lighttpd 1.4.16"
| #define PACKAGE_BUGREPORT "jan@kneschke.de"
| #define PACKAGE "lighttpd"
| #define VERSION "1.4.16"
| /* end confdefs.h. */
| #ifdef __STDC__
| # include
| #else
| # include
| #endif
| Syntax error
configure:4237: /lib/cpp conftest.c
conftest.c:0: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
Send email to arm-gnu@codesourcery.com for instructions.
configure:4243: $? = 1
configure: failed program was:
| /* confdefs.h. */
| #define PACKAGE_NAME "lighttpd"
| #define PACKAGE_TARNAME "lighttpd"
| #define PACKAGE_VERSION "1.4.16"
| #define PACKAGE_STRING "lighttpd 1.4.16"
| #define PACKAGE_BUGREPORT "jan@kneschke.de"
| #define PACKAGE "lighttpd"
| #define VERSION "1.4.16"
| /* end confdefs.h. */
| #ifdef __STDC__
| # include
| #else
| # include
| #endif
| Syntax error
configure:4313: result: /lib/cpp
configure:4342: /lib/cpp conftest.c
conftest.c:0: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
Send email to arm-gnu@codesourcery.com for instructions.
configure:4348: $? = 1
configure: failed program was:
| /* confdefs.h. */
| #define PACKAGE_NAME "lighttpd"
| #define PACKAGE_TARNAME "lighttpd"
| #define PACKAGE_VERSION "1.4.16"
| #define PACKAGE_STRING "lighttpd 1.4.16"
| #define PACKAGE_BUGREPORT "jan@kneschke.de"
| #define PACKAGE "lighttpd"
| #define VERSION "1.4.16"
| /* end confdefs.h. */
| #ifdef __STDC__
| # include
| #else
| # include
| #endif
| Syntax error
configure:4342: /lib/cpp conftest.c
conftest.c:0: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
Send email to arm-gnu@codesourcery.com for instructions.
configure:4348: $? = 1
configure: failed program was:
| /* confdefs.h. */
| #define PACKAGE_NAME "lighttpd"
| #define PACKAGE_TARNAME "lighttpd"
| #define PACKAGE_VERSION "1.4.16"
| #define PACKAGE_STRING "lighttpd 1.4.16"
| #define PACKAGE_BUGREPORT "jan@kneschke.de"
| #define PACKAGE "lighttpd"
| #define VERSION "1.4.16"
| /* end confdefs.h. */
| #ifdef __STDC__
| # include
| #else
| # include
| #endif
| Syntax error
configure:4410: error: C preprocessor "/lib/cpp" fails sanity check
See `config.log' for more details.

## ---------------- ##
## Cache variables. ##
## ---------------- ##

ac_cv_build=armv5tejl-unknown-linux-gnu
ac_cv_c_compiler_gnu=yes
ac_cv_env_CCC_set=
ac_cv_env_CCC_value=
ac_cv_env_CC_set=
ac_cv_env_CC_value=
ac_cv_env_CFLAGS_set=
ac_cv_env_CFLAGS_value=
ac_cv_env_CPPFLAGS_set=
ac_cv_env_CPPFLAGS_value=
ac_cv_env_CPP_set=
ac_cv_env_CPP_value=
ac_cv_env_CXXCPP_set=
ac_cv_env_CXXCPP_value=
ac_cv_env_CXXFLAGS_set=
ac_cv_env_CXXFLAGS_value=
ac_cv_env_CXX_set=
ac_cv_env_CXX_value=
ac_cv_env_F77_set=
ac_cv_env_F77_value=
ac_cv_env_FAM_CFLAGS_set=
ac_cv_env_FAM_CFLAGS_value=
ac_cv_env_FAM_LIBS_set=
ac_cv_env_FAM_LIBS_value=
ac_cv_env_FFLAGS_set=
ac_cv_env_FFLAGS_value=
ac_cv_env_LDFLAGS_set=
ac_cv_env_LDFLAGS_value=
ac_cv_env_LIBS_set=
ac_cv_env_LIBS_value=
ac_cv_env_LUA_CFLAGS_set=
ac_cv_env_LUA_CFLAGS_value=
ac_cv_env_LUA_LIBS_set=
ac_cv_env_LUA_LIBS_value=
ac_cv_env_PKG_CONFIG_set=
ac_cv_env_PKG_CONFIG_value=
ac_cv_env_SQLITE_CFLAGS_set=
ac_cv_env_SQLITE_CFLAGS_value=
ac_cv_env_SQLITE_LIBS_set=
ac_cv_env_SQLITE_LIBS_value=
ac_cv_env_XML_CFLAGS_set=
ac_cv_env_XML_CFLAGS_value=
ac_cv_env_XML_LIBS_set=
ac_cv_env_XML_LIBS_value=
ac_cv_env_build_alias_set=
ac_cv_env_build_alias_value=
ac_cv_env_host_alias_set=
ac_cv_env_host_alias_value=
ac_cv_env_target_alias_set=
ac_cv_env_target_alias_value=
ac_cv_host=armv5tejl-unknown-linux-gnu
ac_cv_objext=o
ac_cv_path_EGREP='/bin/grep -E'
ac_cv_path_GREP=/bin/grep
ac_cv_path_install='/usr/bin/install -c'
ac_cv_prog_AWK=awk
ac_cv_prog_CPP=/lib/cpp
ac_cv_prog_ac_ct_CC=gcc
ac_cv_prog_cc_c89=
ac_cv_prog_cc_g=yes
ac_cv_prog_make_make_set=yes
ac_cv_target=armv5tejl-unknown-linux-gnu
am_cv_CC_dependencies_compiler_type=gcc3
lt_cv_path_LD=/usr/bin/ld
lt_cv_path_SED=/bin/sed
lt_cv_prog_gnu_ld=yes

## ----------------- ##
## Output variables. ##
## ----------------- ##

ACLOCAL='${SHELL} /src/lighttpd-1.4.16/missing --run aclocal-1.10'
AMDEPBACKSLASH='\'
AMDEP_FALSE='#'
AMDEP_TRUE=''
AMTAR='${SHELL} /src/lighttpd-1.4.16/missing --run tar'
ANSI2KNR=''
AR=''
ATTR_LIB=''
AUTOCONF='${SHELL} /src/lighttpd-1.4.16/missing --run autoconf'
AUTOHEADER='${SHELL} /src/lighttpd-1.4.16/missing --run autoheader'
AUTOMAKE='${SHELL} /src/lighttpd-1.4.16/missing --run automake-1.10'
AWK='awk'
BZ_LIB=''
CC='gcc'
CCDEPMODE='depmode=gcc3'
CFLAGS='-g -O2'
CHECK_WITH_FASTCGI_FALSE=''
CHECK_WITH_FASTCGI_TRUE=''
CPP='/lib/cpp'
CPPFLAGS=''
CROSS_COMPILING_FALSE=''
CROSS_COMPILING_TRUE=''
CRYPT_LIB=''
CXX=''
CXXCPP=''
CXXDEPMODE=''
CXXFLAGS=''
CYGPATH_W='echo'
DEFS=''
DEPDIR='.deps'
DL_LIB=''
ECHO='echo'
ECHO_C=''
ECHO_N='-n'
ECHO_T=''
EGREP='/bin/grep -E'
EXEEXT=''
F77=''
FAM_CFLAGS=''
FAM_LIBS=''
FFLAGS=''
GDBM_LIB=''
GREP='/bin/grep'
INSTALL_DATA='${INSTALL} -m 644'
INSTALL_PROGRAM='${INSTALL}'
INSTALL_SCRIPT='${INSTALL}'
INSTALL_STRIP_PROGRAM='$(install_sh) -c -s'
LBER_LIB=''
LDAP_LIB=''
LDFLAGS=''
LIBOBJS=''
LIBS=''
LIBTOOL=''
LN_S=''
LTLIBOBJS=''
LUA_CFLAGS=''
LUA_LIBS=''
MAINT='#'
MAINTAINER_MODE_FALSE=''
MAINTAINER_MODE_TRUE='#'
MAKEINFO='${SHELL} /src/lighttpd-1.4.16/missing --run makeinfo'
MEMCACHE_LIB=''
MYSQL_CONFIG=''
MYSQL_INCLUDE=''
MYSQL_LIBS=''
NO_RDYNAMIC_FALSE=''
NO_RDYNAMIC_TRUE=''
OBJEXT='o'
PACKAGE='lighttpd'
PACKAGE_BUGREPORT='jan@kneschke.de'
PACKAGE_NAME='lighttpd'
PACKAGE_STRING='lighttpd 1.4.16'
PACKAGE_TARNAME='lighttpd'
PACKAGE_VERSION='1.4.16'
PATH_SEPARATOR=':'
PCRECONFIG=''
PCRE_LIB=''
PKG_CONFIG=''
RANLIB=''
SENDFILE_LIB=''
SET_MAKE=''
SHELL='/bin/sh'
SQLITE_CFLAGS=''
SQLITE_LIBS=''
SSL_LIB=''
STRIP=''
U=''
UUID_LIBS=''
VERSION='1.4.16'
XML_CFLAGS=''
XML_LIBS=''
Z_LIB=''
ac_ct_CC='gcc'
ac_ct_CXX=''
ac_ct_F77=''
am__fastdepCC_FALSE='#'
am__fastdepCC_TRUE=''
am__fastdepCXX_FALSE=''
am__fastdepCXX_TRUE=''
am__include='include'
am__isrc=''
am__leading_dot='.'
am__quote=''
am__tar='${AMTAR} chof - "$$tardir"'
am__untar='${AMTAR} xf -'
bindir='${exec_prefix}/bin'
build='armv5tejl-unknown-linux-gnu'
build_alias=''
build_cpu='armv5tejl'
build_os='linux-gnu'
build_vendor='unknown'
datadir='${datarootdir}'
datarootdir='${prefix}/share'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
dvidir='${docdir}'
exec_prefix='NONE'
host='armv5tejl-unknown-linux-gnu'
host_alias=''
host_cpu='armv5tejl'
host_os='linux-gnu'
host_vendor='unknown'
htmldir='${docdir}'
includedir='${prefix}/include'
infodir='${datarootdir}/info'
install_sh='$(SHELL) /src/lighttpd-1.4.16/install-sh'
libdir='${exec_prefix}/lib'
libexecdir='${exec_prefix}/libexec'
localedir='${datarootdir}/locale'
localstatedir='${prefix}/var'
mandir='${datarootdir}/man'
mkdir_p='$(top_builddir)/./install-sh -c -d'
oldincludedir='/usr/include'
pdfdir='${docdir}'
prefix='NONE'
program_transform_name='s,x,x,'
psdir='${docdir}'
sbindir='${exec_prefix}/sbin'
sharedstatedir='${prefix}/com'
sysconfdir='${prefix}/etc'
target='armv5tejl-unknown-linux-gnu'
target_alias=''
target_cpu='armv5tejl'
target_os='linux-gnu'
target_vendor='unknown'

## ----------- ##
## confdefs.h. ##
## ----------- ##

#define PACKAGE_NAME "lighttpd"
#define PACKAGE_TARNAME "lighttpd"
#define PACKAGE_VERSION "1.4.16"
#define PACKAGE_STRING "lighttpd 1.4.16"
#define PACKAGE_BUGREPORT "jan@kneschke.de"
#define PACKAGE "lighttpd"
#define VERSION "1.4.16"

configure: exit 1

別窓 | 標準ファームで遊ぶ | コメント:0 | トラックバック:0
∧top | under∨

lddが使えない(3)

見落としていました。

前回の記事「lddが使えない(2)」で、sushi-kさんのDebian化後の/usr/bin/lddと、標準ファームの/usr/bin/lddには3つの違いがある、と書きましたが、もう1つありました。

しかもそれが原因だった、という一番重要な箇所でした。

しかも・・・1行目(笑)

NG
#! /bin/sh

OK
#! /bin/bash


ここでした。
標準ファームlddの1行目、ここの部分をshからbashに変更すればlddは動きます。

shとbashの違いがよくわかりませんのでちょっと調べてみました。
まず

~ # ls -l /bin | grep sh
lrwxrwxrwx 1 root root 7 Apr 10 22:45 ash -> busybox
-rwxrwxrwx 1 root root 619848 Dec 21 2006 bash
lrwxrwxrwx 1 root root 4 Apr 10 22:45 bash2 -> bash
lrwxrwxrwx 1 root root 7 Apr 10 22:45 fdflush -> busybox
lrwxrwxrwx 1 root root 7 Apr 10 22:45 sh -> busybox


としてみると、
sh -> busybox
とありますので、shとはbusyboxのコマンドとわかりました。

一方、坂本浩則さんの「シェル」というページに以下の説明がありました。

sh - Bourne シェル, POSIX シェル
sh は標準のシェルであり、 POSIX(IEEE Std1003.2) で標準化されていますが、 全てのシステムの sh で完全に POSIX 対応しているわけではありません。 対話機能が貧弱なため、ログインシェルとして使用されることは少なく 主にスクリプトとして使用されています (システムがハングした後の再起動時に fsck が失敗したりすると /bin/sh で作業する必要があったりもしますが)。 FreeBSD などでは ash と呼ばれる機能強化したものが使用されています。 ksh や bash が /bin/sh として使われているシステムもあります。

bash - Bourne Again SHell
Bourne シェルを元に機能拡張したシェル。 コマンドラインでの編集機能が充実しており、 ksh とはよく似ています。 GNU のソフトとして配布されており、 特に Linux で標準シェルとして採用されていることで広まっています。


とのこと。つまりbashとはshの機能拡張版か。
どうやら今後のことを考えて、文中にもあるように「bashを/bin/shとして動かす」という方法がいいような気がしてきました。
ということで

~ # mv /bin/sh /bin/sh.orig
~ # ln -s /bin/bash /bin/sh
~ # ls -l /bin | grep sh
lrwxrwxrwx 1 root root 7 Apr 10 22:45 ash -> busybox
-rwxrwxrwx 1 root root 619848 Dec 21 2006 bash
lrwxrwxrwx 1 root root 4 Apr 10 22:45 bash2 -> bash
lrwxrwxrwx 1 root root 7 Apr 10 22:45 fdflush -> busybox
lrwxrwxrwx 1 root root 9 Aug 8 15:08 sh -> /bin/bash
lrwxrwxrwx 1 root root 7 Apr 10 22:45 sh.orig -> busybox


としました。これならほかに/bin/shを使用するスクリプトがあっても自動でbashを使うことになりますし、いちいちスクリプトそのものの1行目を直してまわる必要もありません。

原因ははっきりしません。
"busyboxのsh"をキーワードにググってみると、6件だけヒットするんですがどこも「busyboxのshは特殊」というニュアンスですね。
私個人はbusyboxさんはtarや今回のshの件で、とにかく困ったちゃんな印象を持ちました(笑)。

とりあえずすっきりしましたのでビルド練習に戻れます。
別窓 | 日記のようなもの | コメント:0 | トラックバック:0
∧top | under∨

lddが使えない(2)

直りました。
いや、直したというと語弊があるなぁ。

sushi-kさんのDebian化キットを使ってDebian化した際に使えたlddをそのまま持ってきてみました。
もちろん、Windowsのエディタ(秀丸エディタ)経由でしたので、改行コードもLFとし、

RTLDLIST=/lib/ld-linux.so.2


の部分は、

~ # ls -l /lib | grep ld-linux
lrwxrwxrwx 1 root root 11 Apr 10 22:45 ld-linux.so.3 -> ld-2.3.6.so


とのことなので、

RTLDLIST=/lib/ld-linux.so.3


と変え、

~ # chmod 755 /usr/bin/ldd
~ # chown root:root /usr/bin/ldd


としたら

~ # ldd /bin/ls
libcrypt.so.1 => /lib/libcrypt.so.1 (0x40020000)
libm.so.6 => /lib/libm.so.6 (0x40055000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x40106000)
libc.so.6 => /lib/libc.so.6 (0x40117000)
/lib/ld-linux.so.3 (0x40000000)


と動きました。
この機会にシェルスクリプトの勉強も始めたばかりで、まだまだ原因はよくわかっていません。
二つのlddを比べて、違う箇所は

NG
(空白)

OK
34:filename_magic_regex="((^|/)lib|.so$)"
-------------------------------------------
NG
151: test -x "$file" || echo 'ldd:' $"\
152:warning: you do not have execution permission for" "\`$file'" >&2

OK
152: if test ! -x "$file" && eval echo "$file" \
153: | egrep -v "$filename_magic_regex" > /dev/null; then
154: echo 'ldd:' $"warning: you do not have execution permission for"\
155: "\`$file'" >&2
156: fi
-------------------------------------------
NG
174: try_trace "$file"

OK
178: if [ ! -x "$file" ] && eval file -L "$file" 2>/dev/null \
179: | sed 10q | egrep "$file_magic_regex" > /dev/null; then
180: try_trace "${RTLD}" "$file"
181: else
182: try_trace "$file"
183: fi


の3か所でした。行先頭の番号はエディタで開いたときの行番号です。
一生懸命解読してますが、なにぶん先ほど文法などに目を通したばかりなもので(笑)。
別窓 | 日記のようなもの | コメント:0 | トラックバック:0
∧top | under∨

lddが使えない

lddが機能しないことに気がつきました。

~ # ldd --version
ldd (GNU libc) 2.3.6
$Copyright (C) 2005 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$Written by Roland McGrath and Ulrich Drepper.


という風にversionは出力するし

~ # which ldd
/usr/bin/ldd


と場所も示してくれるんですが

~ # ldd /bin/ls


と入力しても何も返ってきません。

とんだ伏兵があらわれました(笑)。

(追記)
Debian化にしてみてlddコマンドを使ってみるとちゃんと動きました。

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
kurobox:~# ldd /bin/ls
librt.so.1 => /lib/librt.so.1 (0x4001e000)
libacl.so.1 => /lib/libacl.so.1 (0x40038000)
libselinux.so.1 => /lib/libselinux.so.1 (0x40047000)
libc.so.6 => /lib/libc.so.6 (0x40062000)
libpthread.so.0 => /lib/libpthread.so.0 (0x40176000)
/lib/ld-linux.so.2 (0x40000000)
libattr.so.1 => /lib/libattr.so.1 (0x401d0000)
libdl.so.2 => /lib/libdl.so.2 (0x401db000)
libsepol.so.1 => /lib/libsepol.so.1 (0x401e6000)



うーん。
工場出荷に戻しても改善されません。
lddそのものがどういう風に動いているのか、シェルスクリプト本体をのぞいて勉強してみます。

別窓 | 日記のようなもの | コメント:0 | トラックバック:0
∧top | under∨

ビルド練習で四苦八苦(4)~binutils編~

どんどん行きましょう。
次はbinutilsの導入です。
いや・・なぜって理由はないんですが・・強いて言えば後々debootstrapの実験の際に必要になるなら今のうちに練習しとこ、と思った程度です(笑)。

開発環境にwgetを導入していますのでchrootしたままソースを落としてきます。
以下のログは開発環境を抜けているところからのものです。

~ # chroot /mnt/disk1/devel
/ # cd /src
/src # wget ftp://tron.um.u-tokyo.ac.jp/pub/GNU/binutils/binutils-2.17.tar.gz
/src # tar xzf binutils-2.17.tar.gz
/src # cd ./binutils-2.17/
/src/binutils-2.17 # ./configure
/src/binutils-2.17 # make


するとすぐに終わり、こんなエラーが出ます。

configure: error: C preprocessor "gcc -E" fails sanity check
See `config.log' for more details.
make[1]: *** [configure-libiberty] Error 1
make[1]: Leaving directory `/src/binutils-2.17'
make: *** [all] Error 2


何回か練習で見かけたエラーですが、このエラーはもう一度makeをすると消える(あるいは内容が変わる)パターンが多かったので、今回ももう一度makeをしてみます。

/src/binutils-2.17 # make


*** Makeinfo is missing. Info documentation will not be built.とか出ていますが今回は非常に長い時間かかってます。
明らかにさっきとは違う・・。
現象の理屈がわかりませんから気持ち悪いばっかりです。

長い時間の後、

configure: error: C preprocessor "/lib/cpp" fails sanity check
See `config.log' for more details.
make[1]: *** [configure-opcodes] Error 1
make[1]: Leaving directory `/src/binutils-2.17'
make: *** [all] Error 2


とまたもやエラー。
とりあえずインストールしてみると・・

/src/binutils-2.17 # make install
・・(略)・・
/usr/bin/install -c -m 644 bfd.h /usr/local/include/bfd.h
/usr/bin/install -c -m 644 .././bfd/../include/ansidecl.h /usr/local/include/ansidecl.h
/usr/bin/install -c -m 644 .././bfd/../include/symcat.h /usr/local/include/symcat.h
/usr/bin/install -c -m 644 .././bfd/../include/bfdlink.h /usr/local/include/bfdlink.h
make[4]: Leaving directory `/src/binutils-2.17/bfd'
make[3]: Leaving directory `/src/binutils-2.17/bfd'
make[2]: Leaving directory `/src/binutils-2.17/bfd'
make[2]: Entering directory `/src/binutils-2.17/opcodes'
make[2]: *** No rule to make target `install'. Stop.
make[2]: Leaving directory `/src/binutils-2.17/opcodes'
make[1]: *** [install-opcodes] Error 2
make[1]: Leaving directory `/src/binutils-2.17'
make: *** [install] Error 2


とエラーで終了。
ダメだったかぁと思い試しに

/src/binutils-2.17 # ar --version


と打つと

GNU ar 2.16.91 20051213
Copyright 2005 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License. This program has absolutely no warranty.


入っとるやないか!(笑)
なぜエラーが出たにもかかわらずインストールできたのかはわかりませんが、ひとまずbinutilsのインストールも完了です。

あー気持ち悪(笑)。
別窓 | 標準ファームで遊ぶ | コメント:0 | トラックバック:0
∧top | under∨

ビルド練習で四苦八苦(3)~tar編2~

結論から言いますとインストールできました。
ただし最新ソースではなく、GNU tar-1.16です。

先日のtar-1.18導入の際のmakeエラーで「宣言されていない」とか出ていていくらなんでもそりゃ直せない、と思っていたところ、gccとtarのバージョンって関係あるのかな・・と疑問に思いバージョンを落としてみました。
しかしtar-1.17や1.16.1では1.18と同じエラーが出ます。
1.16で試してみると、見事に通りました。

まずはソースを置いたり展開する場所を作ります。前回までは作らずに「~」で作業してたらあとで何が何だかわからなくなりましたので、今回はきとんと作ります(笑)。

/mnt/disk1/devel # mkdir src


続いてソースの取得です。Windowsから共有フォルダ経由で引っ張っても同じです。

/mnt/disk1/devel/src # wget ftp://tron.um.u-tokyo.ac.jp/pub/GNU/tar/tar-1.16.tar.gz


取ってきたtarのソースを展開します。

/mnt/disk1/devel/src # tar xzvf tar-1.16.tar.gz


chrootで開発環境に入ります。

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


ここからはconfigure、make、make installのコンボです。
でもインストールの前に一手間、Busyboxなtarの名前を変更(tar.busyとしました)しておきます。

以前rmでばっさり削除しましたが、名前の変更の方が検証にBusyboxが使いたくなったりした時にすぐに戻せるので何かと便利です。
まぁそれほど変わらない気もしますが・・。

/ # cd ./src
/src # cd ./tar-1.16/
/src/tar-1.16 # ./configure
/src/tar-1.16 # make
/src/tar-1.16 # cd /bin
/bin # mv tar tar.busy
/bin # cd /src/tar-1.16
/src/tar-1.16 # make install


makeを通りさえしたらこの作業は退屈なくらい単調です。

作業が終了したら念のためtarの情報を確認します。

/src/tar-1.16 # tar --version
tar (GNU tar) 1.16
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software. You may redistribute copies of it under the terms of
the GNU General Public License .
There is NO WARRANTY, to the extent permitted by law.


BusyboxではなくGNU tarとなっているのでこの作業は完了です。

ここからは完全に根拠もない推論です。
開発する側の環境を変えずに対象となるソースのバージョンを下げれば導入できた、ということは「ソースとコンパイラのバージョンがあっていない」ということが原因だったのでしょうか。
もしもそうであれば、今後最新ソースで同じような現象があらわれても今回同様少し古いソースをコンパイルすれば通るということになります。


実際は、まだ手探りでやってますので理屈もへったくれもありませんが(笑)。
別窓 | 標準ファームで遊ぶ | コメント:0 | トラックバック:0
∧top | under∨

1ヶ月目の日記

Linuxを初めて触って約1か月が経ちました。
今現在の理解度を後日懐かしむために(笑)、種々の項目の説明を書いておきます。
もちろん、私が「理解できたつもり」なだけなのでアテにはしないでください。
あくまでもあとで読んで懐かしむためだけの記事です・・。

chroot
基本的なrootファイルが存在する親ディレクトリにchrootすると、そこを仮想上の/とみなし動作する。
たとえばLinuxが入ったHDDを別のパソコンに接続しHDDにchrootすることでHDD上のLinux環境で作業できる。
逆に、フラッシュブート玄箱PROに、HDDブートを見越して接続したHDDのdebootstrapで作成したDebian環境にchrootして設定を整えることができるし、擬似的にDebianを起動することができる。
そのための機能。

debootstrap
Linuxに必要なカーネル、ブートローダー以外の最小構成を作成してくれる便利な機能。
オプションで渡したURLから必要なものを取ってくるため、wgetを事前に準備しなければならない。
また、debootstrap自体を導入する際にarコマンドを必要とするため、binutilsも準備する必要がある。

make
コンパイラとリンカーの両方の役目を担う。Makefileに記述された内容に従いgccを利用してオブジェクトファイルの作成まで行う。
Makefileは、各ソフトが用意したconfigureスクリプトが自らの環境に適したものを自動で作成する。また手動で編集することもできる。
gccで一つ一つコンパイル・リンクをしても構わないが現実に無理がある。

mtdblock
ブロック・デバイスの一種。/dev/mtdblock2にrootfsがある。それをjffsで/mnt/mtd2にマウントした、というだけのコトかな。つまり、/dev/mtd2にrootfsがあるわけではない。
もしこれが正解なら、何にも増して基本的なことを1か月も理解できなかったことになる(笑)。
そうであればbootargs_rootに/dev/mtd2を渡したところでkernel panicになって当然。
/mntがただのマウントポイント(架空の概念)だということが理解できるまでに相当の時間を使ったのか・・。

セルフコンパイル
別の環境で玄箱PROの環境を構築することが「クロスコンパイル」。玄箱PRO自身で環境を構築することが「セルフコンパイル」。
玄箱PROのCPUはARMという非インテル系を採用しているため、インテルCPU上で作った環境をそのままでは玄箱PROで動かせない。ARM用のカーネルをビルドしたHDDの環境を整えて玄箱PROでブートさせればこれでクロスコンパイルができたことになる。
この、「クロスコンパイル」は比較的理解しやすいけど、自分自身が起動した状態で、どうして自分の環境を変えることができるのかが不思議。


また1か月経った頃に書いてみようかな。
別窓 | 日記のようなもの | コメント:0 | トラックバック:0
∧top | under∨

ビルド練習で四苦八苦(2)~tar編~

引き続き「標準ファーム・フラッシュブート」での実験です。

なんとか先日wgetを導入できました。
私の実験環境だと、/mnt/disk1/devel/etcがchroot後の/etcとなるわけですが、ここにあるresolv.conf・nsswitch.conf・netinfoを外部に接続できるように編集してwgetを利用します。
ちなみに、開発環境で構築される/etcは標準ファーム・フラッシュブートの/etcとは違いますので、

~ # rm -R /mnt/disk1/devel/etc
~ # cp -a /etc /mnt/disk1/devel/etc


と、削除・コピーで横着をしました。それぞれの編集内容は「外部への接続設定」でまとめておきました。
まとまりのないブログで自分で自分の記事探すのも大変ですので(笑)。

準備が整い次第、/mnt/disk1/develにchrootします。

~ # chroot /mnt/disk1/devel


そして今回は・・GNU tarを導入してみます。

~ # wget ftp://tron.um.u-tokyo.ac.jp/pub/GNU/tar/tar-1.18.tar.gz
~ # tar xzvf tar-1.18.tar.gz
~ # cd ./tar-1.18/
~/tar-1.18 # ./configure


と一気にやってみます。

回顧録のようになって申し訳ないんですが、なぜGNU tarなのか。
いや・・この数日、Busyboxのtarで「Invalid tar magic」に何回も遭遇し、原因も突き止められず対処法もわからずグダグダしていたら、過去に何度も目にした言葉を思い出したんです。

「Busyboxのtarは駄目駄目だ」
「パーミッションを落としてリンクもサポートしていない」


いや・・意味がわからなかったのであまり気にもせず、「へぇそういうものか」くらいにしか読んでいませんでした。
自分がブチあたって初めて

「このことかっ!!!!」

と気づいた次第です。sushi-kさんが用意してくださった玄箱PRO用GNU tarを使えばひとまず「解決」なんですが・・まぁあくまでも目的は「Linuxの勉強」ですから、今回は苦しみながら自力でやってみます。

それはそうと、configure。
これは無事に完走したようです。そこでおりゃっとmake。
するとエラーを吐いて止まりました。

modechange.c: In function `mode_compile':
modechange.c:159: error: `S_IRWXUGO' undeclared (first use in this function)
modechange.c:159: error: (Each undeclared identifier is reported only once
modechange.c:159: error: for each function it appears in.)
make[3]: *** [modechange.o] Error 1
make[3]: Leaving directory `/root/tar-1.18/lib'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/root/tar-1.18/lib'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/root/tar-1.18'
make: *** [all] Error 2


このmodechange.cの159行目が

mentioned = (mode & (S_ISUID | S_ISGID)) | S_ISVTX | S_IRWXUGO;


となっていますが、S_IRWXUGOでググっても要領を得ません。
実はこの段階で悩んで調べて4日目だったりします(笑)。
configureに何かオプションをつければいいのかと思い、READMEやconfigure --helpとか読んだのですが、英語の理解力不足もあり解決しておりません。



どうやらまたまた長いトンネルに突入したみたいです。
まぁ合間にこちょこちょ遊びを入れながらじっくり勉強してみます。
別窓 | 標準ファームで遊ぶ | コメント:0 | トラックバック:0
∧top | under∨

外部への接続設定

玄箱PROはLAN内での接続を想定しているため、初期状態ではインターネットにつながる設定がされていないそうです。
実際、設定を変更しない限りwgetなどでも

wget: SITE NAME : Unknown host
というようにきちんと動作しません。

ということで、設定ファイルを編集します。

/etc/netinfo
サーバとして玄箱PROを稼働させるなら、my_ipaddressの右辺は固定IPアドレスを入れた方がいいかもしれません。

my_ipaddress=dhcp
my_subnetmask=
my_dgw=ルータのIPアドレス



/etc/resolv.conf

nameserver ルータのIPアドレス



/etc/nsswitch.conf

hosts: files dns


これだけだそうです。
別窓 | memo:構造 | コメント:0 | トラックバック:0
∧top | under∨
| 玄箱Pro、直します。 |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。