# Archiver

Auto-generated book for Archiver

# ArchiverServiceAgreement

Az [NIIFI Archiver](https://archiver.niif.hu) szolgáltatás célja, hogy intézmények számára hosszú távú, szalagos adattárolás lehetőségét biztositsa.

## Föderatív azonosításnál megkövetelt adatok

A  szolgáltatás használata céljából az alábbi személyes adatok megadása szükséges:

* *eduPersonPrincipalName* a felhasználó egyedi azonosításához
	* ezzel azonosítja a felhasználót
	* azért van szükség globális azonosítóra, mert a [https://webform.niif.hu](https://webform.niif.hu) oldalon feladott szalag-igénylésben használt identitással össze kell tudni kapcsolni a munkamenetet
* *e-mail címre* a portálmotornak van szüksége. Használatával az üzemeltetők szükség esetén értesíteni tudják a felhasználókat a szolgáltatással kapcsolatos problémákról és eseményekről. Az e-mail címet kizárólag a szalagos archiválás szolgáltatáshoz szorosan kapcsolódó módon használjuk fel, harmadik félnek nem adjuk ki.

A szolgáltatás használata során a felhasználó profilja további adatokkal bővülhet, azonban ezek kizárólag a szolgáltatással összefüggő adatok lehetnek. A föderáción keresztül megkapott adatokat, ill. a felhasználó profiljához tartozó adatokat az NIIF Intézet védett módon tárolja, harmadik félnek nem adja ki.

A szolgáltatás használata kizárólag jelen Adatvédelmi Nyilatkozat elfogadása után lehetséges.

### Adatok módosíthatósága

A felhasználó a föderatív azonosítás során átadott adatokat nem módosíthatja.

### Adattárolás vége

Az NIIF Intézet a profiladatokat a szolgáltatás életciklusának végéig tárolja. A felhasználó rendelkezhet a személyes adatainak és profiljának törléséről. Ezzel egyidőben a hozzá rendelt szalagokhoz való jogosultságait is elveszti.

### Kapcsolat

Az adatok kezelője az **NIIF Intézet**:

* Cím: 1132 Budapest, Victor Hugo utca 18-22, Magyarország
* Tel: +36 1 4503060
* E-mail: archiver _AT__ niif.hu

Az adatkezeléssel kapcsolatos kérdéseivel a fenti e-mail címen elérhető szakemberekhez lehet fordulni.

## Szalagokon tárolt adatokhoz való hozzáférés

### Meghatározások

**Szalag Tulajdonos**</br>

* A szalagegységek és meghajtók tulajdonosa az NIIF Intézet. A szalagokhoz fizikai hozzáférés a felhasználók számára nincs lehetőség.
**Szalag Adminisztrátor, ill. Felhasználó**</br>
* Minden szalaghoz tartozik egy vagy több adminisztrátor, aki a szalagokon levő adatokat írhatja és olvashatja. Az NIIF Archiver szolgáltatás szempontjából a Felhasználó a Szalag Adminisztrátor.

**Adat Tulajdonos**</br>

* Az, aki az adatok adminisztrátorának személyéről rendelkezhet. Az NIIF Archiver szolgáltatásában az Adatok Tulajdonosa az Adat Adminisztrátort azonosító intézmény.

### Személyes adatok kezelése

Amennyiben a szalagokon tárolt adatok személyes adatokat tartalmaznak, az archiválás előtt a Szalag Adminisztrátorának gondoskodnia kell arról, hogy a személyes adatok jogszerűen tárolhatók legyenek az NIIF Intézet infrastruktúráján.

A szalagokon esetlegesen tárolt személyes adatok kezelője a Szalag Adminisztrátora. A Szalag Tulajdonosa adatfeldolgozónak számít. Az adatok esetleges titkosításért a Szalag Adminisztrátora felelős.

### Hozzáférés biztosítása

A szalagokon levő adatokról kizárólag a hozzá rendelt Szalag Adminisztrátora rendelkezhet. Egy szalaghoz tartozó Adminisztrátort az NIIF Intézet kizárólag az alábbi esetekben változtathatja meg (ezáltal hozzáférést biztosítva a szalagon tárolható adatokhoz):

1. amennyiben ezt a Szalag Adminisztrátor azonosított módon kéri elektronikus azonosítás után vagy teljes bizonyító erejű magánokiratban;
1. az Adat Tulajdonos intézmény képviseletre jogosult vezetője cégszerűen aláírt írásos igénylésben jelzi;
1. bíróság jogerős határozata alapján.

## Felelősség elhárítása

A felhasználó tudomásul veszi, hogy az NIIF Intézet nem vállal felelősséget a szolgáltatás használatából fakadó károkért, így különösen:

* a szalagok fizikai meghibásodásából fakadó adatvesztésért;
* a metaadatok sérüléséből fakadó adatvesztésért;
* a szalagokon található adatokhoz való illetéktelen hozzáférésből eredő károkért;
* a szolgáltatás szüneteltetéséből vagy megszüntetésből fakadó károkért.

Az adatok tartalmát, ill. a személyes adatkezelés jogosultságát az NIIF Intézet nem vizsgálja. Az adatok tárolásának jogszerűségéért kizárólag a Szalag Adminisztrátora a felelős. A Szalag Tulajdonosa nem tehető felelőssé a Szalag Adminisztrátora által elkövetett esetleges visszaélésekért.

# ArchiveOverHTTP

Az archiválás célja az, hogy olyan adatokat mentsünk le, amelyre valószínűleg sohasem lesz szükség, de ha mégis, akkor nagy biztonsággal helyreállítható legyen.

Ez a leírás azt feltételezi, hogy kevés file-t kell szalagra írni. Amennyiben sok állományról van szó, akkor az alábbi lehetőségek közül választhatunk:

* `tar` (zip, rar stb.) segítségével egy file-t csinálunk belőle
	* Ha kevés a helyünk lokálisan, akkor használjuk a `tar --remove-files` opcióját arra, hogy az archiválandó adatokat "belemozgassuk" az archívumba, pl így:
	* `tar -c --remove-files -f cgp.tar cgp`
* kihasználjuk a rekurzív archiválás lehetőségét (DAV vagy SFTP használatával)


## Kiszolgálás Apache webszerverrel

Az Apache nem hatékony nagy statikus állományok kiszolgálására, mivel ehhez nagyon sok memóriát foglal(hat). Erre megoldás a [mod_xsendfile](https://tn123.org/mod_xsendfile/) használata, amellyel egy egyszerű script segítségével hatékonyan szolgálhatjuk ki a file-okat, és tetszés szerint autorizálhatunk. Az autorizáció különösen fontos akkor, ha érzékeny adatokat akarunk menteni, hiszen nem szeretnénk, ha egy publikus webszerverről bárki le tudná azokat tölteni.

### Webszerver konfiguráció

Tetszőleges működő http(s) webszerver konfig megteszi. Az alábbi két sort szúrjuk be:

	XSendFilePath /path/to/archive/
	XSendFile on

Fontos, hogy az `XSendFilePath` a webszerver *DocumentRoot*-ján kívül legyen, ellenkező esetben xsendfile-on kívüli módon is elérhetőek lehetnek az anyagok.

### Kiszolgáló PHP script

```php

<?php

  # Place the IP addresses in this array that are authorized to download the
  # archives
  $trusted_networks = array(
    "193.225.50.212",
    #TODO IPv6!
  );

  # You should not allow directory listing, and you probably want to be explicit
  # about what you serve through this script
  $served_files = array(
    "proba.txt",
    "cgp-metadata.txt",
    "cgp.tar",
    "szfe-orphaned_20130318.tar",
    "maildirs2-orphaned_20130318.tar",
  );

  # The directory where the archives reside
  $dir = "/srv/maildirs/archive";

  $ip = $_SERVER['REMOTE_ADDR'];
  $file = $_GET['file'];

  if (!$file) {
    echo "Missing 'file' parameter";
    exit(1);
  }
  if (!preg_match('/^[a-z0-9A-Z\-_]+\.?[a-z0-9A-Z\-]*$/',$file)) {
    echo "Invalid 'file' parameter";
    exit(1);
  }

  if (in_array ($ip, $trusted_networks)) {
    if (in_array ($file, $served_files)) {
      header("Content-Type: application/octet-stream");
      header("Content-Disposition: attachment; filename=\"$file\"");
      header("X-Sendfile: $dir/$file");
      exit(0);
    } else {
      echo "Sorry, this file can not be served!";
      exit(1);
    }
  } else {
    echo "Your IP ($ip) is not authorized!\n";
    exit(1);
  }

exit(0);
```


A scriptet nevezzük el mondjuk `archiver-get.php`-nek. A programhoz való hozzáférést az Apache további eszközeivel is szűkíthetjük (Basic Auth, IP korlátozás stb), de ezek már redundáns védelmet nyújtanak.

### Tiszta URL-ek

Ugyan az archiver támogatja a query stringek (`?file=foobar.txt`) használatát, azonban ez kényelmetlen, mivel át kell nevezni a végeredményt ahhoz, hogy értelmes nevet kapjunk. Ezért mindenképpen érdemes egy egyszerű `mod_rewrite` trükköt használni:

	<IfModule mod_rewrite.c>
	  RewriteEngine on
	  RewriteRule ^(.*)$ /archiver-get.php?file=$1 [L]
	</IfModule>

A .htaccess file-t én az archiver könyvtárban helyeztem el, ezután az URL így nézett ki:

*  [https://szerverneve.niif.hu/archiver/proba.txt](https://szerverneve.niif.hu/archiver/proba.txt)

### Debian megjegyzés

Nagy file-ok kiszolgálására a `mod_xsendfile`-nak legalábba 0.11-es verzióját kell használnunk. Ez (a szöveg írása idején) nincs a Debian Squeeze-ben, azonban minden további nélkül használhatjuk itt is a wheezy-s bináris deb csomagot.

# ArchiveOverFilesender

Az archiver aszinkron módon működik, így közvetlenül a böngészőből nem tölthetünk fel archiválandó file-okat, azonban van arra lehetőség, hogy a **[Filesender](https://filesender.niif.hu/)** szolgáltatását használva a desktop gépünkről archiváljunk adatokat.

Az ötlet nagyon egyszerű:

1. Feltöltjük az állományt a filesenderre
1. Saját magunknak elküldjük a file-t
1. Levélben megkapjuk a file letöltési URL-jét. Ezt kimásoljuk.
1. Az archiváláshoz a '?' karakter elé be kell szúrni: download.php.
1. A mentéshez mindenképpen file nevet kell megadni.

![Image](https://s3.public.doc.einfra.hu/public-doc-einfra/uploads/images/gallery/2025-08/filesender2.png)

# ArchiveFileMod

Az archiválandó fájl- és könyvtárnevek nem tartalmazhatnak szóköz karaktert, ezért azokat szükséges megfelő formátumra hozni a következő két parancs futtatásával:

```bash
find -name "* *" -type d | rename 's/ /_/g' # do the directories first
find -name "* *" -type f | rename 's/ /_/g'
```

Az első parancsot addig kell újra és újra futtatni, amíg hiba nélkül le nem fut!

# Archiver

# Archiver

Üdvözöljük A NIIF Archiver WIKI oldalán!
</br>
</br>
Az Archiver az Intézet tagintézményeinek létrehozott szolgáltatása, és archiválási lehetőséget biztosít adattároló szalagokra. További információt a GYIK menüben kaphat a szolgáltatásról.
</br>
Figyelem! A mentett adatokért az Intézet semmilyen felelősséget nem vállal.
</br>
Az Archiver a [https://archiver.niif.hu/](https://archiver.niif.hu/) oldalon érhető el. Hozzáférést igényelni [az Intézet szolgáltatásigénylő oldalán](https://webform.niif.hu/content/archivalas-magnesszalagra) lehet.

## Tippek, trükkök

* [Fájl- és könyvtárnevek megfelelő formára hozása](https://help.edu.hu/books/archiver/page/archivefilemod)
* [Archiválás HTTP-n keresztül](https://help.edu.hu/books/archiver/page/archiveoverhttp)
* [Archiválás Filesenderen keresztül](https://help.edu.hu/books/archiver/page/archiveoverfilesender) (pl. desktop gépről)
* [Archiválás használata API-n keresztül](https://help.edu.hu/books/archiver/page/archiveovercli)

----

* [Archiver adatvédelmi nyilatkozat](https://help.edu.hu/books/archiver/page/archiverserviceagreement)
* [Archiver felhasználói útmutató (külső link)](https://archiver.niif.hu/node/4)

# ArchiveOverCLI

# ArchiveOverCLI

Lehetőség van az archiválást nem csak a webes felületen keresztül használni. Erre a célra ki lett alakítva egy RESTAPI interfész, amin keresztül elérhetőek a szükséges funkciók.

Az API használatát segédletekkel megtalálhatod [https://api.archiver.niif.hu/?help](https://api.archiver.niif.hu/?help) oldalon.

A használathoz szükséges *token* a webes felületen a [*Token*](https://archiver.niif.hu/hu/archiver/token) fül alatt érhető el.

## Funkcionalitások kivonatolt segédlete:

### Szalag műveletek

* útvonal: **<big>/tape</big>**
    * *<big>GET</big>* - lekérdezhető az elérhető szalagok azonosítói
        *  paraméterek: -
        *  OPCIONÁLIS paraméterek:
            * **tape_id**  - amennyiben csak egy szalag adatai szeretnénk lekérdezni
        *  válasz:
            * Egy JSON, mely tartalmazza az elérhető szalagok azonosítóit és neveit.</br>

            ```json
            [
                { "id" : <szalag id>,
                    "name" : "szalag neve"
                },
                ...
            ]
            ```

        * példa:

            ```bash
            curl --header "token:<TOKEN>" -X GET 'https://api.archiver.niif.hu/tape/'
            ```

    * *<big>POST</big>* - szalag nevét lehet beállítani
        * paraméterek:
            * **tape_id** - szalag azonosítója
            * **name**    - beállítandó név
        * válasz: -
        * példa:

            ```bash
            curl --header "token:<TOKEN>" https://api.archiver.niif.hu/tape/ --data "tape_id=<ID>&name=<NAME>"
            ```

    * *<big>DELETE</big>* - szalag tartalmának törlése
        * paraméterek:
            * **tape_id** - melyik szalag tartalmát szeretnénk törölni
        * válasz: -
        * példa:

            ```bash
            curl --header "token:<TOKEN>" -X DELETE 'https://api.archiver.niif.hu/tape/?tape_id=<ID>'
            ```

### Feladatokkal kapcsolatos műveletek

* útvonal: **<big>/archive</big>**
    * *<big>POST</big>* - új archiválási feladata beküldése
        *  paraméterek:
            * **tape_id** - szalag azonosító
            * **url**     - archiválandó forrás elérhetősége </br> Amennyiben az url tartalmaz '&'-t, azt '%26'-val kell helyettesíteni.
        *  OPCIONÁLIS paraméterek:
            * **name**    - átnevezés
            * **email**   - értesítendő email címe
            * **level**   - értesítési szintszintek:
                * 1 - csak a sikeres archiválásról kérek értesítés
                * 2 - sikeres és hibás archiválásról is kérek értesítést
        *  válasz:
            * A sikeresen beküldött feladat ID-ja.
        *  példa:

            ```bash
            curl --header "token:<TOKEN>" https://api.archiver.niif.hu/archive/ --data "tape_id=<ID>&url=<URL>"
            curl --header "token:<TOKEN>" https://api.archiver.niif.hu/archive/ --data "tape_id=<ID>&url=<URL>&name=<NAME>"
            ```

    * *<big>GET</big>* - lekérdezhető a beküldött feladat állapota
        * paraméterek:
            * **job_id** - lekérdezendő feladat ID-je
        * válasz:
            * Egy JSON, mely tartalmazza a feladat és az archivált fájl(ok) státuszát.</br>  A "directories" elem csak hibás könyvtár létrehozáskor jelenik meg a JSON-ban.

            ```json
            {
                "state":"feladat állapota",
                "directories" : [
                    {
                        "dir":"könyvtár neve",
                        "state":"error",
                        "error_message":"HTTP error: 500 \"Internal Server Error\""
                    },
                    ...
                ],
                "files" : [
                    {
                        "file":"fájl neve elérési úttal",
                        "state":"complete",
                        "checksum":"c9b96a05482a91970309f8087b3ac9c6",
                        "ts":"2015-04-14 15:53:01"
                    },
                ...
                ]
            }
            ```

        * példa:</br>

            ```bash
            curl --header "token:<TOKEN>" -X GET 'https://api.archiver.niif.hu/archive/?job_id=<ID>'
            ```

* útvonal: **<big>/restore</big>**
    * *<big>POST</big>* - új visszaállítási feladata beküldése
        * paraméterek:
            * **tape_id** - szalag azonosító
            * **url**     - visszaállítás helye</br> Amennyiben az url tartalmaz '&'-t, azt '%26'-val kell helyettesíteni.
            * **file**    - visszaállítandó fájl, több verzió esetén a legutolsó változat kerül visszaállításra
        * OPCIONÁLIS paraméterek:
            * **name**    - átnevezés
            * **email**   - értesítendő email címe
            * **level**   - értesítési szint</br> szintek:
                * 1 - csak a sikeres visszaállításról kérek értesítés
                * 2 - sikeres és hibás visszaállításról is kérek értesítést
        * válasz:
            * A sikeresen beküldött feladat ID-ja.
        * példa:

            ```bash
            curl --header "token:<TOKEN>" https://api.archiver.niif.hu/restore/ --data "tape_id=<ID>&url=<URL>&file=<FILE>"
            curl --header "token:<TOKEN>" https://api.archiver.niif.hu/restore/ --data "tape_id=<ID>&url=<URL>&file=<FILE>&name=<NAME>"
            ```

    * *<big>GET</big>* - lekérdezhető a beküldött feladat állapota
        * paraméterek:
            * **job_id** - lekérdezendő feladat ID-je
        * válasz:
            * Egy JSON, mely tartalmazza a feladat és a visszaállított fájl(ok) státuszát.</br>           A "directories" elem csak hibás könyvtár létrehozáskor jelenik meg a JSON-ban.

            ```json
            {
                "state":"feladat állapota",
                "directories" : [
                    {
                        "dir":"könyvtár neve",
                        "state":"error",
                        "error_message":"HTTP error: 500 \"Internal Server Error\""
                    },
                    ...
                ],
                "files" : [
                    {
                        "file":"fájl neve elérési úttal",
                        "state":"complete",
                        "checksum":"c9b96a05482a91970309f8087b3ac9c6",
                        "ts":"2015-04-14 15:53:01"
                    },
                ...
                ]
            }
            ```

        * példa:</br>

            ```bash
            curl --header "token:<TOKEN>" -X GET 'https://api.archiver.niif.hu/restore/?job_id=<ID>'
            ```

### Fájl műveletek

* útvonal: **<big>/file</big>**
    * *<big>GET</big>* - lekérdezhető a szalagon található fájlok listája
        * paraméterek:
            * **tape_id** - szalag azonosító
        * OPCIONÁLIS paraméterek:
            * **path**    - megadható, hogy a szalagon milyen path alatt található fájlokat listázzon csak. </br> Természetesen a lista tartalmazza a path alatt található alkönyvtárakban lévő fájlokat is.
        * válasz:
            * Egy JSON, mely tartalmazza a szalagon elérhető fájlokat és azok méretét.

            ```json
            [
                { "file":"fájl neve elérési úttal",
                    "size":"méret bájtban"
                },
                ...
            ]
            ```

    * példa:

        ```bash
        curl --header "token:<TOKEN>" -X GET 'https://api.archiver.niif.hu/file/?tape_id=<ID>'
        curl --header "token:<TOKEN>" -X GET 'https://api.archiver.niif.hu/file/?tape_id=<ID>&path=<PATH>'
        ```