Wojciech Janota 2 years ago
parent d145b2e9c5
commit e33388ce9b

@ -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}
}

Binary file not shown.

@ -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

Loading…
Cancel
Save