Recently in 电脑技巧 Category

今天遇到了一个奇怪的事情,git 在一台机器上的克隆出现了问题,提示:

[cnangel@r101073010 tmp]$git clone git@xxxx.com:openad/otserver.git

Cloning into 'otserver'...
fatal: protocol error: bad line length character: Welc

发现ssh加入了-X会导致此现象,但其他机器即使加入了-X也没有此问题,怀疑是ssh配置的问题,然后查找/etc/ssh/ssh_config文件,发现多了一行:

ForwardX11 yes

去掉即可。

[ZT]最牛B的编码套路

忙中看一下。。。

libqq for pidgin发布

google项目上的libqq好久没有更新了,最近QQ更新了协议,对以往2010的协议不再支持,故在github上建立一个关于QQ2011的pidgin-libqq的支持:
https://github.com/cnangel/pidgin-libqq
感兴趣的可下载。
fedora17 i686可直接在下面下载安装。
pidgin-libqq-0.72-1.fc17.i686.rpm

针对google项目上的libqq的patch补丁下载(r202):
0001-fixed-for-cnangel.patch






log4cpp 1.1.0 patch

改进特征:
1,可扩展的队列接口;
2,可根据时间分卷的Appender;
另外,log4cpp 1.1rc1修复了以前可变参数的问题(会产生coredump)
[cnangel@localhost SOURCES]$md5sum log4cpp-1.1rc1.tar.gz
d79d8b20d429aa799ead24254ba68d5a  log4cpp-1.1rc1.tar.gz
patch补丁:
0001-update-for-cnangel.patch

rpm script can not execute

公司的sa安装机器很奇怪,rpm和screen在普通用户下都不能正常使用,看了一下screen,可以执行:
script /dev/null
来解决;但是rpm安装不会执行post以及postun段,让人匪夷所思,这里发现一种办法可解决此问题(需要root权限):
创建rpm的db信息库:
rpm --dbpath /home/cnangel/rpm_ilike/rpm -qa
安装软件
rpm --dbpath /home/cnangel/rpm_ilike/rpm -ivh /disk1/cnangel/rpmbuild/RPMS/x86_64/kfc-*.rpm --prefix /home/cnangel/kfc --nodeps
发现post段没有执行,检查脚本目录:
rpm --eval %{_tmppath}
修改该目录(假设该目录是/var/tmp)权限即可:
chmod 1777 /var/tmp
参考文档:http://www.logiqwest.com/TechnicalPapers/rpmScriptInstall.html

TWiki5.1.1的左侧栏修复

安装上TWiki5.1以上的版本,发现默认的左侧栏没有了,习惯了左侧栏的用户会感觉非常不习惯,查遍了TWiki官方网站和google了相关资料,也没有很好的中文资料,这里根据官方的说明简单处理了一下:

打开templates/view.topmenu.tmpl文件:
找到:
%TMPL:DEF{"leftbar"}%%TMPL:END%
%TMPL:DEF{"leftbardimensions"}%%TMPL:END%
去除最底下模板代码即可。
   fedora16安装以来,一直gnome-shell占用CPU比较高,以前以为是evolution数据量过大导致的问题,后来删除了evolution,重新导入小数据量的evolution,发现CPU仍然偶尔飙高,搜索google无果,于是自行研究了一下发现,把$HOME目录下的.gconf目录删除之后,gnome-shell占用的CPU最多飙到40%,不过要重新设置一下evolution的帐号,希望给fedora的爱好者一些帮助。
   通过现象分析,很可能是导入evolution导入了以前fedora15不兼容的配置信息,导致gnome-shell发挥特效的时候过多的cpu的消耗。


使用Discuz7.2之后,发现财付通支付并不好使,并提示:

支付失败,您的资金未被扣除,原因可能是:您所下单网站链接有更新或者存在风险,请您稍后尝试或者与该网站客服联系。
于是去财付通的接口技术文档上看了一下,说为了安全,防止欺诈,财付通的接口新增加了一个参数spbill_create_ip,不能为空,于是
修改了api/trade/tenpay.api.php文件,注意,Discuz7.2的api/trade/tenpay.api.php文件是使用Zend加密的,可以使用黑刀(DeZend)解密一下,
找到
$reqHandler->setparameter( "ver", "3" );
后面加上一句:
$reqHandler->setparameter( "spbill_create_ip", $_SERVER['REMOTE_ADDR'] );
及时加上了,当时在linux系统上,由于是firefox,测试的时候,发现很正常,但在ie下死活不正常,看接口文档,估计是REFER信息不对导致,于是修改
$reqHandler->setgateurl( "https://www.tenpay.com/cgi-bin/v1.0/pay_gate.cgi" );

$reqHandler->setgateurl( "http://www.xxx.com/tmp.php" );
tmp.php是笔者写的一个测试程序,主要显示环境变量,其内容如下:
<?php
phpinfo();
?>
发现在firefox浏览器下有HTTP_REFERER这个变量,但是ie浏览器下没有HTTP_REFERER这个变量,找到原因了,那么看一下程序,为什么会出现这个现象呢?找到memcp.php文件,找到如下地方:
502 $requesturl = credit_payurl($price, $orderid);
503
504 $query = $db->query("SELECT orderid FROM {$tablepre}orders WHERE orderid='$orderid'");
505 if($db->num_rows($query)) {
506 showmessage('credits_addfunds_order_invalid');
507 }
508
509 $db->query("INSERT INTO {$tablepre}orders (orderid, status, uid, amount, price, submitdate)
510 VALUES ('$orderid', '1', '$discuz_uid', '$amount', '$price', '$timestamp')");
511
512 showmessage('credits_addfunds_succeed', $requesturl);
在跳转时,程序使用了showmessage函数,而查看include/global.func.php文件里面showmessage函数定义,找到:
1099 if($url_forward) {
1100 $show_message = "<script type=\"text/javascript\" reload=\"1\">\nif($('return_$handlekey')) $('return_$handlekey').className = 'onright';\nif(typeof submithandle_$handlekey =='function') {submithandle_$handlekey('$url_forward', '$show_message');} else {location.href='$url_forward'}\n</script>";
1101 } else {
1102 $show_message .= "<script type=\"text/javascript\" reload=\"1\">\nif(typeof messagehandle_$handlekey =='function') {messagehandle_$handlekey('$messagehandle', '$show_message');}\n</script>";
1103 }
发现跳转使用的是location.href,而一般写前端界面的人都知道location.href在ie下是取不到refer信息的,那么现在问题就变成用什么方法代替location.href的跳转呢?问题也很简单,拷贝一份showmessage函数的内容,命名函数showmessage为函数trade_showmessage,然后找到上述的地方,修改成:
1105 if($url_forward) {
1106 $show_message = "<script type=\"text/javascript\" reload=\"1\">\nif($('return_$handlekey')) $('return_$handlekey').className = 'onright';\nif(typeof submithandle_$handlekey =='function') {submithandle_$handlekey('$url_forward', '$show_message');} else { if (document.all){ var gotoLink = document.createElement('a');gotoLink.href='$url_forward';document.body.appendChild(gotoLink);gotoLink.click();}\nelse window.location.href='$url_forward';}\n</script>";
1107 } else {
1108 $show_message .= "<script type=\"text/javascript\" reload=\"1\">\nif(typeof messagehandle_$handlekey =='function') {messagehandle_$handlekey('$messagehandle', '$show_message');}\n</script>";
1109 }
即创建一个DOM节点,并添加click事件,从而memcp.php文件调用trade_showmessage函数解决问题。

关于高版本的libtool v2.4的问题

因为生成so的问题,发现libtool v2.4生成代码时:
libtool --debug --tag=CXX --mode=link g++ -fPIC -g -O2 -g -Wall -D_DEBUG -shared -fpic -o libsotest.so libsotest_so-testso.o -lpthread -ldl -lcppunit
结果为:
g++ -fPIC -g -O2 -g -Wall -D_DEBUG -fpic -o libsotest.so libsotest_so-testso.o  -lpthread -ldl -lcppunit
而期望的结果应该是:
g++ -fPIC -g -O2 -g -Wall -D_DEBUG -shared -fpic -o libsotest.so libsotest_so-testso.o  -lpthread -ldl -lcppunit
低版本的libtool v1.5.22则没有这个问题,于是查找原因,经过分析,发现新版本的libtool对-shared选项有二处地方的变动,一处为func_mode_compile函数,主要是针对-shared的优化,
 2429     -shared | -static | -prefer-pic | -prefer-non-pic)
 2430       later+=" $arg"
 2431       continue
 2432       ;;
另外,在函数func_mode_link中
 6171       -shared)
 6172     # The effects of -shared are defined in a previous loop.
 6173     continue
 6174     ;;
如果得到上面的期望结果,则注释这条语句即可。

详细的问题描述见:http://my.huhoo.net/archives/2011/08/libtool.html

libtool的一个问题

    libtools生成so的时候,发现在rhel5.3和fedora15下,结果竟然不一样,Makefile.am这样写道:
dydir    = $(bindir)/pwd
dy_PROGRAMS    = libdy.so
libdy_so_SOURCES = dy.cpp dy.h
libdy_so_CXXFLAGS = -fPIC
libdy_so_LDFLAGS = -shared -fpic

在fedora15下,这里面dy.cpp里面必须包括main函数,否则编译不过,而rhel5.3则没有这个问题,查了过程发现fedora15和rhel5.3的编译过程分别如下所示:
fedora15:
/bin/sh ../../../libtool --tag=CXX   --mode=link g++ -fPIC -g -O2 -shared -fpic  -o libdy.so libdy_so-dy.o 
libtool: link: g++ -fPIC -g -O2 -fpic -o libdy.so libdy_so-dy.o
/usr/lib/gcc/i686-redhat-linux/4.6.0/../../../crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status

rhel5.3
/bin/sh ../../../libtool --tag=CXX --mode=link g++  -g -O2   -o libdy.so -shared -fpic libdy_so-dy.o 

g++ -g -O2 -o libdy.so -shared -fpic libdy_so-dy.o
应该是libtool在fedora15上丢失了-shared参数所致,fedora15的libtool版本为2.4,而rhel5.3的libtool版本为1.5.22。

Monthly Archives

Pages

Powered by Movable Type 7.7.2

About this Archive

This page is an archive of recent entries in the 电脑技巧 category.

新闻娱乐 is the previous category.

Find recent content on the main index or look in the archives to find all content.