同步gitlab教程

一月 21st, 2016

为了代码安全,有时候需要把代码实时备个份,这两天折腾了一下gitlab的mirror服务

看说明,gitlab的企业版好像默认自带了mirror功能,然而ce版没有,所以github上有个git-mirrors 这样一个项目,顺着走下来,中间碰到一些坎。

1. prefix

安装git >= 1.8.0

因为centos6里面的yum源只有1.7.1的git,所以要手动编译git

yum install -y openssl-devel curl-devel libxml2-devel perl-XML-Parser expat-devel perl-devel tcl gettext-devel

wget https://github.com/git/git/archive/v2.6.2.tar.gz

tar xzvf v2.6.2.tar.gz

cd git-2.6.2/

make configure

./configure –prefix=/usr/local

make

make install

安装 python-gitlab3

yum install -y python-setuptools

git clone https://github.com/alexvh/python-gitlab3.git

cd python3-gitlab3

python setup.py install

 

2. gitlab-mirrors

在本地的gitlab建立gitmirror用户,并设置为管理员,并建立相应group

在本地系统内建立名为gitmirror的用户,建立ssh-key并上传id_rsa.pub到刚刚建立的gitlab用户的key里面,吧id_rsa拷贝到本地的private_key

建立crontab

@hourly /home/gitmirror/gitlab-mirrors/git-mirrors.sh

克隆有两个模式,一个是自动添加,一个是克隆到某个空白库,自动添加我没成功,我先在我的gitlab添加一个空白项目,然后用脚本添加

 

./add_mirror.sh –git –project-name timeline –mirror [email protected]:3ti/timeline.git ?–no-create [email protected]:3ti/timeline.git

 

之后因为crontab在,会自动每小时更新一次git,亲测有效。

在 openwrt上运行go

五月 13th, 2015

最近在折腾在某个openwrt的路由器上安装我的app,然而我的app是用go写的,所以开始了折腾。

 

首先在找到了这个https://code.google.com/p/go-wiki/wiki/GccgoCrossCompilation ,通过这个学习,知道了要用一个牛逼的叫做cross copilation的东西,来编译go的东西。完整的gcc,里面会生成一个 gccgo这样的东西,如果你用cross compile技术生成了别的平台的gcc,也可以同时生成gccgo,然后就可以用这个gccgo来编译你的go文件了。

后来在学习gcc的东西,知道,只有gcc 5 才能编译go1.4的东西,在ubuntu14里,apt-get 可以直接安装gccgo-5, 我试了一下gccgo编译我的go项目,果然成功了,过程如下:

export GOPATH=XXX

alias gccgo=gccgo-5

?CGO_ENABLED=0 GOOS=linux go build -x –compiler=gccgo

编译出来的果然可以运行

然而得到openwrt版的gccgo是个大工程,我找到了一个github项目来做这事的https://github.com/GeertJohan/openwrt-go

然而跟着它执行,并不能得到什么,啥也得不到,因为编译到一般,总会在getcontent makecontent等几个地方报错,后来有找到个哥们

//www.sajalkayan.com/post/golang-openwrt-mips.html

他的也是利用上面这个github但是比较巧妙,把原来的openwrt项目打上这个里面的patch,我试了一下,正在运行中,不知道能否运行下去,其实我就算运行下去,得到的也是一个gccgo-4.8,后面如何升级到gccgo-5并编译我的go项目就不得而知了,先总结一下,以晌大家。

密码?;ぃ篢o olivia

二月 7th, 2015

这是一篇受密码?;さ奈恼?,您需要提供访问密码:

gitlab @centos6 搭建指南

十二月 3rd, 2014

2016.1.20 update

 

我们是个十人以下小团队,虽然人少,但是乱七八糟有用没用的项目不少。最初用自己搭建的svn来管理代码,后来转移git,最初用github,后来转团队版github,然后发现项目个数超过团队版上限了,就切换到bitbucket,本来也不错,但是最近发现pull和push常常失败(某些ip被wall了应该),所以怒而搭建gitlab。

 

gitlab(https://about.gitlab.com/) 是个为了模仿github而生的系统,它本身也有收费项目,大多是些support以及一些新性能,但是目前对我们来说,comunnity版本够用了。

 

我的搭建过程如下:

从国内某云主机(例如ucloud)上申请一个centos6的机器,然后

1. 安装

官方教程是这样的

curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo yum install gitlab-ce

不过我在阿里云机器上一直试验没成功,在ucloud机器上成功了。不过在国内下载这个300M的安装包极其慢,我最后不能忍了在香港弄了台机器安装。

直接下载安装包在

weg https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/6/gitlab-ce-8.3.4-ce.0.el6.x86_64.rpm/download

yum install -y openssh-server

rpm -ivh?gitlab-7.5.1_omnibus.5.2.0.ci-1.el6.x86_64.rpm

 

2. 配置

先编辑配置文件 /etc/gitlab/gitlab.rb

第一行务必写成

external_url “//git.www.gcdxt.com” ?# url可以随便换,但是要用双引号,而且中间不能有=号,这个不符合ruby语法,我也不知道怎么回事

 

下面要配置email,很关键,配置不对就没法注册,它默认让你用postfix,当然这是肯定不可以的,我用的是网易企业邮箱服务,如下配置

gitlab_rails[‘smtp_enable’] = true
gitlab_rails[‘smtp_address’] = “smtp.ym.163.com”
gitlab_rails[‘smtp_port’] = 25
gitlab_rails[‘smtp_user_name’] = “[email protected]
gitlab_rails[‘smtp_password’] = “ilovepp”
gitlab_rails[‘smtp_domain’] = “www.gcdxt.com”
gitlab_rails[‘smtp_authentication’] = “login”
gitlab_rails[‘smtp_enable_starttls_auto’] = false
gitlab_rails[‘smtp_tls’] = false
gitlab_rails[‘smtp_openssl_verify_mode’] = ‘peer’

 

改好配置文件后运行

gitlab-ctl reconfigure

3. 启动

gitlab-ctl start

此时在云主机中放开80端口的访问,再到你dns服务商里面设置ip,就可以在 ?//git.www.gcdxt.com 中访问到, 用初始密码 root/5iveL!fe 登录,就可以建组织建项目,甚至可以直接import来自bitbucket和github的项目

 

Enjoy 墙内的高质量git服务吧

command list:

curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
yum install gitlab-ce -y
vim /etc/gitlab/gitlab.rb
gitlab-ctl reconfigure
gitlab-ctl start

python 安装gensim scipy多次中的枪

五月 1st, 2014

每次安装它都要碰到好多麻烦

序列是这样子的

easy_install numpy

yum install -y blas-devel

yum install -y lapack-devel

yum install -y gcc-gfortran libgfortran

easy_install scipy

easy_install gensim

python批量执行update命令

四月 19th, 2014

我有个数据,需要每次处理十万级别的数据,然后并统计更新到mongo上,用传统的pymongo方法将数据跨国update,消耗的速度赶不上数据生成的速度,结果数据库果断硬盘满了。

后来查了一下,一开始打算用motor,但是它要求我的程序必须要和tornado的ioloop接入,不爽,继续换,然后发现pymongo的新版里居然有bulk支持了,so升级pymongo到2.7(要慎重,据说这个版本和mongokit不兼容),然后再改代码跑看看,果断还是不行,再看文档,提示要我把mongodb升级到2.6.0 ,还好mongo升级后没啥复杂的问题,于是升级,于是当当当,运算极快,十万级别的update,只要二十秒左右。原版因为跨国网络通讯的关系,十万条更新要一个小时左右。

 

示例代码

原版的:

stat_proxy_remote_coll.update(query, update, upsert=True) for i in [1..1000]

新版的:

bulk = stat_proxy_remote_coll.initialize_ordered_bulk_op()

bulk.find(query).upsert().update(update) while i in [1..1000]

bulk.execute()

nginx 支持websocket 转发

三月 27th, 2014

在http??榧由?/p>

map $http_upgrade $connection_upgrade {
default upgrade;
” close;
}

 

在server???,加上

upstream logger{
ip_hash;
server 127.0.0.1:81;
server 127.0.0.1:82;
}

 

location / {
proxy_pass //logger;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;

}

 

编译nginx入常即可

 

python easy_install 使用豆瓣的镜像来装库

三月 25th, 2014

easy_install -i //pypi.douban.com/simple/ ?requests ?(假设你要装requests)

 

pypi最近被某机构搞的太惨啦,老是连不上,老是下载论单数k,国内工作者真惨啊

python / ruby / node 均被不同程度的墙,这是最好的时代也是最坏的时代,阿门

python3.4 不要用

三月 19th, 2014

应该是python没有自己测试,3.4 的logging??橥耆薹ㄊ褂?,重装都不行,退回到3.3即可

我的环境是 centos 5 x64

北京快乐八开奖直播:tornado 禁止 autoreload

三月 4th, 2014

因为我的需求比较特殊,想打开debug模式,但是又不想autoreload,尤其在windows下,autoreload只会把程序搞挂掉。遂想了个黑科技办法,把autoreload.start 给改写掉,代码如下

 

from tornado import ioloop, httpserver, autoreload
#hack disable autoreload
autoreload.start = lambda: None

mod_wsgi 的安装

二月 28th, 2014

好久没更新博客了,博客搬家后第一更。

 

在正常安装完python2.7之后, 再编译安装mod_wsgi会出现 “libpython2.7.a(node.o):” 的错误,此时要重新编译一下Python

在python代码目录里,用 ?make clean && ./configure –enalbe-shared && make && make install

来重新编译,此时make会提示很多but the necessary bits to build these modules were not found: 下面列出一些库,我目前的经验,下面这些库大多是用不上的,不用过于担心,等用到某些库的时候,在回头重新编译就是了。

 

重新编译后,运行python可能会提示 ?libpython2.7.so.1.0 缺失的问题,这时候只要

ln -s /usr/local/lib/libpython2.7.so.1.0 ?/usr/lib64/ 就好了

python3 的编码问题 & git pull自动确认

一月 22nd, 2014

centos 5.6 原生环境,编译安装python3后发现安装easy_install就出了问题,安装pycares也出问题,都是因为readme.txt中有非英文作者名字,初始的时候把readme设为空可以安装,但是非永久解决方案。后来查了下,是因为python读的系统的编码导致的,最后,在/etc/profile中加上一句

export LANG=zh_CN.utf8

即可解决?;八祊ython3还是真讨厌啊。。。

 

用fabric自动化发布的时候,发现从github pull代码下来总是需要人工手动yes一下, 及时用 yes yes|git pull 也不行,有个解决方案是降低ssh config审核级别,这个太危险了。最后发现,可以先把目标网站的sshkey 加到本地的know_hosts里,命令是

ssh-keyscan -t rsa bitbucket.org >> ~/.ssh/known_hosts

然后再pull,即可

centos6 安装 python新方法

九月 5th, 2013

 

1
2
rpm -ivh //li.nux.ro/download/nux/dextop/el6/x86_64/python27-libs-2.7.3-6.2.el6.nux.x86_64.rpm
rpm -ivh //li.nux.ro/download/nux/dextop/el6/x86_64/python27-2.7.3-6.2.el6.nux.x86_64.rpm

 

如果需要开发环境,再折腾,tkinter依赖其他包

1
2
rpm -ivh //li.nux.ro/download/nux/dextop/el6/x86_64/tkinter27-2.7.3-6.2.el6.nux.x86_64.rpm
rpm -ivh //li.nux.ro/download/nux/dextop/el6/x86_64/python27-devel-2.7.3-6.2.el6.nux.x86_64.rpm

 

本地备份一个

//baoz.net/wp-content/2013/09/python2.7.tgz

 

我不会告诉你我是从baoz那里偷过来的。。

通杀各个浏览器的跨域post

七月 9th, 2013

jquery提供的ajax挺好的,然而它的post在ie浏览器里,服务器是收不到包的。即使是chrome,服务器也得在回复的时候,重置header。

下面是代码:

1. chrome等高级浏览器

$.ajax({
type: ‘POST’,
url: “//api2.shallwe.net/post”,
dataType: “json”,
crossDomain: true,
data: {
xxx:”111″
},
success: callback
});

然后在服务器端

self.set_header(“Access-Control-Allow-Origin”, self.request.headers.get(‘Origin’, ”))
self.set_header(“Access-Control-Allow-Credentials”, “true”)
self.set_header(“Access-Control-Allow-Methods”,
“GET,PUT,POST,DELETE,OPTIONS”)
self.set_header(
“Access-Control-Allow-Headers”,
“Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, X-Requested-By, If-Modified-Since, X-File-Name, Cache-Control”
)

 

2. ie6 ie7

这两个浏览器里,没有高级的接口用,只能用最原始的,iframe 和 form

var callback = function () {
alert(‘callback’);
};

var ifr = document.createElement(“iframe”),
form = document.createElement(“form”),
id_input = document.createElement(“input”);
try {
ifr = document.createElement(‘<iframe name=”for_post”>’);
} catch (ex) {
ifr = document.createElement(‘iframe’);
ifr.name = “for_post”;
}
ifr.id = “for_post”;
$(ifr).css(“display”, “none”);
document.body.appendChild(ifr);

form.action = “//api2.shallwe.net/post”;
form.method = “post”;
form.target = “for_post”;
$(form).css(“display”, “none”);
document.body.appendChild(form);

id_input.type = “hidden”;
id_input.name = “order_id”;
id_input.value = order.id();
form.appendChild(id_input);
form.submit();

if (ifr.attachEvent) {
ifr.attachEvent(“onload”, callback);
} else {
ifr.onload = callback;
}

 

3. ie8 下

在解决方案2中,form提交给iframe,如果在ie8和9中,会出现安全提示,这个显然不能接受?;购胕e8之后有个牛叉的XDomainRequest

var data = {
id: “xxx”,

};
var xdr = new XDomainRequest();

xdr.onload = function (resp) {
callback();
};
xdr.open(‘POST’, ‘//api2.shallwe.net/post’)
xdr.send($.param(data));

但是这个里面有个暗门,因为在ie8下,你发出去的xdomainrequest是没有content-type的,这样很多服务器程序,例如tornado (据说php也是)是不会解析你的request.body的,即你得不到post的内容,这时候就需要你手动解析一遍

我用的tornado,我是这样做的

def post(self):

if not self.request.headers.get(“Content-Type”, None):

self.request.headers[‘Content-Type’] = “application/x-www-form-urlencoded”

httputil.parse_body_arguments(

self.request.headers.get(“Content-Type”, “”), self.request.body,

self.request.arguments, self.request.files)

如果是php,估计就是另外的处理方法了

安装sentry && supervisor 来收集异常

六月 27th, 2013

sentry是个优秀以及方便的可以来收集各种异常的系统,作为企业,很有必要自己搭建一个sentry服务器来收集本公司的项目中各种异常。

 

大多数步骤,通过这个教程即可,中间有一些暗礁要一一度过。

下面是一些命令和步骤:

easy_install -UZ virtualenv
virtualenv /www/sentry/
source /www/sentry/bin/activate
这三个命令是在/www/sentry下搭建一套虚拟环境,这样你装的各种python包环境,不会流入到系统里面
easy_install -UZ sentry
安装需要的包,因为伟大的wall,好几个包下不下来,要根据提示,一一下回索要的tar.gz ,然后解压,运行 python setup.py install
easy_install -UZ sentry[mysql]
到这一步,算是安装完成了,下面开始配置。
sentry init /etc/sentry.conf.py
然后更改 sentry.conf.py

DATABASES = {

‘default’: {

‘ENGINE’: ‘django.db.backends.mysql’,

 

‘NAME’: ‘sentry’,

‘USER’: ‘root’,

‘PASSWORD’: ‘xxxxx’,

‘HOST’: ‘127.0.0.1’,

‘PORT’: ‘3306’,

}

}

SENTRY_URL_PREFIX = ‘//sentry.www.gcdxt.com:9000’ # 这里的端口号千万要写上,不然在web里会遇到麻烦

SENTRY_WEB_HOST = ‘0.0.0.0’
SENTRY_WEB_PORT = 9000

剩下的自己看着配置

 

剩下开始处理暗礁,下面的bug,官方暂时没出补丁,要手工改。

进入mysql,

mysql> ??create database sentry character set utf8;

要设置成utf8,不然在sentry web页面里就无法正常输入中文

然后进入 vim ?/www/sentry/lib/python2.7/site-packages/Django-1.4.5-py2.7.egg/django/conf/global_settings.py

最后加上几句:

SOCIAL_AUTH_UID_LENGTH = 222
SOCIAL_AUTH_NONCE_SERVER_URL_LENGTH = 200
SOCIAL_AUTH_ASSOCIATION_SERVER_URL_LENGTH = 135
SOCIAL_AUTH_ASSOCIATION_HANDLE_LENGTH = 125

来设置django的某些配置,不然会提示字符太长之类的错误

暗礁已过,剩下的就好办了

 

sentry --config=/etc/sentry.conf.py upgrade
在这一步里输入用户名和密码

sentry --config=/etc/sentry.conf.py start
现在就可以到web页面里看了,看完之后,把这个进程关掉,等会用supervisor启动它

第二大步骤,将sentry用supervisor启动
easy_install supervisor
echo_supervisord_conf > /etc/supervisord.conf
在 supervisord.conf中加入
[program:sentry-web]
directory=/www/sentry/
command=/www/sentry/bin/sentry ?--config=/etc/sentry.conf.py start http
autostart=true
autorestart=true
redirect_stderr=true
运行supervisord
最后,要每次重启后都要启动supervisord
我是centos,在/etc/rc.local中加上
/usr/local/bin/supervisord ?-c /etc/supervisord.conf &
真的最后一步了,我的机器上运行着apache,所以做了个反向代理,使得我可以通过80端口也可以访问sentry的web

<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot “/usr/local/web/”
ServerName sentry.www.gcdxt.com
<Directory />
Options FollowSymLinks
AllowOverride all
Order allow,deny
Allow from all
</Directory>
ProxyPass / //localhost:9000/
ProxyPassReverse / //localhost:9000/
ProxyPreserveHost On
ErrorLog “logs/todo-error_log”
CustomLog “/dev/null” common
</VirtualHost>


				

在centos下用yum安装git

六月 13th, 2013

今天要用到svn转移到git的工具,发现里面有个git-svn的工具,然而这个工具用yum下载不能,最后发现给yum加了一个源就好了

$ wget //packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm 

$ rpm –import //apt.sw.be/RPM-GPG-KEY.dag.txt

$ rpm -i rpmforge-release-0.5.2-2.el5.rf.i386.rpm

centos 6 的svn无法checkout的解决方案

六月 3rd, 2013

centos 6,安装了subversion后,checkout https://xxx.shallwe.net/svn/code ?会提示

SSL handshake failed: SSL error: Key usage violation in certificate has

拿这段话作为关键字放狗搜索,结果大多让你这样干

sudo mv /usr/lib/libneon-gnutls.so.27 /usr/lib/libneon-gnutls.so.27.old
 sudo ln -s /usr/lib/libneon.so.27 /usr/lib/libneon-gnutls.so.27

这段话是坑爹啊,完全没用,本地完全找不到libneon-gnutls这个库。
将上面那段话加上centos6,在某个旮旯里有人给出了解决方案,错误根源在于Visualsvn Server。 在安装有visualsvn的windows机器里操作如下:

一、改注册表

  • for 32-bit system:
    [HKEY_LOCAL_MACHINE\SOFTWARE\VisualSVN\VisualSVN Server]
    "CreateGnuTLSCompatibleCertificate"=dword:00000001

for 64-bit system:

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\VisualSVN\VisualSVN Server]
"CreateGnuTLSCompatibleCertificate"=dword:00000001

二、开启 visualsvn

三、 进入操作|properties|certificate
四、 选择 Change certificate 然后一步步走即可。

之后,以前下载过代码的客户端,只需重新接受下签名即可,不耽误多少事。

Centos Apache php 5.2 zend optimizer 安装配置小记

五月 16th, 2013

这两天,折腾某个开源代码,然而代码是用zend 加过密了,本机( ?centos 5.5 apache/worker ? php5.2.17 mysql) ?跑步起来,一直提示我某个类找不到的错误,后来看到安装说明要装Zend Optimizer,所以去安装。到zend官网上找到对应版本的zend, ?我是32位的,下载?,解压,把对应版本号的文件拷贝到某个目录,然后在php.ini中配置加上两句:

[Zend]

zend_optimizer.optimization_level=1023

zend_optimizer.encoder_loader=1

zend_extension=”/usr/lib64/ZendOptimizer.so”

 

按说,这样配置完就应该大结局了,大家和和美美回家睡觉去了。然而我这边一直看不到预料中结果, php -i 里,找不到 zend optimizer字样,我在另外一个x86_64机器上试了一下,更诡异,在php -i 中有optimizer字样,然而在apache的web页面里,phpinfo里没有optimizer。于是到网上各处搜寻,无果。然后到伟大的white帽子群里求助,最后有个童鞋问了一句,你是线程模式的吗?瞬间灵光一闪。到谷歌搜索 ?optimizer worker 关键字,果然有相关内容

原文连接:

//www.zend.com/forums/index.php?t=msg&goto=9604&S=

其中有一位朋友的留言,说明了问题:

i just notice that Zend Optimizer only support prefork mode.

Supported Web Servers:

Apache 1.3.x

Apache 2.0.x (Prefork mode only)

Apache 2.2.x (Prefork mode only)

IIS 5, 6

if you want to install Zend Optimizer ,hope this help you.

 

果断重新编译apache,用prefork模式,然后重新编译php,重启apache, It works!

五月 3rd, 2013

因为用到pyquery,依赖lxml,在easy_install lxml的时候,提示编译一路错,放狗查某一个错误提示xsltDocLoaderFunc,怀疑是libxml 和 libxslt 的事情

所以我安装了 ?libxslt-devel libxml2-devel libxslt-python:

yum install libxslt-devel libxslt-python libxml2-devel

之后就好了。。

centos 6的弱爆了的setup

五月 3rd, 2013

centos6初始的setup里面东西很少,只有一个authorize相关的配置,要回到功能强大的setup,只要安装多几个包即可

 

yum install setuptool??ntsysv system-config-firewall-tui system-config-network-tui

 

在centos5 下面,语句是 ?yum install setuptool ntsysv system-config-network system-config-keyboard system-config-network-tui

39| 161| 528| 179| 268| 187| 33| 716| 282| 531|