CentOS7编译WD My Cloud下的SVN(Subversion)(附编译好的SVN的链接)

CentOS7 下编译 MyCloud的Subversion
 
特别说明,步骤参考 http://www.cnblogs.com/keikain/p/7619741.html
两者操作系统不一样,硬件版本不一样。 步骤基本一样
 
涉及包
WD_MyCloud_GPL_v2.30.165_20170321.tar.gz (可以下载 https://support.wdc.com/downloads.aspx?p=269&lang=en
相关库:apr-1.6.2.tar.gz
    apr-util-1.6.0.tar.gz
    expat-2.2.4.tar.bz2
    sqlite-snapshot-201707212031.tar.gz
    subversion-1.9.7.tar.gz
    zlib-1.2.11.tar.gz
 
登录到CentOS7终端
 
编译环境配置
#设置编译目录,这里是home目录,其他目录则自行修改
export WD_ROOT_DIR=~ 
export WD_BUILD_DIR=$WD_ROOT_DIR/wd_build
export WD_INSTALL_DIR=$WD_ROOT_DIR/wd_install
mkdir -p $WD_BUILD_DIR $WD_INSTALL_DIR
cd $WD_BUILD_DIR
wget http://downloads.wdc.com/gpl/WD_MyCloud_GPL_v2.30.165_20170321.tar.gz
tar -xvf WD_MyCloud_GPL_v2.30.165_20170321.tar.gz
cd WD_MyCloud_GPL_v2.30.165_20170321/toolchain
tar -xvf armv7-marvell-linux-gnueabi-softfp_i686_64K_Dev_20131002.tar.gz
source source.me

下载相关库

cd $WD_BUILD_DIR
wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.6.2.tar.gz
wget https://github.com/libexpat/libexpat/releases/download/R_2_2_4/expat-2.2.4.tar.bz2
wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.6.0.tar.gz
wget http://www.hwaci.com/sw/sqlite/snapshot/sqlite-snapshot-201707212031.tar.gz
wget http://mirrors.tuna.tsinghua.edu.cn/apache/subversion/subversion-1.9.7.tar.gz
wget http://www.zlib.net/zlib-1.2.11.tar.gz

如果wget失败可以自行搜索下载

 
编译相关库
1,apr
解压:
cd $WD_BUILD_DIR
tar -zxvf apr-1.6.2.tar.gz 
cd apr-1.6.2/

 

设置相关参数:
在configure前,需要修改下Makefile.in将如下内容的红色部分进行修改:
tools/gen_test_char@EXEEXT@: $(OBJECTS_gen_test_char)
   $(LINK_PROG) $(OBJECTS_gen_test_char) $(ALL_LIBS)
修改后的内容为:
tools/gen_test_char@EXEEXT@: $(OBJECTS_gen_test_char)
#  $(LINK_PROG) $(OBJECTS_gen_test_char) $(ALL_LIBS)
  gcc -Wall -O2  tools/gen_test_char.c -s -o tools/gen_test_char
切记"gcc -Wall -O2...."这行前面要按 Tab键添加制表符,接着开始configure:
./configure --prefix=$WD_INSTALL_DIR/apr --host=arm-marvell-linux-gnueabi ac_cv_file__dev_zero=yes ac_cv_func_setpgrp_void=yes apr_cv_tcp_nodelay_with_cork=yes apr_cv_process_shared_works=yes apr_cv_mutex_robust_shared=yes ac_cv_sizeof_ssize_t=4 ac_cv_sizeof_size_t=4 ac_cv_sizeof_off_t=4 ac_cv_sizeof_struct_iovec=8 --cache=arm-linux.cache

 

其中--prefix=$WD_INSTALL_DIR/test是我所设置的编译好的库的安装路径,大家可以根据自己的实际情况进行修改。另外ac_cv_sizeof_ssize_t=4 ac_cv_sizeof_size_t=4 ac_cv_sizeof_off_t=4需要重点说下,该参数如果不加入并不影响编译过程,但是会在commit的时候会报如下错误:
Corrupt node-revision “0.0.t0-0”
Malformed text rep offset line in node-rev
开始编译&安装:
make
make install

 

 
2,expat
解压:
cd $WD_BUILD_DIR
tar -jxvf expat-2.2.4.tar.bz2
cd expat-2.2.4/

设置参数:

./configure --prefix=$WD_INSTALL_DIR/expat --host=arm-marvell-linux-gnueabi

编译&安装:

make
make install

在我make的时候好像报了个docbook2x什么的错误(当时安装时没有记下来),这个可以通过yum install 安装与docbook*相关的库即可,可自行搜索下。

简单我直接全部安装了yum install docbook* 
 
3,apr-util
解压:
cd $WD_BUILD_DIR
tar -zxvf apr-util-1.6.0.tar.gz
cd apr-util-1.6.0/

设置参数:

./configure --prefix=$WD_INSTALL_DIR/apr-util --host=arm-marvell-linux-gnueabi --with-expat=$WD_INSTALL_DIR/expat --with-apr=$WD_INSTALL_DIR/apr

编译&安装:

make
make install

 4,sqlite

解压:
cd $WD_BUILD_DIR
tar -zxvf sqlite-snapshot-201707212031.tar.gz 
cd sqlite-snapshot-201707212031/

设置参数:

./configure --prefix=$WD_INSTALL_DIR/sqlite --host=arm-marvell-linux-gnueabi --enable-threadsafe

 其中--enable-threadsafe这个需要设置,不然在svnadmin create的时候会报错

编译&安装:
make
make install

5,zlib

 解压:
cd $WD_BUILD_DIR
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11/

设置参数:

由于zlib的configure没有--host可以指定编译器和链接器,因此需要设置临时的环境变量:
export CC=arm-marvell-linux-gnueabi-gcc
export CXX=arm-marvell-linux-gnueabi-g++
export LD=arm-marvell-linux-gnueabi-ld

然后再configure:

 ./configure --prefix=$WD_INSTALL_DIR/zlib

编译&安装:

make
make install

6,subversion

解压:
cd $WD_BUILD_DIR
tar -zxvf subversion-1.9.7.tar.gz
cd subversion-1.9.7/

设置参数:

这里需要在configure前修改该文件,因为1.9.7版本在configure的时候会报如下错误:
checking for Mach-O dynamic module iteration functions... configure: error: in `/home/test/workplace/subversion-1.9.7':
configure: error: cannot run test program while cross compiling
我的方法比较暴力,直接删除configure中的如下内容(红色标识的内容):
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Mach-O dynamic module iteration functions" >&5
$as_echo_n "checking for Mach-O dynamic module iteration functions... " >&6; }
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <mach-o/dyld.h>
#include <mach-o/loader.h>
int
main ()
{
const struct mach_header *header = _dyld_get_image_header(0);
const char *name = _dyld_get_image_name(0);
if (name && header) return 0;
return 1;
;
return 0;
}
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
$as_echo "#define SVN_HAVE_MACHO_ITERATE 1" >>confdefs.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
当然,这篇文章[1]给出了另一种解决方案,同样修改configure,红色替换为绿色(不要加号):
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Mach-O dynamic module iteration functions" >&5    
$as_echo_n "checking for Mach-O dynamic module iteration functions... " >&6; }    
  if test "$cross_compiling" = yes; then :    
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5    
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}    
-as_fn_error $? "cannot run test program while cross compiling    
-See \`config.log' for more details" "$LINENO" 5; }    
+  {     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5    
+$as_echo "no" >&6; }    
+ }    
else    
  cat confdefs.h - conftest.$ac_ext    
/* end confdefs.h.  */
修改configure完毕后开始configure:
./configure --prefix=$WD_INSTALL_DIR/subversion --host=arm-marvell-linux-gnueabi --with-apr=$WD_INSTALL_DIR/apr --with-apr-util=$WD_INSTALL_DIR/apr-util --with-sqlite=$WD_INSTALL_DIR/sqlite --with-zlib=$WD_INSTALL_DIR/zlib --enable-all-static

这里为了编译出standalone的可执行文件,需要指定--enable-all-static。

在configure完成后,需要修改Makefile文件,
对如下红色部分进行修改:
LIBS = 
修改后为:
LIBS = -lpthread
就是让工程链接工具链中的pthread库,最后进行编译&安装:
make
make install

 至此,编译工作就结束了,检查一下看看:

cd $WD_INSTALL_DIR/subversion/bin
file subversion svnadmin
 
 
哈哈,可以看出,编译出的版本为ARM版。
[lsheng@localhost bin]$ file svnadmin svnserve
svnadmin: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.6.16, not stripped
svnserve: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.6.16, not stripped
安装配置
拷贝可执行文件(svnadmin和svnserve):
接下来需要在My Cloud中进行配置,首先通过ssh登陆My Cloud,这里提一点,由于My Cloud自身的存储空间有限(供安装系统和相关应用的空间,不是指的/mnt下挂载的磁盘空间),因此,需要将subversion可执行文件放在/mnt下挂载的磁盘中,执行下列命令创建放置可执行文件的目录:
cd /mnt/HD/HD_a2/Public/
mkdir subversion

这样就在磁盘上创建了subversion目录(这里,/mnt/HD/HD_a2/Public目录是我的Public共享目录的路径,或许每个人都不同),这时通过在windows资源管理器的地址栏中输入\\192.168.1.102即可访问到Public目录下的subversion目录,将编译好的subversion可执行文件(主要是svnadmin和svnserve)拷贝到subversion目录下。

建立软连接:
ln -s /mnt/HD/HD_a2/Public/subversion/svnadmin /usr/bin/svnadmin
ln -s /mnt/HD/HD_a2/Public/subversion/svnserve /usr/bin/svnserve

建立仓库&运行:

可以通过执行如下命令(示例命令)建立仓库:
mkdir -p /mnt/HD/HD_a2/svn/reps
svnadmin create /mnt/HD/HD_a2/svn/reps

以上命令会在/mnt/HD/HD_a2/svn目录下建立名为reps的仓库,当然在千万不要在My Cloud自身的存储空间中创建仓库,因为空间根本不够,可以在挂载的磁盘中创建。

接下来需要分别修改仓库的conf目录下的相关文件,具体怎么修改,直接搜即可,有很多教程。
最后运行svnserve:
sudo svnserve -d -r /mnt/HD/HD_a2/svn

最后注意一点,-r后跟的目录是到/mnt/HD/HD_a2/svn而不是/mnt/HD/HD_a2/svn/reps,切记!!

在电脑端运行小乌龟TortoisSVN试试,对应以上示例地址为:
svn://192.168.1.102/reps
不出意外应该就可以checkout和commit了。
 
不想折腾的兄弟,我把编译好的可执行文件给上传了,直接下即可,以下为网盘地址。( 切记!!型号不要搞错了,该版本对应WD My Cloud ,固件版本是2.30
 
参考文献:
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值