在gitlab中导入已有git repository

总结一下最近遇到的一个git操作里的问题。 这个操作是第一次向gitlab中导入已经存在的git project时的操作步骤。


Git global setup:
1. git config –global user.name “your_name”
2. git config –global user.email “your_mail_address”

Setup current repository:
1. git remote rm origin
2. git remote add <http_address>
例如:
git remote add http://code.ictva.org/wheel/hubs.git
(输入用户名和密码)
3. git push -u origin master

=========================================================================

遇到的问题
问题: Push的时候遇到以下错误:
git push throws error: RPC failed; result=22, HTTP code = 411
解决办法:
push之前运行以下命令: git config http.postBuffer 524288000 #Set to 500MB

参考:https://www.openshift.com/kb/kb-e1035-git-push-throws-error-rpc-failed-result22-http-code-411

一次Linode VPS服务器流量突然激增的PD过程

前几天突然收到一封Linode发来的邮件,说是网络流量已经超过了80%。虽然距离月底已经没有几天,但这依然是个不能忽略的问题。因为我的VPS上只是在运行着我跟朋友们的几个blog,以往每个月的流量根本不会超过20%。为什么现在就那么高了呢?开始当然是怀疑web服务,是不是谁把什么图片,文件之类的传到什么地方引起疯狂下载了?于是暂时关了NGINX。但是使用iftop命令发现这个时候依然网络流量还是很高。有两个大户,正以每秒1M多的速度在偷流量。但是上面却没有IP显示。用netstat看一下,只能看见到自己的ssh连接。。。于是乎,至此,只具有可怜的网络知识的我已经黔驴技穷了。

只好求助网络安全大拿了。求助之下,@白金-PT同学马上就给了解决方案。首先用tcpdump抓下数据包,然后通过对这些数据包的分析,找到了偷我流量的IP地址跟端口。最后发现原来是因为机器上开着的name service的53端口在不断地进行网络通讯。这个服务应该是之前尝试在这个机器上搭建SMTP服务的时候开的,之后就一直没有管了。关掉之后,运行一个晚上,一切正常了。从图里面可以看出来,网络流量一下正常了。

a

 

通过这次事件,发现一些命令还是不很靠谱啊,分析数据包很强大!这个得学学。

Drupal 7中如何根据Taxonomy定制breadcrumb

同心慈善会的网站终于做到尾声,但是发现之前一直想绕过去的breadcrumb的定制最终还是绕不过去。

具体问题是这样的,我建立了一个view,接受一个taxonomy term ID参数作为CONTEXTUAL FILTERS列出这个taxonomy下所有的文章。我的问题是,怎么才能在breadcrumb那个位置显示出来这个的路径呢?

例如这个地址:http://ww1.ohch.org/page-news/15

breadcrumb上显示的内容并不是按照taxonomy来列的。目前的这个breadcrumb是我参考 http://hellodrupal.info/node/84 这个方法来做的,代码如下:

function ohch_breadcrumb($breadcrumb) {

if (!empty($breadcrumb)) {
//$breadcrumb[] = l(drupal_get_title(), $_REQUEST[‘q’]);

return ‘<div id=”crumbs”><p>’. implode(‘ › ‘, $breadcrumb).'<em>’.drupal_get_title().'</em>’.'</p></div>’;
}
}

function ohch_preprocess_page(&$variables, $hook){

$node = $variables[‘node’];

$tax = array();
$tax[] = ‘<a href=”‘.base_path().'”>’.t(‘首页’).'</a>’;
$taxItem = $node->field_tags[und][0][taxonomy_term];
$tax[] = ‘<a href=”‘.’taxonomy/term/’.$taxItem->tid.'”>’.t($taxItem->name).'</a> ‘;
$variables[‘breadcrumb’] = theme(‘breadcrumb’, $tax);// 调用breadcrumb theme
}

原因就是那个文章里面说的方法,特别是$terms = $node->taxonomy; 这个似乎在Drupal 7里面不work了。

感觉还是在这个里面的方法写的有问题,因为在通过我定义的viewi地址访问的时候,似乎$node是空的了。说明这不是一个node?

最后还是用 taxonomy_breadcrumb 解决了我的问题,这个模块本身对Drupal7的支持还是Alpha的,还是有各种各样的bug的。不过还好,我要求比较低,最终勉强着用它实现了我的要求。

 

一个纯bashell的http server

其是这个脚本早就写出来了,已经用了一年。现在怕回头自己都忘记了,把它总结一下。

这个http server非常强大,可以说支持任何脚本语言,什么php,python,java,只要能在Linux shell里面调用的都可以。下面是实现方式。

首先是一个接受request和处理请求并返回给客户端的脚本:

#!/bin/bash
base=/data
read request

while /bin/true; do
read header
[ “$header” == $’\r’ ] && break;
done

url=”${request#GET }”
url=”${url% HTTP/*}”
query=”${url#*\?}”
url=”${url%%\?*}”

if [ $url == “/” ]; then
url=”/index.html”
fi

filename=”$base$url”

if [ “$query” != “$url” -a -x “$filename” ]; then
echo -e “HTTP/1.1 200 OK\r”
echo -e “Content-Type: bin\r”
echo -e “\r”
export QUERY_STRING=$query
“$filename”
echo -e “\r”
elif [ -f “$filename” ]; then
echo -e “HTTP/1.1 200 OK\r”
echo -e “Content-Type: `/usr/bin/file -bi \”$filename\”`\r”
echo -e “\r”
cat “$filename”
echo -e “\r”
else
echo -e “HTTP/1.1 404 Not Found\r”
echo -e “Content-Type: text/html\r”
echo -e “\r”
echo -e “404 Not Found\r”
echo -e “Not Found
The requested resource was not found\r”
echo -e “\r”
fi

相信含义不解释了,非常非常简单,相信是一目了然了。

接下来定义所有指向80端口的请求都交由这个脚本来处理,需要在/etc/xinetd.d目录中建立一个名为http的文件:

# default: off
# description: The http service can response any\
# request come from 80 port and response to client
service http
{
disable = no
port = 80
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/local/bin/zqweb.sh
}

仅此而已。

一个civicrm的bug以及work around

最近在帮同心慈善会实施他们的IT系统,也似乎成了国内第一个用civicrm来实施慈善项目的人。恩~主要是海涛同学。我只负责技术支持和顾问而已了。

估计是因为之前civicrm很好有非英语国家的人用,所以在使用中还是发现了一些问题的。例如刚开始的界面中文问题,可喜的是已经在免费午餐IT小组各位同仁的努力下完成了整个软件的汉化了。这两天又碰到一个中文输入的问题。

问题是这样的,在创建自定义数据组和自定义数据的时候,发现如果名字定义为中文,那只能插入一个数据,之后的数据插入总会报告数据已经存在的错误。仔细分析了一下PHP的代码,发现了问题的所在,但是PHP实在是不灵。所以只是提供了一个简陋的work around并且去civicrm的开发者论坛上发了一贴:http://forum.civicrm.org/index.php/topic,22276.0.html  希望他们能够解决这个问题。

这里我也记录一下我的work around,以便有其他同学遇到了以后可以作为参考。我就直接把我论坛上的帖子内容贴上了,就懒得翻译了再~

In the munge method of /Utils/String.php,  there is a line:
$name = preg_replace(‘/\s+|\W+/’, $char, trim($name) );
But if the $name is a Chinese string, the return value of preg_replace always be ‘_’ regardless what the exact value of $name is.

I worked around this problem by adding the following lines:
$oldName = $name;
$name = preg_replace(‘/\s+|\W+/’, $char, trim($name) );
if ( $name==’_’ ) $name = $oldName;

这个问题,各位PHP programmer有什么好的思路?

Linode VPS招合租

Linode的VPS服务已经用了一年,相比之前dreamhost的服务相比,真的是好太多了。独立IP,不必为别人的愤青买单。之前担心的有限网络流量和硬盘空间其实根本不是问题。

所以目前准备继续下一年的Linode续费。目前是5个朋友一起租的,基本上大家都是在跑wordpress。但是各位根本不是什么名人,之前每个月带宽才用到限额的5%不到。考虑到不要浪费资源,现在想问问各位朋友们有没有想一起加入我们这个队伍一起合租的。

我简单介绍一下目前的情况,之前参加的是Linode的512 program:

费用是年付,有10%的折扣,就是一年要$215.46。目前系统装的是centOS,跑着几个wordpress,我这个blog就是跑在它上面的,你可以看看速度怎么样。说实话,这个速度在国外的主机里面算是不错的了,当然跟国内的不能比。不过稳定性绝对一流。从来没有出现过宕机什么的现象。我用过国内的rashost,这个速度快是快,但是确实是三天两头宕机啊。

下面一些目前的CPU和网络使用状况:

硬盘是一共16G,目前还剩下4.5G。我觉得这个可能会有些问题,如果人多了不够用可以再额外买一些。

上面就是一些现状了。有想了解更详细的可以再找我。

下面是想对一起合租的朋友的要求:

1. 必须是我熟悉的朋友。

2. 不要想在这个机器上放大访问量、大运算量的程序。

3. 原则上费用大家共担,但是如果你的程序出现额外的大量用户访问或者消耗了大量带宽以至于别人都不够用了,那你就得自己掏钱扩容了。

4. 有问题大家协商解决。

有意想一起玩的朋友尽快联系我吧,这个是需要8月1日续费,我会在这天先把钱付了。

在Linux上的Andorid模拟器中安装apk软件

最近想入手一个Andorid手机,先在机器上装了个Andord SDK和模拟器玩玩。想在模拟器上装个软件,却发现网上找到的资料都是windows上的。虽然Linux上面的大体相同吧,却也有细微差别。所以记录一下。事先声明一下,我的笔记本用的是Ubuntu 10.10。这个系统真的很好用。

1. 准备Andord SDK

Linux上的Andorid SDK下载下来后可以直接解压缩使用。具体下载和安装步骤去看官方文档,这里就不详细说了。就给一个官方地址。因为伟大的GFW,这个地址必须翻墙才能上。

2. 启动SDK Manager创建一个新的AVD(Andorid虚拟设备)

3. 启动模拟器

qi@qi-ThinkPad-T60p:~/tools/android-sdk-linux_86/tools$ ./emulator -avd zq

这里的-avd参数指定需要启动的是哪个模拟器,我这里的zq就是刚才第二步里面创建的那个模拟器了。

4. 安装apk软件

跟windows上一样,linux上也是用adb来安装,但是不同于windows,这个命令的位置是在platform-tools而不是tools。

qi@qi-ThinkPad-T60p:~/tools/android-sdk-linux_86/platform-tools$ ./adb install /tmp/aa.apk
992 KB/s (326241 bytes in 0.321s)
pkg: /data/local/tmp/aa.apk
Success
恩,这样就结束了。确实很简单。安装上以后我发现软件里面的广告显示都很正常。有意思。

重启nginx

今天发现修改了vhost的配置文件后需要重启nginx才可以生效。重启方式为:
/usr/local/nginx/sbin/nginx -s reload

VPS下WP的Twitter plugin不能post的问题

刚才发现在在我的WP中的Twitter Plugin里不能post,错误信息如下:
Warning: main() [function.main]: php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution in /xxxxx on line xxx
搜索后发现是DNS解析的问题,看了好几个国外的帖子也没能找到解决方案。其实解决方案很简单,一试之下就解决了这个问题:
在/etc/hosts下加入本机IP与域名。例如:
=============================
127.0.0.1 localhost
173.230.148.77 www.faquir.net
=============================
需要注意的是,IP跟名称之间用Tab键隔开。
按说通过DNS完全就可以通过域名来获取IP了啊,不知道PHP里面是怎么一个机制。先不管了,先知其然好了,放着所以然到以后再追究。

在linode上配置web+PHP应用环境

    我估计大部分人的vps的主要任务,是跑wordpress,就像我一样。

    所以web server跟php的应用环境应该就是配好了域名之后第二件必须要做的事情了。web server的选择实在太多,老牌的比如apache,恐怕依然是用户最多的环境。不过貌似各位使用vps的前辈用的更多的却是Nginx这个似乎并不出名的web server。对于为何要选择这个,用一句话来说,就是性能优异。相比apache,Nginx更能充分利用vps的有限资源做出更多的事情。少花钱多办事,就是选择这种架构的主要原因了。这种架构的具体介绍可以参见这里

    网上已经有人提供了LNMP的所谓一键安装脚本。我觉得这个东西非常好,集成安装各种软件,简单易用,节省时间。但是依然,有一些事情需要注意。

    如同我的办公环境一样,最开始我自然就安装了Ubuntu。后来当我试图用Licess的这个脚本来安装环境的时候才发现,这个东西的最新版本(LNMP 0.4)目前是不支持Ubuntu的。鉴于最近正好处于公司项目的release阶段,不必要的折腾就省了吧,直接换到CentOS。回想过去,这个系统我也曾经用过挺长一段时间,算怀旧吧。

    安装可以直接按照lnmp脚本的安装说明来做。整个过程基本不会有什么意外情况。所以这个过程就不详细说了。

    接下来就是配置虚拟主机了。按照安装说明里的介绍,是可以直接执行vhost.sh,按照向导说明一步一步来做就可以了。不过这里我需要说明的是,这里虚拟主机绑定的域名,之前要在DNS管理里面事先设置好。并且,貌似linode给每个虚拟机分的ip都是通过dhcp服务,这种服务我们知道,搞不好哪天重启之后你的ip就换了,到时候所有域名均不work,那就绝对杯具了。所以,我们还需要设定我们目前的ip为系统的静态ip,具体的设置方法可以参考这里。注意在centos里面只设置ip是不行的,还需要把dns也设置上。不然在你的centos里面是不能以域名的方式访问其他网站的。

    使用vhost.sh建立的虚拟主机,目录都会位于/usr/wwwroot/xxxxx. 如果是从其他机器上把wordpress或者其他文件拷过来,就可能用到scp命令了,这个命令可以通过ssh的方式从其他系统上把文件复制过来,复制文件的命令为:

scp user@www.xxxxx.com:/xxx/xxx/xxx .

需要注意的是,文件的owner一定要设置成www,否则在访问的时候会出现权限问题。设置了虚拟主机后,虚拟主机的配置文件会放在 “/usr/local/nginx/conf/vhost”目录里面。如果需要对其进行修改,可以直接进入这个目录修改相应的配置文件。例如在开始的时候我们设置了虚拟主机对应的域名是www.faquir.net, 但是实际上我们也需要 faquir.net 也可以访问,那就可以修改这里面的配置文件www.faquir.net.conf,在server_name后面,加上faquir.net,使其成为:

server_name www.faquir.net faquir.net;

随手记录了这些,可能下篇文章会总结一下wordpress的搬家过程吧。

Next Page »