步骤
一、搭建GIt服务器,配置gitosis
1、说明:
服务器端:ubuntu@10.114.27.143, 简称:server端;
客户端:gitadmin@10.114.27.143, 简称:client端;
Android工程:android-10.0.0_r21
2、server端安装必要软件
sudo apt-get install git-core openssh-server openssh-client
3、安装配置gitosis
3.1、下载gitosis(server)
如果失败,则:
最后都没down下来,从同事那吧copy过来了。
3.2、安装gitosis(server)
3.3、为mitosis创建系统用户(server)
创建一个禁用密码的用户git,如果git已经存在,需删除git用户,再重新创建。
3.4、新建并配置gitosis管理员(client端),创建一个gitadmin用户
3.4.1、client端生成pub.key
将生成的id_rsa.pub拷贝到server端的tmp目录下
3.4.2、执行gitosis-init (server端)
此时会在/home/git目录下生成一些目录,如果其他用户需要clone gitosis-admin.git的权限,需要执行
3.4.3、从server端clone gitosis-admin.git(client端)
其中,gitosis.conf是gitosis的配置文件,用户配置用户和权限,keydir/是所有组成员的公钥。
二、配置git-daemon-run
Git-daemon-run实际上是一个脚本管理工具,用来启动git-daemon.
1、安装git-daemon-run (server端)
2、配置git-daemon-run (server端)
修改为
参数说明:
a) —export-all
使用该选项后,在git仓库中就不必创建git-daemon-export-ok文件。如果不使用该选项,则还需要创建该文件,即
touch git-daemon-export-ok
b) —enable=receive-pack
3、重启git daemon(server端)
这里error了,supervisor出现异常了。
4、配置Supervisor
Supervisor有两个主要的组成部分:
a) supervisord ,运行supervisor时会启动一个进程supervisord, 它负责启动所管理的进程,并将所管理的进程作为自己的子进程来启动,而且可以在所管理的进程出现奔溃时自动重启。
b) supervisorctl,是命令行管理工具,可以用来执行stop、start、reatart等命令,来对这些字进程进行管理。
4.1、安装
4.2、创建配置文件
4.3、配置文件说明
打开配置文件
默认的配置文件有一个大坑需要注意,supervisord.pid以及supervisor.sock是放在/tmp目录下的,但是/tmp目录是存放临时文件的,里面的文件会被linux系统删除,一旦这些文件丢失就无法在通过supervisorctl来执行restart和stop命令了,将只会得到[unix://tmp/supervisor.sock不存在的错误]
默认情况下,进程的日志文件大道50M时将进行分割,最多保留10个文件。当然这些配置可以针对每个进程单独配置。
使用include,在配置文件的最后有一个[include]的配置项,跟Nginx一样,可以include某个文件夹下的所有配置文件,这样我们就可以为每个进程或相关的几个进程配置单独写成一个文件。
4.4、启动supervisord
执行supervisord命令,将会启动supervisord进程,同时在配置文件中设置的进程会相应的启动。
更多参数请参考文档
supervisorctl 命令介绍
注意:显示用 stop 停止掉的进程,用 reload 或者 update 都不会自动重启。也可以参考这里
开机自动启动 Supervisord
Supervisord 默认情况下并没有被安装成服务,它本身也是一个进程。官方已经给出了脚本可以将 Supervisord 安装成服务,可以参考这里查看各种操作系统的安装脚本
centos7+上面可以使用 initscripts/centos-systemd-etcs 这个脚本
把这个文件重命名并放到 /usr/lib/systemd/system/supervisord.service 路径下。
然后执行一下命令,重新加载系统服务:
systemctl daemon-reload
执行这个命令,启动服务:
systemctl start supervisord
查看服务状态:
systemctl status supervisord
可以看到服务以正常启动:
开机启动
centos
vim supervisord.service
#supervisord.service start
[Unit]
Description=Supervisor daemon
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
#supervisord.service end
将文件拷贝到/usr/lib/systemd/system/
cp supervisord.service /usr/lib/systemd/system/
启动服务
systemctl enable supervisord
验证一下是否为开机启动
systemctl is-enabled supervisord
依旧未解决git-daemon-run的问题。
但可以使用另一个版本的 git-daemon: git-daemon-sysvinit.
使用命令:sudo aptitude install git-daemon-sysvinit
安装 git-daemon,然后修改配置文件 /etc/default/git-daemon如下:
# Defaults for git-daemon initscript
# sourced by /etc/init.d/git-daemon
# installed at /etc/default/git-daemon by the maintainer scripts
#
# This is a POSIX shell fragment
#
#GIT_DAEMON_ENABLE=false
GIT_DAEMON_ENABLE=true
GIT_DAEMON_USER=gitdaemon
#GIT_DAEMON_BASE_PATH=/var/lib
GIT_DAEMON_BASE_PATH=/home/repo
#GIT_DAEMON_DIRECTORY=/var/lib/git
GIT_DAEMON_DIRECTORY=/home/repo
# Additional options that are passed to the Daemon.
#GIT_DAEMON_OPTIONS=""
GIT_DAEMON_OPTIONS="--export-all --enable=upload-pack --enable=upload-archive --enable=receive-pack --informative-errors"
然后重启服务:
sudo service git-daemon restart
三、配置搭建Android repo服务器
1、配置repo (client端)
2、创建版本根目录(server端)
3、配置default.xml文件(client端)
default.xml文件时跟android源码配套的,根据google 的android源码下的default.xml(.repo/manifests/default.xml)进行修改。
3.1、clone manifest.git
Git clone可能会报权限的异常,需要先登陆gitosis配置权限。
添加members并增加权限
建立本地与远程的关联
3.2、下载android-10.0.0_r21代码
3.3、从aosp源码找到所有git仓库
因为厂商不用repo管理,所以源码里面也没有manifest/default.xml。
default.xml是跟Android代码配套的,可参考google Android源码下的default.xml(.repo/manifests/default.xml)进行修改。直接从google源码里复制default.xml
配置default.xml
将default.xml文件push到仓库 (client端)
建立相关的git仓库(client端)
用gitadmin用户添加权限
复制default.xml和mitosis.py到管理员的gitoso-admin目录下,执行脚本 ./gitosis.py default.xml gitosis.conf。生成的gitosis.conf需要手动修改一下。删掉default.xml和gitosio.py。
git add .
git commit -m “allow .git”
git push
初始化源码,并于远程仓库关联,提交后push。
将default.xml和脚本文件gennames_and_init_push_git.proj.py复制到已经删除掉.repo和所有.git目录的源码根目录下,并执行脚本:./getnames_and_init_push_git_proj.py default.xml
等待。。。。。。脚本的目的是遍历default.xml里的每一个project,进入到目录里,init git,提交git,关联远程仓库,push到原程仓库。
更新manifest.git(用于控制repo init时拉取哪些git)
将更新后的default.xml复制到管理员的manifest目录下提交到原程服务器,更新manifest.git.
用户拉取代码
repo init -u git@10.114.27.143:17435/manifest.git -m default.xml
repo sync