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

6.5 KiB

Cuper (DRAFT)

RIZ file header

                         32 bits
    <---------------------------------------------->
              16 bits                       8 bits
    <---------------------->            <---------->
    +----------------------------------------------+  <----------------------+
  0 |                IDENTIFICATOR                 |                         |
    +----------------------------------------------+                         |
  1 |          ARCH        |          OS           |                         |
    +----------------------------------------------+                         |
  2 |                     TIME                     |                         |
    +----------------------------------------------+                         |
  3 |          TYPE        |   PROT.   |    VER    |    Base informations.   |
    +----------------------------------------------+       Frame 0-9         |
  4 |           HL         |          MDL          |       + OPTIONS.        |
    +----------------------------------------------+                         |
5-9 |                   RESERVED                   |                         |
    +----------------------------------------------+                         |
    |                   OPTIONS                    |  <----------------------+
    +----------------------------------------------+  <----------------------+
    |                   METADATA                   |                         |
    +----------------------------------------------+         Contents.       |
    |                   PAYLOAD                    |   Frame post-OPTIONS-n. |
    +----------------------------------------------+  <----------------------+

Description

Nom du champ Position Longeur (bits) Valeur(s)
Identificator 0 32 0x7f 0x52 0x49 0x5a
Arch 4 16 0x0000 = no arch
0x0001 = i386
0x0002 = x86_64
OS 6 16 0x0000 = no OS
0x0001 = Linux
Time 8 32 current timestamp
Type 12 16 0x0000 = container
0x0001 = meta container
Protected 14 8 0x00 = unprotected
0x01 = AES-128
0x02 = AES-192
0x04 = AES-256
Version 15 8 0x00 = first (current)
HL 16 16 0x000a = no options
MDL 18 16 0x0000 = no metadata
RESERVED 20 120 0x0000 = not used
  • ARCH: l'identifiant de la machine cible (architecture du processeur).
  • OS: l'identifiant de la machine cible (environnement d'execution).
  • TIME: le timestamp de compilation.
  • TYPE: le type de conteneur, ex: conteneur, méta-conteneur, etc...
  • VER: la version de l'entête.
  • HL: la taille de l'entête en mot de 32 bits.
  • MDL: la taille des méta-données en mot de 32 bits.
  • RESERVED: 20 octets réservés.
  • OPTIONS: des données optionnels.
  • METADATA: les informations du contenu (see Cupfile).
  • PAYLOAD: le contenu.

NOTE:

  • Si TYPE égale 1d (0001h), alors il n'y à pas de contenu.
  • Si HL égale 10d (000ah), alors il n'y à pas d'options.
  • Si MDL égale 0d (0000h), alors il n'y à pas de méta-données.

Cupfile

Le fichier Cupfile permet de rassembler des informations qui seront utilisés lors de la compilation.

Voici la structure d'un Cupfile:

+-------------------->
|                      VAR1 = value1
|   User variables.    VAR2 = value2
|                      VAR3 = value3
+-------------------->
|                      ([add:] | set:)X-CONST1 = value1
|     Constantes.      ([add:] | set:)X-CONST2 = value2
|                      ([add:] | set:)X-CONST3 = value3
+-------------------->
+--------------------> (2x LF: `0x0a 0x0a` or 2x CRLF: `0x0d 0x0a 0x0d 0x0a`)
+--------------------> `exec` executable_file [arguments]

Le Cupfile doit se situer à la raçine de votre projet, exemple:

reader:
    |-- .git/
	|-- test/
		`-- text.txt
	|-- python-windows-x86_64/
		|-- libraries.dll
		`-- python.exe
    |-- python-linux-x86_64/
        |-- libraries.so
        `-- python
    |-- Cupfile
    `-- main.py

Voici un exemple de Cupfile, ce conteneur permet l'execution d'un script Python, en incluant toutes les dépendances:

AUTOR = Maiuri Gaëtan <maiuri.gaetan@lessonsharing.fr>
DATE = 2017-09-22
DESCRIPTION = A simple Cuper container with a text reader.
X-ENV = ["set:VERBOSE=1", "LD_LIBRARY_PATH=$_CWD/python-linux-x86_64/"] # LD_LIBRARY_PATH=... => is equivalent of add:LD_LIBRARY_PATH=...
X-INCLUDES = ["python-linux-x86_64/", "main.py"]

exec ./python-linux-x86_64/python main.py -v -i myfile.txt

Exemple avec des dépendances

Vous pouvez gérer une liste de dépendances avec l'attribut X-DEPLIST, exemple:

reader:
    |-- .git/
	|-- test/
		`-- text.txt
    |-- Cupfile
    `-- main.py
AUTOR = Maiuri Gaëtan <maiuri.gaetan@lessonsharing.fr>
DATE = 2017-09-22
DESCRIPTION = A simple Cuper container with a text reader.
X-DEPLIST = ["https://riz.example.com/download/python-linux-x86_64.riz"]
X-ENV = ["set:VERBOSE=1", "LD_LIBRARY_PATH=$_CWD/python-linux-x86_64/"] # LD_LIBRARY_PATH=... => is equivalent of add:LD_LIBRARY_PATH=...
X-INCLUDES = ["main.py"]

exec ./python-linux-x86_64/python main.py -v -i myfile.txt

Constantes internes

Des constantes internes sont utilisable dans le Cupfile, afin de formater dynamiquement votre environnement d'execution.

NOTE: Ces constantes ne sont pas modifiable.

Non Type Description Exemple
$_CWD string Le chemin du dossier courant post-extraction /path/to/riz/contents
$_HOME string Le chemin du dossier utilisateur (de la machine cible) /home/batman or C:\Users\batman

Attributs d'extension

Les attributs d'extension permettent d'injecter des intructions à la compilation.

Non Type Description Exemple
X-DEPLIST array Inject des dépendances a télécharger avant extraction (sur la machine cible) ["http://example.com/riz/my-scripts.riz", "http://example.com/riz/my-libs.riz"]
X-ENV array Inject des variables d'environnement dans le contexte d'execution (sur la machine cible) ["VERBOSE=1", "LD_LIBRARY_PATH=libs/"]
X-INCLUDES array Inclure seulement ces fichiers/dossiers dans le conteneur ["myfile", "mydir/"]

L'attribut X-DEPLIST peut être grandement utile lors de la création d'un méta-conteneur.

Powered by TurnKey Linux.