FUSEインストールからs3fsを使うまで(後編)

Amazon S3をマウントできるs3fsをちょっとカーネルバージョンが古いRHEL5で使う方法。後編。
前編はCentOS 5で試したので、ここからが本番。
でもCentOS 5の方はカーネル最新なんですよね。
あ、このサーバ、x86_64なんでコピペしようとする人は注意。いないだろうけど。

前回と同じようにwgetしてインストール。

# wget http://dl.atrpms.net/all/fuse-2.7.4-8_10.el5.x86_64.rpm
# wget http://dl.atrpms.net/all/fuse-libs-2.7.4-8_10.el5.x86_64.rpm
# wget http://dl.atrpms.net/all/fuse-devel-2.7.4-8_10.el5.x86_64.rpm
# wget http://dl.atrpms.net/all/fuse-kmdl-2.6.18-128.1.10.el5-2.7.4-8_10.el5.x86_64.rpm
# rpm -ivh fuse-2.7.4-8_10.el5.x86_64.rpm fuse-kmdl-2.6.18-128.1.10.el5-2.7.4-8_10.el5.x86_64.rpm fuse-devel-2.7.4-8_10.el5.x86_64.rpm fuse-libs-2.7.4-8_10.el5.x86_64.rpm
エラー: 依存性の欠如:
        /boot/vmlinuz-2.6.18-128.1.10.el5 は fuse-kmdl-2.6.18-128.1.10.el5-2.7.4-8_10.el5.x86_64 に必要とされています

あー、カーネルモジュールのバージョンを合わせないとダメなのね。

RHEL5のカーネルは2.6.18-92だったのでfuse-kmdl-2.6.18-92.1.10.el5-2.7.4-8_10.el5.x86_64.rpmというファイルが必要か。

が、fuse-kmdl-2.6.18-92.1.10.el5-2.7.4-8_10.el5.x86_64.rpmで検索すると、以前はあったらしい痕跡がうかがえるのだけど、ミラーも含めてどこにもない様子。

ということは、

ATrpms – by Distribution > Red Hat Enterprise Linux 5 > fuse

の最下段にあるSRPMからこの環境で作り直さないとダメってことね。

ではとりあえずダウンロード。

# wget http://dl.atrpms.net/all/fuse-2.7.4-8_10.src.rpm

で、rpmbuildでリビルド。

ちなみにもしrpmbuildがインストールされていなければyumでインストール。

# yum install rpm-build
# rpmbuild --rebuild fuse-2.7.4-8_10.src.rpm

何かエラーでリビルド失敗。(ログ取り忘れた…)

調べてみたら、どうやらSPECで使用するマクロが足りてないらしい。

で、そのマクロがどこにもない、と。

色々探していたら、そのものズバリではないけれど、そこそこ近いマクロを発見。

Re: Re: unable to compile srpms: msg#00034 linux.redhat.rpm.atrpms.devel

ここにあったMacroセットを適当に

# vim /etc/rpm/macros.fuse

で流し込んだ。ファイル名は適当に新規作成。macros.*ならいいらしいです。

ちなみにところどころ変な改行が入っているので注意。(マクロファイルは文末に添付します)

# rpmbuild --rebuild fuse-2.7.4-8_10.src.rpm
fuse-2.7.4-8_10.src.rpm をインストール中です。
警告: InstallSourcePackage: ヘッダ V4 DSA signature: NOKEY, key ID ********
エラー: 59 行目: 依存性を表す語は英数字か、'_'、'/' で始まらなければなりません: BuildRequires: %_kernelcompiler_rh5Server

む。%_kernelcompiler_rh5Serverがないって。では追加!

# vim /etc/rpm/macros.fuse
%_kernelcompiler_rh5Server /usr/bin/gcc

ちなみにCentOSではこっちが必要。

%_kernelcompiler_rh5 /usr/bin/gcc

このまま実行するとkernel-module-fuse-2.6.18-92.1.13.el5-2.7.4-8_10.x86_64.rpmとかいうファイル名になってしまうので、先にマクロを修正。

_oldとしてコメントアウトされていたのでそっちを使うように書き換え

%kmdl_name kernel-module-%{_kpkgname}-%{_kernel}
%kmdl_nameof() kernel-module-%1-%{_kernel}
%kmdl_namepure kernel-module-%{_kpkgname}
%kmdl_namepureof() kernel-module-%1
#_kmdl_name_old %{_kpkgname}-kmdl-%{_kernel}
#_kmdl_nameof_old() %1-kmdl-%{_kernel}
#_kmdl_name_old %{_kpkgname}-%{_kname3}-%{_kversion}
#_kmdl_nameof_old() %1-%{_kname3}-%{_kversion}
#_kmdl_namepure_old %{_kpkgname}-kmdl
#_kmdl_namepureof_old() %1-kmdl
↓
#%kmdl_name kernel-module-%{_kpkgname}-%{_kernel}
#%kmdl_nameof() kernel-module-%1-%{_kernel}
#%kmdl_namepure kernel-module-%{_kpkgname}
#%kmdl_namepureof() kernel-module-%1
#_kmdl_name_old %{_kpkgname}-kmdl-%{_kernel}
#_kmdl_nameof_old() %1-kmdl-%{_kernel}
%kmdl_name %{_kpkgname}-%{_kname3}-%{_kversion}
%kmdl_nameof() %1-%{_kname3}-%{_kversion}
%kmdl_namepure %{_kpkgname}-kmdl
%kmdl_namepureof() %1-kmdl

カーネルモジュールのビルドにはソースコードが必要らしいので、kernel-develパッケージが入っていない場合は入れておく必要あり。

# yum install kernel-devel
Package kernel-devel-2.6.18-92.1.13.el5.x86_64 installed and not available
Package kernel-devel-2.6.18-92.1.6.el5.x86_64 installed and not available
Package kernel-devel-2.6.18-92.1.10.el5.x86_64 installed and not available
Nothing to do

あれ…

# yum list installed |grep kernel
kernel.x86_64                              2.6.18-92.1.6.el5           installed
kernel.x86_64                              2.6.18-92.1.10.el5          installed
kernel.x86_64                              2.6.18-92.1.13.el5          installed
kernel-devel.x86_64                        2.6.18-92.1.6.el5           installed
kernel-devel.x86_64                        2.6.18-92.1.10.el5          installed
kernel-devel.x86_64                        2.6.18-92.1.13.el5          installed
kernel-doc.noarch                          2.6.18-92.1.13.el5          installed
kernel-headers.x86_64                      2.6.18-92.1.13.el5          installed
kernel-xen.x86_64                          2.6.18-92.1.6.el5           installed
kernel-xen.x86_64                          2.6.18-92.1.10.el5          installed
kernel-xen.x86_64                          2.6.18-92.1.13.el5          installed
kernel-xen-devel.x86_64                    2.6.18-92.1.6.el5           installed
kernel-xen-devel.x86_64                    2.6.18-92.1.10.el5          installed
kernel-xen-devel.x86_64                    2.6.18-92.1.13.el5          installed

入ってた。

一応確認。

# ll /usr/src/kernels/
合計 24
drwxr-xr-x 18 root root 4096  9月 17  2008 2.6.18-92.1.10.el5-x86_64
drwxr-xr-x 18 root root 4096  9月 17  2008 2.6.18-92.1.10.el5-xen-x86_64
lrwxrwxrwx  1 root root   29 11月 10  2008 2.6.18-92.1.10.el5xen-x86_64 -> 2.6.18-92.1.10.el5-xen-x86_64
drwxr-xr-x 18 root root 4096 10月 21  2008 2.6.18-92.1.13.el5-x86_64
drwxr-xr-x 18 root root 4096 10月 21  2008 2.6.18-92.1.13.el5-xen-x86_64
lrwxrwxrwx  1 root root   29 11月 10  2008 2.6.18-92.1.13.el5xen-x86_64 -> 2.6.18-92.1.13.el5-xen-x86_64
drwxr-xr-x 18 root root 4096  7月 18  2008 2.6.18-92.1.6.el5-x86_64
drwxr-xr-x 18 root root 4096  7月 18  2008 2.6.18-92.1.6.el5-xen-x86_64
lrwxrwxrwx  1 root root   28 11月 10  2008 2.6.18-92.1.6.el5xen-x86_64 -> 2.6.18-92.1.6.el5-xen-x86_64

では、FUSEをrpmbuild

# rpmbuild --rebuild fuse-2.7.4-8_10.src.rpm
書き込み完了: /usr/src/redhat/RPMS/x86_64/fuse-kmdl-2.6.18-92.1.13.el5-2.7.4-8_10.x86_64.rpm
書き込み完了: /usr/src/redhat/RPMS/x86_64/fuse-debuginfo-2.7.4-8_10.x86_64.rpm

完了した。

できたRPMを作業ディレクトリに移動。

# mv /usr/src/redhat/RPMS/x86_64/fuse-kmdl-2.6.18-92.1.13.el5-2.7.4-8_10.x86_64.rpm .

では改めてゴー。

# rpm -ivh fuse-2.7.4-8_10.el5.x86_64.rpm fuse-kmdl-2.6.18-92.1.13.el5-2.7.4-8_10.x86_64.rpm fuse-devel-2.7.4-8_10.el5.x86_64.rpm fuse-libs-2.7.4-8_10.el5.x86_64.rpm
警告: fuse-2.7.4-8_10.el5.x86_64.rpm: ヘッダ V4 DSA signature: NOKEY, key ID ********
エラー: 依存性の欠如:
        fuse-kmdl-2.7.4-8_10.el5 は fuse-2.7.4-8_10.el5.x86_64 に必要とされています
        atrpms-kmdl-helper は fuse-kmdl-2.6.18-92.1.13.el5-2.7.4-8_10.x86_64 に必要とされています

orz

何だ?ファイル名合わせただけではいかんのか…

# rpm -qip fuse-kmdl-2.6.18-92.1.13.el5-2.7.4-8_10.x86_64.rpm
Name        : fuse-kmdl-2.6.18-92.1.13.el5  Relocations: (not relocatable)
Version     : 2.7.4                             Vendor: (none)
Release     : 8_10                          Build Date: 2009年06月17日 19時45分41秒
Install Date: (not installed)               Build Host: ***********
Group       : System Environment/Kernel     Source RPM: fuse-2.7.4-8_10.src.rpm
Size        : 829588                           License: GPL
Signature   : (none)
URL         : http://fuse.sf.net
Summary     : fuse kernel module.
Description :
With FUSE it is possible to implement a fully functional filesystem in a
userspace program. This package contains the FUSE kernel module.

This package contains the fuse-kmdl-2.6.18-92.1.13.el5 kernel modules for the Linux kernel package:
kernel-2.6.18-92.1.13.el5.x86_64.rpm.

おおおおお

Nameが違うYo…

めどい。直接Name固定しよう。

# vim /etc/rpm/macros.fuse
%kmdl_name %{_kpkgname}-kmdl-2.7.4-8_10.el5

再度rpmbuild。

# rpmbuild --rebuild fuse-2.7.4-8_10.src.rpm

で、結果。

# rpm -qip /usr/src/redhat/RPMS/x86_64/fuse-kmdl-2.7.4-8_10.el5-2.7.4-8_10.x86_64.rpm
Name        : fuse-kmdl-2.7.4-8_10.el5     Relocations: (not relocatable)
Version     : 2.7.4                             Vendor: (none)
Release     : 8_10                          Build Date: 2009年06月17日 21時02分15秒
Install Date: (not installed)               Build Host: ***********
Group       : System Environment/Kernel     Source RPM: fuse-2.7.4-8_10.src.rpm
Size        : 829588                           License: GPL
Signature   : (none)
URL         : http://fuse.sf.net
Summary     : fuse kernel module.
Description :
With FUSE it is possible to implement a fully functional filesystem in a
userspace program. This package contains the FUSE kernel module.

This package contains the fuse-kmdl-2.7.4-8_10.el5 kernel modules for the Linux kernel package:

おk

で、あとはatrpms-kmdl-helperとやらを入れればいいのか。

Re: atrpms-kmdl-helper error: msg#00013 linux.redhat.rpm.atrpms.general

atrpmsパッケージの中に入っているという話。

というわけでダウンロードしてインストール。

ATrpms – by Distribution > common > atrpms

# wget http://dl.atrpms.net/all/atrpms-73.1-1.noarch.rpm
# rpm -ivh atrpms-73.1-1.noarch.rpm

で、改めて。

# rpm -ivh fuse-2.7.4-8_10.el5.x86_64.rpm fuse-kmdl-2.7.4-8_10.el5-2.7.4-8_10.x86_64.rpm fuse-devel-2.7.4-8_10.el5.x86_64.rpm fuse-libs-2.7.4-8_10.el5.x86_64.rpm
準備中...                ########################################### [100%]
   1:fuse-libs              ########################################### [ 25%]
   2:fuse-kmdl-2.7.4-8_10.el########################################### [ 50%]
/var/tmp/rpm-tmp.52302: line 2: /usr/lib64/atrpms/addcustomkmdl: そのようなファイルやディレクトリはありません
   3:fuse                   ########################################### [ 75%]
   4:fuse-devel             ########################################### [100%]

…ん?大丈夫かな…?

# cd ~/s3fs
# make
g++ -ggdb -Wall -D_FILE_OFFSET_BITS=64 -I/usr/include/fuse  -pthread -L/lib64 -lfuse -lrt -ldl    -L/usr/kerberos/lib64 -lcurl -ldl -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -lidn -lssl -lcrypto -lz   -I/usr/include/libxml2 -lxml2 -lz -lm -lcrypto s3fs.cpp -o s3fs
s3fs.cpp: In function ‘std::string calc_signature(std::string, std::string, std::string, curl_slist*, std::string)’:
s3fs.cpp:426: 警告: value computed is not used
s3fs.cpp: In function ‘int put_local_fd(const char*, headers_t, int)’:
s3fs.cpp:759: 警告: format ‘%llu’ expects type ‘long long unsigned int’, but argument 4 has type ‘__off_t’
s3fs.cpp: In function ‘int s3fs_readlink(const char*, char*, size_t)’:
s3fs.cpp:852: 警告: 符合付きと符合無しの整数式同士の比較です
s3fs.cpp: At global scope:
s3fs.cpp:440: 警告: ‘size_t readCallback(void*, size_t, size_t, void*)’ defined but not used
ok!

よっしゃぁぁ!!

まぁ待て、まだあわてるほどじゃない。

# make install
g++ -ggdb -Wall -D_FILE_OFFSET_BITS=64 -I/usr/include/fuse  -pthread -L/lib64 -lfuse -lrt -ldl    -L/usr/kerberos/lib64 -lcurl -ldl -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -lidn -lssl -lcrypto -lz   -I/usr/include/libxml2 -lxml2 -lz -lm -lcrypto s3fs.cpp -o s3fs
s3fs.cpp: In function ‘std::string calc_signature(std::string, std::string, std::string, curl_slist*, std::string)’:
s3fs.cpp:426: 警告: value computed is not used
s3fs.cpp: In function ‘int put_local_fd(const char*, headers_t, int)’:
s3fs.cpp:759: 警告: format ‘%llu’ expects type ‘long long unsigned int’, but argument 4 has type ‘__off_t’
s3fs.cpp: In function ‘int s3fs_readlink(const char*, char*, size_t)’:
s3fs.cpp:852: 警告: 符合付きと符合無しの整数式同士の比較です
s3fs.cpp: At global scope:
s3fs.cpp:440: 警告: ‘size_t readCallback(void*, size_t, size_t, void*)’ defined but not used
ok!
cp -f s3fs /usr/bin

よし、では実行…

# cd /mnt/
# mkdir s3
# s3fs ***** -o accessKeyId=******************** -o secretAccessKey=**************************************** /mnt/s3
# cd s3/
# ll

合計 82577
---------- 1 root root  298359 12月 23  2007 0223279e4a09010bf1d55aed45de8b46.dat
---------- 1 root root  307441 12月 21  2007 02d452b8ee0809e601297e77e0d14fca.jpg
---------- 1 root root   64051  1月  4  2008 03739992ce7b38979b7fd71bfbdf5d30.zip

できた━(∀゚ )━(゚∀゚)━━━!!

せっかくなので使ったマクロファイルをアップしておきます。Name固定されてるので注意。
誰が使うんだって感じですけど。

macros.fuse


タグ: ,

新しく会社作りました!

コメントをどうぞ