Ubuntu 创建、管理用户、组和git库、项目

修改主机名

sudo -e /etc/hostname
sudo -e /etc/hosts 将127.0.1.1对应的原主机名改为新的

创建组

sudo groupadd 组名

修改组

sudo groupmod -n 新组名 原组名

删除组

sudo groupdel 组名

创建用户

sudo useradd -m会自动生成主目录 -k 内容将被拷贝到生成的主目录的样本目录 -d 主目录 -g 用户组 –groups 其它组,更多组 -s /bin/bash 用户名
sudo passwd 用户名
将用户加到sudoers:
直接改配置文件不可取:sudo visudo
添加到组,可能还有其它组如adm应该添加:sudo adduser 用户名 sudo

修改用户

sudo usermod -g 用户组 –groups 其它组,更多组 -l 新用户名 -m会将用户原主目录下内容移动到新主目录下 -d 新主目录 原用户名
如果不写当前组,需要添加用户到更多组,则–groups参数需要与-a参数同时使用

删除用户

sudo userdel 用户名
rm -rf 主目录

git 准备

  • sudo apt-get install git
  • 创建git用户
  • 将需要使用库的用户的公钥(用ssh-keygen生成)id_rsa.pub内容放到git用户的.ssh/authorized_keys文件(设置为组可写)中。直接将自己的密钥加到可信列表的命令:ssh-copy-id -i 公钥文件 用户@地址
  • 此步会导致库权限混乱,无法维护。创建其他用户,属于git用户所在组,这样该用户能管理库,又方便将其移出该组。将库放到git用户某路径下,设置为组可写。取库时,用户可用自己的用户名和绝对路径,如果将其公钥放到认证文件中,也可用git用户名和相对路径。
  • 如果git用户不需要登录会话,可在/etc/passwd中将其默认shell改为/usr/bin/git-shell
  • 更细致管理权限用Gitolite(Gitosis Lite);更方便管理公钥用Gitosis

建立空库

git init –bare 库名。如果在需要的目录下,则不写库名参数。这会建立与库名同名的目录,之后修改该目录权限。不需要时直接删除该目录即可。

取库

空库也能取。
git clone 用户名@地址:路径
对于空库,也可在一空目录中进行以下复杂操作:
- git init
- git remote add origin 用户名@地址:路径

提交

git push origin master
其中origin是远端名,亦可用地址;master是分支名。对空库提交时,恐怕必须加这两个。

*限制提交等权限——gitolite

没有网页管理页面,用户手动需要提交公钥给管理员。无法完成代码审阅功能。手册
sudo apt-get install gitolite然后sudo dpkg-reconfigure gitolite会有问题。
以用户名git身份运行:清空.ssh/authorized_keys
- git clone git://github.com/sitaramc/gitolite
- mkdir bin
- gitolite/install -ln
- bin/gitolite setup -pk 库管理人员的公钥文件名
- 管理人员获取刚生成的gitolite-admin库(不加repositories/路径),如果要求输入密码则以上步骤有错误。
- 将开发人员的公钥以人员名为基本名、pub为扩展名保存到这个库的keydir目录下,可建立任意子目录,只要基本文件名相同,都认为是同一用户。修改conf/gitolite.conf。提交修改,就能生效了。
- conf/gitolite.conf中相同权限库的库名可写在一行

@staff              =   dilbert alice           # groups
@projects           =   foo bar

repo @projects baz                              # repos
    RW+             =   @staff                  # rules
    -       master  =   ashok
    RW              =   ashok
    R               =   wally

    option deny-rules           =   1           # options
    config hooks.emailprefix    = '[%GL_REPO] ' # git-config

组前缀是@;同一组名如果写多次,是增量定义;@all是所有组。
-是不允许。RW+区别于RW是允许回退、删除分支、标签等。
1. $HOME/.gitolite.rc:为了允许gitweb、redmine等,UMASK从0077改为0027

*网页管理——gitweb

因为gitweb似乎不能审阅,故本节未验证。
2. sudo apt-get install gitweb apache2
3. 参见How to create own Git Server with Gitolite and Gitweb in Ubuntu
4. Securing Gitweb with htpasswd:同上一步

网页管理——redmine/gerrit/gitlab/phabricator

审阅工具列表(pre-commit)

LAMP

  1. sudo apt-get install apache2 php5 mysql-server phpmyadmin 或以lighttpd代替apache2,但是其它模块似乎依赖于apache2。以下以apache2为准。
    重启lighttpd:sudo /etc/init.d/lighttpd restart
  2. sudo ln -s /usr/share/phpmyadmin /var/www
    然后访问服务器的phpmyadmin网页,就能登录了。
    停止服务:sudo service apache2或mysql stop
    允许服务自启动:sudo update-rc.d apache2 enable
    禁止服务自启动:sudo update-rc.d apache2 disable
    完全禁止服务自启动:sudo update-rc.d -f apache2 remove

*RedMine

无法控制代码提交、审阅。
1. sudo apt-get install ruby rubygems libruby libapache2-mod-passenger ruby-dev libmysqlclient-dev libmagickcore-dev libmagickwand-dev git-core redmine redmine-mysql
提问“MySQL application password for redmine/instances/default:”是输入数据库中redmine用户的密码
2. 修改/etc/apache2/mods-available/passenger.conf

<IfModule mod_passenger.c>
  PassengerDefaultUser www-data
  PassengerRoot /usr
  PassengerRuby /usr/bin/ruby
</IfModule>
  1. sudo ln -s /usr/share/redmine/public /var/www/redmine
  2. 修改/etc/apache2/sites-available/000-default.conf或同目录下的default
<Directory /var/www/redmine>
    RailsBaseURI /redmine
    PassengerResolveSymlinksInDocumentRoot on
</Directory>
  1. sudo service apache2 restart
  2. 然后访问服务器的redmine目录,就能登录了。默认管理用户的用户名和密码都是admin
  3. 为了使用网页认证,即其它网页认证后redmine不再鉴权,需要安装插件(声明兼容redmine2.3、2.4;在redmine1.*上使用时报告错误)https://github.com/pburgisser/redmine_http_basic_authentication
  4. sudo apt-get install rails
  5. git clone http://github.com/pburgisser/redmine_http_basic_authentication.git
  6. sudo mv redmine_http_basic_authentication /usr/share/redmine/vendor/plugins/
  7. chown -R root.root redmine_http_basic_authentication/

*gerrit

没有缺陷管理功能,需要借助bugzilla/bugfree?
1. 下载.war:https://gerrit-releases.storage.googleapis.com/index.html
2. 增加数据库本地用户git(手册中是gerrit2)、数据库reviewdb,并允许该用户对此库所有操作:

  CREATE USER 'git'@'localhost' IDENTIFIED BY '密码';
  CREATE DATABASE reviewdb;
  GRANT ALL ON reviewdb.* TO 'git'@'localhost';
  FLUSH PRIVILEGES;
  1. 登录git(手册中是gerrit2)用户,执行:java -jar gerrit.war init -d gerrit使用的目录名
    被提问的选项中有问号时,可选择问号,查看所有可选项。
    solr是基于lucene的技术。
    http_ldap与http比较类似,只是从ldap获取额外信息;如果用ldap认证,则会要求用户名和密码。本文gerrit使用http认证方式,由apache通过ldap等方式认证。
  2. ……见Gerrit Code Review - Standalone Daemon Installation Guide,参考烤鸭的gerrit使用总结

非本地系统用户账号

Ubuntu上能做LDAP服务器,本身也支持LDAP客户端,使用非本地账号登录:LDAPClientAuthentication,参考phpldapadmin安装手册(open ldap+Berkeley DB+php 5+apache 2)

GitLab

库的公共分支不允许组员提交:组员建立自己的分支提交修改,并申请合并到公共分支,组长审阅。
账号要求密码为8位字符或更长。
用ngix,与apache冲突,需要禁止apache自启动。
不同系统有不同安装方法。用类似虚拟机的bitnami能安装。以下是Ubuntu 12.04的:
1. curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
2. sudo apt-get install gitlab-ce:这步可能很慢,可能要试多次。配置文件位置如/var/opt/gitlab/gitlab-rails/etc/unicorn.rb
3. 如果有git用户,此步默认会修改其主目录,并应保证有/home/git目录:sudo gitlab-ctl reconfigure
4. 改变代码库位置:(/var/opt/gitlab/nginx/conf/下的网络配置文件中写明了修改该处文件不能生效,亦需要修改以下配置文件)
sudo -e /etc/gitlab/gitlab.rb
设置git_data_dir “目标位置”
如果已经有库了,运行:
sudo gitlab-ctl stop
sudo rsync -av 原位置不以斜线结尾,默认是/var/opt/gitlab/git-data/repositories 目标位置以斜线结尾
sudo gitlab-ctl reconfigure
sudo gitlab-ctl start
4. 发送邮件设置
5. LDAP:sudo -e /etc/gitlab/gitlab.rb并按说明把EOS结尾的行取消注释

 gitlab_rails['ldap_enabled'] = true
 gitlab_rails['ldap_servers'] = YAML.load <<-'EOS' # remember to close this block with 'EOS' below
   main: # 'main' is the GitLab 'provider ID' of this LDAP server
     label: 'LDAP'
     host: 地址
     port: 389
     uid: 用户名
     method: 'plain' # "tls" or "ssl" or "plain"
     bind_dn: '域名称如cn=某,ou=某,dc=somewhere,dc=cn'
     password: 密码
     active_directory: false

sudo gitlab-ctl reconfigure
5. (未成功)为了确认LDAP配置,可借助ldapsearch命令
6. 更新:下载安装包,sudo dpkg -i 包名;sudo gitlab-ctl restart
如果失败,则可能需要:

sudo gitlab-rake db:migrate
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart

Phabricator

对服务器各软件版本要求高。要改sshd端口,会把网址都转换到她上。
按照安装说明安装后,查看网页,即根据提示能解决大部分配置问题。代码库用Diffusion模块,需要参阅用户手册。
要求更改sshd端口(以实现取、提代码时通过公钥鉴权)。

让每次开机时启动:

phd,因为其可判断是否已经启动,所以能写入/etc/crontab,如

0  *    * * *   git     /opt/phabricator/phabricator/bin/phd start

;sshd,可更改 /etc/rc.local

/usr/sbin/sshd -f /etc/ssh/sshd_config.phabricator

以非根用户运行,如git,则以下权限既可满足sshd(openssh),又能让git使用:

/etc/ssh/phabricator-ssh-hook.sh 用户root,组git,权限750;
/etc/ssh/sshd_config.phabricator 默认,用户、组都是root,权限644;
LDAP的配置,LDAP integration with phabricator说得很中肯。

更新(或许能用/etc/init.d/httpd代替apache2ctl):

sudo apache2ctl stop
sudo su git
phabricator/bin/phd stop
cd libphutil; git pull
cd ../arcanist; git pull
cd ../phabricator; git pull
cd ..; phabricator/bin/storage upgrade
cd ..; phabricator/bin/phd start
exit
sudo apache2ctl start
阅读更多

没有更多推荐了,返回首页