Się poprzedni wpis kończył jakoby odtworzenie repozytorium svn
było prostą sprawą, ale w praniu się okazało, że nie do końca:
# zapisanie starego svnadmin dump svnrepo > svnR.out # odtworzenie svnadmin create svnrepo svnadmin load svnrepo < svnR.out
Próba zapisu skutkuje komunikatami o błędach. No tak zachciało
mi się zmienić port na niestandardowy. Żeby svn wiedział jak się połączyć
trzeba dopisać (na koncie
komputera klienta, w sekcji [tunnels]
):
vi ~/.subversion/config ssh = $SVN_SSH ssh -q -p PORTNUMBER
# addgroup svn Adding group `svn' (GID 1002) ... # gpasswd -a "tomek" svn ##Adding user tomek to group svn # chgrp -R svn path-to-svnrepo
Teraz
svn info Ścieżka: . Working Copy Root Path: /home/tomek/orgfiles URL: svn+ssh://tomek@umbriel/media/usbstick/svnrepo/tp/orgfiles ... ## Zmień svn+ssh://tomek@umbriel/path-to-repo na nowe: svn relocate svn+ssh://tomek@umbriel/path-to-repo/path-to-project
Na kartę czy nie na kartę problem sprowadza się do przeniesienia repozytorium do innego katalogu, co okazuje się bardzo proste:
## http://www.petefreitag.com/item/665.cfm ## Backup your old Repository svnadmin dump /path/to/repository > repo_name.svn_dump ## Create the new Repository svnadmin create /path/to/repository ## Import your old repository into the new one svnadmin load --force-uuid /path/to/repository < repo_name.svn_dump
Do zmiany położenia repozytorium w kopii roboczej służy zaś następujące polecenie:
# http://webkit.org/blog/97/svn-repository-location-change/ svn switch --relocate OLDURL NEWURL
Przykład:
svn switch --relocate svn+ssh://eros@jupiter/public/sheeva/svnrepo/er/ETC \ svn+ssh://eros@jupiter/media/sd/svnrepo/er/ETC
No i tyle...
Celem synchronizacji danych na moich komputerach założyłem
archiwum SVN na PC. Do tej pory trzymałem moje pliczki
potajemnie na svn.gust.org.pl
, ale baza padła, svn
wypisuje, że takiej to a takiej wersji nie ma
svn: No such revision 465, no i generalnie kicha.
Ponieważ svn
w moim przypadku to duży overkill myślałem
o czymś w rodzaju unisone
,
ale szkoda mi czasu, a po drugie -- pewnie
niesłusznie -- wydaje mi się, że unisone
bardziej
nadaje się do synchronizacji w jedną stronę, np. przesłanie
plików konfiguracyjnych z serwera na wiele komputerów.
Tak więc ostatecznie stanęło na svn
.
Zacząłem od ,,konfiguracji'' mojej ,,sieci'' LAN. Po uruchomieniu
/sbin/ifconfig
ustaliłem, że mój PC ma adres
192.168.1.102
. Dopisałem zatem do /etc/hosts
:
192.168.1.102 darkstar.pinkaccordions.org darkstar
W zasadzie całą konfigurację zrobił router!
Komputer ma zatem nazwę darkstar
,
a pinkaccordions.org
jest ukłonem w stronę Elki. Laptopa konfiguruję podobnie, nie używam
WiFi, tylko kabel. Sieć będę używał tylko do transferu-synchronizacji
więc nie ma to (mam nadzieję) większego znaczenia.
Teraz najtrudniejsze:
svnadmin create '/stuff/svn/repos/tomek/' svn mkdir file:///stuff/svn/repos/tomek/weblog -m'pierwszy projekt' chown -R g+w /stuff/svn/
Następnie dopisuję do /etc/group
, grupę svn
,
a do niej tych, którzy mają korzystać z svn
. Zmieniam
grupę, do której należy katalog /stuff/svn/
:
chown -R root:svn /stuff/svn/
Wylogowuję się jako root
I dodaję do repozytorium
pierwszy projekt. Ponieważ repo jest na lokalnej maszynie
mogę wpisać:
svn import file:///stuff/svn/repos/tomek/weblog -m "Import mojego bloga"
Jeżeli nie zadziała, ale zamiast tego wyświetli:
svn: Can't create directory '/subversion/main/db/transactions/0-1.txn':\ Permission denied
Albo ekwiwalent w języku polskim, to trzeba zrestartować komputer i powinno działać. Jeżeli coś dalej jest nie tak, no to nie wiem -- u mnie działa.
Obezwładniam SELinuksa, edytując /etc/selinux/config
:
SELINUX=disabled
SELinux jest usługą, która przeszkadza w wielu miejscach i z moich
doświadczeń wynika, że lepiej ją prędzej czy później wyłączyć. Usługa ssh
powinna być ,,zaufana'' (trusted services). Teoretycznie można
konfigurować zaporę sieciową poprzez
wybór z System/Administracja/Zapora, ale u mnie to nie działa.
Być może jest to moja wina, bo nie używam domyślnego unicode tylko ISO-8859-2.
W każdym bądź razie, radzę sobie uruchamiając program poprzez
terminal (oczywiście jako root
):
LANG=C system-config-securitylevel
Żeby nie wpisywać hasła, generuję odpowiednie klucze używając
ssh-keygen
, w sposób opisany
tutaj:
ssh-keygen -t rsa
Teraz dwa razy Enter. W rezultacie klucz prywatny jest
w .ssh/id_rsa
, a publiczny w .ssh/id_rsa.pub
Zawartość tego ostatniego trzeba dodać do
.ssh/authorized_keys
na maszynie, z którą
mamy się łączyć bez podawania hasła.
Procedurę powtarzam dla drugiej maszyny.
Można sprawdzić:
ssl -l tomek darkstar
Powinno działać. Także będzie działać svn, np. mogę ściągnąć repozytorium z PC na laptopa:
svn co svn+ssh://tomek@darkstar/stuff/svn/repos/tomek/weblog
Dopisane 26 lutego 2008:
Sam się dziwiłem jakim cudem router przydziela moim komputerom
te same numery IP. Ale do czasu. Wczoraj przydzielił inne...
Pomysł oparty na /etc/hosts
miał raczej krótkie nogi.
Nie mając bladego pojęcia jak to osiągnąć i posługując się
google ustaliłem, że
1) static DHCP jest tym czego mi potrzeba;
2) fabryczny firmware do mojego
routera WRT54GL nie potafi tego zrobić i należy wgrać alternatywny
3) są różne alternatywy, zachęcony
tym wpisem
postawiłem w ciemno na Tomato.
Mówiąc szczerze najwyżej w Google było nt. dd-wrt, ale strona tegoż jakaś taka podejrzanie dziwna, nie mówiąc już o www.dd-wrt.org/. I was a bit afraid.
Zatem ściągnąłem plik ze strony www.polarcloud.com/tomato. Zainstalowałem archiwizer 7-Zip, który do niczego nie był mi wcześniej potrzebny:
yum install p7zip p7zip-plugins
Wypakowałem zawartość archiwum, połączyłem
się z routerem (http://192.168.1.1/
) i wgrałem
firmware (Administration/Firmware Upgrade, wybrałem
plik wrt54g_wrt54gl.bin
).
Teraz ważne (nie zrobiłem tego i straciłem trochę czasu):
należy zresetować router (Administration/Restore default configuration,
wybrać Erase all data in NVRAM memory).
Po resecie loguję się na router jako root
/admin
.
Następnie trzeba przejść do zakładki Basic/Static DHCP
i wpisać
odpowiednie informacje (numery MAC
są w zakładce Status/Device List).
Zgodnie z tym co jest napisane w dokumentacji należy wybrać adresy spoza puli przydzielanej automatycznie przez router. Ponieważ mój router przydziela z przedziału 192.168.1.100--149, wybrałem numery typu: 192.168.1.2 itp.
Jak już wszystko zainstalowałem to znalazłem detaliczny opis co i jak tu: Turbocharge your router with Tomato. Jest też poradnik co robić jak instalując nowy firmware popsujemy router: Recover from a Bad Flash.
W zasadzie prosta sprawa. Nazwy plików różniące się tylko wielkością znaków (duże/małe litery) w systemie MSW są nierozróżnialne. Jeżeli takimi plikami zarządza system kontroli wersji SVN, to w linuksie i podobnych systemach wszystko działa, a w MS Windows nie -- i w pierwszej chwili nie wiadomo dlaczego. A nie działa zapewne dlatego, że plik jest nadpisywany i SVN-owi nie zgadza się liczba ściągniętych dokumentów.
#!/usr/bin/perl # Rekursywnie przeszukuje bieżący katalog wypisując pliki, których nazwy # różnią się tylko wielkością liter (małe/duże). # Takie pliki nierozróżnia tzw. W-System, co może być źródłem problemów. use File::Find; find(\&fcmp, "."); sub fcmp { $dir = lc("$File::Find::dir"); $file = lc("$File::Find::name"); $Files{$dir}{$file}++; } for $d (sort keys %Files ) { for $f (sort keys %{ $Files{$d}} ) { if ($Files{$d}{$f} > 1) { print "** $Files{$d}{$f} Duplicates found for: $d $f\n" ; } } }
Powyższy skrypt perlowy wypisze pliki, które potencjalne mogą powodować problemy.