查看文章
 
SVN 升级惊魂记
2009-04-29 21:40
因为开发环境和生产环境不完全一致,所以有时会遇到只在生产环境中出现、而在开发环境中没有遇到的问题。因此为了找到BUG,就需要在生产环境中,根据访问IP来打开调试开关,从而能记录到一些请求数据以便调试。

今天就是遇到这样的问题,为了方便,就直接用sftpDrive把生产服务器上的代码目录映射到Windows中的一个虚拟驱动盘(X盘),再用IDE编辑调试。

问题解决后,习惯动作地在X盘的目录中用TortoiseSVN 执行了svn update,结果失败,才意识到这不是在本地目录操作。登录到SSH后,执行svn update,被告知目录被lock,执行svn clear后再更新,提示:
svn up
svn: This client is too old to work with working copy '.'; please get a newer Subversion client

从此噩梦的开始!

出现这个问题的原因是在本地开发环境中(Windowx XP)用的svn客户端是1.6版本,而在生产服务器上的svn 客户端是1.4.2。在X盘上用svn client 1.6 update一次后,修改了一些仓库文件,多了一些1.4.2无法识别的指令,因此才会提示版本过低。

那么解决的方法就是应该升级生产服务器上的svn client。

在官方网站中有1.6的rpm安装包可用,把所有相关rpm都下载下来:
wget -r -np -nd http://the.earth.li/pub/subversion/summersoft.fay.ar.us/pub/subversion/latest/1.6.1/rhel5/x86_64/

尝试安装:
rpm -ivh subversion-1.6.1-1.rhel5.x86_64.rpm
error: Failed dependencies:
        sqlite >= 3.4 is needed by subversion-1.6.1-1.x86_64

需要新版的sqlite支持,尝试安装:
rpm -ivh sqlite-3.5.9-2.x86_64.rpm
Preparing...                ########################################### [100%]
        file /usr/bin/sqlite3 from install of sqlite-3.5.9-2 conflicts with file from package sqlite-3.3.6-2
        file /usr/lib64/libsqlite3.so.0.8.6 from install of sqlite-3.5.9-2 conflicts with file from package sqlite-3.3.6-2

已有:
rpm -qa|grep sqlite
python-sqlite-1.1.7-1.2.1
sqlite-3.3.6-2

尝试卸载掉旧版的sqlite:
rpm -e sqlite-3.3.6-2
error: Failed dependencies:
        libsqlite3.so.0()(64bit) is needed by (installed) rpm-4.4.2-47.el5.x86_64
        libsqlite3.so.0()(64bit) is needed by (installed) rpm-libs-4.4.2-47.el5.x86_64
        libsqlite3.so.0()(64bit) is needed by (installed) yum-metadata-parser-1.0-8.fc6.x86_64
        libsqlite3.so.0()(64bit) is needed by (installed) python-sqlite-1.1.7-1.2.1.x86_64
        libsqlite3.so.0()(64bit) is needed by (installed) apr-util-1.2.7-6.x86_64

依赖提示很重要,rpm命令依赖sqlite,但当时没太大留意,执行了强制卸载:
rpm -e sqlite-3.3.6-2 --nodeps

再尝试安装新版的sqlite,才发觉rpm对sqlite的依赖:
rpm -ivh sqlite-3.5.9-2.x86_64.rpm
rpm: error while loading shared libraries: libsqlite3.so.0: cannot open shared object file: No such file or directory

尝试用yum来恢复旧版的sqlite,但yum也依赖sqlite(应该是依赖rpm命令):
yum install sqlite
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:

   libsqlite3.so.0: cannot open shared object file: No such file or directory

wget http://mirror.centos.org/centos/5/os/x86_64/CentOS/sqlite-3.3.6-2.x86_64.rpm

sqlite RPM packages for Red Hat, CentOS and Fedora
http://dag.wieers.com/rpm/packages/sqlite/

所有rpm命令都无法使用了:
[root@st-71 rpms]# rpm --help
rpm: error while loading shared libraries: libsqlite3.so.0: cannot open shared object file: No such file or directory

这时就是一个鸡和蛋的问题了:要安装sqlite,就需要rpm,而rpm又需要sqlite,死循环了。

可以通过源码安装sqlite,但在官方网站上找不到sqlite-3.3.x版本的源码。

最后通过在windows中下载了sqlite-3.3.6-2.x86_64.rpm ,用7zip解压出usr/lib64/libsqlite3.so.0.8.6 上传到 /usr/lib64/libsqlite3.so.0.8.6
然后建一个链接:
ln -s /usr/lib64/libsqlite3.so.0.8.6 /usr/lib64/libsqlite3.so.0

这时gem命令可以用了。

恢复旧版的sqlite:
wget http://mirrors.163.com/centos/5/os/x86_64/CentOS/sqlite-3.3.6-2.x86_64.rpm
rpm -ivh sqlite-3.3.6-2.x86_64.rpm

现在回到起点了。

svn 1.6需要新版的sqlite,而svn 1.5不需要:
wget -r -np -nd http://the.earth.li/pub/subversion/summersoft.fay.ar.us/pub/subversion/latest/1.5.6/rhel5/x86_64/

现有的svn版本:
rpm -qa|grep subversion
subversion-1.4.2-2.el5

卸载旧版svn:
rpm -e subversion-1.4.2-2.el5

安装svn 1.5.6
rpm -ivh neon-0.27.2-1.x86_64.rpm
rpm -ivh neon-devel-0.27.2-1.x86_64.rpm
rpm -ivh subversion-1.5.6-1.rhel5.x86_64.rpm

顺利安装完成:
svn --version
svn, version 1.5.6 (r36142)
   compiled Mar 1 2009, 15:09:22

现在再到代码目录执行svn up,已经可以顺利执行了。

此次事故的教训:

一个大忌:不要直接在生产服务器上执行为未知后果的操作。



类别:Web Server||添加到搜藏 |分享到i贴吧|浏览(2801)|评论 (0)
 
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu