查看文章 |
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,已经可以顺利执行了。 此次事故的教训: 一个大忌:不要直接在生产服务器上执行为未知后果的操作。 |
最近读者:

