help/content/files/_index.md
Pierre-Olivier Mercier 4ceb66fa2a
All checks were successful
continuous-integration/drone/push Build is passing
Allow write-ups instead of videos
2021-10-25 11:04:23 +02:00

248 lines
8.6 KiB
Markdown

---
date: 2019-04-04T15:59:52+02:00
title: Arborescence et fichiers
weight: 10
---
Afin de pouvoir être importé automatiquement sur la plate-forme, vos scénarios
doivent respecter une certaine arborescence que voici :
```
.
├── AUTHORS.txt
├── overview.txt
├── title.txt
├── heading.jpg
├── CHID-Titre du défi/
│ ├── challenge.txt
│ ├── finished.txt (opt.)
│ ├── links.txt
│ ├── overview.txt
│ ├── resolution.txt (choice)
│ ├── resolution.mp4 (choice)
│ ├── statement.txt
│ ├── hints/ (opt.)
│ │ ├── DIGESTS.txt
│ │ └── ...
│ ├── files/
│ │ ├── DIGESTS.txt
│ │ └── ...
│ └── ressources/
│ └── ...
├── CHID-Titre du défi/
│ └── ...
└── ...
```
{{% notice info %}}
N'ajoutez pas inutilement de dossiers ou fichiers vides. Ceux-ci doivent sans
doute être optionnels.
{{% /notice %}}
Utilisez le binaire [repochecker](https://srs.nemunai.re/repochecker)
(amd64/linux) pour vous assurer de votre arbrescence et de la validité du
contenu des fichiers :
cd /mnt/fic/MyTheme
repochecker .
...
repochecker /mnt/fic/MyTheme/1-MyChallenge/
### `CHID`
Dans les noms de dossiers, `CHID` correspond à un identifiant permettant de référencer votre défi (pour déclarer une dépendance sur celui-ci par exemple).
L'import s'effectuant selon l'ordre alphabétique, vous devriez utiliser le numéro d'ordre de l'exercice comme identifiant :
```
.
├── 1-Titre du premier défi/
│ └── ...
├── 2-Titre du deuxième défi/
│ └── ...
└── ...
```
Dans cet exemple, si l'ordre était déterminé uniquement par l'ordre alphabétique des noms de dossiers, le **d**euxième serait devant le **p**remier (`d<p`).
Ajouter le numéro d'ordre permet de contrôler plus facilement l'ordre des exercices, sans que cela soit affiché dans l'interface.
## Fichiers pour un scénario
### `AUTHORS.txt`
Voir la [page dédiée]({{<relref "authors">}}).
### `title.txt`
Ce fichier peut être utilisé pour y inscrire le nom du scénario, tel qu'il doit apparaître sur l'interface.
Par défaut, sans ce fichier, c'est le nom du dossier contenant les challenges qui est utilisé.
### `heading.jpg`
Chaque scénario devrait avoir une image/photo représentative. Je vous invite
donc à trouver votre bonheur sur : [Unsplash](https://unsplash.com/) ou à
partager un travail personnel. Mais attention aux licences et contraintes
(notamment l'obligation de citer la source ou le photographe) si vous utilisez
un autre service qu'unsplash.
La taille et l'orientation de l'image n'a pas d'importance, mais gardez en tête
que c'est son centre qui sera affiché, si la hauteur dépasse la taille prévue.
![Rendu heading.jpg](scenario_heading.png)
### `overview.txt`
Une présentation rapide du scenario (~2-3 phrases d'accroche pour lecture
rapide), compréhensible par un décideur, petit schéma à l'appui.
Le fichier **doit** comporter une phrase d'accroche (qui sera affichée plus
grosse que les suivantes). Celle-ci correspond à la première ligne de votre
fichier.
Comme l'ensemble des textes importés, vous pouvez utiliser du
[Markdown](https://daringfireball.net/projects/markdown/) pour mettre en forme
vos textes.
Vous pouvez insérer des images dans tous les textes :
![alt](path title)
Le chemin *doit* être un chemin _absolu_ vers l'image, considérant la racine
comme étant le dossier du scénario (pour l'overview du thème) ou de l'exercice
(pour les autres textes).
![Rendu overview.txt](scenario_overview_public.png)
![Rendu overview.txt](scenario_headline.png)
## Fichiers pour un défi
### `challenge.txt`
Voir la [page dédiée]({{<relref "challenge">}}).
### `finished.txt`
Remplissez ce fichier optionnel, lorsque vous souhaitez apporter une
information aux participants une fois qu'ils ont validé votre défi.
Comme l'ensemble des textes importés, vous pouvez utiliser du
[Markdown](https://daringfireball.net/projects/markdown/) pour mettre en forme
vos textes.
![Rendu finished.txt](exercice_finished.png)
### `links.txt`
Voir la [page dédiée]({{<relref "links">}}).
### `overview.txt`
Une présentation rapide du défi (~1-2 phrases), compréhensible par un décideur,
petit schéma à l'appui si besoin.
Le fichier **doit** comporter une phrase d'accroche (qui sera affichée plus
grosse que les suivantes). Celle-ci correspond à la première ligne de votre
fichier.
Comme l'ensemble des textes importés, vous pouvez utiliser du
[Markdown](https://daringfireball.net/projects/markdown/) pour mettre en forme
vos textes.
Gardez en tête que les *overview*, que ce soit scénario ou exercices, sont
affichées au public : il s'agit à la fois d'aguicher le participant pour qu'il
fasse votre scénario plutôt que celui d'un autre groupe, mais aussi de donner
envie au public de lire plus en détail.
![Rendu overview.txt](exercice_overview_public.png)
![Rendu overview.txt](exercice_headline.png)
### `resolution.mp4`/`resolution.txt`
Afin que les participants et les organisateurs puissent avoir un aperçu de la
méthode de résolution attendu de votre défi, vous devez rédiger un article ou
réaliser une vidéo dans lequel vous décrivez ou montrer chaque étape permettant
de conduire aux différents *flags*.
Voir la page dédiée [aux vidéos]({{<relref "resolution">}}) ou [aux
*write-ups*]({{<relref "write-up">}}).
### `statement.txt`
L'énoncé du défi, tel qu'il sera affiché sur le site, à destination des participants.
Le fichier **doit** comporter une phrase d'accroche (qui sera affichée plus
grosse que les suivantes). Celle-ci correspond à la première ligne de votre
fichier.
Comme l'ensemble des textes importés, vous pouvez utiliser du
[Markdown](https://daringfireball.net/projects/markdown/) pour mettre en forme
vos textes.
![Rendu statement.txt](exercice_statement.png)
### `files/`
Utilisez ce dossier pour y placer les fichiers que vous mettez à disposition
des participants.
{{% notice warning %}}
Les fichiers binaires, avec lesquels on ne peut pas faire de diff, n'ont pas d'intérêt à être présents directement sur le dépôt : cela consomme inutilement de la place et rend le clonage du dépôt inutilement longue. Vous **devez** utiliser [git-lfs](https://docs.gitlab.com/ee/topics/git/lfs/) sur le GitLab du CRI pour tous les fichiers binaires contenus dans ce dossier.
{{% /notice %}}
Chaque fichier doit avoir une entrée correspondante dans le fichier
`DIGESTS.txt` ; plus d'infos sur [la page `DIGESTS.txt`]({{<relref
"digests">}}).
- Pas plus 4GB à télécharger **par défi** (ie. tous les fichiers de ce défi) : 4GB, c'est jusqu'à 5 minutes de téléchargement, c'est vraiment beaucoup lorsqu'on est impatient de faire le défi.
- Archives `.tar.bz2`, `.tar.gz`, `.tar.xz` ou `.zip` lorsque nécessaire. **PAS** de `.rar`, ...
- Compresser (sans tarball, juste via **gzip**[^gz]) les fichiers lorsque c'est utile (memory dump, images BMP, disques, fichiers textes, ...).
Indiquez dans le fichier `DIGESTS.txt` les hash du fichier compressé (utilisé par la plateforme pour vérifier que le fichier distribué n'a pas été altéré) **et** le hash du fichier initial décompressé (pour l'affichage sur la plateforme).
- Utiliser `$(split -b 240M -d BIG_FILE BIG_FILE.)` pour uploader les gros fichiers sur **owncloud**.
Ces fichiers seront concaténés automatiquement au moment de leur import sur la plateforme.
Seul le hash du fichier entier est requis dans le fichier `DIGESTS.txt`.
[^gz]: l'intérêt de `gzip` est que le serveur web sera capable de distribuer le fichier sans faire apparaître la compression. Voir le [module nginx utilisé](https://nginx.org/en/docs/http/ngx_http_gzip_static_module.html).
### `hints/`
Utilisez ce dossier pour y placer les fichiers que vous mettez à disposition,
dans le cadre d'indices.
Chaque fichier doit avoir une entrée correspondante dans le fichier
`DIGESTS.txt` ; plus d'infos sur la page [`DIGESTS.txt`]({{<relref
"digests">}}).
De plus, chaque fichier doit également posséder une entrée dans le fichier
[`challenge.txt`]({{<relref "challenge">}}), afin de lui attribuer son coût,
titre, ...
### `ressources/`
Rangez dans ce dossier toutes les ressources et scripts que vous avez réalisés
pour le défi : pour sa construction ou sa résolution, les schémas du SI au
premier défi concerné, éventuellement un `README.txt` avec les liens des
outils externes.