Rozhodol som sa, že o tom napíšem malý príspevok, kým to mám ešte všetko čerstvo v hlave :) Kedže vyvíjam ako na Mac OS X tak aj na Linux (ktorý mám nainštalovaný vo VMWare), potrebujem systematicky udržiavať „zdrojáky“ môjho programu a všetky zmeny, ktoré som spravil pod Linuxom mal ich hneď k dispozícii pod Mac OS X a opačne. Nebudem vysvetľovať, čo je to Subversion, pretože na internete sa o tom dá veľmi ľahko dočítať. Sústredím sa na jednu základnú vec, ako rozbehať Subversion server pod Mac OS X.Je pravda, že keď si dáte na internete vyhľadať postupy, ako nainštalovať a rozbehať Subversion server pod Mac OS X, vyskočí vám niekoľko odkazov. Ani jeden ale nie je kompletný a je to boj, zozbierať po kúskoch potrebné údaje k tomu, aby sa nám ho podarilo úspešne nainštalovať (a skôr by som povedal že treba veľa kombinovať a predpokladať). Preto sa to budem snažiť dať do jedného celistvého postupu „Ako na to…“.
Najprv si ujasnime o čo mi presne išlo. Subversion podporuje 3 spôsoby prístupu k hlavnému repozitáru. A to pomocou HTTP/HTTPS, cez SVN:// alebo local FILE://. V rámci SVN:// je tu možnosť ešte kombinovať SVN+SSH://
Ďalej musím spomenúť, že Subversion má zabudovanú aj vlastnú autentifikáciu užívateľov (prispievateľov do repozitáru), čiže nie je nutné každému, kto bude využívať prístup k Subversion zakladať systémový účet, stačí ho zadefinovať len v rámci Subversion. Samozrejme, je možnosť prístupu aj t.z. Anonymous užívateľom. Lenže, my chceme mať svoje zdrojové súbory ochránené tak, aby k nim nemohla pristupovať neoprávnená osoba bez nášho vedomia.
Takže si môžeme zvoliť prístup buď cez SVN:// alebo SVN+SSH://. Ja som to nechcel komplikovať cez SSL vrstvu, nakoľko som so svojim notebookom vždy pripojený k sieti, kde to poznám a port pre Subversion mám za firewallom, lenže na druhej strane som nechcel, aby mal hocikto prístup k mojim zdrojákom (pre istotu), tak som si zvolil spôsob prístupu k môjmu repozitáru cez SVN://.
A tu nastáva kameň úrazu. Našiel som najprv postup, ako rozbehať server pomocou tzv. systémového Démona (program, ktorý beží na pozadí). Lenže po niekoľkých dňoch experimentovania som zistil, že týmto spôsobom viem pristupovať k hlavnému repozitáru len pomocou SVN+SSH:// prístupu a nefungovala autentifikácia užívateľa cez Subversion (netuším, či je to nejaký bug, alebo je to štandardná vlastnosť pri spúšťaní Subversion servera pomocou démona, alebo som len ja niečo prehliadol).
Znova som hľadal na internete, prečo to nefunguje a podarilo sa mi nájsť postup, ako rozbehať server pomocou xinet služby (je to nejaký super-démon, ktorý spravuje prístup, logovanie, pripájanie atď. k službám spustených práve pomocou xinet služby).
Takže sa pokúsim popísať krok po kroku, čo všetko je nutné nastaviť a spustiť, aby sa nám úspešne podarilo na konci prihlásiť k nášmu repozitáru.
1. stiahneme si aktuálny inštalačný obraz Subversion
2. rozbalíme a nainštalujeme. V inštalačke sa nachádza ako príkazový klient, tak aj server pre Subversion
3. potrebujeme si založiť účet pre svnserver. Ja som na to použil NetInfo Manager, najlepšie bude, keď si to nastavíte podľa screenshotov:
Dôležité: do parametru users je nutné pridať užívateľa, cez ktorého sa budeme pripájať do repozitáru lokálne z Mac OS X
4. vytvoríme si repozitár, spustíme si terminál a zadáme príkaz – nastavíme ním práva adresára /opt pre svojho užívateľa:
$ sudo chown donald /opt
vytvoríme hlavný repozitár
$ svnadmin create /opt/svn-repos
nastavíme vlastníka repozitáru na subversion užívateľa, ktorého sme založili
$ chown svnserver:svnserver /opt/svn-repos
Tak isto pozor na to, aby celá cesta mala atribúty r+x pre others, ináč povedané:
$ sudo chmod 775 /opt
5. teraz si upravíme svnserve.conf a passwd, ktoré nájdeme v ceste, kde sme si vytvorili predtým hlavný repozitár /opt/svn-repos/conf
úprava svnserve.conf:
odkomentujeme nasledovné riadky
[general] anon-access = none
auth-access = write
password-db = passwd
úprava passwd:
[users] donald = my_password
V tomto súbore sa jedná o zabudovanú autentifikáciu Subversion, ktorú som spomínal vyššie.
6. do adresára /etc/xined.d vytvoríme nový súbor napríklad s názvom svnserver.d, ktorý bude vyzerať nasledovne:
service svn
{
socket_type = stream
protocol = tcp
user = svnserver
wait = no
disable = no
server = /usr/bin/svnserve
server_args = -i -r /opt/svn-repos
port = 3690
}
Následne reštartujeme super-demon xinetd pomocou príkazu:
$ sudo kill -HUP
`
cat /var/run/xinetd.pid`
7. teraz už len musíme importnúť náš projekt do repozitáru a to napríklad príkazom:
$ cd /Users/donald/my_project
$ svn import -m 'Initial import' . file:///opt/svn-repos
a pre otestovanie si vyskúšame na local hoste checkout z repozitáru:
$ cd /opt
$ svn co file:///opt/svn-repos my_project
Všimnite si, že na localhoste som použil spôsob prístupu do hlavného repozitáru cez file:///cesta/k/repozitaru. Tento spôsob by sa mal používať aj pri normálnej práci, ako je commit, checkout, update, merge atď.
Pri prístupe cez sieť by sa mal použiť práve spôsob cez svn://nazov_pc, kde je nutné zadať užívateľa zadefinovaného v passwd, uvediem príklad kde si spustím Linux cez VMWare a zadáme príkaz:
$ svn co svn://my_pc my_project --username donald --password my_password
Dúfam, že vás to neodradilo a ušetrí vám to čas pri experimentovaní a inštalácii Subversion server na vašom Mac OS X.
Programovaniu zdar :)
komentárov
na nejakeho donalda to je fakt brutus z toho jasne vidno ze si nepochopil o com su prava na unixoch, ako sa potom zachova nejaky iny soft ktory tiez potrebuje daco dat do /opt
anonym: a este mi prosim vysvetli, ktory program si vklada nieco do /opt ? .. pouzival som linux 8 rokov a nenasiel som ani jeden program ani jednu utilitku, ktora by si nieco davala do /opt …
opt: oracle? :-D
lesnik: Oracle si mozes nainstalovat aj do HOME .. je to tvoja volba, kam si ho das … baviem sa o programoch, ktore striktne pracuju len s /opt adresarom a taky nepoznam.
Daniel Kacer: mal by si uznat ze si spravil chybu. /opt by mal byt vlastneny rootom.
Nenasiel si ani jeden program za 8 rokov co by sa(alebo nieco) instaloval do /opt … to co si robil tych 8 rokov? Hral tuxracera :)
Je jasne ze si mozes instalovat co chces a kam chces. Aj toho tuxracera si mozes nainstalovat /Precitam/si/FHS/a/budem/vediet/na/co/je/opt
Na macu: napriklad darwinports defaultne pracuju v /opt…
do /opt se standartne bez moznosti volby instaluje macports (drive darwinports)
Vie niekto iny alebo lepsi sposob ako rozbehnut SVN pod Mac OS X? Tak sem s nim. ;)
dano: Sorry, ale fakt si nemam co priznat. Spravil som popis, ako rozbehat SVN, ukazal som, ako som si to nastavil ja .. a dal som realny priklad, co ktomu je nutne. Nikomu nekazem, aby si to robil presne podla mojho postupu.
Ja v /opt mam od jak ziva svoje zdrojaky a tam vyvijam vzdy software, nidky si do /opt nic ine nedavam a take programy ako darwinports a fink neuznavam (robi to bordel v MACOSX) .. takze, ak ma niekto pocit, ze som spravil nehoraznu a neospravedlnitelnu chybu, prosim, ja mu v jeho nazore nebudem branit. Nie som z tych ludi, co tu budu tvorit flame (na podla mna uplnu blbost, ktora sa tu riesi pod tymto prispevkom).
Co som robil 8 rokov pod linuxom je asi moja vec, nemusim sa tu nikomu s tym zverovat a ani pred nikym obhajovat alebo nieco vysvetlovat.
A napisal som to uz davnejsie a zopakujem to znovcu, pokial ma niekto pocit, ze to nie je spravny postup, tak nikomu nic nebrani ukazat, co je v nom a napisat nejaky clanok lepsie a „dokonalejsie“. A nie vychytavat blbosti, ktore su podla mna nepodstatne (clanok bol zamerany na to, ako rozbehat uspesne SVN server pod MacOSX, lebo viem, ze je to boj a nebolo to jednoduche rozbehat).
A ked si tu uz honime triko koli takejto podla mna blbosti, ukazte mi niekde nejaky RFC, resp. POSIX specifikaciu, kde je napisane, ze /opt MUSI PATRIT root userovi ??
Je mi jasne, ze je standard /usr .. /home .. /var ../boot .. /etc .. /sbin .. /lib .. /usr/lib .. /usr/bin .. a ich obsah a vyuzitie pre system je jasne dany a kazda zmena vyuzitia tych adresarov moze sposobit necakane spravanie sa systemu alebo aj havariu systemu. Ale prosim, okrem vasich neopravnenych narazaziek, ze som spravil nehoraznu chybu, kde je povedane, na co sa ma presne pouzivat /opt a kto ho ma vlastnit ???