〜2002年11月下旬〜
IDEAを組み込む。 ftp://ftp.gnupg.org/pub/gcrypt/contrib/idea.cにあると、 あちこちに書いてあるが存在しない。じゃあ今はどこにあるかというと http://www.gnupg.org/why-not-idea.htmlを見ると ここにある。と思ったら周りにはPGP 2.xを使ってる人はいなかった。 とりあえず今のところは必要ないな。
keyringを使い分けたかったのは 署名つきの配布ファイルのverifyをしたいんだけどkeyはなんとなく別にした いなどと考えたから。
% cd ~/.gnupg % echo no-secmem-warning >null.conf % gpg --options ~/.gnupg/null.conf --no-default-keyring \ --keyring ~/.gnupg/soft.gpg --import gnupg-sigkey.html gpg: keyring `/home/watanabe/.gnupg/soft.gpg' created gpg: key 57548DCD: public key "Werner Koch (gnupg sig) <dd9jn@gnu.org>" imported gpg: Total number processed: 1 gpg: imported: 1
てな感じでsoft.gpgを作ってgpg.confのほうに
keyring soft.gpg
を加えれば区別しないで使える。実際にさっき取ってきたidea.c.gz.sigで試すと
% gpg --verify idea.c.gz.sig gpg: Signature made Mon Aug 5 18:21:54 2002 JST using DSA key ID 621CC013 gpg: Can't check signature: public key not found
ってあれ?IDが違うじゃん。もう。 OpenPKSDでIDを入力して検索したら出てきた。soft.gpgにimportしてverifyしてみると
% gpg --verify idea.c.gz.sig gpg: Signature made Mon Aug 5 18:21:54 2002 JST using DSA key ID 621CC013 gpg: Good signature from "Werner Koch <wk@g10code.com>" gpg: aka "Werner Koch <wk@gnupg.org>" gpg: checking the trustdb gpg: checking at depth 0 signed=0 ot(-/q/n/m/f/u)=0/0/0/0/0/1 gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: ECAF 7590 EB34 43B5 C7CF 3ACB 6C7E E1B8 621C C013
となった。よさげだ。後でlsignしとこう。
こういうものだったら一時的にkeyringを作って、 それを使ってverifyすればいいのかもしれない。 こんな感じで。
% gpg --options ~/.gnupg/null.conf --no-default-keyring \ --keyring ./idea.c.gz.gpg --import wk.key gpg: keyring `./idea.c.gz.gpg' created gpg: key 621CC013: no subkey for key revocation gpg: key 621CC013: invalid subkey binding gpg: key 621CC013: public key "Werner Koch <wk@g10code.com>" imported gpg: Total number processed: 1 gpg: imported: 1 % gpg --keyring ./idea.c.gz.gpg --verify idea.c.gz.sig gpg: Signature made Mon Aug 5 18:21:54 2002 JST using DSA key ID 621CC013 gpg: Good signature from "Werner Koch <wk@g10code.com>" gpg: aka "Werner Koch <wk@gnupg.org>" gpg: checking the trustdb gpg: checking at depth 0 signed=0 ot(-/q/n/m/f/u)=0/0/0/0/0/1 gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: ECAF 7590 EB34 43B5 C7CF 3ACB 6C7E E1B8 621C C013
使い終わったidea.c.gz.gpgは捨ててもいいので気にする必要もない。
オプションは 3.2のときと同じ。
% mkdir linux; cd linux % CFLAGS=-Os CXXFLAGS=-Os ../configure --enable-languages=c,c++ \ --with-system-zlib --enable-sjlj-exceptions --enable-threads \ --disable-version-specific-runtime-libs --disable-nls \ --without-included-gettext --without-catgets % make BOOT_CFLAGS=-Os STAGE1_CFLAGS=-Os CFLAGS=-Os \ DEBUG_FLAGS= CONFIG_CXXFLAGS='-ffunction-sections -fdata-sections' \ bootstrap
Rubyで試したが問題なし。
更新。
久し振りに上げてみた。特に問題ない。
更新。
第1特集に「Linuxクロス開発環境構築入門」とある。 これがまた近年まれに見るツッコミどころ満載の内容だ。
まず3章に分かれているが、そのうちの2章分がCygwinに関する記事。 看板に偽りあり。
Cygwinのmkpasswdで作った/etc/passwdだとシステムと整合が取れなくなることがあるという。 そんな経験は今まで一度もないが、 筆者はなんと/etc/passwdのパスワードフィールドを空にし、 更にwindowsのパスワードも空にしろと言う。 いちおうセキュリティに注意しろと但し書きはあるが、 解決法としては全くもって話にならない。 あ、ここではNT系を使用する場合について書かれている。
windows上ではドットファイルを作成できないと言い切っているが、 それはexplorerの仕様なだけ。コマンドプロンプトでいくらでも作れる。 ひょっとしてコマンドプロンプトはwindowsではないとでも?
bashが.bashrcをログイン時に読んでくれないので/etc/profileに
source .bashrc
を追加したとある。 マニュアルを読んだことがないらしい。.bash_profile。
ここで突然tar --helpの全内容が2ページ丸々使って掲載されてる。 そんなものは実行すればいつでも見られる。
日本語を扱うためにjvim3を自分でmakeする話。 iconvもあるしvim6をmakeし直せばいいじゃんともいえるけど、 ま、それは置いといて、viという名前で呼べるように
$ ln -s -f /usr/local/bin/vim.exe /bin/vi.exe
とするあった。ということはvimという名前で呼んだときにはどうするんだろう? というかPATHの設定で/usr/local/binのほうが先になってないのか?
たった5行の修正個所を示すために3ページ半を費やす。diffを知らないらしい。
「-eオプション, -fオプションを使用すると正規表現が使用できます.」 まるで指定しなきゃ使えないような書き方だ。
sedを使う例。
sed 's/^int/long/g' test.c | sed 's/iTestcnt/lTestcnt/g' >hoge.c
まあ、ここをツッコむのはちょっと可哀想ではあるが、^を使うならgは要らないし、 sedを2回呼ぶ必要もない。
sed -e 's/^int/long/' -e 's/iTestcnt/lTestcnt/g' test.c >hoge.c
か
sed -e 's/^int/long/;s/iTestcnt/lTestcnt/g' test.c >hoge.c
で十分だ。
ls -Alの結果を作成日順に並べる例。
ls -Al /usr/include/*.h | sort +5
誌面でもソートされていないのが一目でわかる。
Apr 26 2001 Apr 26 2001 Dec 5 2000 ...
英語の月の名前でソートしてどうする? サイズでソートにしとけばよかったのにねえ。
クロスbinutilsを作る話。 configureに--prefix=/usr/localとわざわざ指定してるのに、 できあがったMakefileを書き換えてprefix = /opt/shにしろと言う。 だったらなぜ最初から--prefix=/opt/shと指定しない?
「autoconfはクロスコンパイルに完全対応できていないので, configureの際にコンパイラを変更しない」 autoconfが対応してないのではなく、 各アプリケーションのconfigure.ac(in)が対応していないというべき。 このあとで--prefix=/hogeとして一度ホスト上の環境でconfigureを実行し、 できあがったMakefileのgccやarなどを書き換えろと言う。 そういえば一度も--targetや--hostや--buildといったオプションについて書かれていない。 autoconfのマニュアルも読んだことがないらしい。
結局ApacheはnativeのMakefileを参考にshell scriptを作ったようだ。 その内容が3ページほど。
# tar cvxf httpd.tgz *
は単なるtypoだと思うけど、xとzはキーボード上で並んでるしね。 こうすると2度目は困るからhttpd.tgzは別の場所に作ったほうがいい。 そういえばたまにtarballの中にtarballが入っていたりすることがあるけど、 こうやって作ってる人が結構いるってことか。
--prefix=/hogeで作ったから正しいpathに変更しろということだが、 変更後しかないのでどこを変更したんだかわからない。 見た目だと2つしかない。なんのためにsedを紹介したのだ。
その後も無駄と思えるようなリスト満載。 このへんで勘弁してやろう。というか勘弁してよ。疲れた。
西田さんのBusyBoxの記事はいつもながらいいねえ。 先が楽しみ。
Changesを見ると
- Export fseeko and ftello. (Jason Tishler)
ということなのでRuby 1.7のconfig.cacheを消してIO#seekを試す。 large fileではないが普通の小さいファイルで問題なしなのでとりあえずok。
1.7をmingw32でmakeしたらdln.cでエラー。MAXPATHLENが定義されてないという。 なぜか#ifdef USE_DLN_A_OUTの中にMAXPATHLENの定義が移動している。 で、前に移動したわけだけだが、結局は [ruby-dev:18939]となった。
ext/extmk.rbで
$continue = mflags.include?(?k) $dryrun = mflags.include?(?n)
で判断してるが、長いオプションを指定したときまずいねえ。 たとえばCygwinではMAKE_MODE=--unixを必ず指定することになるけど、 これにはnが含まれているから常にdryrunフラグがonになってしまう。 現在は
$mflags.unshift("INSTALL_PROG=install -m 0755", "INSTALL_DATA=install -m 0644") if $dryrun
となっていてこの2つのマクロが置き換わるだけなので特に問題はないが。 いや、installコマンドでインストールすることになるのはやはり問題か。
$continue = mflags[/-k\b/] $dryrun = mflags[/-n\b/]
とするか。
上記のよう変更してmake -nしてみたが、$dryrunは真にならない。 調べてみると環境変数MAKEFLAGSが" --unix -n"になり、
" --unix -n".split(nil, 2)
の結果が
["--unix", "-n"]
なので
mflags, = mflags.split(nil, 2)
を実行するとmflagsは"--unix"になってしまうからだ。 位置を決め打ちしてるのはまずいなあ。ここは
if mflags = ENV["MAKEFLAGS"] mflags, = mflags.split(nil, 2) else mflags = ENV["MFLAGS"] || "" end $continue = mflags.include?(?k) $dryrun = mflags.include?(?n)
を
mflags = ENV["MAKEFLAGS"] || ENV["MFLAGS"] || "" $continue = mflags[/-k\b/] $dryrun = mflags[/-n\b/]
とすればよさそう。
てゆかdryrunのときになぜ置き換える必要があるんだろう? 単に
install -m 0755 curses.so /usr/local/lib/ruby/1.7/i386-cygwin
のように表示させたかったから?たしかに
/home/watanabe/ruby/cygwin/miniruby.exe -I/home/watanabe/ruby/cygwin \ -I/home/watanabe/ruby/ruby/lib -r ftools -e \ 'File::install(ARGV[0], ARGV[1], 0555, true)' \ curses.so /usr/local/lib/ruby/1.7/i386-cygwin
と表示されたら欝陶しいとは思うけど。 あ、0755と0555と違いがある。というか0755で十分だな。
sortが使えるというよりもsortコマンドの紹介なので、 lsで解決してしまっては意味がないのは全くもっておっしゃる通りです。 どっちにしろ例が悪かったと言えます。 ここでは順番に
grep, sed, awk, perl, ruby, uniq, tr, sort
の各コマンドを説明してます。
mswin32版1.6が非常に遅いという話題はすでに何度か出てます。1.7では速くなってます。 [ruby-list:27694]や [ruby-dev:12224]あたりを参照してください。
更新。
MinGWは pdcursesでいけるかと思ったらlibpanel.aの作りがまずいらしく、dllを参照してしまうようだ。 自分でmakeするか。
19は岡平健治、岩瀬敬吾で、フリッパーズギターは小沢健二、小山田圭吾。 どっちも「けんじ」と「けいご」だったことに気づく。
GCC 3.2.1では例の警告が出なくなったようだ。
% gcc -V 3.2 -I/usr/local/include -c hoge.c cc1: warning: changing search order for system directory "/usr/local/include" cc1: warning: as it has already been specified as a non-system directory % gcc -V 3.2.1 -I/usr/local/include -c hoge.c
まあ、意味のある警告とも思えないしね。かなり不評だったんだろう。
そろそろpushしようかと思ったら、そのまま採用されていた。
640MBのMOをmtoolsでアクセスしようと思ったら
% mdir m: Total number of sectors not a multiple of sectors per track!
と言われた。~/.mtoolsrcに
drive m: file="/dev/sda"
と書いただけじゃだめみたいだ。230MBはこれでいいんだけどなあ。 とりあえず今使ってるmtools 3.8というのはあまりにも古すぎるので最新を試す。 ここがmtoolsのweb pageらしい。
% CFLAGS=-Os ./configure --prefix=/usr --sysconfdir=/etc % make % sudo make install
早速試すと
% mdir m: Total number of sectors not a multiple of sectors per track! Add mtools_skip_check=1 to your .mtoolsrc file to skip this test
とヒントが出た。 仰せの通りmtools_skip_check=1を追加したらアクセスできるようになった。
Clip-Onのハードディスクを換装した時に、40GBのハードディスクが余ったわけだが、 一年以上経った今頃になって活用することを思い立つ。 てゆか忘れていた。大掃除してたら出てきたのだ。 /dev/hdcの8GBにある旧環境はすでにアクセスしてないので、 外してそこにつなげることにする。 とりあえずSoftwareDesignの11月号についてきたPlamo 3.0をインストールすることにした。
例によって普通じゃない方法でインストールする。 /cdrom/AT/FD/initrdの中身を取り出してコピー。
% sudo mount -r -o loop /cdrom/AT/FD/initrd /mnt % mkdir /tmp/plamo-3.0 % cd /mnt % sudo cp -av . /tmp/plamo-3.0
chrootしてsetupを起動。
% sudo chroot /tmp/plamo-3.0 /bin/sh --login # setup
あとは普通に進める。と思ったが、proc fsがないから失敗。
# mount -t proc proc /proc
してからもう一度setup。 進めるうちにext3fsやreiserfsが選べるようになってることがわかり、 ext3fsにしたくなる。が、今のカーネルはモジュールを作ってない。 というわけで、ext3を作る。 てゆかフロッピー2枚(bootdsk, rootdsk)用意すればいいだけの話ではあるが。
ただext3モジュールを作るだけじゃつまらないので、 ついでに2.4.20-rc4に上げる。 などと本筋とは関係ないことばかりしてるから時間がなくなる。 Plamo 3.0のインストールはまた明日。
昨日のつづき。同じように進めて /bootは別のパーティションにしてhdc1として用意。 あとは適当にスワップパーティションを切って、残りを/へ。 ext3を選んでフォーマット。
実際にインストールするとこで
BusyBox v0.61.pre (2002.08.04-11:05+0000) multi-call binary Usage: sort [-n] [FILE]...
とBusyBoxのsortが文句を言う。
# grep sort /usr/lib/setup/*
してみると-uオプションを使っているのがまずいようだ。 メッセージにも-nオプションしか対応してない様が現われているし。 気持ち悪いので中断し現環境のsortをコピーして使うことにした。 sortはつい この間uClibcでstatic版を作ってあるからそのままどこでも動くようになっている。 というかPlamoのインストールディスクはuClibcで作ってあるので、 staticじゃなくても大丈夫か。
あとは全く問題なし。
で、なんでこんな変な方法でインストールしてるかというと、 普通にインストールディスクから立ち上げると、 その間は他のことができないから。 それに今回のsortのように何かあったときも簡単に対応できる。
ChangeLogを見ると、結局2.4.20-rc4がそのまま2.4.20としてリリースされた模様。
xf86configなんて久し振りに起動した。 が、できあがったXF86ConfigはいまいちのようでちゃんとXが立ち上がらない。 X -configureの結果とミックスさせてみる。よさそうだ。記念に XF86Configを置いとく。
Plamo 3.0は東雲フォントがdefaultで入ってるようだ。 cmailはボールド体が結構使われているんだということに気づく。
今までの環境の/usr/local,/home/watanabeをそのままコピー。 glibc 2.3.1はtarballを残しておいたのでそのまま展開。 これでほとんど移行完了。
ppxpでダイアルアップしてみるとアクセス権限がないという。 /etc/groupのttyにwatanabeを追加。もう一度。 今度はシリアルが初期化できないという。そういえばirqの設定をしていない。
% sudo setserial /dev/modem port 0x3e8 irq 5 spd_vhi
でいいはず。と思ったら、/etc/sudoersに登録してない。 suしてvisudoを実行しwatanabeを登録。再度setserialを実行。 これでppxpはok。sshでheliumにloginしようしたら、 heliumなど知らんという。dnsmasqを入れてなかった。あ、dhcpdも入れてない。 こいつらを立ち上げてやっとheliumに入れた。wwwoffleも忘れてた。これは後にしよう。 fetchmailでメールを取ってくる。okだ。
おいらと同い歳らしい。