diff --git a/biblio.bib b/biblio.bib index feccacc..f7159dd 100644 --- a/biblio.bib +++ b/biblio.bib @@ -37,3 +37,70 @@ url = {http://gdzies/w/internecie/internet.html}, urldate = {2021-09-30} } + +@online{bib:redhat_rsync, + author = {Steve Newsted (Red Hat)}, + title = {Keeping Linux files and directories in sync with rsync}, + year = {2021}, + url = {https://www.redhat.com/sysadmin/sync-rsync}, + urldate = {2022-12-31} +} + +@online{bib:unison, + author = {Benjamin Pierce (University of Pennsylvania)}, + title = {Unison - File Synchronizer}, + year = {1998}, + url = {https://www.cis.upenn.edu/~bcpierce/unison/}, + urldate = {2022-12-31} +} + +@techreport{bib:ietf-secsh-filexfer-13, + number = {draft-ietf-secsh-filexfer-13}, + type = {Internet-Draft}, + institution = {Internet Engineering Task Force}, + publisher = {Internet Engineering Task Force}, + note = {Work in Progress}, + url = {https://datatracker.ietf.org/doc/draft-ietf-secsh-filexfer/13/}, + author = {Joseph Galbraith and Oskari Saarenmaa}, + title = {{SSH File Transfer Protocol}}, + pagetotal = 60, + year = 2006, + month = jul, + day = 18, + abstract = {The SSH File Transfer Protocol provides secure file transfer functionality over any reliable, bidirectional octect stream. It is the standard file transfer protocol for use with the SSH2 protocol. This document describes the file transfer protocol and its interface to the SSH2 protocol suite.}, +} + +@article{bib:rsync-thesis, + title={Efficient algorithms for sorting and synchronization}, + author={Tridgell, Andrew and others}, + year={1999}, + publisher={The Australian National University} +} + +@article{bib:rsync-tech-report, + added-at = {2012-12-07T10:52:44.000+0100}, + author = {Tridgell, Andrew and Mackerras, Paul}, + biburl = {https://www.bibsonomy.org/bibtex/21e55c2461de92a2b7c008bc47a762f07/nosebrain}, + interhash = {62cdc41fd447efb99c45b157ca15d3b8}, + intrahash = {1e55c2461de92a2b7c008bc47a762f07}, + keywords = {algorithm rsync}, + timestamp = {2012-12-17T15:20:03.000+0100}, + title = {The rsync algorithm}, + year = 1996 +} + +@online{bib:rsync-article, + author = {N/A}, + title = {How Rsync Works; A Practical Overview}, + year = {N/A}, + url = {https://rsync.samba.org/how-rsync-works.html}, + urldate = {2022-12-31} +} + +@online{bib:ssh-article, + author = {N/A}, + title = {SSH File Transfer Protocol (SFTP): Get SFTP client & server}, + year = {N/A}, + url = {https://www.ssh.com/academy/ssh/sftp-ssh-file-transfer-protocol}, + urldate = {2022-12-31} +} \ No newline at end of file diff --git a/main.pdf b/main.pdf index 163b6c9..f607958 100644 Binary files a/main.pdf and b/main.pdf differ diff --git a/main.tex b/main.tex index ccf33d2..bee12b2 100644 --- a/main.tex +++ b/main.tex @@ -521,18 +521,56 @@ skonfigurowaniem domowej sieci lokalnej do obsługi rozwiązania. % \end{itemize} % TODO -\chapter{[Analiza tematu]} +\chapter{Analiza tematu} \paragraph{} Praca została podzielona na dwie główne części: obsługę maszyn wirtualnych i ich obrazów, oraz zarządzanie, instalację i konfigurację systemu zarządcy maszyn wirtualnych. +\paragraph{} +Istnieje kilka popularnych sposobów synchronizacji i przesyłania plików pomiędzy urządzeniami opartymi o systemy z rodziny Linux. +Wśród nich warto zwrócić uwagę na poniższe rozwiązania: + +\begin{itemize} + \item RSYNC\cite{bib:redhat_rsync} + \item SFTP\cite{bib:ietf-secsh-filexfer-13} + \item serwer http serwujący pliki statyczne +\end{itemize} + +\paragraph{RSYNC} +RSYNC to narzędzie służące do synchronizacji, kopiowania i przenoszenia plików na maszynach pracujących pod kontrolą systemów z rodziny UNIX. +Podstawą działania aplikacji RSYNC jest architektura klient-serwer, gdzie klient najpierw nawiązuje połączenie z serwerem poprzez +potok, a w przypadku połączenia sieciowego najpierw uruchamia powłokę na maszynie zdalnej, następnie uruchamia proces serwera i tworzy +potok do komunikacji między nimi. Po nawiązaniu połączenia, proces wysyłający dane tworzy listę wszystkich plików do wysłania, wraz z +informacjami o własności, wielkości plików, trybie, uprawnieniach i czasie ostatniej zmiany. Następnie, każda ze stron transferu +sortuje te listy leksykograficznie, względem ścieżki do bazowego katalogu transferu. W kolejnym kroku tzw. generator iteruje się po liście +plików i sprawdza, czy mogą zostać pominięte (czy data ostatniej zmiany i wielkość nie uległy zmianie, lub, jeżeli została wybrana odpowiednia +flaga, czy sumy kontrolne poszczególnych plików nie uległy zmianie) oraz tworzy brakujące katalogi. Jeżeli plik nie został oznaczony +jako możliwy do pominięcia, jego obecna wersja staje się "plikiem bazowym'', a jej obliczone sumy kontrolne bloków plików są wysyłane do procesu +odbierającego dane. Proces odczytuje tablicę sum kontrolnych bloków, tworzy indeks funkcji skrótu, aby przyspieszyć operacje +wyszukiwania bloków. Następnie plik lokalny jest odczytywany i liczona jest suma kontrolna dla pierwszego bajtu pliku. +Jeżeli wykryta zostanie różnica w sumach kontrolnych, do pierwszego niepasującego bajtu dołaczony zostanie odpowiadający bajt z pliku +wysyłanego, a następnie obliczona zostanie suma kontrolna bloku zaczynającego się w kolejnym bajcie. Jeżeli znalezione zostanie dopasowanie +w tablicy indeksów funkcji skrótów, dany blok jest traktowany jako pasujący i jest pomijany. W ten sposób proces jest w stanie zrekontruować +plik źródłowy. Wszystkie dane z tej analizy wysyłane są do procesu odbierającego, który na ich podstawie odtwarza oryginalny plik. +Mechanizm ,,rolling checksum'' opisany powyżej jest integralną częścią algorytmu RSYNC, który sprawia, że nie ma potrzeby transferu +całych plików, jedynie zmian, które w nich nastąpiły.\cite{bib:rsync-article}\cite{bib:rsync-tech-report}\cite{bib:rsync-thesis} + +\paragraph{SFTP} +SFTP (Secure File Transfer Protocol) to bezpieczny protokół przesyłu plików wykorzystujący protokół SSH do uwierzytelnienia oraz +szyfrowania przesyłanych danych. Pierwszym krokiem do przesyłu danych jest nawiązanie połączenia SSH pomiędzy urządzeniami, następnie +serwer SFTP sprawdza dostęp do maszyny klienta poprzez SSH. Jeżeli test przebiegnie pomyślnie, nawiązywane jest połączenie SFTP, przez +które rozpoczyna się transfer plików. SFTP obsługuje transport wielu + \paragraph{} Do implementacji pierwszej części wykorzystano język Python, do zaimplementowania prostego serwera oraz klienta synchronizujących obrazy maszyn wirtualnych, QEMU wraz z KVM do uruchamiania samych maszyn oraz system operacyjny nadzorcy Ubuntu Linux w wersji 22.04 LTS. \paragraph{} -Część odpowiedzialna za +Część odpowiedzialna za obsługę systemów zarządców maszyn wirtualnych została także oparta o system operacyjny Ubuntu Linux w wersji 22.04 LTS, +serwer TFTP oraz PXE do serwowania medium instalacyjnego systemu bazowego nadzorców, cloud-init oraz Ansible do automatyzacji instalacji i konfiguracji hostów. + + \begin{itemize} \item sformułowanie problemu