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 တွေအကြောင်းရေးပါဦးမယ်။

Dennis MacAlistair Ritchie

ဒီလထဲမှာ iPhone အသစ်ထွက်ပြီးတဲ့နောက်နေ့ Steve Jobs ဆုံးသွားတယ် တစ်နေရာတစ်ခါ လူတစ်ယောက်တွေ့တိုင်း Steve Jobs ဆုံးသွားတယ်ပဲပြောကြတယ် Facebook မှာလည်းပုံတွေ ပလူပျံနေတယ် Profile ပြောင်းတဲ့လူလည်းပြောင်း အခုထိပြန်မဖြုတ်ကြသေးဘူး။ iPhone ဝယ်မလားတော့ စဉ်းစားမိပါတယ် ဒါပေမယ့် ဆုံးသွားပြီဆိုတော့ ဪ.. သွားရှာပြီလို့ စိတ်မကောင်း တစ်ချက်ဖြစ်တာတစ်ခုပါပဲ။

ကိုယ့်အတွက်တော့ ကွန်ပျူတာနဲ့စီးပွားရေး လုပ်စားတာအင်မတန် တော်တယ်ဆိုပြီး နှစ်ဘက်တော်တဲ့ လူတစ်ယောက်အဖြစ် အသိအမှတ်ပြုထားတာကလွဲရင် သိပ်ထူးခြားမှု့မရှိပါဘူး။ လူသုံးလွယ်တဲ့ ကွန်ပျူတာတွေ အများကြီးထုတ်ခဲ့တာ လက်ခံလို့ရပါတယ် ဒါပေမယ့် လူအများကြီးအတွက် အထောက်အကူ မပေးနိုင်ခဲ့ဘူး။ IBM သာ PC Standard ကိုထုတ်ပေးခဲ့တာ အင်မတန်ကျေးဇူးတင်ရမယ် မထုတ်ပေးခဲ့ရင် ဒီအချိန်မှာ ဆင်းရဲတဲ့နိုင်ငံတွေ ကွန်ပျူတာသုံးနိုင်ဖို့ လမ်းမမြင်မိသေးဘူး။

Microsoft ချမ်းသာတော့ လူတွေကအတော် ဆန့်ကျင်ကြတယ် Microsoft ပစ္စည်းမသုံးဘူး အော်ကြဟစ်ကြတယ် Apple တစ်ခုခုထွက်တော့ လုဝယ်ကြပြန်တယ် တကယ်တော့ ပြန်စဉ်းစားကြည့်ရင် Apple စီးပွားဖြစ်တော့ ဘယ်သူအကျိုးရှိသလဲ လိုက်ကြည့်တော့ သူတို့ချမ်းသာတာတစ်ခုပဲ မြင်မိပါတယ်။ Microsoft စီးပွားဖြစ်တော့ အနည်းဆုံးတော့ Bill Gates ချမ်းသာတယ်ပေါ့ အဲဒီကတစ်ဆင့် Bill & Melinda Gates Foundation ဟာ ချို့တဲ့ပြီး လိုအပ်တဲ့နေရာတစ်ချို့မှာ တစ်စိတ်တစ်ဒေသ အကျိုးပြုနိုင်သေးတယ်။

သတင်းတစ်ခုထဲမှာ အောက်တိုဘာ ၈ ရက်နေ့က Dennis MacAlistair Ritchie ဆုံးသွားပြီဆိုတာ ဖတ်လိုက်ရတယ်။ Dennis M. Ritchie ဟာ ကွန်ပျူတာခေတ်မှာ အရေးပါတဲ့နေရာမှ ရှိနေခဲ့တယ် သူရဲ့အမွေတွေကို ဆက်ပြီးသုံးနေကြတယ် အခုအချိန်အထိ နှစ်ပေါင်းများစွာ မကျဆုံးပဲရပ်တည်နေတဲ့ C Programming Language ရဲ့ဖခင်ကြီးလို့ပြောရမယ်။ ၁၉၈၀ မှာ Dennis M. Ritchie နဲ့ Brian W. Kernighan အစပြုခဲ့တဲ့ C Language ဟာအခုအချိန်အထိ မဖြစ်မနေသုံးစွဲနေကြဆဲဖြစ်တယ်။ သူဟာ Unix System ကိုလည်း ပူးတွဲတည်ဆောက်ခဲ့တဲ့ လူတစ်ဦးလည်းဖြစ်တယ်။ တကယ်တော့ အင်တာနက်သုံးနေသ၍ Unix နဲ့ကင်းတယ်လို့ ဘယ်လိုမှပြောလို့မရနိုင်ပါဘူး အင်တာနက်ပေါ်က ဆာဗာအများစုဟာ Unix မဟုတ်ခဲ့ရင်တောင် သူ့ကိုအခြေခံတဲ့ Linux တွေဖြစ်နေတယ်။

အာဒမ်နဲ့ဧဝခိုးစားတဲ့ ပန်းသီးရယ် နယူတန်တွေ့လိုက်တဲ့ ကြွေကျတဲ့ပန်းသီးရယ် Steve Jobs ပေးတဲ့ပန်းသီးရယ်ဆိုပဲ တကယ်တော့ Steve Jobs ရဲ့ပန်းသီးလည်း Dennis M. Ritchie ပေးတာတွေနဲ့ တည်ဆောက်ထားရတယ် Objective C ဆိုတော့ နာမည်နဲ့တင် ပြောစရာမလိုတော့သလို တကယ်တော့အခု အချိန်မှာသုံးနေတဲ့ MacOSX တွေဟာ Dennis ရဲ့ Unix ကိုအခြေခံပြီးပြုပြင်ထားရတာပါ။ Bill Gates ဟာ BASIC Language ကိုအင်မတန် သံယောစဉ်ရှိပေမယ့် တကယ်တော့သူ့ရဲ့ OS တွေလည်း ၉၀% C or C++ ကိုသုံးနေရသလို Unix လွှမ်းမိုးမှု့အောက်က မလွတ်မြောက်ပါဘူး။ တကယ်တော့ Dennis လုပ်ခဲ့တဲ့အရာတွေဟာ တစ်ဦးတစ်ယောက်တည်းအတွက် မဟုတ်ခဲ့ပဲ ခေတ်သစ်ကွန်ပျူတာ လောကတစ်ခုလုံးကို အကျိုးပြုသွားသလို အခုလည်း အကျိုးပြုနေဆဲပါပဲ သူဆုံးပါးသွားပေမယ့် သူ့ရဲ့တီထွင်မှု့တွေက ရှေ့ဆက်ပြီးလည်း အကျိုးပြုနေအောင် ထားသွားနိုင်ခဲ့တဲ့ လူတစ်ဦးပါပဲ။

Cross Compile with MinGW-w64

Windows ရဲ့ Environment ဟာ Compile လုပ်ဖို့အဓိက မထားတဲ့အတွက် တကယ်တမ်း တစ်ချို့ Opensource တွေကို ကိုယ်တိုင် Compile လုပ်ဖို့လိုလိုရင် အတော်ပြဿနာတက်တယ် အများအားဖြင့် 64 bits တွေလိုချင်ရင်ဖြစ်တတ်တယ် အဲဒီ့အချိန်ကျရင်တော့ သူများလုပ်ထားတာရှိသလား လိုက်ရှာရတာကမောတယ် ကိုယ်တိုင်ကိုယ်ကျ Compile လုပ်ရရင်ပိုမောပါတယ်။ Windows မှာ Compile လုပ်ချင်ရင် Native မဟုတ်ပဲ လွယ်ချင်ရင်တော့ Cygwin မှာလုပ်ရင်တော့ဖြစ်တယ် ဒါပေမယ့် Cygwin dll ကြားထဲကပါနေတော့ နေရာတိုင်းသုံးလို့မဖြစ်ဘူး တစ်ချို့ Opensource တွေက VC နဲ့လုပ်ရလွယ်အောင် မပေးထားရင် Compile လုပ်ရတာ အတော်ဒုက္ခများပါတယ်။ Native လိုချင်ရင် အသုံးအတည့်ဆုံးကတော့ Mingw ကို MSys နဲ့သုံးရင်တော့အဆင်ပြေတယ်။ အခုနောက်ပိုင်း ပြဿနာဖြစ်ဖြစ်နေတာက 64 bits လိုချင်တော့ Mingw 64 bits ကို Setup လုပ်ရတာကလည်း နည်းနည်းလက်ဝင်ပါတယ် အဲဒါကြောင့် နောက်ပိုင်းတော့ Mingw သုံးပြီး Linux ပေါ်မှာပဲ Cross Compile လုပ်လိုက်တော့တယ်။

Linux ကလည်း သူ့ရဲ့ Native မှာ Compile လုပ်ရလွယ်ပေမယ့် Cross Compile ဆိုရင်တော့ GNU Autotools တွေအလုပ်လုပ်တာတော့ နည်းနည်းနားလည်ဖို့လိုပါတယ်။ Ubuntu ပေါ်မှာပဲ Cross Compile လုပ်ဖြစ်တယ် Ubuntu ရဲ့ Repo ထဲမှာ Mingw 64 bits ပါပေမယ့် တကယ်သုံးကြည့်တော့ Error များပါတယ် အဲဒါကြောင့် တကယ်သုံးမယ်ဆိုရင် Mingw 64 bits Binary တွေကိုမူရင်းဆိုက်ကနေပဲ ဆွဲယူရပါတယ် အဲဒါတွေကိုပါ ကိုယ်တိုင် Compile လုပ်လို့ရပါတယ် ဒါပေမယ့်လုပ်ဖို့တော့ မလိုအပ်ရင်အားမပေးပါဘူး Mingw တစ်ခုလုံးကို Compile လုပ်ရတာ အတော်အချိန်ကုန်သလို ပြဿနာလည်းများလွန်းပါတယ်။ Cross Compile ဖြစ်တဲ့အတွက် ကိုယ်လုပ်ချင်တဲ့ Platform အလိုက် Compiler တွေကိုယူရပါမယ် Windows 32 and 64 ဆိုတဲ့အတွက် Compiler လည်း ၂ ခုလိုပါတယ်။ အောက်မှာပြထားတဲ့ URL နှစ်ခုကနေ ဒေါင်းလုပ်လုပ်လို့ရပါတယ်။ အဲဒီ့မှာလည်း Personal နဲ့ Automated Builds ဆိုပြီး ၂ မျိုးရှိတယ် တစ်ချို့ကလည်း Personal က အများနည်းတယ်ပြောတယ် ဒါပေမယ့် နောက်ဆုံး Build ကိုပဲကျွန်တော်သုံးတော့ Automated သုံးနေတာ အခုထိတော့ ဘာမှမဖြစ်ဖူးသေးပါဘူး။

http://sourceforge.net/projects/mingw-w64/files/Toolchains targetting Win32
http://sourceforge.net/projects/mingw-w64/files/Toolchains targetting Win64

ရလာတဲ့ Compiler တွေကို တစ်နေရာမှာသွားထားပါတယ် ဘယ်နေရာထားထားရပါတယ် ကျွန်တော်ကတော့ /opt အောက်မှာ mingw32 and mingw64 ဆိုပြီးသတ်မှတ်ထားလိုက်တယ်။ သူက Compiler name တွေရှေ့မှာ ကိုယ် Cross လုပ်မယ့် Architecture Name ထည့်ထားတယ် gcc compiler ဆိုရင် 32 Bits Windows အတွက်ဆို i686-mingw32msvc-gcc လို့နာမည်ပေးပြီးတော့ 64 Bits Windows အတွက်ဆို x86_64-mingw32msvc-gcc လို့နာမည်ပေးထားတယ်။ အဲဒီတော့ Cross Compile လုပ်ချင်တဲ့ Source တွေကို သက်ဆိုင်ရာ Compiler နဲ့ Compile လုပ်ရပါတယ် တကယ်တော့ Compiler တစ်ခုတည်မဟုတ်ပါဘူး Loader, Linker, … စသည်ဖြင့် အကုန်လုံးကိုပြောင်းသုံးရမှာပါ။ အဲဒီတော့ Build လုပ်တဲ့အချိန်မှာ Manual ဆိုရင်ပြဿနာမဟုတ်ပေမယ့် Automated ဆိုရင်တော့ Makefile ထဲမှာ လိုက်ပြင်ရပါလိမ့်မယ် အဲဒါလည်း လက်နဲပြင်လို့မဖြစ်နိုင်တော့ Autotools တွေနဲ့ Makefile generate လုပ်တဲ့အချိန်မှာ Parameter ထည့်ပေးလိုက်မှအဆင်ပြေပါတယ်။ အဲဒါကြောင့် Makefile generate လုပ်တဲ့ Configure script ကို Execute လုပ်တဲ့အချိန်မှာ အောက်မှာပြထားတဲ့ Parameter တွေထည့်ပေးရပါမယ်။

CC=/opt/mingw64/bin/x86_64-w64-mingw32-gcc CXX=/opt/mingw64/bin/x86_64-w64-mingw32-g++ LD=/opt/mingw64/bin/x86_64-w64-mingw32-ld AR=/opt/mingw64/bin/x86_64-w64-mingw32-ar AS=/opt/mingw64/bin/x86_64-w64-mingw32-as NM=/opt/mingw64/bin/x86_64-w64-mingw32-nm STRIP=/opt/mingw64/bin/x86_64-w64-mingw32-strip RANLIB=/opt/mingw64/bin/x86_64-w64-mingw32-ranlib DLLTOOL=/opt/mingw64/bin/x86_64-w64-mingw32-dlltool OBJDUMP=/opt/mingw64/bin/x86_64-w64-mingw32-objdump RC=/opt/mingw64/bin/x86_64-w64-mingw32-windres –host=x86_64-w64-mingw32

CC=/opt/mingw32/bin/i686-w64-mingw32-gcc CXX=/opt/mingw32/bin/i686-w64-mingw32-g++ LD=/opt/mingw32/bin/i686-w64-mingw32-ld AR=/opt/mingw32/bin/i686-w64-mingw32-ar AS=/opt/mingw32/bin/i686-w64-mingw32-as NM=/opt/mingw32/bin/i686-w64-mingw32-nm STRIP=/opt/mingw32/bin/i686-w64-mingw32-strip RANLIB=/opt/mingw32/bin/i686-w64-mingw32-ranlib DLLTOOL=/opt/mingw32/bin/i686-w64-mingw32-dlltool OBJDUMP=/opt/mingw32/bin/i686-w64-mingw32-objdump RC=/opt/mingw32/bin/i686-w64-mingw32-windres –host=i686-w64-mingw32

ပြီးရင်တော့ ပုံမှန် Build လုပ်သလိုပဲ Make လုပ်လို့ရပါပြီ။ စိတ်ဝင်စားတယ်ဆိုရင် တစ်ခုခုကို Cross Compile လုပ်ကြည့်ပါ လွယ်လွယ်ကူကူဆိုရင် Curl ရဲ့ Source ကို Download လုပ်လိုက်ပါ ပြီးရင်တော့ အပေါ်မှာပြထားသလို 32 bits အတွက်ရယ် 64 bits အတွက်ရယ် Compile လုပ်ကြည့်ပါ curl.exe တွေကို Build လုပ်ပေးပါလိမ့်မယ် အဲဒါတွေကို Windows ပေါ်ကိုကူးသွားပြီး Execute လုပ်ကြည့်ပါ အလုပ်လုပ်ပါလိမ့်မယ်။ 64 bits ကို 32 bits Windows ပေါ်မှာစမ်းကြည့်မိရင်တော့ အလုပ်မလုပ်တာတွေ့ပါလိမ့်မယ်။ Linux ပေါ်မှာလည်း Exe files တွေအလုပ်လုပ်မလုပ် စမ်းကြည့်ချင်တယ်ဆိုရင် Wine Install လုပ်ထားရင်တော့ Exe တွေကိုတစ်ခါတည်း Execute လုပ်ပြီးစမ်းလို့ရပါတယ်။ အားလို့စိတ်ဝင်စားရင်တော့ စမ်းကြည့်နိုင်ပါတယ် ဘာအကျိုးထူးသလဲမေးရင်တော့ Source Code အလကားပေးရင်တောင် ကောင်းလွန်းပေမယ့် သုံးလို့မလွယ်တာတွေ ရှိတယ်လို့သိစေချင်တာပါ တကယ်လုပ်ကြည့်ရင် ရေးထားတဲ့ကုဒ်ကို Compile လုပ်ရတာကိုက မလွယ်ကူဘူးဆိုတာ နားလည်သွားပါလိမ့်မယ်။