วิธีการติดตั้ง git, gitosis บน CentOS 5

“Git is a free & open source, distributed version control system designed to handle everything from small to very large projects with speed and efficiency.” – http://git-scm.com

“Gitosis is a tool which provides access control and remote management for hosted Git repositories. It allows for fine-grained management of read and write access over SSH, without requiring that the users have local system accounts on the server.”  – https://wiki.archlinux.org/index.php/Gitosis

ในการติดตั้ง git และ gitosis บน CentOS 5 นี้จะใช้ package จาก EPEL(Extra Packages for Enterprise Linux) ดังนั้นจะต้องทำการติดตั้ง EPEL ก่อน  โดยดูวิธีการติดตั้งได้ที่นี่ http://fedoraproject.org/wiki/EPEL/FAQ#howtouse  เช่น

# su -c 'rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm'

หลังจากนั้นติดตั้ง git และ gitosis ด้วยคำสั่ง

# yum install git gitosis

gitosis จะสร้าง user ชื่อ gitosis ดังนี้

-sh-3.2$ finger gitosis
Login: gitosis        			Name: git repository hosting
Directory: /var/lib/gitosis         	Shell: /bin/sh
Never logged in.
No mail.
No Plan.

และจะสร้างไดเรกทอรีขึ้นมา 2 อันคือ gitosis และ repositories

gitosis จะควบคุมการเข้าถึง repositories  ต่างๆ ผ่านทาง repository  พิเศษที่ชื่อว่า gitosis-admin ซึ่งจะอยู่ที่  /var/lib/gitosis/repositories

ทั้งนี้การที่จะติดต่อไปยังเซิร์ฟเวอร์จากเครื่องของเราจะต้องทำผ่านทาง SSH  จึงจำเป็นต้องสร้าง public SSH key ที่เครื่องของเราเองก่อน ด้วยคำสั่งต่อไปนี้

$ ssh-keygen -t rsa

เมื่อได้ไฟล์ id_rsa.pub  ซึ่งจะอยู่ที่ $HOME/.ssh/ มาแล้ว ก็ให้คัดลอกไฟล์นี้ไปไว้ในเซิร์ฟเวอร์   จากนั้นให้ทำการเพิ่ม public SSH key ของเราเข้าไปใน gitosis ด้วยคำสั่ง

# su - gitosis
$ gitosis-init < /tmp/id_rsa.pub

จากนั้นที่เครื่องของเรา  ให้ใช้คำสั่งต่อไปนี้เพื่อ clone gitosis-admin มาไว้ที่เครื่องเรา

$ git clone gitosis@HOSTNAME.COM:gitosis-admin.git

เมื่อตรวจสอบดู gitosis-admin ที่ clone มาจะพบข้อมูลดังนี้

$ cd gitosis-admin/
$ ls -l
total 8
-rw-r--r--  1 wachira  staff  154 Dec  9 23:48 gitosis.conf
drwxr-xr-x  3 wachira  staff  102 Dec  9 23:48 keydir

ไฟล์ gitosis.conf จะใช้สำหรับในการควบคุมสิทธิ์การเข้าถึง repositories ต่างๆ ของผู้ใช้  โดยมีรูปแบบเช่น

$ cat gitosis.conf
[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = wachira@hostname 

[group myteam]
writable = citest
members = wachira@hostname someone

โดยเมื่อเราต้องการเพิ่มผู้ใช้งานก็จะต้องแก้ไขไฟล์นี้  พร้อมๆ กับต้องเพิ่ม public SSH key ของผู้ใช้ใหม่ไว้ในไดเรกทอรี keyring ด้วย

วิธีการสร้าง repository ใหม่  เช่น citest สามารถทำได้ดังนี้

$ mkdir citest
$ cd citest
$ git init
$ git remote add origin gitosis@HOSTNAME.COM:citest.git

หลังจากนั้นเมื่อเราทำการ commit ไฟล์ต่างๆ ที่เครื่องเราเรียบร้อยแล้วให้ใช้คำสั่ง

$ git push origin master:refs/heads/master

คำสั่งนี้จะทำให้เซิร์ฟเวอร์สร้าง citest repository ที่ /var/lib/gitosis/repositories

กรณีที่  SSH server ไม่ได้ใช้ port 22 ซึ่งเป็นพอร์ตมาตรฐาน  ให้ทำการแก้ไขไฟล์ ~/.ssh/config  โดยเพิ่มคำสั่งดังนี้

Host *hostname.com
     Port 1234

อ้างอิง:

  1. Howto: Install git, gitosis & gitweb on CentOS 5
  2. Hosting Git repositories, The Easy (and Secure) Way
  3. 4 ssh config tips for faster remote working