Zad. 0: SVN, ssh 1 Tworzenie własnego zaproszenia dla powłoki bash Postać zaproszenia do wprowadzania poleceń, które widoczne jest po otworzeniu terminala tekstowego kształtuje zawartość zmiennej systemowej PS1. Jej wartość możemy zmienić w prowadzając odpowiednie modyfikacje w pliku konfiguracyjnym /.bashrc. Zazwyczaj w domyślnej zawartości tego pliku (o ile jest on automatycznie tworzony przy zakładaniu konta) znajdziemy wpis: PS1= ${debian_chroot:+($debian_chroot)}\u@\h:\w\$ Sekwencja \u@\h:\w\$ powoduje, że w zaproszeniu wyświetla się najpierw login użytkownika, znak @, nazwa hosta oraz po znaku : ścieżka dostępu do aktualnego katalogu. Całość kończy się znakiem $ np: jkowalsk@panamint:~/zamp/z1$ Jeśli chcemy mieć wyświetloną tylko nazwę bieżącego podkatalogu oraz inną końcówkę zaproszenia, np. >, to wystarczy ten wpis zamienić na PS1= ${debian_chroot:+($debian_chroot)}\u@\h:\w> 2 Zakładanie repozytorium Opisana poniżej procedura ma charakter ogólny. Niemniej dla ustalenia uwagi załóżmy, że pracujemy na panamincie. 1. Wybieramy sobie kartotekę w strukturze katalogu domowego. Załóżmy, że jest to katalog $HOME/repos. 2. Wykorzystując program svnadmin tworzymy podstawową strukturę repozytorium. panamint:~> svnadmin create $HOME/repos 3. Tworzymy strukturę katalogu dla nowego zadania, np. panamint:~> mkdir $HOME/zamp panamint:~> cd $HOME/zamp panamint:zamp> mkdir z1 panamint:zamp> cd z1 panamint:z1> mkdir trunk branches tags 4. Importujemy do repozytorium nowy projekt panamint:z1> cd.. panamint:zamp> svn import z1 -m Inicjalizacja z1 file:///$home/repos/zamp/z1 Adding z1/trunk Adding z1/branches Adding z1/tags Committed revision 1. 1
5. Możemy sprawdzić jaka jest aktualna zawartość repozytorium panamint:zamp> svn ls file:///$home/repos/ panamint:zamp> svn ls file:///$home/repos/zamp panamint:zamp> svn ls file:///$home/repos/zamp/z1 6. Usuwamy dotychczasową strukturę z katalogu i pobieramy jej wersję z repozytorium. panamint:zamp> rm -r z1 panamint:zamp> svn checkout file:///$home/repos/zamp/z1 Checked out revision 1. 3 Dodawanie plików 1. Utwórzmy plik w podkatalogu trunk i dodajmy go do repozytorium. panamint:zamp> cd z1/trunk panamint:trunk> touch przyklad.txt # Plik nie ma pod kontrolą svn panamint:trunk> svn add przyklad.txt A przyklad.txt # wciąż nie widzimy pliku Polecenie svn ls wyświetla listę plików, które są w katalogu bieżącym pod kontrolą svn, i których kopie znajdują się już w repozytorium. 2. Składowanie zmian w repozytorium panamint:trunk> svn commit -m Dodanie pliku "przyklad.txt" Adding przyklad.txt Transmitting file data. Committed revision 2. panamint:trunk> svn update Updating. : At revision 2. przyklad.txt # wciąż nic 4 Właczanie własności Zmieńmy plik przyklad.txt dodając wpisy, które svn będzie rozpoznawał i umieszczał tam dodatkowe informacje. 2
panamint:trunk> cat >> przyklad.txt $HeadURL: $ $Author: $ $Date: $ $Revision: $ panamint:trunk> svn propset svn:keywords "Rev Date Author HeadURL" przyklad.txt Teraz zeskładujmy zmiany do repozytorium i zaktualizujmy zawartość katalogu. Po tej zmianie w pliku przyklad.txt zostaną wpisane informacje o tym kto wprowadził zmianę w danej wersji, kiedy ona nastąpiła, jaka to jest wersja oraz gdzie znajduje się repozytorium dla danego pliku. panamint:trunk> svn commit -m Wlaczone zostaly wlasnosci dla "przyklad.txt" Sending przyklad.txt Transmitting file data. Committed revision 3. panamint:trunk> cat przyklad.txt $HeadURL: file:///home/jkowalsk/repos/zamp/z1/trunk/przyklad.txt $ $Author: jkowalsk $ $Date: 2013-10-01 06:57:44 +0200 (wto, 01 paź 2013) $ $Revision: 3 $ 5 Komunikacja zdalna z archiwum (bezserwerowa) Możliwe jest bezserwerowe korzystanie z archiwum. W tym celu najlepiej użyć tunelowania poprzez ssh, a więc protokołu svn+ssh. Aby to przećwiczyć, załóżmy, że będziemy pracować na diablo i łączyć będziemy się z repozytorium na panamincie. Serwery diablo i panamint mają wspólny system plików. Jednak na potrzeby tego ćwiczenia będziemy je traktowali jako osobne struktury. Przed pobraniem projektu z repozytorium utwórzmy sobie odpowiedni katalog. diablo:~> mkdir test/ diablo:~> cd test Teraz pobierzmy projekt z repozytorium: diablo:test> svn checkout svn+ssh://panamint.iiar.pwr.wroc.pl/home/jkowalsk/repos/zamp/z1 /przyklad.txt Korzystając z poleceń commit, update, ls itp. nie musimy podawać już lokalizacji repozytorium. 3
5.1 Przykład pracy z innego konta Jeżeli pracujemy na innym komputerze i mamy tam konto, którego login jest różny od tego, który mamy w systemach panamint/diablo, to w poleceniu należy go jawnie wyspecifikować w adresie, np. mojkomp:zad> svn checkout svn+ssh://jkowalsk@panamint.iiar.pwr.wroc.pl/home/jkowalsk/repos/zamp/z1 /przyklad.txt Należy pamiętać, że pytanie o hasła, w przykładzie powyżej, dotyczy hasła na panamincie. mojkomp:zad> svn checkout svn+ssh://jkowalsk@panamint.iiar.pwr.wroc.pl/home/jkowalsk/repos/zamp/z1 /przyklad.txt Dla zobaczenia różnicy tej operacji w stosunku do checkout można ją wykonać w ramach aktualnych zajęć. Po jej zrealizowaniu i po przejściu do podkartoteki z1 nie znajdziemy podkartoteki.svn. Operacje typu svn ls, gdy w ten sposób weksportowana kartoteka nie jest już pod kontrolą systemu SVN. 5.2 Eksportowanie repozytorium Rozliczając kolejne zadania trzeba będzie dostarczyć spakowaną kartotekę z plikami programu odnoszącymi się do danego zadania. Kartoteka ta nie powinna zawierać elementów pomocniczych, które tworzy sobie SVN. Dlatego też należy wcześniej weksportować ją z repozytorium. Jeśli pracujemy lokalnie to polcenie może mieć postać: panamint:zamp> svn export file:///$home/repos/zamp/z1 Checked out revision 1. Gdy pracujemy na innym koncie, np. na komputerze w domu, to polecenie może mieć formę: mojkomp:zad> svn export svn+ssh://jkowalsk@panamint.iiar.pwr.wroc.pl/home/jkowalsk/repos/zamp/z1 /przyklad.txt 4
6 Generowanie kluczy dla ssh Program ssh umożliwia wygenerowanie kluczy, które są wykorzystywane przy autoryzacji zdalnego dostępu. Pozwala to na bezpieczną autoryzację bez podawania hasła. Dzięki temu przy posługiwaniu się programem svn z tunelowaniem poprzez ssh nie będzie konieczne wielokrotne wpisywanie hasła. Należy jednak pamiętać, że automatyczna autoryzacja poprzez ssh rodzi inne potencjalne zagrożenia. Jeżeli ktoś włamie się nam na konto, z którego mamy bezpieczny bezhasłowy dostęp na konta na innych serwerach, to włamywacz będzie miał również do nich dostęp. Z tego powodu ten typ dostępu powinien być możliwy tylko z konta, które jest bardzo dobrze chronione. Załóżmy dalej, że będziemy chcieli mieć bezpieczny i bezhasłowy dostęp do konta na panmincie z poziomu konta na diablo. Poniżej opisaną operację wykonujemy wtedy, gdy nie wygenerowaliśmy jeszcze żadnych kluczy. Jeżeli to już zostało wcześniej zrobione, to operację generacji należy pominąć i przejść do następnej. diablo:.ssh> ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/jkowalsk/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/jkowalsk/.ssh/id_rsa. Your public key has been saved in /home/jkowalsk/.ssh/id_rsa.pub. The key fingerprint is: ef:20:45:d2:ba:05:fd:06:ff:1c:27:2c:e5:be:10:06 jkowalsk@diablo The key s randomart image is: +--[ RSA 2048]----+ o o E. = = +. S B =. + + * + o. o +. o.... +-----------------+ diablo:~> _ Serwery diablo i panamint mają wspólny system plików. Jednak dalsza procedura jest pokazana w sposób możliwie ogólny. Tak więc nie korzysta się z faktu, że serwery te działają na tym samym systemie plików. Kolejna operacja maja na celu przekopiowanie pliku id_rsa.pub na panamint i dołącznie go do pliku /.ssh/authorized_keys diablo:~> scp.ssh/id_rsa.pub panamint:.ssh/id_rsa.pub.diablo Password: id_rsa.pub 100% 1683 1.6KB/s 00:00 diablo:~> ssh panamint Password: Linux panamint 2.6.32-5-686-bigmem #1 SMP Fri Feb 15 16:26:23 UTC 2013 i686 Linux panamint 2.6.32-5-686-bigmem #1 SMP Tue Mar 8 22:14:55 UTC 2011 i686 5
* P A N A M I N T^8 * * Debian * * przegladarki www: opera,firefox * * klient pocztowy: alpine, mailx * * graficzne edytory tekstu: gedit,gvim,emacs * * edytory tekstu: vi,vim,nano,emacs,pico * * programy inzynierskie: matlab,r * * narzedzia programistyczne: ddd, designer * * narzedzie do tworzenia dokumentow tekstowych: latex * * programy graficzne: xfig,qcad * * W przypadku problemow prosimy pisac na adres: * * admin@amargosa.ict.pwr.wroc.pl * No mail. Last login: Wed Oct 2 13:40:41 2013 from diablo panamint:~> cd.ssh panamint:.ssh> touch authorized_keys panamint:.ssh> cat id_rsa.pub.diablo >> authorized_keys panamint:.ssh> rm id_rsa.pub.diablo Operacja zakończona. Pozostaje przetestować, że wszystko działa. panamint:.ssh> exit logout Connection to panamint closed. diablo:~> ssh panamint Linux panamint 2.6.32-5-686-bigmem #1 SMP Fri Feb 15 16:26:23 UTC 2013 i686 Linux panamint 2.6.32-5-686-bigmem #1 SMP Tue Mar 8 22:14:55 UTC 2011 i686 * P A N A M I N T^8 * * Debian * * przegladarki www: opera,firefox * * klient pocztowy: alpine, mailx * * graficzne edytory tekstu: gedit,gvim,emacs * * edytory tekstu: vi,vim,nano,emacs,pico * * programy inzynierskie: matlab,r * * narzedzia programistyczne: ddd, designer * * narzedzie do tworzenia dokumentow tekstowych: latex * * programy graficzne: xfig,qcad * * W przypadku problemow prosimy pisac na adres: * * admin@amargosa.ict.pwr.wroc.pl * No mail. Last login: Wed Oct 2 13:41:20 2013 from diablo panamnint:~> _ 6
Działa!!! :-) 7