xray的博客


  • 首页

  • 归档

  • 关于

  • 分类

  • 标签

阿里云git服务器搭建

发表于 2015-10-10

前言

首先说一下我云服务器的配置,我租的是阿里云,内存1G,带宽1M,硬盘20G,装的系统是Ubuntu14.04 LTS,这样 的配置对于个人使用我觉得绰绰有余了。之前用git都是在github上,虽然方便但是对于爱折腾的人来说远远不够,而且github上的私有库是收费的,于是决定自己搭一个自己的git服务器。

安装

1.需要一台装有Ubuntu的客户端机器
2.在服务端和客户端都安装git

1
2
sudo apt-get install git
sudo apt-get install git-core

3.检测一下服务端有没有安装openssh

1
2
3
root@iZ25eua1h3uZ:~# ps -e | grep ssh
771 ? 00:00:00 sshd
8407 ? 00:00:00 sshd

因为我客户端连接服务端是通过ssh登陆的

1
ssh username@Server

所以必须的有ssh,默认Ubuntu都会安装的,大家可以看看22端口是否被监听
4.安装Gitosis

gitosis主要用来Git仓库的权限管理,默认情况下git也是有权限管理的,但是不太好用,或者用起来比较复杂,所以选择了gitosis第三方的权限 管理工具。使用Gitosis可以在GIt上面管理访问仓库的用户权限,允许某些用户访问指定的仓库,对指定的仓库拥有读写控制,gitosis 是基 于git的管理方式,服务器安装好gitosis以后,超级管理员的客户端PC就 “git clone gitosis” 到本地,以后的工作,比如新仓库创建,权限管理都是在 超级管理 员的PC上进的,超级管理员的PC修改gitosis的配置后,需要把修改项提交到服务器端,这样其他的用户才有权限从服务器获取到源码进行Git管理,需要注意的是新仓库的创建,权限的管理务必不要直接在Git服务器上面进行修改,超级管理员的PC才具有这些功能。

可以在~下新建目录叫src

1
2
3
mkdir src  
cd ~/src
git clone https://github.com/res0nat0r/gitosis.git

cd ~/src/gitosis

1
sudo python setup.py install

注意:如果报错:

1
ImportError:No module named Setuptools

说明python的安装包缺少setuptools包。

解决方法:

1
sudo apt-get install python-setuptools

5.在server端新建用户git

1
sudo adduser git

6.复制客户端的ssh公钥到服务器上
建议放到tmp目录下,这样可以避免权限限制带来的问题。

1
scp ~/.ssh/id_rsa.pub git@Server:/tmp

7.服务端初始化git server

1
sudo -H -u git gitosis-init < /tmp/id_rsa.pub

会看到两行输出:

1
initilailized empty Git repository in /home/git/repositories/gitosis-admin.git/
1
Reinitillized existing Git repository in /home/git/repositories/gitossi-admin.git/

这个步骤是给超级管理员的电脑授权,授权以后电脑B可以使用git clone命令下载gitosis-admin仓库,这个命令只需要在给超级管理员权限时使用,在增加其他的用户管理权限时,不需要这样做。

修改一个文件的访问权限

1
sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update

8.客户端:同步gitosis-admin到客户端开始管理git server

1
git clone git@Server:gitosis-admin.git

这样会在当前目录下fork一个gitosis-admin的目录。里面有一个配置文件gitosisi.conf和一个存放pub key的目录keydir。

9 建立新的库和授权用户

如果要新建库,编辑gitosisi.conf文件,添加

1
2
3
4
5
6
7
[gitosis]
[group gitosis-admin]
writable = gitosis-admin
members = chengfangpeng@foxmail.com
[group gittest]
writable = gittest
members = chengfangpeng00@gmail.com

然后将修改后的内容pull到服务器上

1
git add -> git commit -> git push

新建gittest库

1
2
3
4
5
6
7
8
mkdir gittest

cd gittest

git init

git add .
git commit -a -m "add new project"

c.建立本地与服务器关联

1
git remote add origin git@Server:gittest.git

d.提交本地代码

1
git push origin master:refs/heads/master

注意:这条命令在超级管理员的机器上面运行,将在服务器上面新创建一个仓库。
至此新的库和对应文件已经上传到server端,其他用户可以

1
git clone git@Server:gettest.git

11 安装GitWeb
如果想在本地版本库看看自己项目的效果,不妨用Git 自带的一个命令,可以使用类似lighttpd这样轻量级的web服务器启动一个临时进程。
安装lightpd

1
sudo apt-get install lighttpd
1
git instaweb

这会在1234端口开启一个HTTPD 服务,随之在浏览器中显示该页,十分简单。关闭服务时,只需在原来的命令后面加上-stop 选项就可以了:
$ git instaweb –stop
至此完成了git server的搭建。

来看看效果图分享一下成功的喜悦
这里写图片描述

Ubuntu中sublime3中问输入问题

发表于 2015-09-09

前言

Sublime Text3是一个跨平台的编辑器,但是在ubuntu上安装以后发现不能输入中文。google了一下记录一下解决步骤(注:我的系统是Ubuntu14.04)。

  • 创建sublime_imfix.c文件
    在HOME目录(或者其他目录)下创建sublime_imfix.c文件,文件内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <gtk/gtkimcontext.h>

void gtk_im_context_set_client_window (GtkIMContext *context,
GdkWindow *window)
{
GtkIMContextClass *klass;
g_return_if_fail (GTK_IS_IM_CONTEXT (context));
klass = GTK_IM_CONTEXT_GET_CLASS (context);
if (klass->set_client_window)
klass->set_client_window (context, window);
g_object_set_data(G_OBJECT(context),"window",window);

if(!GDK_IS_WINDOW (window))
return;
int width = gdk_window_get_width(window);
int height = gdk_window_get_height(window);
if(width != 0 && height !=0)
gtk_im_context_focus_in(context);
}
  • 编译文件
    编译上面创建的sublime_imfix.c文件,命令如下:
1
2
# 拷贝文件
sudo cp libsublime-imfix.so /opt/sublime_text/
修改文件sudo vim /usr/bin/subl,将文件内容替换成下面的代码:

1
2
	#!/bin/sh
LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text "$@"
修改之后,通过命令行执行subl启动sublime text,已经可以输入中文了。为了使用鼠标右键打开文件时能够使用中文输入,还需要修改文件sublime_text.desktop的内容。使用下面的内容替换
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
	[Desktop Entry]
Version=1.0
Type=Application
Name=Sublime Text
GenericName=Text Editor
Comment=Sophisticated text editor for code, markup and prose
Exec=bash -c "LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text %F"
Terminal=false
MimeType=text/plain;
Icon=sublime-text
Categories=TextEditor;Development;
StartupNotify=true
Actions=Window;Document;

[Desktop Action Window]
Name=New Window
Exec=bash -c "LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text -n"
OnlyShowIn=Unity;

[Desktop Action Document]
Name=New File
Exec=bash -c "LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text --command new_file"
OnlyShowIn=Unity;

现在就可以了,但是有事后会有失灵的问题,找了半天也没找到解决方法,但是如果在终端中用命令:

1
$ subl filename
打开是没问题的。

EventBus探究(一)

发表于 2015-07-21

“Yeah It’s on. ”

概述

EventBus是一款android发布/订阅的事件总线类库,主要用在android中
Activities,Fragments,以及后台线程之间的关联和消息传递,对事件的发送者和关联者进行解耦,避免了各组件直接交互复杂的依赖关系以及生命周期产生的问题。从而使我们的代码更简单更更高效。

简单的使用流程

  1. 定义一个事件
1
2
3
4
5
6
7
8
9
10
11
12
	public class MessageEvent {

private String message;

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}
}

2.订阅/注册

1
EventBus.getDefault().register(this);

3.发布

1
EventBus.getDefault().post(me);

4.取消订阅

1
EventBus.getDefault().unregister(this);

下面是完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class MainActivity extends AppCompatActivity {

private static final String TAG = "MainActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MessageEvent me = new MessageEvent();
me.setMessage("hello world");
EventBus.getDefault().post(me);
}
});
}

@Override
protected void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}

@Override
protected void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}

public void onEvent(MessageEvent event){
Toast.makeText(this, event.getMessage(), Toast.LENGTH_SHORT).show();

Log.d(TAG, event.getMessage());
}
}

总结

以上只是EventBus中最简单的使用,真正的项目中要比这复杂的多,但是麻雀虽小五脏俱全,上边的例子已经很好的说明了EventBus的工作流程,之后我也将对EventBus这个类库进行更深入的探究。

附录

EventBus github

Hello 2015

发表于 2015-01-01

Hello 2015, this is my blog

<i class="fa fa-angle-left"></i>123

chengfangpeng

冲出地球,移民宇宙

24 日志
8 标签
© 2019 chengfangpeng
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4