澳门新葡萄京娱乐场 1

澳门新葡萄京娱乐场WD My Cloud Ex2 Ultra下的SVN(Subversion)编译&配置(附编译好的SVN的链接)

经过几天的努力终于在arm-linux平台上搭建了apache+sqlite+php平台.

前言

apche与sqlite网上有不少资料,而php for
arm-linux很少.为了在arm平台上安装php发了不少时间.所以将搭建过程发表在此,希望对大家有所帮助.

 前些阵子买了个WD的My Cloud EX2
Ultra,主要就是为了存放重要资料啥的。买回来发现配套的软件中竟然没有svn,于是便有了这篇折腾随笔了。

Sqlite for Arm
Linux安装
1、下载sqlite3.3.8:请到,将下载的代码包解开,将生成sqlite3.3.8目录2、修改configure文件,将下面语句注释掉#if
test $cross_compiling = yes; then# { { echo $as_me:$LINENO:: error:
unable to find a compiler for building build tools 5#echo $as_me:
error: unable to find a compiler for building build tools 2;}# { (exit
1); exit 1; }; }#fi. . .#else# test $cross_compiling = yes # { {
echo $as_me:$LINENO:: error: cannot check for file existence when cross
compiling 5#echo $as_me: error: cannot check for file existence when
cross compiling 2;}# { (exit 1); exit 1; }; }. . .#else# test
$cross_compiling = yes # { { echo $as_me:$LINENO:: error: cannot
check for file existence when cross compiling 5#echo $as_me: error:
cannot check for file existence when cross compiling 2;}# { (exit 1);
exit 1; }; }3、

软硬件环境

1,WD My Cloud EX2 Ultra

硬件:

  • Marvell® ARMADA® 385 1.3 GHz 双核
  • 1 GB DDR3

软件:

其系统是剪裁过的Debain

 

2,交叉编译平台

Ubuntu 16.04.2 LTS server(安装在VMware中)

工具链:armv7-marvell-linux-gnueabi-softfp_i686_64K_Dev_20131002.tar.gz(这个WD官网可下载到

相关库:apr-1.6.2.tar.gz

    apr-util-1.6.0.tar.gz

    expat-2.2.4.tar.bz2

    sqlite-snapshot-201709211311.tar.gz

    subversion-1.9.7.tar.gz

    zlib-1.2.11.tar.gz

    (这些库基本上都是写这篇随笔时能下到的最新版本了)

 编译环境配置

在编译相关库的源码前需要配置下编译环境,相当简单,通过链接

1,在toolchains目录下解压工具链:

tar
-zxvf armv7-marvell-linux-gnueabi-softfp_i686_64K_Dev_20131002.tar.gz

2,在toolchains目录下执行命令:

source
source.me

即可配置好工具链,这样就不用修改/etc/profile了。

另外,我是通过SecureCRT连接VMware中的ubuntu,可以安装一个lrzsz:

sudo
apt-get install lrzsz

这样方便windows和ubuntu之间的文件传输。

编译相关库

1,apr

解压:

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=/home/test/res/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=/home/test/res/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

解压:

tar -jxvf expat-2.2.4.tar.bz2

cd expat-2.2.4/

设置参数:

./configure –prefix=/home/test/res/expat
–host=arm-marvell-linux-gnueabi

编译&安装:

make

make install

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

 

3,apr-util

解压:

tar -zxvf apr-util-1.6.0.tar.gz

cd apr-util-1.6.0/

设置参数:

./configure
–prefix=/home/test/res/apr-util –host=arm-marvell-linux-gnueabi
–with-expat=/home/test/res/expat –with-apr=/home/test/res/apr

编译&安装:

make

make install

 

 4,sqlite

解压:

tar -zxvf sqlite-snapshot-201709211311.tar.gz 

cd sqlite-snapshot-201709211311/

设置参数:

./configure –prefix=/home/test/res/sqlite
–host=arm-marvell-linux-gnueabi –enable-threadsafe

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

编译&安装:

make

make install

 

5,zlib

 解压:

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=/home/test/res/zlib

编译&安装:

make

make
install

 

6,subversion

解压:

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=/home/test/res/subversion –host=arm-marvell-linux-gnueabi
–with-apr=/home/test/res/apr –with-apr-util=/home/test/res/apr-util
–with-sqlite=/home/test/res/sqlite –with-zlib=/home/test/res/zlib
–enable-all-static

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

在configure完成后,需要修改Makefile文件,

对如下红色部分进行修改:

LIBS

修改后为:

LIBS =
-lpthread

就是让工程链接工具链中的pthread库,最后进行编译&安装:

make

make
install

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

澳门新葡萄京娱乐场 1

哈哈,可以看出,编译出的版本为ARM版。

安装配置

拷贝可执行文件(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

建立仓库&运行:

可以通过执行如下命令(示例命令)建立仓库:

svnadmin create /home/test/svn/reps

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

接下来需要分别修改仓库的conf目录下的相关文件,具体怎么修改,直接搜即可,有很多教程。

最后运行svnserve:

sudo svnserve -d -r /home/test/svn

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

在电脑端运行小乌龟TortoisSVN试试,对应以上示例地址为:

svn://192.168.1.102/reps

不出意外应该就可以checkout和commit了。

写在最后:

不想折腾的兄弟,我把编译好的可执行文件给上传了,直接下即可,以下为网盘地址。(切记!!型号不要搞错了,该版本对应WD My Cloud EX2
Ultra

参考文献:

[1] 

发表评论

电子邮件地址不会被公开。 必填项已用*标注