2014年11月19日水曜日

CentOS 5 + UEKr2 で XFS を利用

CentOS 5 にオラクルの UEKr2 カーネルを入れて利用しているマシンで、実験・学習目的に XFS も動かしているのですが、この環境で xfs_db が segfault していて、気持ち悪いと思っていたのですが、よくよく考えてみると、カーネルが 3.0 系(見た目のバージョンは 2.6.39)なのに対して、xfsprogs のバージョンが古い(xfsprogs-2.9.4-1.el5.centos を使ってた)ため、何か不整合が起きているのではないかと考えました。
[root@hoge ~]# dmesg | grep xfs
xfs_db[24513]: segfault at 40 ip 0000003525408dd0 sp 00007fff34d904b8 error 4 in libpthread-2.5.so[3525400000+16000]
xfs_db[28592]: segfault at 40 ip 0000003525408dd0 sp 00007fff73492348 error 4 in libpthread-2.5.so[3525400000+16000]
xfs_db[24414]: segfault at 40 ip 0000003525408dd0 sp 00007fffdcd64d58 error 4 in libpthread-2.5.so[3525400000+16000]
xfs_db[28242]: segfault at 40 ip 0000003525408dd0 sp 00007fff890c31d8 error 4 in libpthread-2.5.so[3525400000+16000]
まず、xfs_db なんぞ自分で明示的に動かした記憶がなく、調べたところ system-config-lvm を動かすと、裏で実行されるらしく、再現性を確認しました。
そして、コミュニティ最新版 xfsprogs 3.2.1 に置き換えたところ、segfault が出なくなったことを確認しました。

以下、備忘録、xfsprogs 3.2.1 のビルド手順です。どなたかのご参考まで。

1. xfsprogs-2.9.4-1.el5.centos.src.rpm をダウンロードして展開。この中の SPEC ファイルを利用する。
# rpm -ivh xfsprogs-2.9.4-1.el5.centos.src.rpm
...
# cd /usr/src/redhat/SPEC
# cp -p xfsprogs.spec xfsprogs.spec.org
2. xfsprogs-3.2.1.tar.gz をダウンロードして、/usr/src/redhat/SOURCES へコピー
# cp xfsprogs-3.2.1.tar.gz /usr/src/redhat/SOURCES
3. xfsprogs.spec を手直しする。これが少々時間を要しました。差分です。
--- xfsprogs.spec.org   2007-10-20 23:17:33.000000000 +0900
+++ xfsprogs.spec       2014-11-18 07:43:06.000000000 +0900
@@ -1,11 +1,11 @@
 Summary: Utilities for managing the XFS filesystem
 Name: xfsprogs
-Version: 2.9.4
-Release: 1%{?dist}
+Version: 3.2.1
+Release: 1.el5.staka
 License: GPL
 Group: System Environment/Base
 URL: http://oss.sgi.com/projects/xfs/
-Source0: ftp://oss.sgi.com/projects/xfs/download/cmd_tars/%{name}_%{version}-1.tar.gz
+Source0: ftp://oss.sgi.com/projects/xfs/download/cmd_tars/%{name}-%{version}.tar.gz
 Source1: xfsprogs-wrapper.h
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 BuildRequires: autoconf, libtool, gettext
@@ -13,7 +13,7 @@
 BuildRequires: /usr/include/uuid/uuid.h
 Provides: xfs-cmds
 Obsoletes: xfs-cmds <= %{version}
-Conflicts: xfsdump < 2.0.0
+Conflicts: xfsdump < 3.0.0
 
 %description
 A set of commands to use the XFS filesystem, including mkfs.xfs.
@@ -69,10 +69,14 @@
 rm -f $RPM_BUILD_ROOT/{%{_lib}/*.{la,a,so},%{_libdir}/*.la}
 # fix up symlink to be correct
 rm -f $RPM_BUILD_ROOT/%{_libdir}/libhandle.so
+mkdir -p $RPM_BUILD_ROOT/%{_libdir}
 ln -s ../../%{_lib}/libhandle.so.1 $RPM_BUILD_ROOT/%{_libdir}/libhandle.so
 # remove non-versioned docs location
 rm -rf $RPM_BUILD_ROOT/%{_datadir}/doc/xfsprogs/
 
+mkdir -p $RPM_BUILD_ROOT/usr/sbin
+(cd $RPM_BUILD_ROOT/sbin ; mv xfs_{admin,bmap,copy,db,estimate,freeze,fsr,growfs,info,io,logprint,mdrestore,metadump,mkfile,ncheck,quota,rtcp} ../usr/sbin)
+
 # ugly hack to allow parallel install of 32-bit and 64-bit -devel packages:
 mv -f $RPM_BUILD_ROOT%{_includedir}/xfs/platform_defs.h \
       $RPM_BUILD_ROOT%{_includedir}/xfs/platform_defs-%{_arch}.h
@@ -89,11 +93,11 @@
 
 %files -f %{name}.lang
 %defattr(-,root,root)
-%doc doc/CHANGES doc/COPYING doc/CREDITS doc/PORTING README
+%doc doc/CHANGES.gz doc/COPYING doc/CREDITS README
 /sbin/fsck.xfs
 /sbin/mkfs.xfs
 /sbin/xfs_repair
-/%{_lib}/*.so.*
+%attr(0644,root,root)   /%{_lib}/*.so.*
 %{_mandir}/man8/*
 %{_mandir}/man5/*
 %{_sbindir}/*
@@ -101,12 +105,15 @@
 %files devel
 %defattr(-,root,root)
 %{_mandir}/man3/*
-%{_includedir}/disk
+#%{_includedir}/disk
 %{_includedir}/xfs
-%{_libdir}/*.a
+#%{_libdir}/*.a
 %{_libdir}/*.so
 
 %changelog
+* Sat Nov 15 2014 s-taka  3.2.1-1
+- upgraded to upstream version 3.2.1
+
 * Sat Oct 20 2007 Johnny Hughes  2.9.4-1
 - upgraded to upstream version 2.9.4-1
 
4. RPM パッケージをビルド。
# rpmbuild -ba xfsprogs.spec
...
# ls -1 /usr/src/redhat/RPMS/x86_64/xfsprogs-*
/usr/src/redhat/RPMS/x86_64/xfsprogs-3.2.1-1.el5.staka.x86_64.rpm
/usr/src/redhat/RPMS/x86_64/xfsprogs-debuginfo-3.2.1-1.el5.staka.x86_64.rpm
/usr/src/redhat/RPMS/x86_64/xfsprogs-devel-3.2.1-1.el5.staka.x86_64.rpm
# ls -1 /usr/src/redhat/SRPMS/xfsprogs-*
/usr/src/redhat/SRPMS/xfsprogs-3.2.1-1.el5.staka.src.rpm
5. 出来上がった RPM パッケージをインストール。
# cd /usr/src/redhat/RPMS/x86_64
# rpm -Uvh xfsprogs-3.2.1-1.el5.staka.x86_64.rpm xfsprogs-devel-3.2.1-1.el5.staka.x86_64.rpm

xfsdump については、Fedora 21 のパッケージ(xfsdump-3.1.4-2.fc21.src.rpm)を利用して、CentOS 5 向けに RPM 再ビルドしました。SPEC ファイルの差分は次の通りです。
--- xfsdump.spec.org    2014-08-19 13:24:24.000000000 +0900
+++ xfsdump.spec        2014-11-15 22:11:10.000000000 +0900
@@ -1,7 +1,7 @@
 Summary: Administrative utilities for the XFS filesystem
 Name: xfsdump
 Version: 3.1.4
-Release: 2%{?dist}
+Release: 2.el5.staka
 # Licensing based on generic "GNU GENERAL PUBLIC LICENSE"
 # in source, with no mention of version.
 License: GPL+
@@ -10,7 +10,7 @@
 Source0: ftp://oss.sgi.com/projects/xfs/cmd_tars/%{name}-%{version}.tar.gz
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 BuildRequires: libtool, gettext, gawk
-BuildRequires: xfsprogs-devel, libuuid-devel, libattr-devel ncurses-devel
+BuildRequires: xfsprogs-devel, libattr-devel, ncurses-devel
 Requires: xfsprogs >= 2.6.30, attr >= 2.0.0
 
 %description
@@ -65,6 +65,9 @@
 %{_sharedstatedir}/xfsdump/inventory
 
 %changelog
+* Sat Nov 15 2014 s-taka  - 3.1.4-2.el5.staka
+- Rebuilt for EL5
+
 * Mon Aug 18 2014 Fedora Release Engineering  - 3.1.4-2
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
 

■関連記事
CentOS 5 + UEK で ZFS on Linux を利用
CentOS 5 + UEKr2 で Btrfs raid1

0 件のコメント:

コメントを投稿

人気ブログランキングへ にほんブログ村 IT技術ブログへ