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.

129 lines
5.4 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
  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 `HL` == `10d` (`000ah`, frame 0 to 9), alors il n'y à pas d'options.
  61. * Si `MDL` == `0d` (`0000h`), alors il n'y à pas de méta-données.
  62. ## Cupfile
  63. Le fichier **Cupfile** permet de **rassembler des informations** qui seront utilisés lors de la compilation.
  64. Voici la structure d'un Cupfile:
  65. ```plain
  66. +-------------------->
  67. | VAR1 = value1
  68. | User variables. VAR2 = value2
  69. | VAR3 = value3
  70. +-------------------->
  71. | ([add:] | set:)X-CONST1 = value1
  72. | Constantes. ([add:] | set:)X-CONST2 = value2
  73. | ([add:] | set:)X-CONST3 = value3
  74. +-------------------->
  75. +--------------------> (2x new ligne: `0x0a 0x0a`)
  76. +--------------------> `exec` executable_file [arguments]
  77. ```
  78. Voici un exemple de Cupfile, ce conteneur permet l'execution d'un script Python, en incluant toutes les dépendances:
  79. ```bash
  80. AUTOR = Maiuri Gaëtan <maiuri.gaetan@lessonsharing.fr>
  81. DATE = 2017-09-22
  82. DESCRIPTION = A simple Cuper container with a text reader.
  83. X-ENV = ["set:VERBOSE=1", "LD_LIBRARY_PATH=$_CWD/python-linux-x86-64/"] # LD_LIBRARY_PATH=... => is equivalente of add:LD_LIBRARY_PATH=...
  84. X-INCLUDES = ["python-linux-x86-64/", "main.py"]
  85. # POSIX
  86. exec ./python/python main.py -v -i myfile.txt
  87. # Windows
  88. #exec python\python.exe main.py -v -i myfile.txt
  89. ```
  90. Le Cupfile doit se situer à la raçine de votre projet, exemple:
  91. ```plain
  92. reader:
  93. |-- .git/
  94. |-- test/
  95. |-- python-windows-x86-64/
  96. |-- exemple.dll
  97. `-- python.exe
  98. |-- python-linux-x86-64/
  99. |-- exemple.so
  100. `-- python
  101. |-- Cupfile
  102. |-- main.py
  103. ```
  104. ## Constantes internes
  105. Des constantes internes sont utilisable dans le Cupfile, afin de formater votre environnement d'execution dynamiquement.
  106. > **NOTE**: Ces constantes ne sont pas modifiable.
  107. | Non | Type | Description | Exemple |
  108. |-----|:----:|-------------|---------|
  109. | `$_CWD` | string | Le path du dossier courant post-extraction | `/path/to/riz/contents` |
  110. ## Atributs d'extension
  111. Les attributs d'extension permettent d'injecter des intructions à la compilation.
  112. | Non | Type | Description | Exemple |
  113. |-----|:----:|-------------|---------|
  114. | `X-ENV` | array | Inject des variable d'environnement dans le contexte d'execution | `["VERBOSE=1", "LD_LIBRARY_PATH=libs/"]` |
  115. | `X-INCLUDES` | array | Inclure seulement ces fichiers/dossiers dans le contener | `["myfile", "mydir/"]` |

Powered by TurnKey Linux.