Calm Hill My Random Thoughts

How to setup a simple Git Repository Server?

Git Server တစ်ခုလုပ်ယူရတာ သိပ်ပြီးတော့ မခက်ခဲလှပါဘူး ရုံးမှာတစ်ယောက်တစ်ပေါက် Revision Control တစ်ခုခုတင်ပေးပါ ပြောပြောနေလို့ Git Server တစ်ခုလုပ်ပေးဖို့ တာဝန်ကျလာပါတယ်။ Server ပေါ်မှာ Git အတွက် User Account တစ်ခုခွဲထားလို်က်ပြီး Repository တွေကိုသိမ်းလို့ရပါတယ်။ အလွယ်ဆုံးနည်းကတော့ ခွဲထားတဲ့ User Account တစ်ခုနဲ့ အားလုံးသုံးမှာဖြစ်တဲ့အတွက် Password ကိုအားလုံးကို ပေးထားတာထက် Authorized Key နဲ့ဝင်တာ အဆင်အပြေဆုံးပါပဲ။ အောက်မှာပြထားတဲ့ Command တွေနဲ့ git ဆိုတဲ့ User တစ်ယောက်ကို Create လုပ်လို့ပြီး Authorized Key အတွက် Folder တစ်ခုထည့်လို့ရပါတယ်။

root@gitserver:~# adduser -m git root@gitserver:~# su git git@gitserver:~$ cd ~ git@gitserver:~$ mkdir .ssh

ပြီးပြီဆိုရင်တော့ ကိုယ့်ရဲ့ Git Server ကိုသုံးမယ့်လူတွေရဲ့ Public Key တွေကို .ssh အောက်ထဲမှာ authorized_keys ဆိုတဲ့ဖိုင် အနေနဲ့ထည့်ပေးရပါမယ်။ ကိုယ့်အထဲမှာ သုံးမယ့်လူတွေရဲ့ Public Key တွေရှိပြီးသားဆိုရင်တော့ အောက်မှာပြထားသလို အလွယ်တကူပဲရေးလို့ရပါတယ်။ ဒါမှမဟုတ်လည်း authorized_keys ကို Editor တစ်ခုနဲ့ဖွင့်ပြီး ထပ်ထပ်ထည့်လည်းရပါတယ် ခက်ခက်ခဲခဲမဟုတ်ပါဘူး။

git@gitserver:~$ cd ~/.ssh git@gitserver:~$ cat mg_mg_id_rsa.pub >> authorized_keys git@gitserver:~$ cat ma_ma_id_rsa.pub >> authorized_keys

ဒါဆိုရင် mg_mg_id_rsa.pub နဲ့ ma_ma_id_rsa.pub နှစ်ယောက်ဟာ git ဆိုတဲ့ User Account ကိုသူတို့ရဲ့ Private Key တွေနဲ့ SSH ကို Access လုပ်လို့ရပါပြီ။ Server ဘက်မှာတော့ Repository ကို Initialize လုပ်ပေးဖို့ပဲကျန်တော့တယ်။ အောက်မှာပြထားတဲ့ Command တွေနဲ့လုပ်လို့ရပါတယ်။ Git Repository Initialize လုပ်တာက Server ဖြစ်တဲ့အတွက် Working Directory မလိုပဲလုပ်ရပါတယ် အဲဒီ့အတွက် —bare ဆိုတဲ့ Option တစ်ခုပါဖို့ သတိထားရပါတယ်။

git@gitserver:~$ cd ~ git@gitserver:~$ mkdir myproject.git git@gitserver:~$ cd myproject.git git@gitserver:~$ git —bare init

ဒါတွေပြီးရင်တော့ Client အနေနဲ့ သုံးလို့ရပါပြီ။ သုံးခွင့်က mg_mg_id_rsa.pub နဲ့ ma_ma_id_rsa.pub နှစ်ယောက်ကို ပေးထားတဲ့အတွက် အဲဒီ့လူတစ်ယောက်ယောက်ရဲ့ Private Key ရှိတဲ့ ကွန်ပျူတာတစ်လုံးကနေ Clone လုပ်ကြည့်မယ်ဆိုရင် ရပါလိမ့်မယ်။

mgmg@computer:~$ cd ~ mgmg@computer:~$ git clone git@gitserver:myproject.git mgmg@computer:~$ cd myproject mgmg@computer:~$ touch README mgmg@computer:~$ git add . mgmg@computer:~$ git commit -am “Initial Commit” mgmg@computer:~$ git push origin master

သုံးလို့ရသွားပြီဆိုပေမယ့် ထပ်ဖြစ်လာတဲ့ ပြဿနာက mg_mg_id_rsa.pub နဲ့ ma_ma_id_rsa.pub နှစ်ယောက်ဟာ git ဆိုတဲ့ User Account ကိုသူတို့ရဲ့ Private Key တွေနဲ့ SSH ကို Access လုပ်လို့ရနေပါတယ်။ အကယ်လို့ သူတို့နှစ်ယောက်ဟာ ဆာဗာပေါ်မှာ Shell Access မလုပ်စေချင်ရင်တော့ git ဆိုတဲ့ User Account အတွက်ပေးထားတဲ့ Shell ကိုပြင်ဖို့လိုပါတယ်။ Git မှာ git-shell ဆိုပြီးပါပြီးသားရှိပါတယ် အဲဒါကိုပဲသုံးစေမယ်ဆိုရင်တော့ Repository List ကလွဲရင်ကြည့်လို့မရအောင် လုပ်ပေးလို့ပါတယ်။

root@gitserver:~# cp -R /usr/share/doc/git-your-version/contrib/git-shell-commands /home/git root@gitserver:~# chown -R git /home/git/git-shell-commands/ root@gitserver:~# chmod +x /home/git/git-shell-commands/help root@gitserver:~# chmod +x /home/git/git-shell-commands/list root@gitserver:~# chsh -s /usr/bin/git-shell git

အထက်မှာပြောခဲ့တဲ့အတိုင်း Setup လုပ်မယ်ဆိုရင် Git Server တစ်ခုအလွယ်တကူ လုပ်လို့ရပါတယ် ဒါပေမယ့် အလွယ်ဆုံးနည်းလမ်း ဖြစ်တဲ့အတွက် လိုအပ်ချက်တွေတိုးလာရင် အဆင်မပြေတော့ပါဘူး။ အခုလုပ်ထားတာက User Account တစ်ခုကို လူအများမျှပြီးသုံးတဲ့နေရာမှာ Public Key တွေကို authorized_keys ထဲကိုရေးပေးရတဲ့အတွက် လူများလာတာနဲ့အမျှ ထိမ်းချုပ်ရခက်ပါတယ် လူတစ်ယောက်ကို ပြန်ဖျက်ဖို့အတွက် authorized_keys ကိုပြန်ဖွင့်ပြီး တစ်ခုစီလိုက်ရှာရတာ အတော်ခက်ခဲ့ပါလိမ့်မယ်။ နောက်တစ်ချက်က လူတိုင်းမှာတူညီတဲ့ လုပ်ပိုင်ခွင့်ဖြစ်နေပါတယ် သုံးခွင့်ရှိတယ်ဆိုတာနဲ့ ရှိသမျှ Repository တွေကို Access လုပ်လို့ရပါတယ်။ အဲဒီလိုအပ်ချက်တွေ တိုးလာရင်တော့ အခြားသော Git Server Management Tools တွေသုံးရပါလိမ့်မယ်။ နောက်တစ်ခုမှပဲ Git Server Management Tools တွေအကြောင်းရေးပါဦးမယ်။