You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

894 lines
32 KiB
TeX

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

% !TeX spellcheck = pl_PL
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% Szablon pracy dyplomowej inzynierskiej %
% zgodny z aktualnymi przepisami SZJK %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% (c) Krzysztof Simiński, 2018-2022 %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% Najnowsza wersja szablonów jest %
% podstępna pod adresem %
% github.com/ksiminski/polsl-aei-theses %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
% Projekt LaTeXowy zapewnia odpowiednie formatowanie pracy,
% zgodnie z wymaganiami Systemu zapewniania jakości kształcenia.
% Proszę nie zmieniać ustawień formatowania (np. fontu,
% marginesów, wytłuszczeń, kursywy itd. ).
%
% Projekt można kompilować na kilka sposobów.
%
% 1. kompilacja pdfLaTeX
%
% pdflatex main
% bibtex main
% pdflatex main
% pdflatex main
%
%
% 2. kompilacja XeLaTeX
%
% Kompilatacja przy użyciu XeLaTeXa różni się tym, że na stronie
% tytułowej używany jest font Calibri. Wymaga to jego uprzedniego
% zainstalowania.
%
% xelatex main
% bibtex main
% xelatex main
% xelatex main
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% W przypadku pytań, uwag, proszę pisać na adres: %
% krzysztof.siminski(małpa)polsl.pl %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Chcemy ulepszać szablony LaTeXowe prac dyplomowych.
% Wypełniając ankietę spod poniższego adresu pomogą
% Państwo nam to zrobić. Ankieta jest całkowicie
% anonimowa. Dziękujemy!
% https://docs.google.com/forms/d/e/1FAIpQLScyllVxNKzKFHfILDfdbwC-jvT8YL0RSTFs-s27UGw9CKn-fQ/viewform?usp=sf_link
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% PERSONALIZACJA PRACY DANE PRACY %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Proszę wpisać swoje dane w poniższych definicjach.
% TODO
\newcommand{\FirstName}{Wojciech}
\newcommand{\Surname}{Janota}
\newcommand{\Supervisor}{$\langle$dr inż. Błażej Adamczyk$\rangle$} % dane promotora (bez $\langle$ i $\rangle$)
\newcommand{\Title}{System do obsługi pracowni informatycznych z wykorzystaniem maszyn wirtualnych} % tytuł pracy po polsku
\newcommand{\TitleAlt}{A system for upporting IT labs with the use of virtual machines} % thesis title in English
\newcommand{\Program}{$\langle$Informatyka$\rangle$} % kierunek studiów (bez $\langle$ i $\rangle$)
\newcommand{\Specialisation}{$\langle$Bazy Danych i Inżynieria Systemów$\rangle$} % specjalność (bez $\langle$ i $\rangle$)
\newcommand{\Id}{$\langle$290357$\rangle$} % numer albumu (bez $\langle$ i $\rangle$)
\newcommand{\Departament}{$\langle$Katedra Sieci i Systemów Komputerowych$\rangle$} % katedra promotora (bez $\langle$ i $\rangle$)
% Jeżeli został wyznaczony promotor pomocniczy lub opiekun, proszę go/ją wpisać ...
\newcommand{\Consultant}{} % dane promotora pomocniczego, opiekuna (bez $\langle$ i $\rangle$)
% ... w przeciwnym razie proszę zostawić puste miejsce jak poniżej:
%\newcommand{\Consultant}{} % brak promotowa pomocniczego / opiekuna
% koniec fragmentu do modyfikacji
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% KONIEC PERSONALIZACJI PRACY %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% PROSZĘ NIE MODYFIKOWAĆ PONIŻSZYCH USTAWIEŃ! %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass[a4paper,twoside,12pt]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath,amsfonts,amssymb,amsthm}
\usepackage[british,polish]{babel}
\usepackage{indentfirst}
\usepackage{ifxetex}
\ifxetex
\usepackage{fontspec}
\defaultfontfeatures{Mapping=tex—text} % to support TeX conventions like ``——-''
\usepackage{xunicode} % Unicode support for LaTeX character names (accents, European chars, etc)
\usepackage{xltxtra} % Extra customizations for XeLaTeX
\else
\usepackage{lmodern}
\fi
\usepackage[margin=2.5cm]{geometry}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{booktabs}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{mathtools}
\usepackage{geometry}
\usepackage{subcaption} % subfigures
\usepackage[page]{appendix} % toc,
\renewcommand{\appendixtocname}{Dodatki}
\renewcommand{\appendixpagename}{Dodatki}
\renewcommand{\appendixname}{Dodatek}
\usepackage{csquotes}
\usepackage[natbib=true,backend=bibtex]{biblatex} % kompilacja bibliografii BibTeXem
%\usepackage[natbib=true,backend=biber]{biblatex} % kompilacja bibliografii Biberem
\bibliography{biblio}
\usepackage{ifmtarg} % empty commands
\usepackage{setspace}
\onehalfspacing
\frenchspacing
%%%% TODO LIST GENERATOR %%%%%%%%%
\usepackage{color}
\definecolor{brickred} {cmyk}{0 , 0.89, 0.94, 0.28}
\makeatletter \newcommand \kslistofremarks{\section*{Uwagi} \@starttoc{rks}}
\newcommand\l@uwagas[2]
{\par\noindent \textbf{#2:} %\parbox{10cm}
{#1}\par} \makeatother
\newcommand{\ksremark}[1]{%
{%\marginpar{\textdbend}
{\color{brickred}{[#1]}}}%
\addcontentsline{rks}{uwagas}{\protect{#1}}%
}
\newcommand{\comma}{\ksremark{przecinek}}
\newcommand{\nocomma}{\ksremark{bez przecinka}}
\newcommand{\styl}{\ksremark{styl}}
\newcommand{\ortografia}{\ksremark{ortografia}}
\newcommand{\fleksja}{\ksremark{fleksja}}
\newcommand{\pauza}{\ksremark{pauza `--', nie dywiz `-'}}
\newcommand{\kolokwializm}{\ksremark{kolokwializm}}
\newcommand{\cudzyslowy}{\ksremark{,,polskie cudzysłowy''}}
%%%%%%%%%%%%%% END OF TODO LIST GENERATOR %%%%%%%%%%%
%%%%%%%%%%%% ZYWA PAGINA %%%%%%%%%%%%%%%
% brak kapitalizacji zywej paginy
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[LO]{\nouppercase{\it\rightmark}}
\fancyhead[RE]{\nouppercase{\it\leftmark}}
\fancyhead[LE,RO]{\it\thepage}
\fancypagestyle{tylkoNumeryStron}{%
\fancyhf{}
\fancyhead[LE,RO]{\it\thepage}
}
\fancypagestyle{bezNumeracji}{%
\fancyhf{}
\fancyhead[LE,RO]{}
}
\fancypagestyle{NumeryStronNazwyRozdzialow}{%
\fancyhf{}
\fancyhead[LE]{\nouppercase{\FirstName\ \Surname}}
\fancyhead[RO]{\nouppercase{\leftmark}}
\fancyfoot[CE, CO]{\thepage}
}
%%%%%%%%%%%%% OBCE WTRETY
\newcommand{\obcy}[1]{\emph{#1}}
\newcommand{\ang}[1]{{\selectlanguage{british}\obcy{#1}}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% polskie oznaczenia funkcji matematycznych
\renewcommand{\tan}{\operatorname {tg}}
\renewcommand{\log}{\operatorname {lg}}
% jeszcze jakies drobiazgi
\newcounter{stronyPozaNumeracja}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{xstring}
\usepackage{ifthen}
\newcommand{\printOpiekun}[1]{%
\StrLen{\Consultant}[\mystringlen]
\ifthenelse{\mystringlen > 0}%
{%
{\large{\bfseries OPIEKUN, PROMOTOR POMOCNICZY}\par}
{\large{\bfseries \Consultant}\par}
}%
{}
}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Proszę nie modyfikować poniższych definicji!
\author{\FirstName\ \Surname}
\newcommand{\Author}{\FirstName\ \MakeUppercase{\Surname}}
\newcommand{\Type}{PROJEKT INŻYNIERSKI}
\newcommand{\Faculty}{Wydział Automatyki, Elektroniki i Informatyki}
\newcommand{\Polsl}{Politechnika Śląska}
\newcommand{\Logo}{politechnika_sl_logo_bw_pion_pl.pdf}
\newcommand{\LeftId}{Nr albumu}
\newcommand{\LeftProgram}{Kierunek}
\newcommand{\LeftSpecialisation}{Specjalność}
\newcommand{\LeftSUPERVISOR}{PROWADZĄCY PRACĘ}
\newcommand{\LeftDEPARTMENT}{KATEDRA}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% KONIEC USTAWIEŃ %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% MOJE PAKIETY, USTAWIENIA ITD %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Tutaj proszę umieszczać swoje pakiety, makra, ustawienia itd.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% listingi i fragmentu kodu źródłowego
% pakiet: listings lub minted
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% biblioteka listings
\usepackage{listings}
\lstset{%
morekeywords={string,exception,std,vector},% słowa kluczowe rozpoznawane przez pakiet listings
language=C++,% C, Matlab, Python, SQL, TeX, XML, bash, ... vide https://www.ctan.org/pkg/listings
commentstyle=\textit,%
identifierstyle=\textsf,%
keywordstyle=\sffamily\bfseries, %\texttt, %
%captionpos=b,%
tabsize=3,%
frame=lines,%
numbers=left,%
numberstyle=\tiny,%
numbersep=5pt,%
breaklines=true,%
%morekeywords={descriptor_gaussian,descriptor,partition,fcm_possibilistic,dataset,my_exception,exception,std,vector},%
escapeinside={@*}{*@},%
}
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% pakiet minted
%\usepackage{minted}
% pakiet wymaga specjalnego kompilowania:
% pdflatex -shell-escape main.tex
% xelatex -shell-escape main.tex
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% KONIEC MOICH USTAWIEŃ %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
%\kslistofremarks
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% PROSZĘ NIE MODYFIKOWAĆ STRONY TYTUŁOWEJ! %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%% STRONA TYTUŁOWA %%%%%%%%%%%%%%%%%%%
\pagestyle{empty}
{
\newgeometry{top=1.5cm,%
bottom=2.5cm,%
left=3cm,
right=2.5cm}
\ifxetex
\begingroup
\setsansfont{Calibri}
\fi
\sffamily
\begin{center}
\includegraphics[width=50mm]{\Logo}
{\Large\bfseries\Type\par}
\vfill \vfill
{\large\Title\par}
\vfill
{\large\bfseries\Author\par}
{\normalsize\bfseries \LeftId: \Id}
\vfill
{\large{\bfseries \LeftProgram:} \Program\par}
{\large{\bfseries \LeftSpecialisation:} \Specialisation\par}
\vfill \vfill \vfill \vfill \vfill \vfill \vfill
{\large{\bfseries \LeftSUPERVISOR}\par}
{\large{\bfseries \Supervisor}\par}
{\large{\bfseries \LeftDEPARTMENT\ \Departament} \par}
{\large{\bfseries \Faculty}\par}
\vfill \vfill
\printOpiekun{\Consultant}
\vfill \vfill
{\large\bfseries Gliwice \the\year}
\end{center}
\ifxetex
\endgroup
\fi
\restoregeometry
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% KONIEC STRONY TYTUŁOWEJ %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\cleardoublepage
\rmfamily\normalfont
\pagestyle{empty}
%%% No to zaczynamy pisać pracę :-) %%%%
% TODO
\subsubsection*{Tytuł pracy}
\Title
\subsubsection*{Streszczenie}
Tematem pracy jest stworzenie systemu do zarządzania pracowniami informatycznymi
używając możliwości oferowanych przez maszyny wirtualne.
Proponowana solucja umożliwia zdalne, zautomatyzowane przygotowanie pracowni informatycznej do zajęć lekcyjnych,
minimalizując wymaganą liczbę manualnych kroków.
\subsubsection*{Słowa kluczowe}
automatyzacja,PXE,Python,Ansible,Linux,QEMU
\subsubsection*{Thesis title}
\begin{otherlanguage}{british}
\TitleAlt
\end{otherlanguage}
\subsubsection*{Abstract}
\begin{otherlanguage}{british}
Topic of this thesis is a automated system for managing IT labs using virtual machines. Solution allows
for remote, automated preparation of the lab for classes, minimizing number of manual steps required.
\end{otherlanguage}
\subsubsection*{Key words}
\begin{otherlanguage}{british}
automation,PXE,Python,Ansible,Linux,QEMU
\end{otherlanguage}
%%%%%%%%%%%%%%%%%% SPIS TRESCI %%%%%%%%%%%%%%%%%%%%%%
%\pagenumbering{Roman}
\thispagestyle{empty}
\tableofcontents
\thispagestyle{empty}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\setcounter{stronyPozaNumeracja}{\value{page}}
\mainmatter
\pagestyle{empty}
\cleardoublepage
\pagestyle{NumeryStronNazwyRozdzialow}
%%%%%%%%%%%%%% wlasciwa tresc pracy %%%%%%%%%%%%%%%%%
% TODO
\chapter{Wstęp}
\label{ch:wstep}
\paragraph{Wprowadzenie}
Jednym z wielu problemów, z jakimi musi zmierzyć się administrator systemów (na przykład w placówce edukacyjnej),
jest konfiguracja i zarządzanie flotą wielu maszyn, użytkowanych często przez osoby nietechniczne. Powstało wiele
narzędzi służących do ułatwienia tego zadania, wśród których zwrócono uwagę na kilka przykładów:
\begin{itemize}
\item Microsoft Active Domain jako system do zarządzania już skonfigurowanymi maszynami opartymi o system Microsoft Windows
\item Ansible jako system do zarządzania maszynami opartymi o systemy z rodziny UNIX
\item Ubuntu Landscape jako system służący do zarządzania flotą maszyn opartych o system Ubuntu Linux
\item Microsoft Windows Unattended Install, czyli narzędzie służące do automatycznego konfigurowania instalacji systemu Microsoft Windows
\end{itemize}
\paragraph{}
Każde z tych narzędzi pozwala na zautomatyzowanie jednego z podstawowych kroków w procesie zarządzania i utrzymania
pracowni informatycznej: instalacji systemu/systemów operacyjnych, konfiguracji systemu, aktualizacji i utrzymania systemu.
Pewne przypadki użycia wymagają jednak pewnych cech, które bardzo trudno osiągnąć używając powyższych narzędzi.
Przykładem takiej sytuacji jest resetowanie urządzeń po każdych zajęciach lekcyjnych, zapewniając przy tym, że
każde środowisko na którym pracują uczniowie/studenci jest identyczne. W takiej sytuacji najczęściej wykorzystuje
się maszyny wirtualne, które po zakończeniu zajęć są przywracane do migawki, lub ich obraz dysku
jest podmieniany na oryginalny. Wymaga to jednak kilku manualnych kroków, które należy wykonać pomiędzy zajęciami.
\paragraph{}
Proponowane rozwiązanie automatyzuje proces dystrybucji obrazów maszyn wirtualnych, instalacji oraz konfiguracji
systemu operacyjnego, pod kontrolą którego będą pracować maszyny wirtualne. Celem tej pracy było:
\begin{itemize}
\item napisanie programu serwera obrazów maszyn wirtualnych, którego zadaniem jest ich rejestrowanie, przypisywanie oraz dystrybuowanie
\item stworzenie klienta synchronizującego stan maszyny klienckiej ze stanem obecnym na serwerze, pobierającego obrazy, wyświetlającego ekran wyboru systemy do uruchomienia oraz obsługującego ich uruchmianie poprzez mechanizm QEMU wraz z KVM
\item przygotowanie konfiguracji dla serwera opartego o system operacyjny Linux:
\begin{itemize}
\item do automatycznego instalowania systemu nadzorcy dla maszyn klienckich
\item do obsługi sieciowej podłączonych maszyn (przydzielanie adresów IP, wskazywanie na serwer konfiguracji)
\item do zarządzania maszynami klienckimi
\end{itemize}
\item wdrożenie rozwiązania w symulowanym środowisku testowym
\end{itemize}
\paragraph{}
Prezentowana praca podzielona została na kilka rozdziałów:
\begin{itemize}
\item analiza tematu: przybliżenie wykorzystanych technologii, ich charakterystyka, historia i zastosowania
\item wymagania i narzędzia: jakie narzędzia zostały wykorzystane do rozwiązania problemu, ich opis oraz uzasadnienie wyboru
\item specyfikacja zewnętrzna: specyfikacja opisująca całe rozwiązanie z perspektywy użytkowników końcowych, z wyszczególnionymi elementami składowymi rozwiązania
\item specyfikacja wewnętrzna: specyfikacja opisująca techniczne aspekty rozwiązania, z perspektywy osoby technicznej zaznamiającej się z kodem źródłowym oprogramowania
\item weryfikacja i walidacja: wyniki testów przeprowadzonych na testowym środowisku wdrożeniowym, ich analiza
\item podsumowanie i wnioski: prezentacja wniosków wynikających z analizy wyników testów, krytyka proponowanego rozwiązania i propozycje poprawek
\end{itemize}
\paragraph{Wkład pracy autora}
Przedmiotem pracy było napisanie aplikacji kontrolera floty urządzeń, aplikacji klienta zarządzającej systemem nadzorcy,
konfiguracji fizycznego serwera oraz samo jego skonfigurowanie. Wszystkie te zadania zostały zrealizowane, wraz z zakupem maszyny w roli serwera oraz
skonfigurowaniem domowej sieci lokalnej do obsługi rozwiązania.
% \begin{itemize}
% \item wprowadzenie w problem/zagadnienie
% \item osadzenie problemu w dziedzinie
% \item cel pracy
% \item zakres pracy
% \item zwięzła charakterystyka rozdziałów
% \item jednoznaczne określenie wkładu autora, w przypadku prac wieloosobowych tabela z autorstwem poszczególnych elementów pracy
% \end{itemize}
% TODO
\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 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
\item osadzenie tematu w kontekście aktualnego stanu wiedzy (\ang{state of the art}) o poruszanym problemie
\item studia literaturowe \cite{bib:artykul,bib:ksiazka,bib:konferencja,bib:internet} - opis znanych rozwiązań (także opisanych naukowo, jeżeli problem jest poruszany w publikacjach naukowych), algorytmów,
\end{itemize}
Wzory
\begin{align}
y = \frac{\partial x}{\partial t}
\end{align}
jak i pojedyncze symbole $x$ i $y$ składa się w trybie matematycznym.
% TODO
\chapter{Wymagania i narzędzia}
\label{ch:wymagania-i-narzedzia}
\begin{itemize}
\item wymagania funkcjonalne i niefunkcjonalne
\item przypadki użycia (diagramy UML) -- dla prac, w których mają zastosowanie
\item opis narzędzi, metod eksperymentalnych, metod modelowania itp.
\item metodyka pracy nad projektowaniem i implementacją -- dla prac, w których ma to zastosowanie
\end{itemize}
% TODO
\chapter{[Właściwy dla kierunku -- np. Specyfikacja zewnętrzna]}
\label{ch:04}
Jeśli „Specyfikacja zewnętrzna”:
\begin{itemize}
\item wymagania sprzętowe i programowe
\item sposób instalacji
\item sposób aktywacji
\item kategorie użytkowników
\item sposób obsługi
\item administracja systemem
\item kwestie bezpieczeństwa
\item przykład działania
\item scenariusze korzystania z systemu (ilustrowane zrzutami z ekranu lub generowanymi dokumentami)
\end{itemize}
%%%%%%%%%%%%%%%%%%%%%
%% RYSUNEK Z PLIKU
%
%\begin{figure}
%\centering
%\includegraphics[width=0.5\textwidth]{./politechnika_sl_logo_bw_pion_pl.pdf}
%\caption{Podpis rysunku zawsze pod rysunkiem.}
%\label{fig:etykieta-rysunku}
%\end{figure}
%Rys. \ref{fig:etykieta-rysunku} przestawia …
%%%%%%%%%%%%%%%%%%%%%
%
%%%%%%%%%%%%%%%%%%%%%
%% WIELE RYSUNKÓW
%
%\begin{figure}
%\centering
%\begin{subfigure}{0.4\textwidth}
% \includegraphics[width=\textwidth]{./politechnika_sl_logo_bw_pion_pl.pdf}
% \caption{Lewy górny rysunek.}
% \label{fig:lewy-gorny}
%\end{subfigure}
%\hfill
%\begin{subfigure}{0.4\textwidth}
% \includegraphics[width=\textwidth]{./politechnika_sl_logo_bw_pion_pl.pdf}
% \caption{Prawy górny rysunek.}
% \label{fig:prawy-gorny}
%\end{subfigure}
%
%\begin{subfigure}{0.4\textwidth}
% \includegraphics[width=\textwidth]{./politechnika_sl_logo_bw_pion_pl.pdf}
% \caption{Lewy dolny rysunek.}
% \label{fig:lewy-dolny}
%\end{subfigure}
%\hfill
%\begin{subfigure}{0.4\textwidth}
% \includegraphics[width=\textwidth]{./politechnika_sl_logo_bw_pion_pl.pdf}
% \caption{Prawy dolny rysunek.}
% \label{fig:prawy-dolny}
%\end{subfigure}
%
%\caption{Wspólny podpis kilku rysunków.}
%\label{fig:wiele-rysunkow}
%\end{figure}
%Rys. \ref{fig:wiele-rysunkow} przestawia wiele ważnych informacji, np. rys. \ref{fig:prawy-gorny} jest na prawo u góry.
%%%%%%%%%%%%%%%%%%%%%
\begin{figure}
\centering
\begin{tikzpicture}
\begin{axis}[
y tick label style={
/pgf/number format/.cd,
fixed, % po zakomentowaniu os rzednych jest indeksowana wykladniczo
fixed zerofill, % 1.0 zamiast 1
precision=1,
/tikz/.cd
},
x tick label style={
/pgf/number format/.cd,
fixed,
fixed zerofill,
precision=2,
/tikz/.cd
}
]
\addplot [domain=0.0:0.1] {rnd};
\end{axis}
\end{tikzpicture}
\caption{Podpis rysunku po rysunkiem.}
\label{fig:2}
\end{figure}
% TODO
\chapter{[Właściwy dla kierunku -- np. Specyfikacja wewnętrzna]}
\label{ch:05}
Jeśli „Specyfikacja wewnętrzna”:
\begin{itemize}
\item przedstawienie idei
\item architektura systemu
\item opis struktur danych (i organizacji baz danych)
\item komponenty, moduły, biblioteki, przegląd ważniejszych klas (jeśli występują)
\item przegląd ważniejszych algorytmów (jeśli występują)
\item szczegóły implementacji wybranych fragmentów, zastosowane wzorce projektowe
\item diagramy UML
\end{itemize}
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% Pakiet minted wymaga odkomentowania w pliku config/settings.tex %
% importu pakietu minted: \usepackage{minted} %
% i specjalnego kompilowania: %
% pdflatex -shell-escape praca %
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
Krótka wstawka kodu w linii tekstu jest możliwa, np. \lstinline|int a;| (biblioteka \texttt{listings})% lub \mintinline{C++}|int a;| (biblioteka \texttt{minted})
.
Dłuższe fragmenty lepiej jest umieszczać jako rysunek, np. kod na rys \ref{fig:pseudokod:listings}% i rys. \ref{fig:pseudokod:minted}
, a naprawdę długie fragmenty w załączniku.
\begin{figure}
\centering
\begin{lstlisting}
class test : public basic
{
public:
test (int a);
friend std::ostream operator<<(std::ostream & s,
const test & t);
protected:
int _a;
};
\end{lstlisting}
\caption{Pseudokod w \texttt{listings}.}
\label{fig:pseudokod:listings}
\end{figure}
%\begin{figure}
%\centering
%\begin{minted}[linenos,frame=lines]{c++}
%class test : public basic
%{
% public:
% test (int a);
% friend std::ostream operator<<(std::ostream & s,
% const test & t);
% protected:
% int _a;
%
%};
%\end{minted}
%\caption{Pseudokod w \texttt{minted}.}
%\label{fig:pseudokod:minted}
%\end{figure}
% TODO
\chapter{Weryfikacja i walidacja}
\label{ch:06}
\begin{itemize}
\item sposób testowania w ramach pracy (np. odniesienie do modelu V)
\item organizacja eksperymentów
\item przypadki testowe zakres testowania (pełny/niepełny)
\item wykryte i usunięte błędy
\item opcjonalnie wyniki badań eksperymentalnych
\end{itemize}
\begin{table}
\centering
\caption{Nagłówek tabeli jest nad tabelą.}
\label{id:tab:wyniki}
\begin{tabular}{rrrrrrrr}
\toprule
& \multicolumn{7}{c}{metoda} \\
\cmidrule{2-8}
& & & \multicolumn{3}{c}{alg. 3} & \multicolumn{2}{c}{alg. 4, $\gamma = 2$} \\
\cmidrule(r){4-6}\cmidrule(r){7-8}
$\zeta$ & alg. 1 & alg. 2 & $\alpha= 1.5$ & $\alpha= 2$ & $\alpha= 3$ & $\beta = 0.1$ & $\beta = -0.1$ \\
\midrule
0 & 8.3250 & 1.45305 & 7.5791 & 14.8517 & 20.0028 & 1.16396 & 1.1365 \\
5 & 0.6111 & 2.27126 & 6.9952 & 13.8560 & 18.6064 & 1.18659 & 1.1630 \\
10 & 11.6126 & 2.69218 & 6.2520 & 12.5202 & 16.8278 & 1.23180 & 1.2045 \\
15 & 0.5665 & 2.95046 & 5.7753 & 11.4588 & 15.4837 & 1.25131 & 1.2614 \\
20 & 15.8728 & 3.07225 & 5.3071 & 10.3935 & 13.8738 & 1.25307 & 1.2217 \\
25 & 0.9791 & 3.19034 & 5.4575 & 9.9533 & 13.0721 & 1.27104 & 1.2640 \\
30 & 2.0228 & 3.27474 & 5.7461 & 9.7164 & 12.2637 & 1.33404 & 1.3209 \\
35 & 13.4210 & 3.36086 & 6.6735 & 10.0442 & 12.0270 & 1.35385 & 1.3059 \\
40 & 13.2226 & 3.36420 & 7.7248 & 10.4495 & 12.0379 & 1.34919 & 1.2768 \\
45 & 12.8445 & 3.47436 & 8.5539 & 10.8552 & 12.2773 & 1.42303 & 1.4362 \\
50 & 12.9245 & 3.58228 & 9.2702 & 11.2183 & 12.3990 & 1.40922 & 1.3724 \\
\bottomrule
\end{tabular}
\end{table}
% TODO
\chapter{Podsumowanie i wnioski}
\begin{itemize}
\item uzyskane wyniki w świetle postawionych celów i zdefiniowanych wyżej wymagań
\item kierunki ewentualnych danych prac (rozbudowa funkcjonalna …)
\item problemy napotkane w trakcie pracy
\end{itemize}
\backmatter
%\bibliographystyle{plplain} % bibtex
%\bibliography{biblio} % bibtex
\printbibliography % biblatex
\addcontentsline{toc}{chapter}{Bibliografia}
\begin{appendices}
% TODO
\chapter{Spis skrótów i symboli}
\begin{itemize}
\item[DNA] kwas deoksyrybonukleinowy (ang. \ang{deoxyribonucleic acid})
\item[MVC] model -- widok -- kontroler (ang. \ang{model--view--controller})
\item[$N$] liczebność zbioru danych
\item[$\mu$] stopnień przyleżności do zbioru
\item[$\mathbb{E}$] zbiór krawędzi grafu
\item[$\mathcal{L}$] transformata Laplace'a
\end{itemize}
% TODO
\chapter{Źródła}
Jeżeli w pracy konieczne jest umieszczenie długich fragmentów kodu źródłowego, należy je przenieść w to miejsce.
\begin{lstlisting}
if (_nClusters < 1)
throw std::string ("unknown number of clusters");
if (_nIterations < 1 and _epsilon < 0)
throw std::string ("You should set a maximal number of iteration or minimal difference -- epsilon.");
if (_nIterations > 0 and _epsilon > 0)
throw std::string ("Both number of iterations and minimal epsilon set -- you should set either number of iterations or minimal epsilon.");
\end{lstlisting}
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% Pakiet minted wymaga odkomentowania w pliku config/settings.tex %
% importu pakietu minted: \usepackage{minted} %
% i specjalnego kompilowania: %
% pdflatex -shell-escape praca %
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
%\begin{minted}[linenos,breaklines,frame=lines]{c++}
%if (_nClusters < 1)
% throw std::string ("unknown number of clusters");
%if (_nIterations < 1 and _epsilon < 0)
% throw std::string ("You should set a maximal number of iteration or minimal difference -- epsilon.");
%if (_nIterations > 0 and _epsilon > 0)
% throw std::string ("Both number of iterations and minimal epsilon set -- you should set either number of iterations or minimal epsilon.");
%\end{minted}
% TODO
\chapter{Lista dodatkowych plików, uzupełniających tekst pracy}
W systemie do pracy dołączono dodatkowe pliki zawierające:
\begin{itemize}
\item źródła programu,
\item dane testowe,
\item film pokazujący działanie opracowanego oprogramowania lub zaprojektowanego i~wykonanego urządzenia,
\item itp.
\end{itemize}
\listoffigures
\addcontentsline{toc}{chapter}{Spis rysunków}
\listoftables
\addcontentsline{toc}{chapter}{Spis tabel}
\end{appendices}
\end{document}
%% Finis coronat opus.