Other tasks: 1, 2, 3, 4, 5, 6, 7.

General notes

Use your GitLab repository to submit your solutions. Please, use exact filenames as specified in the task name.

Please, respect language requirements of individual tasks. For Python, we expect Python 3 as the default (if you really need to use Python 2, use a proper shebang). For shell scripts, we expect that you will use Bash although none of the tasks requires any use of Bashisms for an efficient solution.

Deadline for this set of tasks is 2020-07-26 AoE, it is required to get at least 3 points from this group.

Tasks description

07/make/Vagrantfile (3 points)

Setup a Vagrantfile that prepares a virtual machine that on creation:

  1. Clones the teaching/nswi177/2020-summer/upstream/examples/ repository.
  2. Runs make in the make subdirectory.
  3. Starts a webserver serving the generated files (from out directory).

Vagrant should forward web server port 80 to host as port 8888.

To clone the repository, use HTTPS protocol with username nswi177-task-07 and password stsW1y2pTRRSmhbreTwa.

We expect that you would copy the generated files somewhere into /var/www.

07/failover/Vagrantfile (5 points)

Prepare a Vagrantfile that sets up a small network with a simplified failover capability.

Machine entrypoint will be connected to three different private networks, each of the private network will have one other machine in it, called worker1 to worker3.

On each of the workers, install a web server and provide your own index.html and also add second.html.

On entrypoint, create a failover.sh script (copy it into /usr/local/bin) that fetches page given as argument from one of the servers.

The script will pick one of the servers randomly, check if the response is received within 5 seconds and if not, try contacting another server(s). If one of the servers responds, the response is printed on stdout (i.e. we expect you will run curl underneath and copy its output). When all servers are down, the script prints Service is down. to standard error and exits with non-zero exit code.

Example use can look like this:

$ failover.sh /index.html
<html>
<head>
...


# Unknown page
$ failover.sh /nonexistent.html
<html>
<head>
<title>404 ...</title>
<!-- or whatever is the response of the web server -->

# All workers are down.
$ failover.sh /second.html
Service is down.

07/ws.yml (2 points)

Find out on which (non-standard) port is listening a web server on unixadmin.ms.mff.cuni.cz.

What kind (manufacturer) of web server it is?

Store the answer in a YAML file with dictionary containing two keys: port and manufacturer with the correct answer.

UPDATE: check that it is really a web server (i.e. you shall see a HTML page in your browser). Also check that it is not a temporary web server of someone who is just running excersises from the last lab. And final hint: it is not Apache.

Ostatní úlohy: 1, 2, 3, 4, 5, 6, 7.

Obecné požadavky

Úkoly odevzdávejte do Vašeho GitLabového repozitáře. Prosím, dodržujte přesné pojmenování souborů jak je uvedeno u názvu úkolu.

Prosím, dodržujte požadovaný jazyk jednotlivých úloh. Pro úlohy v Pythonu očekáváme použití Pythonu verze 3 (pokud doopravdy potřebujete verzi 2, nezapomeňte na správný shebang). Pro shellové skripty, očekáváme, že budete používat Bash. Nicméně, žádný z úkolů nevyžaduje použití Bashismu pro efektivní řešení.

Deadline pro tuto sadu úloh je 2020-07-26 KnZ, pro úspěšné splnění potřebujete získat alespoň 3 bodů.

Úlohy

07/make/Vagrantfile (3 body)

Nastavte Vagrantfile, který připraví virtuální stroj, který při vytvoření:

  1. Naklonuje repozitář teaching/nswi177/2020-summer/upstream/examples/.
  2. Spustí make v podadresáři make.
  3. A spustí webový server, který bude nabízet vygenerované soubory (z out adresáře).

Vagrant bude pak forwardovat port 80 webového serveru na port 8888 hostitele.

Pro naklonování repozitáře využijte HTTPS protocol s uživatelským jménem nswi177-task-07 a heslem stsW1y2pTRRSmhbreTwa.

Předpokládáme, že vygenerované soubory zkopírujete někam do /var/www.

07/failover/Vagrantfile (5 bodů)

Připravte Vagrantfile, který nastaví malou síť se zjednodušenou možností pro tzv. failover.

Stroj entrypoint bude připojen do tří různých privátních sítí, každá z těchto sítí bude obsahovat ještě jeden další stroj. Tyto stroje budou pojmenované worker1worker3.

Na každém z workerů nainstalujte webový server, který bude poskytovat Váš vlastní index.html a také second.html.

Na stroji entrypoint vytvořte skript failover.sh (nakopírujte ho do /usr/local/bin) který stáhne stránku zadanou jako argument z jednoho ze serverů.

Skript si vybere jeden ze serverů náhodně, zkontroluje, že obdržel odpověď během 5 vteřin a pokud ne, zkusí kontaktovat další server(y). Jakmile jeden ze serverů odpoví, odpověď bude vytištěna na stdout (tj. předpokládáme, že skript bude spouštět curl a zkopíruje jeho výstup). Pokud budou všechny servery nedostupné, skript vytiskne Service is down. na stderr a ukončí se s nenulovým návratovým kódem.

Ukázkový příklad použití může vypadat třeba takto:

$ failover.sh /index.html
<html>
<head>
...


# Neznama stranka
$ failover.sh /nonexistent.html
<html>
<head>
<title>404 ...</title>
<!-- nebo cokoliv, co posle web server pri nenalezene strance. -->

# Zadny z workeru neodpovida
$ failover.sh /second.html
Service is down.

07/ws.yml (2 body)

Zjistěte, na kterém (nestandardním) portu poslouchá webový server na stroji unixadmin.ms.mff.cuni.cz.

Co za webový server (tj. typ či výrobce) to je?

Odpověď uložte do YAML souboru, kde bude slovník s klíči port a manufacturer; hodnoty pak budou vlastní odpovědi.

AKTUALIZACE: ověřte, že jde skutečně o webový server (tj. uvidíte běžnou HTML stránku v prohlížeči). Zároveň zkontrolujte, že nejde o dočasný webový server někoho, kdo si právě zkouší pouštět úlohy z posledního cvičení. A poslední nápověda: Apache to není.