diary/Kojima/2005-09-05
の編集
http://plamo.linet.gr.jp/?diary/Kojima/2005-09-05
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
-- 雛形とするページ --
diary/Template
[[diary/Kojima]] ・OOo_2.0beta2_LinuxIntel_install_ja.tar.gz OpenOffice 2.0β2 だそうで試してみようかと思ったらバイナリを RPM 形式 でまとめてある状態.仕方ないので,rpm2targz で tar.gz に変換しようとし たら一つ変換できないのがあった. % rpm2targz openoffice.org-core06-1.9.125-1.i586.rpm gzip: stdin: unexpected end of file % 調べてみたら rpmoffset コマンドで正しく rpm 固有ヘッダの情報が返ってこない感じ. % rpmoffset < openoffice.org-core05u-1.9.125-1.i586.rpm 22037 % rpmoffset < openoffice.org-core06-1.9.125-1.i586.rpm % rpmoffset < openoffice.org-core07-1.9.125-1.i586.rpm 5569 % 一方、perl で書かれた rpm2cpio コマンドなら cpio に変換できるみたい. % rpm2cpio openoffice.org-core06-1.9.125-1.i586.rpm | cpio -t CPIO archive found! opt/openoffice.org1.9.125 opt/openoffice.org1.9.125/presets opt/openoffice.org1.9.125/presets/autotext opt/openoffice.org1.9.125/presets/autotext/mytexts.bau opt/openoffice.org1.9.125/presets/basic opt/openoffice.org1.9.125/presets/basic/Standard opt/openoffice.org1.9.125/presets/basic/Standard/Module1.xba .... とりあえず foreach i ( *.rpm ) ; rpm2cpio | cpio -i ; end で ./opt/ 以 下にファイルを取り出したら動いたみたいだけど,core06 だけ rpmoffset が 効かないのはちょっと気になるなぁ.. -上がっていたので見たら、かなり前の日記と気づいたので投稿するのは止めようかと思ったのですが、 せっかくなので、Plamo4.0xで何度か同じ現象に遭遇した時に調べてみたことを書いておきます。 Plamo4.0xのbasebinパッケージとPlamo4.2xのrpmtoolsパッケージに入っているrpmoffsetは、 たぶん同じものなのでしょうか。 最初vi rpmoffsetで強引に中を見たらegcs-2.91.60 19981201 (egcs-1.1.1 release)という文字列が見つかったので、 gccのバージョンの違いかと思ったのですが、そうするとほとんどちゃんと処理される理由がわかりません。 1999年版と2004年版のrpmoffsetのソースをダウンロードしてコンパイルしたものだとどちらもエラーになりません。 changelogを見るとおそらくそれ以前のソース、たぶん、 Mon Jan 25 21:57:21 CST 1999 slakware/a3/bin.tgz: Increased array size in rpmoffset to fix problems with some larger RPMs. この修正が入っていないソースをコンパイルしたものだと見当をつけました。 しかし1998年版のソースが見つからなかったので、 objdumpでアセンブラコードを出力してbasebinパッケージのものと新しくコンパイルしたものを見比べてみました。 8048576: 68 00 00 04 00 push $0x40000 804857b: e8 d4 fe ff ff call 8048454 <malloc@plt> 804840f: 68 00 00 20 00 push $0x200000 8048414: e8 cb fe ff ff call 80482e4 <malloc@plt> 上がbasebinパッケージのもの、下が新しくコンパイルしたもののmalloc処理の一部の抜粋です。 アセンブラは全然読めませんが-SオプションでC言語のソースと対比してみました。 新しくコンパイルしたもののソースは、 #define RPMBUFSIZ 2097152 省略 char *buff = malloc(RPMBUFSIZ),*eb,*p; こうなっていて、アセンブラにある0x200000というのは2M(2097152バイト)なので、RPMBUFSIZと一致します。 そうすると0x40000(256K, 262144バイト)がbasebinパッケージのrpmoffsetのmallocで 確保されるメモリーのサイズということになります。たぶん古いソースはRPMBUFSIZ 262144となっていたのでしょう。 これはrpmoffsetがRPMパッケージの先頭から読み込んで内容を調べるサイズなので、 RPM固有ヘッダ部分が262144バイトを超えるものはエラーになるのだろうと考えられます。 -- [[hatya]] &new{2006-10-21 (土) 23:20:00};
タイムスタンプを変更しない
[[diary/Kojima]] ・OOo_2.0beta2_LinuxIntel_install_ja.tar.gz OpenOffice 2.0β2 だそうで試してみようかと思ったらバイナリを RPM 形式 でまとめてある状態.仕方ないので,rpm2targz で tar.gz に変換しようとし たら一つ変換できないのがあった. % rpm2targz openoffice.org-core06-1.9.125-1.i586.rpm gzip: stdin: unexpected end of file % 調べてみたら rpmoffset コマンドで正しく rpm 固有ヘッダの情報が返ってこない感じ. % rpmoffset < openoffice.org-core05u-1.9.125-1.i586.rpm 22037 % rpmoffset < openoffice.org-core06-1.9.125-1.i586.rpm % rpmoffset < openoffice.org-core07-1.9.125-1.i586.rpm 5569 % 一方、perl で書かれた rpm2cpio コマンドなら cpio に変換できるみたい. % rpm2cpio openoffice.org-core06-1.9.125-1.i586.rpm | cpio -t CPIO archive found! opt/openoffice.org1.9.125 opt/openoffice.org1.9.125/presets opt/openoffice.org1.9.125/presets/autotext opt/openoffice.org1.9.125/presets/autotext/mytexts.bau opt/openoffice.org1.9.125/presets/basic opt/openoffice.org1.9.125/presets/basic/Standard opt/openoffice.org1.9.125/presets/basic/Standard/Module1.xba .... とりあえず foreach i ( *.rpm ) ; rpm2cpio | cpio -i ; end で ./opt/ 以 下にファイルを取り出したら動いたみたいだけど,core06 だけ rpmoffset が 効かないのはちょっと気になるなぁ.. -上がっていたので見たら、かなり前の日記と気づいたので投稿するのは止めようかと思ったのですが、 せっかくなので、Plamo4.0xで何度か同じ現象に遭遇した時に調べてみたことを書いておきます。 Plamo4.0xのbasebinパッケージとPlamo4.2xのrpmtoolsパッケージに入っているrpmoffsetは、 たぶん同じものなのでしょうか。 最初vi rpmoffsetで強引に中を見たらegcs-2.91.60 19981201 (egcs-1.1.1 release)という文字列が見つかったので、 gccのバージョンの違いかと思ったのですが、そうするとほとんどちゃんと処理される理由がわかりません。 1999年版と2004年版のrpmoffsetのソースをダウンロードしてコンパイルしたものだとどちらもエラーになりません。 changelogを見るとおそらくそれ以前のソース、たぶん、 Mon Jan 25 21:57:21 CST 1999 slakware/a3/bin.tgz: Increased array size in rpmoffset to fix problems with some larger RPMs. この修正が入っていないソースをコンパイルしたものだと見当をつけました。 しかし1998年版のソースが見つからなかったので、 objdumpでアセンブラコードを出力してbasebinパッケージのものと新しくコンパイルしたものを見比べてみました。 8048576: 68 00 00 04 00 push $0x40000 804857b: e8 d4 fe ff ff call 8048454 <malloc@plt> 804840f: 68 00 00 20 00 push $0x200000 8048414: e8 cb fe ff ff call 80482e4 <malloc@plt> 上がbasebinパッケージのもの、下が新しくコンパイルしたもののmalloc処理の一部の抜粋です。 アセンブラは全然読めませんが-SオプションでC言語のソースと対比してみました。 新しくコンパイルしたもののソースは、 #define RPMBUFSIZ 2097152 省略 char *buff = malloc(RPMBUFSIZ),*eb,*p; こうなっていて、アセンブラにある0x200000というのは2M(2097152バイト)なので、RPMBUFSIZと一致します。 そうすると0x40000(256K, 262144バイト)がbasebinパッケージのrpmoffsetのmallocで 確保されるメモリーのサイズということになります。たぶん古いソースはRPMBUFSIZ 262144となっていたのでしょう。 これはrpmoffsetがRPMパッケージの先頭から読み込んで内容を調べるサイズなので、 RPM固有ヘッダ部分が262144バイトを超えるものはエラーになるのだろうと考えられます。 -- [[hatya]] &new{2006-10-21 (土) 23:20:00};
テキスト整形のルールを表示する