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.

155 lines
6.5 KiB

7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
  1. # Cuper (DRAFT)
  2. ## RIZ file header
  3. ```plain
  4. 32 bits
  5. <---------------------------------------------->
  6. 16 bits 8 bits
  7. <----------------------> <---------->
  8. +----------------------------------------------+ <----------------------+
  9. 0 | IDENTIFICATOR | |
  10. +----------------------------------------------+ |
  11. 1 | ARCH | OS | |
  12. +----------------------------------------------+ |
  13. 2 | TIME | |
  14. +----------------------------------------------+ |
  15. 3 | TYPE | PROT. | VER | Base informations. |
  16. +----------------------------------------------+ Frame 0-9 |
  17. 4 | HL | MDL | + OPTIONS. |
  18. +----------------------------------------------+ |
  19. 5-9 | RESERVED | |
  20. +----------------------------------------------+ |
  21. | OPTIONS | <----------------------+
  22. +----------------------------------------------+ <----------------------+
  23. | METADATA | |
  24. +----------------------------------------------+ Contents. |
  25. | PAYLOAD | Frame post-OPTIONS-n. |
  26. +----------------------------------------------+ <----------------------+
  27. ```
  28. **Description**
  29. | Nom du champ | Position | Longeur (bits) | Valeur(s) |
  30. |:-------------|:--------:|:--------------:|:----------|
  31. | **Identificator** | 0 | 32 | `0x7f 0x52 0x49 0x5a` |
  32. | **Arch** | 4 | 16 | `0x0000` = no arch |
  33. |||| `0x0001` = i386 |
  34. |||| `0x0002` = x86_64 |
  35. | **OS** | 6 | 16 | `0x0000` = no OS |
  36. |||| `0x0001` = Linux |
  37. | **Time** | 8 | 32 | *current timestamp* |
  38. | **Type** | 12 | 16 | `0x0000` = container |
  39. |||| `0x0001` = meta container |
  40. | **Protected** | 14 | 8 | `0x00` = unprotected |
  41. |||| `0x01` = AES-128 |
  42. |||| `0x02` = AES-192 |
  43. |||| `0x04` = AES-256 |
  44. | **Version** | 15 | 8 | `0x00` = first (current) |
  45. | **HL** | 16 | 16 | `0x000a` = no options |
  46. | **MDL** | 18 | 16 | `0x0000` = no metadata |
  47. | **RESERVED** | 20 | 120 | `0x0000` = not used |
  48. * **ARCH**: l'identifiant de la machine cible (architecture du processeur).
  49. * **OS**: l'identifiant de la machine cible (environnement d'execution).
  50. * **TIME**: le timestamp de compilation.
  51. * **TYPE**: le type de conteneur, ex: conteneur, méta-conteneur, etc...
  52. * **VER**: la version de l'entête.
  53. * **HL**: la taille de l'entête en **mot de 32 bits**.
  54. * **MDL**: la taille des méta-données en **mot de 32 bits**.
  55. * **RESERVED**: 20 octets réservés.
  56. * **OPTIONS**: des données optionnels.
  57. * **METADATA**: les informations du contenu (see Cupfile).
  58. * **PAYLOAD**: le contenu.
  59. > **NOTE**:
  60. * Si `TYPE` égale `1d` (`0001h`), alors il n'y à pas de contenu.
  61. * Si `HL` égale `10d` (`000ah`), alors il n'y à pas d'options.
  62. * Si `MDL` égale `0d` (`0000h`), alors il n'y à pas de méta-données.
  63. ## Cupfile
  64. Le fichier **Cupfile** permet de **rassembler des informations** qui seront utilisés lors de la compilation.
  65. Voici la structure d'un Cupfile:
  66. ```plain
  67. +-------------------->
  68. | VAR1 = value1
  69. | User variables. VAR2 = value2
  70. | VAR3 = value3
  71. +-------------------->
  72. | ([add:] | set:)X-CONST1 = value1
  73. | Constantes. ([add:] | set:)X-CONST2 = value2
  74. | ([add:] | set:)X-CONST3 = value3
  75. +-------------------->
  76. +--------------------> (2x LF: `0x0a 0x0a` or 2x CRLF: `0x0d 0x0a 0x0d 0x0a`)
  77. +--------------------> `exec` executable_file [arguments]
  78. ```
  79. Le Cupfile doit se situer à la raçine de votre projet, exemple:
  80. ```plain
  81. reader:
  82. |-- .git/
  83. |-- test/
  84. `-- text.txt
  85. |-- python-windows-x86_64/
  86. |-- libraries.dll
  87. `-- python.exe
  88. |-- python-linux-x86_64/
  89. |-- libraries.so
  90. `-- python
  91. |-- Cupfile
  92. `-- main.py
  93. ```
  94. Voici un exemple de Cupfile, ce conteneur permet l'execution d'un script Python, en incluant toutes les dépendances:
  95. ```bash
  96. AUTOR = Maiuri Gaëtan <maiuri.gaetan@lessonsharing.fr>
  97. DATE = 2017-09-22
  98. DESCRIPTION = A simple Cuper container with a text reader.
  99. X-ENV = ["set:VERBOSE=1", "LD_LIBRARY_PATH=$_CWD/python-linux-x86_64/"] # LD_LIBRARY_PATH=... => is equivalent of add:LD_LIBRARY_PATH=...
  100. X-INCLUDES = ["python-linux-x86_64/", "main.py"]
  101. exec ./python-linux-x86_64/python main.py -v -i myfile.txt
  102. ```
  103. ### Exemple avec des dépendances
  104. Vous pouvez gérer **une liste de dépendances** avec l'attribut `X-DEPLIST`, exemple:
  105. ```plain
  106. reader:
  107. |-- .git/
  108. |-- test/
  109. `-- text.txt
  110. |-- Cupfile
  111. `-- main.py
  112. ```
  113. ```bash
  114. AUTOR = Maiuri Gaëtan <maiuri.gaetan@lessonsharing.fr>
  115. DATE = 2017-09-22
  116. DESCRIPTION = A simple Cuper container with a text reader.
  117. X-DEPLIST = ["https://riz.example.com/download/python-linux-x86_64.riz"]
  118. X-ENV = ["set:VERBOSE=1", "LD_LIBRARY_PATH=$_CWD/python-linux-x86_64/"] # LD_LIBRARY_PATH=... => is equivalent of add:LD_LIBRARY_PATH=...
  119. X-INCLUDES = ["main.py"]
  120. exec ./python-linux-x86_64/python main.py -v -i myfile.txt
  121. ```
  122. ## Constantes internes
  123. Des constantes internes sont utilisable dans le Cupfile, afin de formater dynamiquement votre environnement d'execution.
  124. > **NOTE**: Ces constantes ne sont pas modifiable.
  125. | Non | Type | Description | Exemple |
  126. |-----|:----:|-------------|---------|
  127. | `$_CWD` | string | Le chemin du dossier courant post-extraction | `/path/to/riz/contents` |
  128. | `$_HOME` | string | Le chemin du dossier utilisateur (de la machine cible) | `/home/batman` or `C:\Users\batman` |
  129. ## Attributs d'extension
  130. Les attributs d'extension permettent d'injecter des intructions à la compilation.
  131. | Non | Type | Description | Exemple |
  132. |-----|:----:|-------------|---------|
  133. | `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"]` |
  134. | `X-ENV` | array | Inject des variables d'environnement dans le contexte d'execution (sur la machine cible) | `["VERBOSE=1", "LD_LIBRARY_PATH=libs/"]` |
  135. | `X-INCLUDES` | array | Inclure seulement ces fichiers/dossiers dans le conteneur | `["myfile", "mydir/"]` |
  136. L'attribut `X-DEPLIST` peut être grandement utile lors de la création d'un méta-conteneur.

Powered by TurnKey Linux.