〜2001年8月中旬〜
rm,ln,cpぐらいはstaticにリンクしたくなる。 ls --versionしてみると3.16だったのでついでにバージョンも上げる。 手元には4.0と4.0rがあった。 4.0rはどこから取ってきたか記憶もないが、こちらを使うことにする。
% CC='gcc -static' CFLAGS=-Os ./configure \ --prefix=/usr --libexecdir=/bin --bindir=/bin % make % sudo make install
Linuxにはslnというプログラムがあるが、 -fオプションがないため
# sln -sf /lib/libc-2.2.3.so /lib/libc.so.6
ができない。これだけstaticにリンクしてあってもあまり意味がないねえ。
ついでに/bin/sh用にminimalでstaticなbashを用意しとこう。
% CFLAGS=-Os ./configure \ --prefix=/usr --bindir=/bin \ --enable-static-link --enable-minimal-config % make % sudo cp bash /bin/sbash % sudo ln -sf /bin/sbash /bin/sh % ls -l /bin/{,s}bash -rwxr-xr-x 1 root root 653100 Apr 1 23:29 /bin/bash -rwxr-xr-x 1 root root 561044 Aug 11 18:25 /bin/sbash
ま、こんなもんか。
メテオをくらい1時間半がパーに。 ああ、ユウナがものすごく弱くなった。
なんか今の自分にぴったりだ。 そうそう。ちゃんとminimalのbashでもbootできた。 この際ちゃんと FHS を見るかと思ったが、 全然つながらない。どこかに移動したのか?
やっぱ残ってる。
warning: multi-line string literals are deprecated
全然直す気はないようだ。
% time make dep clean bzImage modules make dep clean bzImage modules 5480.79s user 634.77s system 94% cpu \ 1:48:11.47 total
戦闘中にバグった。なにも受け付けない。ソフトリセットも効かない。
その後4回程親父と戦うが最終的にシュートされて全然歯が立たない。 あ、その前に召喚すればいいのか。 それはそれとして世界を旅することにしよう。
で、今日bootしなかったわけだが、 これは2.4.8が悪いのではなく、8GBのlimitに引掛ったため。 うーむ。GRUBなら大丈夫だと思ったんだけどなあ。
GRUBがだめならliloだよね。 Plamo 2.2は21.4なのでReiserFSに対応してないので、 最新のlilo 21.7-5を入れる。 普通にmakeするとtemp2.sでエラーに。as86が古い?
% grep as86 README*
してみるとREADME.common.problemsに
Problem: LILO won't 'make' ========================== If you get errors trying to 'make all', and the errors are occurring during the assembly of 'temp2.s', you have encountered the most common problem trying to build LILO: the lines in error all have the assembler directive 'near' on them. This problem occurs when your assembler for the real-mode bootstrap code is out-of-date: 'as86'. Certain current distributions of Linux distribute version 4 of this assembler; whereas the current version is 15. Two sources for an updated version are: Redhat RPM distribution: site: http://www.redhat.com (search for 'dev86') pkg: dev86-0.15.0-2.i386.rpm or Robert de Bath's page at: site: http://www.cix.co.uk/~mayday link: bin86-0.15.1.tar.gz
とある。やっぱそうか。まずはbin86をバージョンアップだ。 そのsite に行くと0.16.0が最新だったので、 これをインストール。これでliloのほうも無事にmake install完。
% cat /etc/lilo.conf boot = /dev/hdb1 #compact # faster, but won't work on all systems. delay = 50 vga = normal # force sane state lba32 # ramdisk = 0 # paranoia setting # End LILO global section # Linux bootable partition config begins image = /vmlinuz root = /dev/hdb1 label = Plamo2.2 read-only # Non-UMSDOS filesystems should be mounted read-only for checking # Linux bootable partition config ends % sudo /sbin/lilo Warning: /dev/hdb1 is not on the first disk Added Plamo2.2 *
/boot/grub/menu.lstには
title Linux 2.4.8 (Plamo 2.2) with lilo root (hd1,0) chainloader +1
を追加した。これでliloが立ち上がる。
でもrebootすると延々と0x40を表示する。READMEには
0x40 "Seek failure". This might be a media problem. Try booting again.
とあるが、全然解決しないよね。うーむ。media problemってほんとに壊れてる?
% df / Filesystem 1k-blocks Used Available Use% Mounted on /dev/hdb1 19919956 7408252 12511704 37% /
あ、まだ8GB越えてないじゃん。ってことはほんとに読めないのか?
% su # mv /vmlinuz{,.bad} # mv /vmlinuz{.old,-2.4.7} # mv /System{.old,-2.4.7} # cp /usr/src/arch/i386/boot/bzImage /vmlinuz % sudo /sbin/lilo Warning: /dev/hdb1 is not on the first disk Added Plamo2.2 *
として、/vmlinuz.oldは大事に取っておく。 もう一度reboot。
立ち上がるじゃん。GRUBのほうも問題ない。
でもこれだけじゃやっぱわからないなあ。 2GBほどのファイルを作ってちゃんと越えてみるか?
% dd if=/dev/zero of=dummy bs=1024 count=$((1024*2048)) % df / Filesystem 1k-blocks Used Available Use% Mounted on /dev/hdb1 19919956 9508860 10411096 48% /
だから、間違えなく越えてる。
% su # mv /vmlinuz{,.ok} # cp /usr/src/arch/i386/boot/bzImage /vmlinuz % sudo /sbin/lilo Warning: /dev/hdb1 is not on the first disk Added Plamo2.2 *
もう一度reboot。
だめだ。LILで止まる。GRUBのほうも
Error 18: Selected cylinder exceeds maximum supported by BIOS
って、やっぱ8GB越えたらだめなBIOSだよ。 でも前に試したときはliloでちゃんとbootできたはずなんだけどなあ。
とりあえずは旧環境のパーティションにkernelだけ置くことにする。 /boot/grub/menu.lstはこんな感じ。
title Linux 2.4.8 (Plamo 2.2) kernel (hd2,4)/vmlinuz-2.4.8 root=/dev/hdb1 ro
(hd2,4)つまり/dev/hdc5にkernelを置いている *1。
結論: /bootを別パーティションに用意せよ。 いい機会だから LFS か?
全然終わらせるつもりはなかったんだけど、 心づけの先生に1ギルずつ払ってたら親父に勝ってしまった *2。 バハムートを温存して様子見のつもりだったのに。 その後のラスボス戦はもうぬるすぎ。 The Endを見たのは夜中の3時。最後のセーブポイントから1時間半も拘束されたよ。
結論: ユウナにはガ系黒魔法と連続魔法と竜剣。
なにげなくvi foo.bakするとなぜかINSERT MODEになる。 modelinesにでも入っているのかと思えばそうでもない。 全然原因がわからなかったんだけど、ふと
% ls -l ~/.jvimrc*
してみてはたと気づいた。set fexrcのせいか。
% diff -u1 ~/.jvimrc{.bak,} --- /home/watanabe/.jvimrc.bak Thu Jun 28 13:03:07 2001 +++ /home/watanabe/.jvimrc Thu Jun 28 13:03:36 2001 @@ -1,3 +1,2 @@ set autoindent -set im set fexrc
以前set imを試したときのbackup fileが~/.jvimrc.bakとして残っている、 しかもset fexrcしてるから~/.jvimrc.bakも読まれる。うーむ。 なかなかトリッキーだ。
なんでかな? 特にディレクトリとか指定しなくても/usr/includeと/usr/libにあるから、 見つかるはずなんだけど。
あ、/usr/include/X11/X.hその他がないじゃん。
% tar tfvz tcltk-20001125-1.tar.gz |grep X11 % tar tfvz tcltk-20001125-1-src.tar.gz |grep X11 drwxrwxr-x cgf/group 0 2000-12-05 12:37 tcltk-20001125-1/tk/xlib/X11/ -rw-rw-r-- cgf/group 18382 2000-02-07 09:19 tcltk-20001125-1/tk/xlib/X11/X.h -rw-rw-r-- cgf/group 2518 2000-02-07 09:19 tcltk-20001125-1/tk/xlib/X11/Xatom.h -rw-rw-r-- cgf/group 1720 2000-02-07 09:19 tcltk-20001125-1/tk/xlib/X11/Xfuncproto.h -rw-rw-r-- cgf/group 102687 2000-02-07 09:19 tcltk-20001125-1/tk/xlib/X11/Xlib.h -rw-rw-r-- cgf/group 20738 2000-02-07 09:19 tcltk-20001125-1/tk/xlib/X11/Xutil.h -rw-rw-r-- cgf/group 1953 2000-02-07 09:19 tcltk-20001125-1/tk/xlib/X11/cursorfont.h -rw-rw-r-- cgf/group 1501 2000-02-07 09:19 tcltk-20001125-1/tk/xlib/X11/keysym.h -rw-rw-r-- cgf/group 52429 2000-02-07 09:19 tcltk-20001125-1/tk/xlib/X11/keysymdef.h -rw-rw-r-- cgf/group 2209 2000-02-07 09:19 tcltk-20001125-1/tk/xlib/X11/license.terms
これってどういうつもりなんだろう。 Cygwin/XFree86 があるから、<X11/X.h>があったらかえって邪魔ということか?
更新。$(exec_prefix)/bin/rubyを使うようになったので、 RUBYOPT1, RUBYOPT2の指定はもう要らない。
たまにはちゃんと書いとこ。
% unzip -a rubywin-0.0.3.7.zip % cd ruby-0.0.3.7 % mkdir cygwin mingw % cd cygwin % i386-cygwin-ruby ../config.rb % make % i686-pc-cygwin-strip rubywin.exe % upx rubywin.exe % make install % cd ../mingw % i386-mingw32-ruby ../config.rb % make % i686-pc-cygwin-strip rubywin.exe % upx rubywin.exe % make install % cd .. % make -f ../Makefile.pack PACKAGE=rubywin VERSION=0.0.3.7 TARGET=i386-cygwin % make -f ../Makefile.pack PACKAGE=rubywin VERSION=0.0.3.7 TARGET=i386-mingw32
2,4,6,7,23巻を見つけた。後からでも全部見つけられるのかな?
cshのあの仕様は許せないと常々思っているので、 CSH_JUNKIE_QUOTESを設定してる人がいるとは思いませんでした。
% zsh --version zsh 4.0.2 (i586-pc-linux-gnu) % setopt cshjunkiequotes % run-help : No manual entry for : % unsetopt cshjunkiequotes % run-help : No manual entry for : %
4.0.2では問題ないようです。ってそういう話じゃない?
残りは20,22,26。20,22はもう行けないとこのような気がする。
digestが1.6にbackportされた。 try_runが使われているのでクロスコンパイルできない。
if try_run(<<SRC, $defs.join(' ')) #include "defs.h" int main(void) { #ifdef NO_UINT64_T ruturn 1; #else return 0; #endif } SRC then create_makefile("digest/sha2") else puts "** Cannot find a 64bit integer type - skipping the SHA2 module." end
実行しなくても、 要するにNO_UINT64_Tがdefineされてたらエラーになればいいわけで、 try_cppで十分だろう。こんな感じ。
if try_cpp(<<SRC, $defs.join(' ')) #include "defs.h" #ifdef NO_UINT64_T #error ** Cannot find a 64bit integer type - skipping the SHA2 module. #endif SRC then create_makefile("digest/sha2") end
メッセージは出す必要ない気がする。他の拡張ライブラリも出してないし。
"tanakasi"って人から「文書1.doc.bat」という名前のファイルが添付されたメールが来た。 って誰だよ、あんた?田中氏?
Hi! How are you?
だからSirCamだな。ったく、送るならOutlook同士にしてくれ。
扱いにくいのでhoge.batにrename。
% file hoge.bat hoge.bat: MS-DOS executable (EXE), OS/2 or MS Windows % i686-pc-cygwin-objdump -p hoge.bat |grep 'DLL Name' DLL Name: kernel32.dll DLL Name: user32.dll DLL Name: advapi32.dll DLL Name: oleaut32.dll DLL Name: kernel32.dll DLL Name: advapi32.dll DLL Name: kernel32.dll DLL Name: mpr.dll DLL Name: gdi32.dll DLL Name: user32.dll DLL Name: shell32.dll DLL Name: wsock32.dll DLL Name: wininet.dll % strings hoge.bat |grep Microsoft X-Mailer: Microsoft Outlook Express 5.50.4133.2400 X-MIMEOLE: Produced By Microsoft MimeOLE V5.50.4133.2400 Microsoft Word 9.0 Microsoft Word
MZで始まってるから実行ファイルとは思ったが。その他めぼしい文字列は
SOFTWARE\Borland\Delphi\RTL Portions Copyright (c) 1983,99 Borland
てな感じ。Delphiで作られてるのか。って解析してどーする。
tcshの$owdはbashやzshだと$OLDPWDになる。 なんか長くていやだなと思ったら
~-
というのがあった。ナイス。
tcshだと
% cd ~- -というユーザーさんはいらっしゃいません.
となかなかとぼけたメッセージを出してくる。 あ、ってことは-というユーザを作っちゃいけないわけか。
ちと早いのが気になるというか、 早く出さざるを得ない状況はやっぱやばめなんだろうとうちも早速更新だ。
そういえばいつからかmake oldconfigしてもmake cleanしろよと言われなくなってる。
*** End of Linux kernel configuration. *** Check the top-level Makefile for additional configuration. *** Next, you must run 'make dep'.
じゃ2.4.8のオブジェクトを残したままmakeしてみよう。
% make dep bzImage modules <途中略> aicasm/aicasm_scan.l: In function `yylex': aicasm/aicasm_scan.l:115: `T_VERSION' undeclared (first use in this function) aicasm/aicasm_scan.l:115: (Each undeclared identifier is reported only once aicasm/aicasm_scan.l:115: for each function it appears in.) aicasm/aicasm_scan.l:132: `T_STRING' undeclared (first use in this function) <後略>
がーん。やっぱだめか。 drivers/scsi/aic7xxx/aicasm/y.tab.hが更新されてないのが原因かな。
% cd drivers/scsi/aic7xxx/aicasm % make clean % cd - % make modules <途中略> unistr.c: In function `ntfs_collate_names': unistr.c:99: warning: implicit declaration of function `min' unistr.c:99: parse error before "unsigned" unistr.c:99: parse error before ')' token <後略>
とりあえず、aicasmのほうは解決。 今度はfs/ntfs/unistr.cなんだけど、これは根本的に何か間違ってる気がする。 明日make cleanしてからやりなおそう。
いやーもうすっかり秋ですね。って感じの涼しさだ。
make cleanしても結果は同じ。
原因はminマクロだ。include/linux/kernel.hに
#define min(type,x,y) \ ({ type __x = (x), __y = (y); __x < __y ? __x: __y; })
と定義されているが、fs/ntfs/unistr.cではkernel.hをincludeしてない。 #include <linux/kernel.h>を追加した。これで全部通った。
reboot後NTFSもちゃんとmountできた。
頻繁にkernelを上げてると、ALSAも上げなきゃいけないのがなんか面倒だな。 その点ppxpは必然的にethertapになったので楽になった。
なぜかホームディレクトリに*.wavがいっぱいある。 mp3は作った覚えがあるけど、 ふだんはpipeでエンコーダに渡してるからwavファイルはできないはず。 日付もmp3を作った日よりも後。
その日付の8月8日の日記を見るとxmmsとある。あ、Output Pluginの
Disk Writer Plugin 1.2.5j_20010621 [libdisk_writer.so]
か。ここに出てたのか。 てゆか突然8GB近くディスクを喰ってたのはこれが原因じゃん。
出たみたい。 差分のglibc-2.2.3-2.2.4.diff.gzですら4,200,722バイトってでかいね。
もうgcc 3.0に対応してるかもしれないけど、遅すぎるので2.95.3を使う。
% tar xfvz glibc-2.2.3.tar.gz % mv glibc-2.2.{3,4} % cd glibc-2.2.4 % gzip -dc ../glibc-2.2.3-2.2.4.diff.gz | patch -p1 % tar xfvz ../glibc-linuxthreads-2.2.4.tar.gz % mkdir linux; cd linux % CC=/usr/bin/gcc CFLAGS=-Os ../configure \ --prefix=/usr --enable-add-ons % time make make 10615.67s user 1690.72s system 91% cpu 3:44:59.57 total % make install install_root=$HOME/glibc-2.2.4 % mkdir ~/glibc-2.2.4/bin % cp /bin/bash ~/glibc-2.2.4/bin % cp /lib/libncurses.so.5 ~/glibc-2.2.4/lib % sudo chroot ~/glibc-2.2.4 /bin/bash bash-2.04#
dynamic link版bashが立ち上がったからok。あらかじめ別のktermで
% sudo /bin/sbash
しておいてから本番のinstallに備える。
% sudo make install
最後に
Your new glibc installation seems to be ok.
と表示された。問題ないようだ。忘れないうちに
% sudo make localedata/install-locales
しとく。これが実はとんでもなく時間がかかる。 1時間半経ってもまだ終わらない。 ja_JP.EUC-JPまで行ったからもうよしとした。 あとは後日暇なときにでも。
そういえば最近glibc-cryptも同梱されてる。 いつのまにかUSの輸出規制が緩和されてたのか。
結局SHARPの液晶カラーモニタをSofmapで買った。
ついでにPCもどーんとPentium4あたりにするつもりだ。 一気にクロック10倍化計画。 glibcも25分でmakeできるか?
その日の日記にもcd -を使ってるぐらいだし。
% cp ~-/foo.c .
みたいなことをしたいわけです。
でもおいらの感覚だとtcsh,bashって十分新人類だよなあ。 旧人類はcsh,shだと思う。
PV見て驚いたが、田島貴男がスカパラに入ったわけじゃないよね。
あいかわらず全然つながらない FHS と思ったらつながるし。 fj.unixによると ここ にもあるらしい。 早速fhs-2.2-stage-II-12-Jan-2001.tar.gzを入手しmakeしてみる。
% make groff -p -t -mm -Wall -M./tmac -Tps draft.mm > fhs.ps pstoedit -f pdf fhs.ps fhs.pdf make: pstoedit: Command not found make: *** [fhs.pdf] Error 127
mmマクロとはまたしぶいねえ。pstoeditはどうしようかな。 印刷するつもりもないし、とりあえずtextだけ見られればいいので
% make fhs.txt
した。
更新。あ、SciLexer.dllがすでにupx済みだ。
20000を越えた。