• 幕客老师召集小伙伴
  • 运维高手36项修炼
  • python自动化运维项目实战
  • nginx从入门到实战
  • 阿里云与Centos7实战

树莓派上搭建git服务端gitosis并创建工程

一、安装

apt-get install git-core
apt-get install python-setuptools

 

二、初始化git用户信息

git config --global user.name "jeson"

git config --global nser.email "jeson@imoocc.com"

 

三、安装gitosis 

git clone https://github.com/res0nat0r/gitosis.git

cd gitosis/

python ./setup.py install

四、创建git管理员账户、配置git

1、创建管理员账户

useradd -m gitmanager

passwd gitmanager

2、建立代码目录

mkdir /opt/gitcode

chown -R gitmanager:gitmanager /opt/gitcode

chmod -R 700 /opt/gitcode/

 

3、创建链接映射,因为gitosis默认会将代码放到/home/gitmanager/repository下

ln -s /opt/gitcode /home/gitmanager/repository

 

4、初始化

本地生成id_rsa.pub,id_rsa,并且将id_rsa.pub上传到git服务器上,在服务器上执行,如下:

su - gitmanager

gitosis-init < /tmp/id_rsa.pub

 

5、本地克隆出管理的admin仓库

模拟登录 正常如下:

 

ssh gitmanager@myhost

PTY allocation request failed on channel 0

ERROR:gitosis.serve.main:Need SSH_ORIGINAL_COMMAND in environment.

Connection to 192.168.1.101 closed.

 

git clone gitmanager@myhost:gitosis-admin.git

Cloning into 'gitosis-admin'...

remote: 对象计数中: 5, 完成.

remote: 压缩对象中: 100% (5/5), 完成.

Receiving objects: 100% (5/5), done.

remote: Total 5 (delta 0), reused 5 (delta 0)

Checking connectivity... done.

 

四、配置管理

1、管理的文件说明

git到本地后,可以修改配置文件进行权限划分和管理

  • gitosis.conf

用来设置用户、仓库和权限的控制文件

  • keydir

保存所有具有访问权限用户公钥的地方每人一个

2、建立新项目

1) vim gitosis.conf

[group optools]

members = renren@Jeson.local

writable = optools

2)修改完之后,提交 gitosis-admin 里的改动,并推送到服务器使其生效

Jeson:gitosis-admin renren$ git commit -am 'add nginx_conf group'

[master ec0d342] add nginx_conf group

1 file changed, 3 insertions(+)

Jeson:gitosis-admin renren$ git push origin master

Counting objects: 3, done.

Delta compression using up to 4 threads.

Compressing objects: 100% (3/3), done.

Writing objects: 100% (3/3), 374 bytes | 374.00 KiB/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To mygithost:gitosis-admin.git

   fb7474d..ec0d342  master -> master

 

 

五、创建新的工程(没有代码)

mkdir optools  //和配置文件gitosis.conf对应的项目保持一直,可以在客户端的任意一个目录下新建

cd optools/

git init

touch main.py hello.py

git add .

echo “/* add something */” > hello.py

git commit -a -m "origin"

git remote add gitmanager@192.168.1.101:optools.git  //添加远程git路径 ,注意:名字+.git 如: git remote add origin mygithost:pops.git

git push origin master

六、添加新用户

假设添加用lisi2@imoocc

1、新用户key生成

id_rsa id_rsa.pub

2、添加到配置文件

[group pops]

members = jeson1@imoocc lisi2@imoocc

writable = pops

 

3、管理源将新pub的密钥添加keydir中

将id_rsa.pub文件重命名为lisi2@imoocc.pub

 

4、更新配置

git commit -am 'add new group'

git push

问题:

1、 ERROR:gitosis.serve.main:Repository read access denied

fatal: Could not read from remote repository.

这个问题在网上查的都说了文件名要跟权限名对应,而我尝试了各种对应情况,甚至已经到了更改服务器的hostname了,结果依旧报错。幸而后面查资料的时候得到了灵感。打击一定要多加区分两种情况:

私钥未加入gitosis

 

git clone git@xxx.xxx.xxx.xxx:repositories/gitosis-admin.git

私钥加入到gitosis后应使用,

否则会报错

git clone git@xxx.xxx.xxx.xxx:gitosis-admin.git

在加入私钥前,使用的是服务器的相对路径或绝对路径,我这里用了相对路径repositories/gitosis-admin.git,而当你把私钥加入后,gitosis自动判定你的权限在它的管理之下,gitosis项目基目录为repositories/,在repositories/的基础下再查找repositories/gitosis-admin.git肯定是找不到的,而且也没有这个权限去找。所以你的git项目地址就要做相应的修改:gitosis-admin.git

2、删除用户的方式

userdel -r gitmanager

 

 

 

树莓派上搭建git服务端gitosis并创建工程

Pingbacks已打开。

引用地址

暂无评论

发表评论