1 ceph0.72以后的源码制作成rpm包时,会出现错误;错误原因主要为:提供的cpec文件内;%file文件found,但没有在spec的%file文件内添加,添加后即可以正常编译;
2 ceph0.61.9版本中出现的问题较多;主要问题为:1 ceph源码构建rpm包,在ubuntu系统上构建的,在centos系统中出现以下问题:
报错为:
Processing files: cephfs-java-0.61.9-0.el6.x86_64 error: File not found: /root/rpmbuild/BUILDROOT/ceph-0.61.9-0.el6.x86_64/usr/share/java/libcephfs-test.jar
但在centos的架构下分析原因:
在src/java/Makefile.am文件下:
if HAVE_JUNIT4 65 66 JAVA_TEST_CLASSES = $(JAVA_TEST_SRC:test/%.java=%.class) 67 ESCAPED_JAVA_TEST_CLASSES = com/ceph/fs/CephAllTests\$$1.class 68 69 CEPH_TEST_PROXY=test/com/ceph/fs/CephMountTest.class 70 71 $(CEPH_TEST_PROXY): $(JAVA_TEST_SRC) $(CEPH_PROXY) 72 ▸ export CLASSPATH=$(CLASSPATH):$(EXTRA_CLASSPATH_JAR):java/:test/ ; \ 73 ▸ $(JAVAC) -source 1.5 -target 1.5 -Xlint:-options test/com/ceph/fs/*.java 74 75 libcephfs-test.jar: $(CEPH_TEST_PROXY) 76 ▸ $(JAR) cf $@ $(JAVA_TEST_CLASSES:%=-C test %) $(ESCAPED_JAVA_TEST_CLASSES:%=-C test %) 77 78 java_DATA += libcephfs-test.jar 79 80 CLEANFILES += test/com/ceph/fs/*.class libcephfs-test.jar 81 endif # HAVE_JUNIT4 (includes WITH_DEBUG)
可以判断,如果要生成libcephfs-test.jar需要HAVE_JUNIT4为真;
在configure文件中,我们可以看到:
17838 ▸ # setup defaults for Debian default-jdk package (without --with-jdk-dir) 17839 ▸ if test -z "$with_jdk_dir"; then : 17840 17841 ▸ ▸ # This works with Debian's default-jdk package 17842 ▸ ▸ dir='/usr/lib/jvm/default-java/' 17843 ▸ ▸ javac_prog=`find $dir -name javac | head -n 1` 17844 ▸ ▸ if test -x "$javac_prog"; then : 17845 17846 ▸ ▸ ▸ ▸ EXTRA_JDK_BIN_DIR=`dirname $javac_prog` 17847 fi 17848 ▸ ▸ jnih=`find $dir -name jni.h | head -n 1` 17849 ▸ ▸ if test -r "$jnih"; then : 17850 17851 ▸ ▸ ▸ ▸ EXTRA_JDK_INC_DIR=`dirname $jnih` 17852 fi
我们要把 dir=’/usr/lib/jvm/default-java/’ 改为centos的 dir=’/usr/lib/jvm/java/’ 或者做个超链接;但重新测试后,还是会发现
Processing files: cephfs-java-0.61.9-0.el6.x86_64 error: File not found: /root/rpmbuild/BUILDROOT/ceph-0.61.9-0.el6.x86_64/usr/share/java/libcephfs-test.jar。
网上的资料为:
主要原因为没有添加:
Requires: junit4
BuildRequires: junit4
添加后,问题依旧,仔细分析configure文件,发现:
else 18600 18601 ▸ ▸ { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find org.junit.rules.ExternalRe source" >&5 18602 $as_echo "$as_me: Could not find org.junit.rules.ExternalResource" >&6;} 18603 ▸ ▸ have_junit4=0 18604 fi
HAVE-JUNIT4在这种情况下出现问题;
分析后得出:centos环境下:发现junit4-4.5-5.3.el6.noarch的版本为4.5太低了,是4年前的版本;而ubuntu的版本为4.8.2;
后发现org.junit.rules.ExternalResource不是特别依赖的资源,remove后进行测试,发现运行正常;
然后对ceph-0.61.9的tar包做patch处理:
patch为(ceph-create-rpm.patch):
diff -Naur ceph-0.61.9/configure.ac ../SOURCES/ceph-0.61.9/configure.ac --- ceph-0.61.9/configure.ac 2013-10-17 12:26:29.000000000 +0800 +++ ../SOURCES/ceph-0.61.9/configure.ac 2014-02-19 21:11:50.451378431 +0800 @@ -302,7 +302,7 @@ # setup defaults for Debian default-jdk package (without --with-jdk-dir) AS_IF([test -z "$with_jdk_dir"], [ # This works with Debian's default-jdk package - dir='/usr/lib/jvm/default-java/' + dir='/usr/lib/jvm/java/' javac_prog=`find $dir -name javac | head -n 1` AS_IF([test -x "$javac_prog"], [ EXTRA_JDK_BIN_DIR=`dirname $javac_prog`]) @@ -336,10 +336,10 @@ CLASSPATH=$CLASSPATH:$EXTRA_CLASSPATH_JAR export CLASSPATH AC_MSG_NOTICE([classpath - $CLASSPATH]) - AS_IF([test "$have_junit4" = "1"], [ - AC_CHECK_CLASS([org.junit.rules.ExternalResource], [], [ - AC_MSG_NOTICE(Could not find org.junit.rules.ExternalResource) - have_junit4=0])]) + #AS_IF([test "$have_junit4" = "1"], [ + # AC_CHECK_CLASS([org.junit.rules.ExternalResource], [], [ + # AC_MSG_NOTICE(Could not find org.junit.rules.ExternalResource) + # have_junit4=0])]) # Check for jni.h CPPFLAGS_save=$CPPFLAGS diff -Naur ceph-0.61.9/src/java/Makefile.am ../SOURCES/ceph-0.61.9/src/java/Makefile.am --- ceph-0.61.9/src/java/Makefile.am 2013-10-17 12:26:29.000000000 +0800 +++ ../SOURCES/ceph-0.61.9/src/java/Makefile.am 2014-02-19 21:12:59.257377496 +0800 @@ -64,7 +64,7 @@ if HAVE_JUNIT4 JAVA_TEST_CLASSES = $(JAVA_TEST_SRC:test/%.java=%.class) -ESCAPED_JAVA_TEST_CLASSES = com/ceph/fs/CephAllTests\$$1.class +#ESCAPED_JAVA_TEST_CLASSES = com/ceph/fs/CephAllTests\$$1.class CEPH_TEST_PROXY=test/com/ceph/fs/CephMountTest.class @@ -73,7 +73,7 @@ $(JAVAC) -source 1.5 -target 1.5 -Xlint:-options test/com/ceph/fs/*.java libcephfs-test.jar: $(CEPH_TEST_PROXY) - $(JAR) cf $@ $(JAVA_TEST_CLASSES:%=-C test %) $(ESCAPED_JAVA_TEST_CLASSES:%=-C test %) + $(JAR) cf $@ $(JAVA_TEST_CLASSES:%=-C test %) java_DATA += libcephfs-test.jar diff -Naur ceph-0.61.9/src/java/Makefile.in ../SOURCES/ceph-0.61.9/src/java/Makefile.in --- ceph-0.61.9/src/java/Makefile.in 2013-10-17 12:27:16.000000000 +0800 +++ ../SOURCES/ceph-0.61.9/src/java/Makefile.in 2014-02-19 21:13:52.643376770 +0800 @@ -543,7 +543,7 @@ @ENABLE_CEPHFS_JAVA_TRUE@@HAVE_JUNIT4_TRUE@ $(JAVAC) -source 1.5 -target 1.5 -Xlint:-options test/com/ceph/fs/*.java @ENABLE_CEPHFS_JAVA_TRUE@@HAVE_JUNIT4_TRUE@libcephfs-test.jar: $(CEPH_TEST_PROXY) -@ENABLE_CEPHFS_JAVA_TRUE@@HAVE_JUNIT4_TRUE@ $(JAR) cf $@ $(JAVA_TEST_CLASSES:%=-C test %) $(ESCAPED_JAVA_TEST_CLASSES:%=-C test %) +@ENABLE_CEPHFS_JAVA_TRUE@@HAVE_JUNIT4_TRUE@ $(JAR) cf $@ $(JAVA_TEST_CLASSES:%=-C test %) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Naur ceph-0.61.9/src/java/test/com/ceph/fs/CephAllTests.java ../SOURCES/ceph-0.61.9/src/java/test/com/ceph/fs/CephAllTests.java --- ceph-0.61.9/src/java/test/com/ceph/fs/CephAllTests.java 2013-10-17 12:26:29.000000000 +0800 +++ ../SOURCES/ceph-0.61.9/src/java/test/com/ceph/fs/CephAllTests.java 2014-02-19 21:15:34.229375390 +0800 @@ -23,7 +23,7 @@ import java.io.IOException; import java.util.UUID; import org.junit.*; -import org.junit.rules.ExternalResource; +//import org.junit.rules.ExternalResource; import org.junit.runners.Suite; import org.junit.runner.RunWith; import static org.junit.Assert.*; @@ -42,16 +42,16 @@ */ public class CephAllTests{ - @Rule - public static ExternalResource testRule = new ExternalResource(){ - @Override - protected void before() throws Throwable{ - // Add debugging messages or setup code here - }; - - @Override - protected void after(){ - // Add debugging messages or cleanup code here - }; - }; +// @Rule +// public static ExternalResource testRule = new ExternalResource(){ +// @Override +// protected void before() throws Throwable{ +// // Add debugging messages or setup code here +// }; +// +// @Override +// protected void after(){ +// // Add debugging messages or cleanup code here +// }; + // }; }
patch github source :https://github.com/qfong/ceph-create-rpm.patch.git
执行命令:
patch -p1 <../ceph-create-rpm.patch
编译rpm包:
rpmbuild ceph.spec