Ubuntu上通过cgi建立Mercurial服务器

 记录下通过cgi方式将Mercurial服务器挂载到apache2上的过程。


  1.hg clone http://selenic.com/repo/hg 将hg文件夹中的hgweb.cgi放到/var/www并编辑config ="/var/www/hgweb.config"这个路径一会用到


  2.修改apache2配置文件/etc/apache2/site-available/default加入一行:

ScriptAlias /hg "/var/www/hgweb.cgi"


  3.在/var/www创建文件hgweb.config并加入hg代码库路径

[collections]
/var/hg/repo=/var/hg/repo

  4.重启apache2(只要修改apache2配置文件就需要重启)

sudo /etc/init.d/apache2 restart

到此为止既可以通过web访问代码库了 地址是:主机IP/hg


  5.添加用户验证,

Location标签后面是网络路径,就是你用web访问的路径,下面的例子当你访问http://host/hg/repo的时候就会提示你输入用户名和密码:

在 /etc/apache2/site-available/default中加入

<Location /hg/repo>
AuthTypeBasic
AuthName"Mercurial repositories"
AuthUserFile /var/www/hgusers
AuthGroupFile /var/www/hggroups
Require groupteamA
</Location>

重启apache2。。。

hgusers和hggroups需要自己创建,hgusers用apache2命令创建,hggroups自己创建

hgusers:htpasswd -c /var/www/hgusers user1 (首次要加-c)生成一个用户文件hgusers

hggroups:一行是一组,后面跟用户,用户用空格隔开,例

teamA: user1 user2 user3

teamB: user2 user4


给相应文件赋权限

chmod a+r /var/www/hgusers
chmod a+x /var/www/hgweb.cgi
chmod a+r /var/www/hgweb.config
chmod -R a+w /var/hg/repo

hg代码库默认的用户策略是所有人可以读,但是所有人都不能写,以上步骤搞定后你的用户只能浏览和抓代码,但是不能提交(push)。要在相应的hg库中编辑hgrc文件,在[web]标签下加上一行:

allow_push = user1

这样user1就可以push了,大功告成!


==========================================

下面是基于上面操作的几个shell


创建库:

#!/bin/bash
PROJECTNAME=$1
if [ -n "$1" ];then
  if [ -e "/var/lib/hg/$1" ];then
    echo "repository name has exist!"
    exit
  else
    echo "init hg repository ${PROJECTNAME}"
  fi
else
  echo "Usage: $0 <project_name>"
  exit
fi

#create repo
sudo hg init /var/lib/hg/$PROJECTNAME

#set repo permission
sudo chmod -R a+w /var/lib/hg/$PROJECTNAME

#set repo hgrc
sudo echo "[ui]">>/var/lib/hg/$PROJECTNAME/.hg/hgrc
sudo echo "username=$PROJECTNAME <temp@temp.com>">>/var/lib/hg/$PROJECTNAME/.hg/hgrc
sudo echo "[web]">>/var/lib/hg/$PROJECTNAME/.hg/hgrc
sudo echo "push_ssl=false">>/var/lib/hg/$PROJECTNAME/.hg/hgrc
sudo echo "allow_push = ">>/var/lib/hg/$PROJECTNAME/.hg/hgrc

#add repo to hgweb.config 
sudo echo "$PROJECTNAME=/var/lib/hg/$PROJECTNAME">>/var/www/hgweb.config


#add project to group file
sudo echo "$PROJECTNAME:">>/var/www/hggroups

#write apache config file to authentic,need to restart apache2

sudo sed -i "$ i\<Location /hg/var/lib/hg/$PROJECTNAME>" /etc/apache2/sites-available/default
sudo sed -i "$ i\AuthType Basic" /etc/apache2/sites-available/default
sudo sed -i "$ i\AuthName \"$PROJECTNAME repo\"" /etc/apache2/sites-available/default
sudo sed -i "$ i\AuthUserFile /var/www/hgusers" /etc/apache2/sites-available/default
sudo sed -i "$ i\AuthGroupFile /var/www/hggroups" /etc/apache2/sites-available/default
sudo sed -i "$ i\Require group $PROJECTNAME" /etc/apache2/sites-available/default
sudo sed -i '$ i\</Location>' /etc/apache2/sites-available/default

sudo /etc/init.d/apache2 restart
echo "done"
exit


添加用户:
#!/bin/bash
#add user to hgusers
USER=$1
GROUP=$2 
if [ -z "$1" ];then 
  echo "Usage: $0 <username> <groupname>"
  exit
fi
if [ -z "$2" ];then 
  echo "Usage: $0 <username> <groupname>"
  exit
fi

if ! grep -q "^$USER" /var/www/hgusers 
then
  #create new user
  echo "create user $USER"
  sudo htpasswd -m /var/www/hgusers $USER 
fi

#add user to group
#echo "add $USER to $GROUP"
#sudo sed -i "/\<${GROUP}\>/s/$/ ${USER}/g" /var/www/hggroups
#exit

if  grep -q "^$GROUP\>" /var/www/hggroups 
then 
  if grep "^$GROUP" /var/www/hggroups | grep -q "\<$USER\>"
  then
    echo "$USER has in the list!"
    exit
  else
    sudo sed -i "/^${GROUP}\>/s/$/ ${USER}/g" /var/www/hggroups
  fi
else
    echo "no such group! please check valid group in /var/www/hggroups or create new project"
    exit
fi
echo "done"
exit


设置用户可以push:
#!/bin/bash
#set user authentic
USER=$1
GROUP=$2

if [ -z "$1" ];then
  echo "Usage: $0 <username> <groupname>"
  exit
fi

if [ -z "$2" ];then
  echo "Usage: $0 <username> <groupname>"
  exit
fi

if [ -e "/var/lib/hg/$GROUP" ]
then
  if  grep  "^allow_push" /var/lib/hg/$GROUP/.hg/hgrc | grep -q "\<$USER\>" 
  then
    echo "$USER has in the push list!"
    exit
  else
    sed -i "/^allow_push/s/$/ ${USER},/g" /var/lib/hg/$GROUP/.hg/hgrc
  fi
else
    echo "$GROUP not exist! please check /var/www/hggroups or create new project"
    exit
fi

echo "done"
exit

取消用户push:

#!/bin/bash
USER=$1
GROUP=$2

if [ -z "$1" ];then
  echo "Usage: $0 <username> <groupname>"
  exit
fi

if [ -z "$2" ];then
  echo "Usage: $0 <username> <groupname>"
  exit
fi

if [ -e "/var/lib/hg/$GROUP" ]
then
    if  grep  "^allow_push" /var/lib/hg/$GROUP/.hg/hgrc | grep -q "\<$USER\>" 
    then
      sed -i "/^allow_push/s/ ${USER}\,//g" /var/lib/hg/$GROUP/.hg/hgrc
      echo "done"
    fi
else
    echo "$GROUP not exist! please check /var/www/hggroups or create new project"
    exit
fi

exit

删除用户:

#!/bin/bash
#add user to hgusers
USER=$1
GROUP=$2 
if [ -z "$1" ];then 
  echo "Usage: $0 <username> <groupname>"
  exit
fi
if [ -z "$2" ];then 
  echo "Usage: $0 <username> <groupname>"
  exit
fi

if ! grep -q "^$USER" /var/www/hgusers 
then
  echo "no such user"
  exit
fi

if  grep -q "^$GROUP\>" /var/www/hggroups 
then 
  if grep "^$GROUP" /var/www/hggroups | grep -q "\<$USER\>"
  then
    sudo sed -i "/^${GROUP}\>/s/ ${USER}//g" /var/www/hggroups
  fi
else
    echo "no such group! please check valid group in /var/www/hggroups or create new project"
    exit
fi
echo "done"
exit

删除代码库:

#!/bin/bash
PROJECTNAME=$1
if [ -n "$1" ];then
  if [ -e "/var/lib/hg/$1" ];then
    echo "deleting ${PROJECTNAME}"

    sudo sed -i "/\/hg\/var\/lib\/hg\/${PROJECTNAME}/,+6d" /etc/apache2/sites-available/default
    sudo sed -i "/^${PROJECTNAME}/,0d" /var/www/hggroups
    sudo sed -i "/^${PROJECTNAME}/,0d" /var/www/hgweb.config
    sudo rm -r -f /var/lib/hg/${PROJECTNAME}
    sudo /etc/init.d/apache2 restart
    echo "done"
    exit
  else
    echo "${PROJECTNAME} no found"
    exit
  fi
else
  echo "Usage: $0 <project_name>"
  exit
fi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值