Skip to main content

ログ取得ツール

Category: GNU/Linux

xps2txt.py

ここの続き。「とりあえずパス」と言いつつ、書いてみたので公開しておくよ。 xps2txt.py

# python xps2txt.py hogehoge.xps
  :

ページに含まれるテキスト情報だけ抜き出して表示する簡単なプログラムです。少なくとも、Vistaのメイリオの情報(microsoft.com)のXPSは正常と思われる程度に処理できました(Windowsを使っていないので本当にこういう内容のファイルなのかは不明)。 「XPSのサンプル(microsoft.com)」と称されるものはLicense Agreementを読む気になれず手元にないので試していません(たぶん大したことは書いてないと思いますけど>ライセンス)。機能がtext変換という単純なものなので、問題があるにしても多少の変更でどうにかなると思います。「FixedDocSeq.fdseqとFixedDocumentSequence.fdseqの問題」にはやられたけど。ひどいなこれは(笑)。本来のrootは別のファイルらしい。これから探します。 いずれHTMLかOpenDocument(odt)くらいに変換したいなぁ。まあでもtextの次はreStructuredText(planewave.org)とかWiki形式かな。 もしかしたら今後も続くかもしれないので、gitのリポジトリを公開しておきます。

# cg-clone /xps.git/

Fedora Core 5/6のpython setup.py bdist_rpmが壊れている

Pythonのモジュールをインストールするのにbdist_rpmを使ってrpmから入れている人で、Fedora Coreでこんな感じのエラーになるときは、

Checking for unpackaged file(s): /usr/lib/rpm/check-files /usr/tmp/scanf-1.1-1-buildroot
error: Installed (but unpackaged) file(s) found:
   /usr/lib/python2.4/site-packages/xxxx.pyo
 
 
RPM build errors:
    Installed (but unpackaged) file(s) found:
   /usr/lib/python2.4/site-packages/xxxx.pyo

こうゆうふうに変更するとよい。/usr/lib/python2.4で以下のパッチを当てる。 root# patch -p1 < patch-file

--- python2.4/distutils/command/bdist_rpm.py.orig	2007-01-19 18:57:07.000000000 +0900
+++ python2.4/distutils/command/bdist_rpm.py	2007-01-19 18:57:43.000000000 +0900
@@ -488,6 +488,7 @@ class bdist_rpm (Command):
             ('build', 'build_script', def_build),
             ('install', 'install_script',
              ("%s install "
+              "--optimize 1 "
               "--root=$RPM_BUILD_ROOT "
               "--record=INSTALLED_FILES") % def_setup_call),
             ('clean', 'clean_script', "rm -rf $RPM_BUILD_ROOT"),

RedHatのbugzilla(redhat.com)より。upstreamの問題として報告してclosedにされてしまっている。rpmを作るときに修正できる(し、その方法も分かっている)のに放置とは、いいかげんなものだ。 rpmに入れる場合のパッチは以下の通り。変更内容は同じです。

--- Python-2.4.4/Lib/distutils/command/bdist_rpm.py.orig	2007-01-20 09:56:37.000000000 +0900
+++ Python-2.4.4/Lib/distutils/command/bdist_rpm.py	2007-01-20 09:57:03.000000000 +0900
@@ -488,6 +488,7 @@ class bdist_rpm (Command):
             ('build', 'build_script', def_build),
             ('install', 'install_script',
              ("%s install "
+              "--optimize 1 "
               "--root=$RPM_BUILD_ROOT "
               "--record=INSTALLED_FILES") % def_setup_call),
             ('clean', 'clean_script', "rm -rf $RPM_BUILD_ROOT"),

青空文庫2odt

正月休みを利用して、青空文庫のファイルをOpenDocument(OpenOffice.org 2.0とかで使われているドキュメントフォーマット)に変換するスクリプトを書いてみました。 まだイマイチなところもありますが置いておきます。odt.py zipの状態でも食わせることができます。

# python odt.py 789_ruby_5639.zip saruno_koshikake.txt
789_ruby_5639.zip -> wagahaiwa_nekodearu.odt
吾輩は猫である 夏目漱石
saruno_koshikake.txt -> saruno_koshikake.odt
さるのこしかけ 宮沢賢治

もともとはOpenDocumentのフォーマットを調べてみるのが目的でした。縦書きにしようと思いましたが普通にやると(OOoのバグだと思いますが、)ルビがずれるので…直す方法はあるらしいですが、横書きのままで。

低レベル関係

最近は低レベル系の人が張り切ってますね。一応言っておくと「低レベル」と言っても技術者の言う「低レベル」は一般の人の意味とは違います。レイヤが低いという感じの意味ですね。 というわけで私もBinary Hacks(amazon.co.jp)という本が意外に面白いので買ってみたり。この本は100個の"Hack"と称して低レベルな話が載っていますが、誰しも101個目のHackを持ってるんじゃないでしょうか。私はあまり凄い人ではないので、あの本よりも高いレイヤにはなってしまいますが、役に立ちそうなものを1つ紹介しておきます。 ★Hack #10101 initrdで遊ぶ Linuxのブート時のある時期に、initrdというファイルが読み込まれます。ブート時に指定できるんで、指定しなければ読み込まれないんですけど、grubもliloもsyslinuxもpxelinuxもinitrdを読み込む機能はついていますから、普通は読み込む。そんでこのinitrdの内容が一旦/としてマウントされた状態になるんです。本来の/がマウントされる前にちょっとした処理ができるようになっている。 initrdのフォーマットは昔はext2とかのファイルシステムが圧縮されたものだったんですけど、最近はcpioが圧縮されたものになってます。通常このinitrdファイルを作るのはmkinitrdというコマンドで、中身はスクリプトになってます。特に難しいことはしていません。nashがinitとして動いてモジュールをロードしてデバイスを作り、マウントして/を切替えているだけです。 nashは大したスクリプト言語ではなく、条件判断もできませんが、insmodやmount、echo、sleepなどの内部コマンドの実行に加えて、外部コマンドを呼び出すことができます。mkinitrdが作るinitrdのnashスクリプトは、initrdの中に入っているディスクのドライバモジュールを読み込んでmountするわけです。サンプルを見たいなら、gzip+cpioでシステムのinitrdファイルを展開してスクリプトを見てみるといいです。man nashにも有用な情報が書いてあります。 initrdとnashを応用すればいろんなことができます。1FD LinuxやCDで上げるLinuxではけっこう変なinitrdが使われてるんじゃないかなという気がする。 ●カーネルのリコンパイルなしでNFS Rootを実現する 例えば、NICのドライバを読み込んで自分のIPアドレスを設定し、NFSのドライバを読み込んでNFSを/にマウントすることもできます(nashの内部マンドのmountはNFSに対応していないので外部コマンドとしてinitrdの中に入れる必要があります)。普通はNFSを/にするにはカーネルをリコンパイルする必要がある、とされていましたが、initrdに必要なドライバとスクリプトを入れておけばわざわざリコンパイルする必要はなく、ディストリビューションのカーネルをそのまま使うことができます(少なくともRed Hat Enterprise Linux 4系やFedora Core 3〜5は大丈夫でした)。 とは言え、システムにはNFSで他のマシンと共有できないディレクトリもありますので、Root環境を快適に使うにはもう少しの工夫は必要になります(大したことではないです。/var/runや/var/lock/subsys、/etc/mtabの処理とかそういう)。 NFSと同じ要領で、iSCSIを/にマウントすることもたぶんできます(iSCSIrootは私はやったことがないです)。 ●tmpfs rootでディスクレス環境 また、本来の/自体を全部initrdの中に埋め込んでおき、tmpfsを/にマウントしてファイルを展開してswitchrootしてディスクレス環境に、というのもなかなかおもしろいテクニックです(これが意外に快適なんです!)。 ●まとめ initrdはちょいと遊ぶに値するということを説明しました。面倒なので実例は出してませんが、暇ができたら遊んでみるといいと思いますよ。ブートローダにもよりますが、けっこう無謀なこともできちゃいますので。

FC6にしてみた

そうそう、自宅でメインに使っている環境をFedora Core 6にしてみた。なかなか快適だ。最初にしたことは、ExtrasからXEmacsとskk関連を入れたことと、Firefox 2.0にしたこと。 やり方としては、今回は豪快に行くことにした。まずFC6のインストールCDから「linux rescue」でブート、既存のボリュームをマウントして/home以外を全部消去した。アップデートにすりゃいいとも思うけど、アップデートはちょっと信用していないので。その後mkfsしないように注意しながらインストール。Fedoraならここでインストーラのバグでmkfsしちゃう、なんていうお茶目な面を見せてくれるかな、という期待もあったが、無事に動いてしまい、homeは残ってFC6が起動してしまった。 tar.gzで入れたFirefox2のFlash PlayerとかがSELinuxのせい(?)でうまく動かなかったりしたけど、restoreconしたら直った。あとは別に問題はない。たまにdmesgで確認してrestoreconする程度だ。まあ、まだあんまり使ってないからな。 とりあえず、scim-skkがおかしい。普通に書いているつもりなのに、突然使えなくなる。これは常用に耐えないな。mozexのFirefox2対応のやつを入れてしのいでいる。これまでFC4で使っていたuim-skkはけっこう快適だったので、uim-skkを入れてみようと思う。 あとこのThinkPadではサスペンドからの復帰で不安定になる。ハイバネーションからだと安定しているが、なぜかyumのアップデートが効かなくなる。リブートすれば直るという不思議。ファイルのロックの関連が復元できていないのかもしれない。よくわからないので電源はつけっぱなし。 思えばFC4の時代もサスペンドは不安定なので使っていなかった(そもそもハイバネーションの機能はなかった)。大昔のノートPCはOSはほとんど何もしなくてもサスペンドやハイバネーションができていたのだが…。

家からメールが送れない?

mewが勝手にアップデートされていて、SMTP-AUTH用のヘッダを返すサーバにはSMTP-AUTHされるようになり、メールが送れなくなってしまった。解決策は以下の1行。

(setq mew-use-smtp-auth nil)

Fedoraのsendmailはsendmail.mc等でSMTP-AUTHに非対応にしたつもりでも見栄を張ってAUTHをつけてしまうようだ。sendmailやcfも近い時期にアップデートされていたので、sendmail側のせいだと思ってしまっていた。実際どちらが悪いのかわからないが。

zshでdaemonを呼ぶと/sbinに移動する?

zshで、思うがままに「daemon」と打ち込んでみた。 なぜか次の瞬間、カレントディレクトリが/sbinに変更された。 type、which、where等で見る限り、daemonは定義されていないし、だいたい「demo」ディレクトリがあったりすると「zsh: correct ‘daemon’ to ‘demo’ [nyae]?」と出てくるくらいだ。ここで「n」にすると/sbinに飛ぶ。 謎だ。 ならない環境もある。zsh -f(rcファイルを読み込まない)で起動するとダメだ。/.zshrcを読み込むと移動する。しかし/.zshrcその他にはdaemonなんて文字は書いていない。もう原因がわからなくて泣きそうなんですけど、これってオレが悪いの?? ちなみに「dragon」と打ち込んでも何も起こらなかった。