CentOS's archives

色々なtarフォーマットの確認方法

in CentOS, tar
by ginriki | 6 月 14th, 2010 

tarファイルには、いくつかのフォーマットがあるのだけど、何らかのコマンドで作成したtarファイルが
どのフォーマットで作られているか判断するやり方が見当たらないのでメモしとく。

なお、メジャーなフォーマットは以下らしい1

  • POSIX.1-1988 ustar format
  • GNU tar format
  • POSIX.1-2001 pax format

利用者から見たフォーマット間の大きな違いは、ustar形式のtarフォーマットの場合、tarでまとめる各ファイルのファイル名が256文字制限だったり、各ファイルのサイズ制限が8GBになってること。残りの2つのフォーマットは制限なし。その代わり、他と比べてustar形式は歴史がある形式なので、対応しているツールも多い。

ちなみに、普通のlinux上のtarプログラム(=GNU tar)がデフォルトで使うtarフォーマットは–helpを付ければわかる。
以下のように、最近のtarプログラムならgnuフォーマットのはず。

# tar --help
[...略]
*This* tar defaults to:
--format=gnu -f- -b20 --quoting-style=escape --rmt-command=/sbin/rmt


・tarファイルのフォーマットの見分け方

hexdumpコマンドでtarファイルを出力し、tarファイル内にアーカイブされた各ファイルのtarヘッダ(とpaxヘッダ)で見分けます。2

hexdump -C で出力された情報のなかで、
それぞれのフォーマットごとに特徴的なヘッダ部分は以下。

  • ustar format
    00000100  ...(省略)...  |.ustar.00root...|
    
  • GNU tar format
    00000100  ...(省略)...  |.ustar  .root...|
    
  • pax format
    00000000  ...(省略)...  |./PaxHeaders.108|
    

以下、各フォーマットの確認例です。

# echo "hello" > foo.txt
# tar --format=gnu -cvf test.gnu.tar foo.txt
# tar --format=ustar -cvf test.ustar.tar foo.txt
# tar --format=pax -cvf test.pax.tar foo.txt

# hexdump -C test.ustar.tar
00000000  66 6f 6f 2e 74 78 74 00  00 00 00 00 00 00 00 00  |foo.txt.........|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000060  00 00 00 00 30 30 30 30  36 34 34 00 30 30 30 30  |....0000644.0000|
00000070  30 30 30 00 30 30 30 30  30 30 30 00 30 30 30 30  |000.0000000.0000|
00000080  30 30 30 30 30 30 36 00  31 31 34 30 35 31 37 34  |0000006.11405174|
00000090  33 30 34 00 30 31 32 33  37 33 00 20 30 00 00 00  |304.012373. 0...|
000000a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000100  00 75 73 74 61 72 00 30  30 72 6f 6f 74 00 00 00  |.ustar.00root...|
00000110  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000120  00 00 00 00 00 00 00 00  00 72 6f 6f 74 00 00 00  |.........root...|
00000130  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000140  00 00 00 00 00 00 00 00  00 30 30 30 30 30 30 30  |.........0000000|
00000150  00 30 30 30 30 30 30 30  00 00 00 00 00 00 00 00  |.0000000........|
00000160  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000200  68 65 6c 6c 6f 0a 00 00  00 00 00 00 00 00 00 00  |hello...........|
00000210  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00002800

# hexdump -C test.gnu.tar
00000000  66 6f 6f 2e 74 78 74 00  00 00 00 00 00 00 00 00  |foo.txt.........|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000060  00 00 00 00 30 30 30 30  36 34 34 00 30 30 30 30  |....0000644.0000|
00000070  30 30 30 00 30 30 30 30  30 30 30 00 30 30 30 30  |000.0000000.0000|
00000080  30 30 30 30 30 30 36 00  31 31 34 30 35 31 37 34  |0000006.11405174|
00000090  33 30 34 00 30 31 31 30  37 33 00 20 30 00 00 00  |304.011073. 0...|
000000a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000100  00 75 73 74 61 72 20 20  00 72 6f 6f 74 00 00 00  |.ustar  .root...|
00000110  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000120  00 00 00 00 00 00 00 00  00 72 6f 6f 74 00 00 00  |.........root...|
00000130  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000200  68 65 6c 6c 6f 0a 00 00  00 00 00 00 00 00 00 00  |hello...........|
00000210  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00002800

# hexdump -C test.pax.tar
00000000  2e 2f 50 61 78 48 65 61  64 65 72 73 2e 31 30 38  |./PaxHeaders.108|
00000010  31 2f 66 6f 6f 2e 74 78  74 00 00 00 00 00 00 00  |1/foo.txt.......|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000060  00 00 00 00 30 30 30 30  36 34 34 00 30 30 30 30  |....0000644.0000|
00000070  30 30 30 00 30 30 30 30  30 30 30 00 30 30 30 30  |000.0000000.0000|
00000080  30 30 30 30 30 35 30 00  31 31 34 30 35 31 37 34  |0000050.11405174|
00000090  34 30 31 00 30 31 33 34  34 31 00 20 78 00 00 00  |401.013441. x...|
000000a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000100  00 75 73 74 61 72 00 30  30 00 00 00 00 00 00 00  |.ustar.00.......|
00000110  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000140  00 00 00 00 00 00 00 00  00 30 30 30 30 30 30 30  |.........0000000|
00000150  00 30 30 30 30 30 30 30  00 00 00 00 00 00 00 00  |.0000000........|
00000160  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000200  32 30 20 61 74 69 6d 65  3d 31 32 37 36 34 34 32  |20 atime=1276442|
00000210  38 37 30 0a 32 30 20 63  74 69 6d 65 3d 31 32 37  |870.20 ctime=127|
00000220  36 34 34 32 38 32 30 0a  00 00 00 00 00 00 00 00  |6442820.........|
00000230  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000400  66 6f 6f 2e 74 78 74 00  00 00 00 00 00 00 00 00  |foo.txt.........|
00000410  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000460  00 00 00 00 30 30 30 30  36 34 34 00 30 30 30 30  |....0000644.0000|
00000470  30 30 30 00 30 30 30 30  30 30 30 00 30 30 30 30  |000.0000000.0000|
00000480  30 30 30 30 30 30 36 00  31 31 34 30 35 31 37 34  |0000006.11405174|
00000490  33 30 34 00 30 31 32 33  37 33 00 20 30 00 00 00  |304.012373. 0...|
000004a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000500  00 75 73 74 61 72 00 30  30 72 6f 6f 74 00 00 00  |.ustar.00root...|
00000510  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000520  00 00 00 00 00 00 00 00  00 72 6f 6f 74 00 00 00  |.........root...|
00000530  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000540  00 00 00 00 00 00 00 00  00 30 30 30 30 30 30 30  |.........0000000|
00000550  00 30 30 30 30 30 30 30  00 00 00 00 00 00 00 00  |.0000000........|
00000560  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000600  68 65 6c 6c 6f 0a 00 00  00 00 00 00 00 00 00 00  |hello...........|
00000610  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00002800
  1. Pythonのtarfileライブラリのマニュアル参照。 []
  2. ヘッダの概説はFreeBSDのtarマニュアルがわかりやすいです。もっと知りたい場合は各tar形式の仕様書を見た方が良いです。 []

Hyper Estraierで文書検索 (+ CentOS用rpm作成)

by ginriki | 12 月 7th, 2009 

扱う文章の数が膨大になって管理しづらくなってきたので、Hyper Estraierの導入を検討しました。せっかくなので導入手順をメモ。
ちなみに、自分のローカルマシン(Windows)内の文書を管理したいだけなら、Hyper Estraierをエンジンに積んだDesktopHEを使えば十分と思います。1

FedoraやVine LinuxだとEstraierのrpmパッケージが公式に存在するので、yumとかapt-getでインストールすればいいのですが、CentOSにはrpmパッケージがありません。

調べてみると、Vine Linuxのsrpmを使うと楽ということなので、srpmからrpmbuildします。2

まず、Vine LinuxのSRPMリポジトリからqdbm,mecab,mecab-ipadic,hyperestraierをダウンロードします。
その後、以下のようにrpmbuild & install (rpmbuildなどは、yum install rpm-buildなどで入れておくこと)。

# rpmbuild --rebuild qdbm-1.8.77-1vl5.src.rpm
# rpm -ivh /usr/src/redhat/RPMS/[arch]/qdbm-1.8.77-1.i386.rpm qdbm-devel-1.8.77-1.i386.rpm

# rpmbuild --rebuild mecab-0.97-2vl5.src.rpm
# rpm -ivh /usr/src/redhat/RPMS/[arch]/mecab-0.97-2.i386.rpm mecab-devel-0.97-2.i386.rpm

# rpmbuild --rebuild mecab-ipadic-2.7.0.20070801-1vl5.src.rpm
# rpm -ivh /usr/src/redhat/RPMS/[arch]/mecab-ipadic-2.7.0.20070801-1.i386.rpm

# rpmbuild --rebuild hyperestraier-1.4.13-2vl5.src.rpm
# rpm -ivh /usr/src/redhat/RPMS/[arch]/hyperestraier-1.4.13-2.i386.rpm hyperestraier-perl-1.4.13-2.i386.rpm

これでインストールは完了。

インデックスの作成方法は以下ページ参照。

/home/user/doc以下の文書をインデックス化して、/var/estraier/indexにインデックス作成する場合のコマンド例は以下。

$ estcmd gather -il ja -sd /var/estraier/index /home/user/doc

後は、検索用のWebページを用意すれば終わり。CentOSの場合は以下の通り。

# yum install httpd
# service httpd start
# cp /usr/libexec/estseek.cgi /var/www/cgi-bin/.
# /usr/share/hyperestraier/estseek.* /var/www/cgi-bin/.

上記を実行した後、/var/www/cgi-bin/estseek.confのindexnameの項目を編集します。

indexname: /var/estraier/index
...省略

手元のブラウザから、estseek.cgiへアクセスすると検索ページが見れます。
もしこの時、「Error: the index is missing or broken.」とか出てくるようなら、indexファイルへのアクセス権がapacheにないせいかもしれません。
estseek.conf内の項目の意味は、Hyper Estraierのユーザマニュアルを参照してください。

  1. でも、index作成がなんか遅い気がする。まあ、気のせいかも []
  2. だれかCentOS用hyperestraierのyumリポジトリ作ってくれませんか?(他力本願) []

CentOS 5にAspire Timeline (3810T)の有線LANドライバを入れる

by ginriki | 11 月 4th, 2009 

今年(2009年)の夏に、Aspire Timeline(3810T)を買いました。
元々Windows Vistaが入っていましたが、ついでにCentOS 5.31を入れてデュアルブートできるようにしました。

ただ、CentOS 5.3には (たぶん、CentOS 5.4にも) Aspire Timelineの有線LANドライバが入ってないので、ドライバを探してきて入れました。

ドライバは、http://partner.atheros.com/Drivers.aspxのAR81Family Linux Driverになります。私がダウンロードしたときは、AR81Family-linux-v1.0.0.10.tar.gzっていうバージョンでした。

いつの間にか、リンク切れになってました(partner.atheros.comのサイト自体なくなったようです)。12/2時点では、ドライバはここにあります。(katty9015さん、情報ありがとうございます)
ファイル名もAR81Family-linux-v1.0.0.10.tar.gzからAR81Family-linux-v1.0.1.0.tar.gzに変わったので、以下の記事を読むときは注意してください。

USBメモリとかでAspire TimelineのCentOS上にAR81Family-linux-v1.0.0.10.tar.gzを入れた後は、以下のようにコンパイル/インストールすれば、有線LANが使えるようになります。

$ tar xzvf AR81Family-linux-v1.0.0.10.tar
$ cd src/
$ make
$ make install       # 要root権限
$ reboot             # 再起動


おまけ (Intel VTの有効化)

Aspire Timeline(3810T)のCPUはIntel VTに対応してるのですが、BIOSで有効化できないため、そのままだとIntel VTが使えません。
とはいえ、CentOSのXenでWindowsが起動できないのも味気ないです。
以下の2つのリンク先を参考にいじれば、BIOSでIntel VTを有効にできます。Acerのサポート外になってしまうので、いじるときは自己責任でお願いします。

  1. 2009/10に、CentOS 5.4がリリースされましたね []

crashコマンド使ってみた

by ginriki | 7 月 13th, 2009 

Kernelのコアダンプファイルを解析するのに、crashコマンドが便利だという話を聞いたので、練習として触ってみました。

手元にCentOS 5のマシンがあるので、それを使います。

解析にあたってkernelのデバッグ情報がいるので、debuginfoのRPMをインストールします1

 $ uname -a
Linux localhost.localdomain 2.6.18-128.1.16.el5 #1 SMP Tue Jun 30 06:10:28 EDT 2009 i686 i686 i386 GNU/Linux

 $ wget http://debuginfo.centos.org/5/i386/kernel-debuginfo-2.6.18-128.1.16.el5.i686.rpm
 $ wget http://debuginfo.centos.org/5/i386/kernel-debuginfo-common-2.6.18-128.1.16.el5.i686.rpm
 $ rpm -ivh kernel-debuginfo-common-2.6.18-128.1.16.el5.i686.rpm kernel-debuginfo-2.6.18-128.1.16.el5.i686.rpm

んで、crashコマンド実行。
SVR4 UNIXのcrashコマンドをベースにGDBを統合したやつだそうで2、GDBになじんでる私には結構使いやすいです。

CODE:
  1. $ crash
  2.       KERNEL: /usr/lib/debug/lib/modules/2.6.18-128.1.16.el5/vmlinux
  3.     DUMPFILE: /dev/crash
  4.         CPUS: 1
  5.         DATE: Mon Jul 13 02:17:05 2009
  6.       UPTIME: 06:52:42
  7. LOAD AVERAGE: 0.16, 0.03, 0.01
  8.        TASKS: 86
  9.     NODENAME: localhost.localdomain
  10.      RELEASE: 2.6.18-128.1.16.el5
  11.      VERSION: #1 SMP Tue Jun 30 06:10:28 EDT 2009
  12.      MACHINE: i686  (1197 Mhz)
  13.       MEMORY: 758.9 MB
  14.          PID: 3848
  15.      COMMAND: "crash"
  16.         TASK: ef67c000  [THREAD_INFO: d9120000]
  17.          CPU: 0
  18.        STATE: TASK_RUNNING (ACTIVE)
  19.  crash> set 1
  20.     PID: 1
  21. COMMAND: "init"
  22.    TASK: c16f5aa0  [THREAD_INFO: c16f6000]
  23.     CPU: 0
  24.   STATE: TASK_INTERRUPTIBLE
  25.  crash> p $tmp = jiffies
  26.   $1 = 24873000
  27.  crash> x modprobe_path
  28.   0xc0680be0 <modprobe_path>:     das
  29.  crash> show convenience
  30.    $tmp = 24873000
  31.    $__ = void
  32.    $_ = (examine_i_type *) 0xc0680be0 "/sbin/modprobe"
  33.  crash> exit

gdbスクリプトをsourceで読み込むこともできる。
まだ、まともな使い方は全然してないけど、Debug Hacksにいろいろ書いてあるので、それを読みながらやる予定。

Debug Hacks -デバッグを極めるテクニック&ツール Debug Hacks -デバッグを極めるテクニック&ツール
レビューを見る
欲しいものリストに追加
価格:3456円 在庫あり。powered by Amazon.co.jp

  1. 最初、yumでinstallしたら、なぜか2.6.18-92.1.6.el5.centos.plusが入りました。kernelバージョンと合ってないので、rpmコマンドで入れなおし。 []
  2. Crash WhitepaperのAbstract参照 []

CentOSのyum追加パッケージ – RPMForge

by ginriki | 10 月 8th, 2008 

CentOSのyumはFedora等に比べてyumでインストール可能なパッケージ数が少ないです。
そのため、インストールしようと思ったパッケージが存在しなくて困るときがあります。

この前は、inkscapeを入れようとしたけどパッケージが存在しなくて困りました。

ソースやrpmからインストールするには、いろんな依存パッケージをインストールする必要があって面倒です。

そこで、yumでインストール可能なパッケージを増やすために、RPMForgeを導入しました。
導入方法は、下記リンク先に書いてある通りです。

http://wiki.centos.org/AdditionalResources/Repositories/RPMForge

導入後は、以下のようにyumでインストールできました。

$ yum install inkscape

ブログで紹介した商品

  • Image of デバッガの理論と実装 (ASCII SOFTWARE SCIENCE Language)