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固定されてるので注意。
誰が使うんだって感じですけど。