From 8baf88b9078424258cc1ddd2169ad565d52f4679 Mon Sep 17 00:00:00 2001 From: Jan Vykopal <vykopal@ics.muni.cz> Date: Fri, 27 Nov 2020 22:57:47 +0000 Subject: [PATCH] Add CyberSec4Europe acknowledgement, update Credits, add link to Releases, and reorganize sections in README.md --- README.md | 53 ++++++++++++++++++++++++++++++++++++--------------- doc/EU.jpg | Bin 0 -> 14221 bytes doc/TACR.png | Bin 0 -> 5080 bytes 3 files changed, 38 insertions(+), 15 deletions(-) create mode 100644 doc/EU.jpg create mode 100644 doc/TACR.png diff --git a/README.md b/README.md index d4031e5..a774f11 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,16 @@ # Cyber Sandbox Creator -Cyber Sandbox Creator is a tool, which can generate portable input files for building lightweight virtual environments using Vagrant and Ansible from a simple YAML definition of topology. The combination of these three tools makes possible to build virtual machines connected with virtual networks even on a desktop computer. +Cyber Sandbox Creator is a tool that can generate portable input files for building lightweight virtual environments using Vagrant and Ansible from a simple YAML definition of topology. The combination of these three tools makes it possible to build virtual machines connected with virtual networks even on a desktop computer.  -## Installation +--- + +**Note: This is just a quick guide how to install and generate files with Cyber Sandbox Creator. For full description of how to prepare the host device to run the generated environments and how to build the virtual machines, check our [wiki page](https://gitlab.ics.muni.cz/muni-kypo-csc/cyber-sandbox-creator/-/wikis/Installation-and-Usage).** -**Note:** This is just a quick guide how to install and generate files with this tool. For full description of how to prepare the host device to be able run the generated environments and how to build the virtual machines check our [wiki page](https://gitlab.ics.muni.cz/muni-kypo-csc/cyber-sandbox-creator/-/wikis/Installation-and-Usage). +**The latest stable release is available in [Releases](https://gitlab.ics.muni.cz/muni-kypo-csc/cyber-sandbox-creator/-/releases).** + +## Installation ### Linux (Ubuntu/Debian) @@ -23,43 +27,62 @@ Cyber Sandbox Creator is a tool, which can generate portable input files for bui 2. Install [git](https://git-scm.com/downloads). 3. Clone the project with `git clone https://gitlab.ics.muni.cz/cs4eu/sandbox-creator.git` to an arbitrary folder. 4. Navigate to the project folder (`cd sandbox-creator`). -5. Install Python dependencies using the command `python -m pip install -r .\requirements.txt`. +5. Install Python dependencies using the command `python -m pip install -r requirements.txt`. ## Usage ### Linux (Ubuntu/Debian) -1. After the installation simply run the command `$ python3 create.py topology.yml` to generate files. +1. After the installation, simply run the command `$ python3 create.py topology.yml` to generate intermediate definition files. 2. Navigate to the newly created directory `sandbox` and run `$ vagrant up` to build the virtual environment. 3. The built environment can be deleted using the command `$ vagrant destroy -f`. ### Windows 10 1. Generate files using the command `python create.py --ansible_local topology.yml`. -2. Navigate to the newly created folder `sandbox` and run the command `vagrant up` to build the virtual environment. +2. Navigate to the newly created directory `sandbox` and run `vagrant up` to build the virtual environment. 3. The built environment can be deleted using the command `vagrant destroy -f`. +## License + +This project is licensed under the [MIT License](LICENSE). + ## Credits -**Cybersecurity Laboratory**\ +**[Cybersecurity Laboratory](https://kypo.fi.muni.cz)**\ **Faculty of Informatics**\ **Masaryk University** +**Project lead**: Jan Vykopal + **Lead developer**: Attila Farkas **Developer**: Jana Ziková -**Technology lead**: Daniel TovarĹák (KYPO cyber range platform) +**Contributors**: -**Supervisor**: Jan Vykopal +- Valdemar Ĺ vábenskĂ˝ - user testing +- Daniel TovarĹák (KYPO Cyber Range Platform) - technical advisor +- Kamil Andoniadis (KYPO Cyber Range Platform) -**Contributors**: +**Student contributors:** all students who use the tool for their thesis projects or training + +### Acknowledgements + +<table> + <tr> + <td></td> + <td> +This software and accompanying documentation is part of a [project](https://cybersec4europe.eu) that has received funding from the European Union’s Horizon 2020 research and innovation programme under grant agreement No. 830929. +</td> + </tr> + <tr> + <td></td> + <td>This software was developed with the support of the Technology Agency of the Czech Republic (TA ÄŚR) from the National Centres of Competence programme (project identification TN01000077 – [National Centre of Competence in Cybersecurity](https://nc3.cz/)). + </td> + </tr> + </table> -- Valdemar Ĺ vábenskĂ˝ -- Kamil Andoniadis (KYPO cyber range platform) -**Student contributors:** Michal StanĂk, ZdenÄ›k Vydra, Adam Skrášek -## License -This project is licensed under the MIT License - see the LICENSE file for details. diff --git a/doc/EU.jpg b/doc/EU.jpg new file mode 100644 index 0000000000000000000000000000000000000000..591af7a0127eade751288330409e7a1f29d650d8 GIT binary patch literal 14221 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 Y-HlZ6?>c`lTkxG#=Ko6>HK0xWFU9d+-v9sr literal 0 HcmV?d00001 diff --git a/doc/TACR.png b/doc/TACR.png new file mode 100644 index 0000000000000000000000000000000000000000..ec821dcd1862a3092ea36e592f0da70ceaf4a4d1 GIT binary patch literal 5080 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 V$Snd>eqaHBfvz#SLfawae*incyo3M% literal 0 HcmV?d00001 -- GitLab