Compare commits

...
90 Commits
Author SHA1 Message Date
grossmj 5c8abdc6fd Release v2.2.44 2023-11-06 16:02:23 +10:00
grossmj f80f41b5b3 Sync appliances 2023-11-06 15:58:21 +10:00
grossmj 503373a6e9 Bundle web-ui v2.2.44 2023-11-06 15:53:51 +10:00
grossmj 8236c85b5f Upgrade sentry-sdk 2023-11-06 15:44:30 +10:00
grossmj ae825b0080 Non-blocking checksums computation when server starts. Fixes #2228 2023-11-06 12:32:23 +10:00
grossmj 191feed669 Fix timeout issue when creating Qemu disk image. Fixes https://github.com/GNS3/gns3-server/issues/2313 2023-11-05 15:41:46 +10:00
grossmj 3b22bcfe96 Support for web socket console over HTTPS 2023-11-03 14:40:40 +10:00
grossmj 0f07b9e019 Add back script create_cert.sh 2023-11-03 12:31:34 +10:00
grossmj 8676a3dccf Bundle web-ui 2023-11-02 17:40:47 +10:00
grossmj b0dbf59ac4 Use Python 3.8 in appveyor.yml 2023-10-31 14:48:08 +10:00
Jeremy Grossmann 14fd165f2a Merge pull request #2307 from GNS3/fix/3521
Allow disabling hardware virtualization check
2023-10-30 15:03:50 +10:00
grossmj 7c49a9160c Allow disabling hardware virtualization check 2023-10-30 14:57:11 +10:00
grossmj ed99a98fe1 Sync appliances 2023-10-27 13:20:15 +10:00
Jeremy Grossmann 19edc193f9 Merge pull request #2303 from GNS3/fix/1484
Fix L2IOU "failed code signing checks"
2023-10-26 15:13:12 +10:00
grossmj 3f50319990 Fix L2IOU "failed code signing checks" when IOU base file name is >= 63 characters 2023-10-26 15:05:10 +10:00
Jeremy Grossmann 248737c34b Merge pull request #2296 from ventaquil/feature/add-qemu-igb-nic
Add Qemu IGB network device
2023-10-24 17:23:00 +10:00
Jeremy Grossmann 240708112c Merge branch '2.2' into feature/add-qemu-igb-nic 2023-10-24 17:14:27 +10:00
grossmj c759c4e3f6 Upgrade to actions/checkout@v3 and actions/setup-python@v3 2023-10-23 16:17:31 +10:00
grossmj 34ee75e1f1 Fix tests running on Python 3.12 2023-10-23 16:12:12 +10:00
grossmj 4af5edbc03 Install aiohttp 3.9.0b0 when running on Python 3.12 2023-10-23 15:21:06 +10:00
grossmj 0d15f40930 Change "ip cef" to "no ip cef" in IOU default configs. Fixes #2298 2023-10-23 15:16:49 +10:00
grossmj 3b0d89be5a Merge branch 'master' into 2.2 2023-10-18 17:46:51 +10:00
grossmj 5ff3043fb4 Sync appliances 2023-10-18 17:45:17 +10:00
grossmj 08ac80e451 Upgrade sentry and psutil dependencies 2023-10-18 14:53:25 +10:00
Konrad Goławski 737664a3d4 Add Qemu IGB network device 2023-10-12 11:35:53 +02:00
grossmj 29f4b238b0 Add Python 3.12 support. Fixes https://github.com/GNS3/gns3-server/issues/2273 2023-10-09 16:54:47 +10:00
Jeremy Grossmann 6886f1f566 Merge pull request #2290 from GNS3/fix/2147
Fix issue when using importlib.resources.files()
2023-09-23 20:54:57 +10:00
grossmj 999a47f747 Fix issue with importlib.resources.files() and Python 3.9 2023-09-23 20:44:00 +10:00
grossmj f675f24ba7 Revert "Install importlib-resources only with Python < '3.9'. Ref #2147"
This reverts commit dc1eed42da.
2023-09-23 14:48:04 +10:00
grossmj dc1eed42da Install importlib-resources only with Python < '3.9'. Ref #2147 2023-09-23 14:35:50 +10:00
Jeremy Grossmann 2c5a9ef9b7 Merge pull request #2288 from Quanterm/master
Update README.md
2023-09-21 11:44:36 +10:00
Vieta e75d151611 Update README.md
The release cycle of NixOs is around every half of the year. 
On the unstable channel you have the latest gns3-server version. 
Do not worry to use unstable because it mostly just the latest stable version. You can also do overlays to keep your other systems pkgs on the regular release version.
2023-09-20 11:41:05 +00:00
Jeremy Grossmann d87cff7fd5 Merge pull request #2287 from munahaf/Inappropriate_Logic-5node.py11635999804432162276.diff
Update a test expression to remove a logical short circuit
2023-09-20 14:31:04 +07:00
Jeremy Grossmann ffb58a4ed2 Merge branch 'master' into Inappropriate_Logic-5node.py11635999804432162276.diff 2023-09-20 14:17:58 +07:00
munahaf 4d7b3fb9d6 Comment: Updated a test expression to remove a logical short circuit. 2023-09-20 06:51:41 +00:00
grossmj 94abdfc9f0 Development on 2.2.44.dev1 2023-09-19 21:08:24 +07:00
Jeremy Grossmann 6f345bb1ec Merge pull request #2286 from GNS3/release-v2.2.43
Release v2.2.43
2023-09-19 21:04:52 +07:00
grossmj 89ec458f5c Release v2.2.43 2023-09-19 20:16:52 +07:00
grossmj 80bc1a726b Sync appliances 2023-09-19 20:12:32 +07:00
grossmj 6265d3d55f Upgrade sentry-sdk and truststore 2023-09-19 20:07:57 +07:00
grossmj a96a82821c Merge branch 'master' into 2.2 2023-09-19 20:04:15 +07:00
grossmj ad47ffbe29 Force English output for VBoxManage. Fixes #2266 2023-09-19 18:14:05 +07:00
grossmj 702fea89fb Automatically add vboxnet and DHCP server if not present for VirtualBox GNS3 VM. Ref #2266 2023-09-12 16:14:44 +07:00
Jeremy Grossmann 285b19d97f Merge pull request #2272 from GNS3/fix/2271
Correctly install built-in appliances
2023-09-06 23:16:34 +07:00
grossmj 709aa46074 Fix issue with controller config saved before checking current version with previous one 2023-09-06 16:48:24 +07:00
Jeremy Grossmann 71d06abaf4 Merge pull request #2278 from GNS3/update-publish-api-doc
Update publish api doc with GitHub Actions
2023-09-03 17:00:13 +07:00
grossmj 05ef9f2a7c No need for dev dependencies 2023-09-03 16:59:48 +07:00
grossmj 476658b829 Update publish-api-documentation.yml 2023-09-03 16:52:30 +07:00
Jeremy Grossmann d3d0cc039d Merge pull request #2277 from GNS3/fix/2276
Prevent X11 socket file to be modified by Docker container
2023-08-27 19:53:50 +10:00
grossmj c2783d355f Fix test_create_vnc test 2023-08-27 18:41:25 +10:00
grossmj d6e1ee5dbb Prevent X11 socket file to be modified by Docker container 2023-08-27 18:30:37 +10:00
Jeremy Grossmann e61ada69bb Merge pull request #2274 from lethedata/openwrt-18.06.5-18.06.2-hashfix
Hash Update openwrt.gns3a
2023-08-17 10:00:14 +10:00
Echo Nar a6b0f32b57 Hash Update openwrt.gns3a
Update hashes for openwrt-18.06.5 and openwrt-18.06.2 based hashes from download links.
2023-08-16 18:37:55 -05:00
grossmj a69feb3682 Use an older version of platformdirs 2023-08-12 19:15:29 +10:00
grossmj 090d1c8c84 Only use platformdirs with Python >= '3.7' 2023-08-12 19:04:14 +10:00
grossmj df2f96828e Use the user data dir to store built-in appliances 2023-08-12 18:48:43 +10:00
grossmj 6a614fbd78 Downgrade jsonschema 2023-08-12 17:51:24 +10:00
grossmj 2d7438446c Upgrade dependencies 2023-08-12 17:47:48 +10:00
grossmj 77d4eabadc Catch ConnectionResetError exception when client disconnects 2023-08-12 17:31:58 +10:00
grossmj bbb0a407e0 Upgrade to PyQt 5.15.9 and pywin32 2023-08-11 18:13:41 +10:00
grossmj 35e1519073 Development on v2.2.43.dev1 2023-08-09 22:15:15 +10:00
Jeremy Grossmann 9f5aece8b6 Merge pull request #2267 from GNS3/release-v2.2.42
Release v2.2.42
2023-08-09 22:09:29 +10:00
grossmj 08139ebdd1 Release v2.2.42 2023-08-09 21:11:57 +10:00
grossmj cd87ac4474 Bundle web-ui v2.2.42 2023-08-09 21:03:40 +10:00
grossmj 77744cc31d Handle API version key in VirtualBox 7. Fixes #2266 2023-08-09 20:51:53 +10:00
grossmj df9d642a56 Sync appliances 2023-08-08 19:07:04 +10:00
grossmj fad28c766a Enable system certificate store later in the code and bump version to 2.2.42.dev4 2023-08-08 17:22:27 +10:00
grossmj 21d9d968c4 Revert "Use truststore in appliance_manager.py instead"
This reverts commit a2628042e8.
2023-08-07 20:44:37 +10:00
grossmj 945a2c98cd Revert "Use finer-grained control for truststore"
This reverts commit 5e1792ff4d.
2023-08-07 20:44:33 +10:00
grossmj 5e1792ff4d Use finer-grained control for truststore 2023-08-07 19:15:14 +10:00
grossmj a2628042e8 Use truststore in appliance_manager.py instead 2023-08-07 19:04:55 +10:00
grossmj e616b09028 Use truststore 2023-08-07 18:40:03 +10:00
grossmj 958865e919 Upgrade dependencies 2023-08-06 20:39:27 +10:00
grossmj 7f595b089b Use certifi to get SSL root certificates 2023-08-06 20:37:10 +10:00
grossmj a76d7576c6 Bump version to 2.2.42.dev3 2023-08-06 18:14:21 +10:00
grossmj 533c4544ea Use certifi on Windows and macOS 2023-08-06 18:09:56 +10:00
Jeremy Grossmann 04a302a389 Merge pull request #2265 from GNS3/use-bundled-cacert
Use bundled cacert file for frozen app
2023-08-05 22:37:06 +10:00
grossmj 5da742394e Use bundled cacert file on Windows and macOS 2023-08-05 22:21:08 +10:00
grossmj 962c5eed8e Add log message for comparing controller version with config version. Ref https://github.com/GNS3/gns3-gui/issues/3486 2023-08-05 20:24:11 +10:00
grossmj f4dab1482f Bump version to 2.2.42.dev2 2023-08-05 20:16:30 +10:00
grossmj 7ef9b7600c Use DEFAULT_BUFFER_SIZE for md5sum 2023-08-03 12:09:24 +10:00
grossmj c51d71a4fa Fix version check when installing appliances. Ref https://github.com/GNS3/gns3-gui/issues/3486 2023-08-02 17:58:53 +10:00
grossmj af83adfdf6 Add debug message when calculating MD5 checksum 2023-08-02 17:41:51 +10:00
grossmj 658bfb7624 Allow connection to ws console over IPv6. Fixes https://github.com/GNS3/gns3-web-ui/issues/1400 2023-08-02 15:28:32 +10:00
grossmj 88a1cef21f Revert "Support for Python 3.12"
This reverts commit 1ced862c08.
2023-07-30 17:50:25 +10:00
grossmj 1ced862c08 Support for Python 3.12 2023-07-30 17:48:30 +10:00
grossmj 6097166055 Remove import urllib3 and let sentry_sdk import and patch it. Fixes https://github.com/GNS3/gns3-gui/issues/3498 2023-07-30 17:42:52 +10:00
grossmj 38ee79c15f Merge remote-tracking branch 'origin/master' into 2.2 2023-07-23 12:35:46 +10:00
grossmj a6ca7c4e36 Development on 2.2.42.dev1 2023-07-12 18:26:26 +10:00
Jeremy Grossmann b76d2c2150 Merge pull request #2258 from GNS3/release-v2.2.41
Release v2.2.41
2023-07-12 18:24:40 +10:00
89 changed files with 1118 additions and 207 deletions

No files matched your search

@@ -12,11 +12,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
fetch-depth: 0
ref: "gh-pages"
- uses: actions/setup-python@v2
- uses: actions/setup-python@v3
with:
python-version: 3.7
- name: Merge changes from 3.0 branch
@@ -24,13 +24,10 @@ jobs:
git config user.name github-actions
git config user.email github-actions@github.com
git merge origin/3.0 -X theirs
- name: Install dependencies
- name: Install GNS3 server and dependencies
run: |
python -m pip install --upgrade pip
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Install GNS3 server
run: |
python setup.py install
python -m pip install .
- name: Generate the API documentation
run: |
cd scripts
+3 -3
View File
@@ -16,12 +16,12 @@ jobs:
runs-on: ubuntu-20.04 # Downgrade Ubuntu to 20.04 to fix missing Python 3.6
strategy:
matrix:
python-version: ["3.6", "3.7", "3.8", "3.9", "3.10", "3.11"]
python-version: ["3.6", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
+35
View File
@@ -1,5 +1,40 @@
# Change Log
## 2.2.44 06/11/2023
* Bundle web-ui v2.2.44
* Non-blocking checksums computation when server starts. Fixes #2228
* Fix timeout issue when creating Qemu disk image. Fixes https://github.com/GNS3/gns3-server/issues/2313
* Support for web socket console over HTTPS
* Add back script create_cert.sh
* Allow disabling hardware virtualization check
* Fix L2IOU "failed code signing checks" when IOU base file name is >= 63 characters
* Change "ip cef" to "no ip cef" in IOU default configs. Fixes #2298
* Add Qemu IGB network device
* Add Python 3.12 support.
* Fix issue with importlib.resources.files() and Python 3.9
## 2.2.43 19/09/2023
* Force English output for VBoxManage. Fixes #2266
* Automatically add vboxnet and DHCP server if not present for VirtualBox GNS3 VM. Ref #2266
* Fix issue with controller config saved before checking current version with previous one
* Prevent X11 socket file to be modified by Docker container
* Use the user data dir to store built-in appliances
* Catch ConnectionResetError exception when client disconnects
* Upgrade to PyQt 5.15.9 and pywin32
## 2.2.42 09/08/2023
* Bundle web-ui v2.2.42
* Handle API version key in VirtualBox 7. Fixes #2266
* Enable system certificate store for SSL connections
* Use DEFAULT_BUFFER_SIZE for md5sum
* Fix version check when installing appliances. Ref https://github.com/GNS3/gns3-gui/issues/3486
* Allow connection to ws console over IPv6. Fixes https://github.com/GNS3/gns3-web-ui/issues/1400
* Support for Python 3.12
* Remove import urllib3 and let sentry_sdk import and patch it. Fixes https://github.com/GNS3/gns3-gui/issues/3498
## 2.2.41 12/07/2023
* Bundle web-ui v2.2.41
+1 -1
View File
@@ -69,7 +69,7 @@ GNS3 is perhaps packaged for your distribution:
- Alpine:
<https://pkgs.alpinelinux.org/package/v3.10/community/x86_64/gns3-server>
- NixOS:
<https://search.nixos.org/packages?channel=21.11&from=0&size=50&sort=relevance&type=packages&query=gns3-server>
<https://search.nixos.org/packages?channel=unstable&from=0&size=50&sort=relevance&type=packages&query=gns3-server>
Linux (Debian based)
--------------------
+1 -1
View File
@@ -5,7 +5,7 @@ image: Visual Studio 2022
platform: x64
environment:
PYTHON: "C:\\Python37-x64"
PYTHON: "C:\\Python38-x64"
DISTUTILS_USE_SDK: "1"
API_TOKEN:
secure: VEKn4bYH3QO0ixtQW5ni4Enmn8cS1NlZV246ludBDgQ=
+3
View File
@@ -62,6 +62,9 @@ default_nat_interface = vmnet10
; Enable the built-in templates
enable_builtin_templates = True
; check if hardware virtualization is used by other emulators (KVM, VMware or VirtualBox)
hardware_virtualization_check = True
[VPCS]
; VPCS executable location, default: search in PATH
;vpcs_path = vpcs
+32 -1
View File
@@ -21,9 +21,26 @@
"hda_disk_interface": "sata",
"arch": "x86_64",
"console_type": "telnet",
"kvm": "allow"
"kvm": "allow",
"options": "-cpu host -nographic"
},
"images": [
{
"filename": "AlmaLinux-9-GenericCloud-9.2-20230513.x86_64.qcow2",
"version": "9.2",
"md5sum": "c5bc76e8c95ac9f810a3482c80a54cc7",
"filesize": 563347456,
"download_url": "https://repo.almalinux.org/almalinux/9/cloud/x86_64/images/",
"direct_download_url": "https://repo.almalinux.org/almalinux/9/cloud/x86_64/images/AlmaLinux-9-GenericCloud-9.2-20230513.x86_64.qcow2"
},
{
"filename": "AlmaLinux-8-GenericCloud-8.8-20230524.x86_64.qcow2",
"version": "8.8",
"md5sum": "3958c5fc25770ef63cf97aa5d93f0a0b",
"filesize": 565444608,
"download_url": "https://repo.almalinux.org/almalinux/8/cloud/x86_64/images/",
"direct_download_url": "https://repo.almalinux.org/almalinux/8/cloud/x86_64/images/AlmaLinux-8-GenericCloud-8.8-20230524.x86_64.qcow2"
},
{
"filename": "AlmaLinux-8-GenericCloud-8.7-20221111.x86_64.qcow2",
"version": "8.7",
@@ -42,6 +59,20 @@
}
],
"versions": [
{
"name": "9.2",
"images": {
"hda_disk_image": "AlmaLinux-9-GenericCloud-9.2-20230513.x86_64.qcow2",
"cdrom_image": "almalinux-cloud-init-data.iso"
}
},
{
"name": "8.8",
"images": {
"hda_disk_image": "AlmaLinux-8-GenericCloud-8.8-20230524.x86_64.qcow2",
"cdrom_image": "almalinux-cloud-init-data.iso"
}
},
{
"name": "8.7",
"images": {
@@ -25,6 +25,14 @@
"kvm": "allow"
},
"images": [
{
"filename": "alpine-virt-3.18.4.qcow2",
"version": "3.18.4",
"md5sum": "99d393c16c870e12c4215aadd82ca998",
"filesize": 51066880,
"download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/",
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/alpine-virt-3.18.4.qcow2/download"
},
{
"filename": "alpine-virt-3.16.img",
"version": "3.16",
@@ -35,6 +43,12 @@
}
],
"versions": [
{
"name": "3.18.4",
"images": {
"hda_disk_image": "alpine-virt-3.18.4.qcow2"
}
},
{
"name": "3.16",
"images": {
+1
View File
@@ -5,6 +5,7 @@
"description": "Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox.",
"vendor_name": "Alpine Linux Development Team",
"vendor_url": "http://alpinelinux.org",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/Alpine Linux.png",
"documentation_url": "http://wiki.alpinelinux.org",
"product_name": "Alpine Linux",
"registry_version": 4,
+1 -1
View File
@@ -29,7 +29,7 @@
"md5sum": "435218a2e90cba921cc7fde1d64a9419",
"filesize": 287965184,
"download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/",
"direct_download_url": "http://downloads.sourceforge.net/project/gns-3/Qemu%20Appliances/bird2-debian-2.0.12.qcow2"
"direct_download_url": "https://downloads.sourceforge.net/project/gns-3/Qemu%20Appliances/bird2-debian-2.0.12.qcow2"
}
],
"versions": [
+32 -2
View File
@@ -12,7 +12,7 @@
"status": "stable",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"usage": "Username: centos\nPassword: centos",
"usage": "Username: centos or cloud-user\nPassword: centos",
"port_name_format": "Ethernet{0}",
"qemu": {
"adapter_type": "virtio-net-pci",
@@ -23,9 +23,25 @@
"console_type": "telnet",
"boot_priority": "c",
"kvm": "require",
"options": "-nographic"
"options": "-cpu host -nographic"
},
"images": [
{
"filename": "CentOS-Stream-GenericCloud-9-20230704.1.x86_64.qcow2",
"version": "Stream-9 (20230704.1)",
"md5sum": "e04511e019325a97837edd9eafe02b48",
"filesize": 1087868416,
"download_url": "https://cloud.centos.org/centos/9-stream/x86_64/images",
"direct_download_url": "https://cloud.centos.org/centos/9-stream/x86_64/images/CentOS-Stream-GenericCloud-9-20230704.1.x86_64.qcow2"
},
{
"filename": "CentOS-Stream-GenericCloud-8-20230710.0.x86_64.qcow2",
"version": "Stream-8 (20230710.0)",
"md5sum": "83e02ce98c29753c86fb7be7d802aa75",
"filesize": 1676164096,
"download_url": "https://cloud.centos.org/centos/8-stream/x86_64/images",
"direct_download_url": "https://cloud.centos.org/centos/8-stream/x86_64/images/CentOS-Stream-GenericCloud-8-20230710.0.x86_64.qcow2"
},
{
"filename": "CentOS-8-GenericCloud-8.4.2105-20210603.0.x86_64.qcow2",
"version": "8.4 (2105)",
@@ -60,6 +76,20 @@
}
],
"versions": [
{
"name": "Stream-9 (20230704.1)",
"images": {
"hda_disk_image": "CentOS-Stream-GenericCloud-9-20230704.1.x86_64.qcow2",
"cdrom_image": "centos-cloud-init-data.iso"
}
},
{
"name": "Stream-8 (20230710.0)",
"images": {
"hda_disk_image": "CentOS-Stream-GenericCloud-8-20230710.0.x86_64.qcow2",
"cdrom_image": "centos-cloud-init-data.iso"
}
},
{
"name": "8.4 (2105)",
"images": {
+1
View File
@@ -5,6 +5,7 @@
"description": "The chromium browser",
"vendor_name": "Chromium",
"vendor_url": "https://www.chromium.org/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/Chromium.jpg",
"product_name": "Chromium",
"registry_version": 4,
"status": "stable",
+1
View File
@@ -5,6 +5,7 @@
"description": "The CloudRouter Project is a collaborative open source project focused on developing a powerful, easy to use router designed for the cloud.\nCompute resources are rapidly migrating from physical infrastructure to a combination of physical, virtual and cloud environments. A similar transition is emerging in the networking space, with network control logic shifting from proprietary hardware-based platforms to open source software-based platforms. CloudRouter is a software-based router distribution designed to run on physical, virtual and cloud environments, supporting software-defined networking infrastructure. It includes the features of traditional hardware routers, as well as support for emerging technologies such as containers and software-defined interconnection. CloudRouter aims to facilitate migration to the cloud without giving up control over network routing and governance.",
"vendor_name": "CloudRouter Community",
"vendor_url": "https://cloudrouter.org/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/CloudRouter.png",
"documentation_url": "https://cloudrouter.atlassian.net/wiki/display/CPD/CloudRouter+Project+Information",
"product_name": "CloudRouter",
"product_url": "https://cloudrouter.org/about/",
+1
View File
@@ -5,6 +5,7 @@
"description": "CoreOS is designed for security, consistency, and reliability. Instead of installing packages via yum or apt, CoreOS uses Linux containers to manage your services at a higher level of abstraction. A single service's code and all dependencies are packaged within a container that can be run on one or many CoreOS machines.",
"vendor_name": "CoreOS, Inc",
"vendor_url": "https://coreos.com/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/CoreOS.png",
"documentation_url": "https://coreos.com/docs/",
"product_name": "CoreOS",
"registry_version": 4,
+1
View File
@@ -5,6 +5,7 @@
"description": "Cumulus VX is a community-supported virtual appliance that enables cloud admins and network engineers to preview and test Cumulus Networks technology at zero cost. You can build sandbox environments to learn Open Networking concepts, prototype network operations and script & develop applications risk-free. With Cumulus VX, you can get started with Open Networking at your pace, on your time, and in your environment!",
"vendor_name": "Cumulus Network",
"vendor_url": "https://www.cumulusnetworks.com",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/Cumulus VX.jpg",
"documentation_url": "http://docs.cumulusnetworks.com/",
"product_name": "Cumulus VX",
"product_url": "https://cumulusnetworks.com/cumulus-vx/",
+17 -42
View File
@@ -10,7 +10,7 @@
"status": "experimental",
"maintainer": "Bernhard Ehlers",
"maintainer_email": "dev-ehlers@mailbox.org",
"usage": "Username:\tdebian\nPassword:\tdebian\nTo become root, use \"sudo -s\".\n\nNetwork configuration:\n- In \"/etc/network/interfaces\" comment out \"source-directory /run/network/interfaces.d\"\n- Remove \"/etc/network/interfaces.d/50-cloud-init\"\n- Create \"/etc/network/interfaces.d/10-ens4\", for example:\n\nauto ens4\n#iface ens4 inet dhcp\niface ens4 inet static\n address 10.1.1.100/24\n gateway 10.1.1.1\n dns-nameservers 10.1.1.1\n",
"usage": "Username:\tdebian\nPassword:\tdebian\nTo become root, use \"sudo -s\".\n",
"symbol": "linux_guest.svg",
"port_name_format": "ens{port4}",
"qemu": {
@@ -24,58 +24,33 @@
},
"images": [
{
"filename": "debian-12-genericcloud-amd64-20230612-1409.qcow2",
"version": "12.0",
"md5sum": "524cf33a1284d6e3363bd4d843756386",
"filesize": 280166400,
"download_url": "https://cloud.debian.org/images/cloud/bookworm/",
"direct_download_url": "https://cloud.debian.org/images/cloud/bookworm/20230612-1409/debian-12-genericcloud-amd64-20230612-1409.qcow2"
"filename": "debian-12.2.qcow2",
"version": "12.2",
"md5sum": "adf7716ec4a4e4e9e5ccfc7a1d7bd103",
"filesize": 286654464,
"download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/",
"direct_download_url": "https://downloads.sourceforge.net/project/gns-3/Qemu%20Appliances/debian-12.2.qcow2"
},
{
"filename": "debian-11-genericcloud-amd64-20230601-1398.qcow2",
"version": "11.7",
"md5sum": "1b24a841dc5ca9bcf40b94ad4b4775d4",
"filesize": 259063808,
"download_url": "https://cloud.debian.org/images/cloud/bullseye/",
"direct_download_url": "https://cloud.debian.org/images/cloud/bullseye/20230601-1398/debian-11-genericcloud-amd64-20230601-1398.qcow2"
},
{
"filename": "debian-10-genericcloud-amd64-20230601-1398.qcow2",
"version": "10.13",
"md5sum": "ca799fb4011712f4686c422c1a9731cf",
"filesize": 228130816,
"download_url": "https://cloud.debian.org/images/cloud/buster/",
"direct_download_url": "https://cloud.debian.org/images/cloud/buster/20230601-1398/debian-10-genericcloud-amd64-20230601-1398.qcow2"
},
{
"filename": "debian-cloud-init-data.iso",
"version": "1.0",
"md5sum": "43f6bf70c178a9d3c270b5c24971e578",
"filesize": 374784,
"download_url": "https://github.com/GNS3/gns3-registry/tree/master/cloud-init/Debian",
"direct_download_url": "https://github.com/GNS3/gns3-registry/raw/master/cloud-init/Debian/debian-cloud-init-data.iso"
"filename": "debian-11.8.qcow2",
"version": "11.8",
"md5sum": "95bf44716c7fa1a1da290fd3c98591f2",
"filesize": 264933376,
"download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/",
"direct_download_url": "https://downloads.sourceforge.net/project/gns-3/Qemu%20Appliances/debian-11.8.qcow2"
}
],
"versions": [
{
"name": "12.0",
"name": "12.2",
"images": {
"hda_disk_image": "debian-12-genericcloud-amd64-20230612-1409.qcow2",
"cdrom_image": "debian-cloud-init-data.iso"
"hda_disk_image": "debian-12.2.qcow2"
}
},
{
"name": "11.7",
"name": "11.8",
"images": {
"hda_disk_image": "debian-11-genericcloud-amd64-20230601-1398.qcow2",
"cdrom_image": "debian-cloud-init-data.iso"
}
},
{
"name": "10.13",
"images": {
"hda_disk_image": "debian-10-genericcloud-amd64-20230601-1398.qcow2",
"cdrom_image": "debian-cloud-init-data.iso"
"hda_disk_image": "debian-11.8.qcow2"
}
}
]
+112
View File
@@ -33,6 +33,22 @@
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty8G.qcow2/download"
},
{
"filename": "empty10G.qcow2",
"version": "10G",
"md5sum": "1d4589798b8a63a6afa7150492ca3193",
"filesize": 196768,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty10G.qcow2/download"
},
{
"filename": "empty20G.qcow2",
"version": "20G",
"md5sum": "df9e4a1169c597117fd8999f0bc3de91",
"filesize": 196928,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty20G.qcow2/download"
},
{
"filename": "empty30G.qcow2",
"version": "30G",
@@ -41,6 +57,22 @@
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
},
{
"filename": "empty40G.qcow2",
"version": "40G",
"md5sum": "4a9e538aa1946a27d91a8d53a8dbc546",
"filesize": 197248,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty50G.qcow2/download"
},
{
"filename": "empty50G.qcow2",
"version": "50G",
"md5sum": "9a17e67e685907fbc0c351689ab289b2",
"filesize": 197408,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty40G.qcow2/download"
},
{
"filename": "empty100G.qcow2",
"version": "100G",
@@ -49,6 +81,14 @@
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty100G.qcow2/download"
},
{
"filename": "empty150G.qcow2",
"version": "150G",
"md5sum": "7db590ad39f84fdfc91516d162af26f6",
"filesize": 199008,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty150G.qcow2/download"
},
{
"filename": "empty200G.qcow2",
"version": "200G",
@@ -56,6 +96,30 @@
"filesize": 200192,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty200G.qcow2/download"
},
{
"filename": "empty250G.qcow2",
"version": "250G",
"md5sum": "7d7272f02edd189aafd81f9c29a35255",
"filesize": 200608,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty250G.qcow2/download"
},
{
"filename": "empty500G.qcow2",
"version": "500G",
"md5sum": "658c825441b9b3080ba00f9eec002eaa",
"filesize": 204608,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty500G.qcow2/download"
},
{
"filename": "empty1T.qcow2",
"version": "1T",
"md5sum": "34997a22f618827aaa62bcfd5b8ce2bb",
"filesize": 212992,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty1T.qcow2/download"
}
],
"versions": [
@@ -65,23 +129,71 @@
"hda_disk_image": "empty8G.qcow2"
}
},
{
"name": "10G",
"images": {
"hda_disk_image": "empty10G.qcow2"
}
},
{
"name": "20G",
"images": {
"hda_disk_image": "empty20G.qcow2"
}
},
{
"name": "30G",
"images": {
"hda_disk_image": "empty30G.qcow2"
}
},
{
"name": "40G",
"images": {
"hda_disk_image": "empty40G.qcow2"
}
},
{
"name": "50G",
"images": {
"hda_disk_image": "empty50G.qcow2"
}
},
{
"name": "100G",
"images": {
"hda_disk_image": "empty100G.qcow2"
}
},
{
"name": "150G",
"images": {
"hda_disk_image": "empty150G.qcow2"
}
},
{
"name": "200G",
"images": {
"hda_disk_image": "empty200G.qcow2"
}
},
{
"name": "250G",
"images": {
"hda_disk_image": "empty250G.qcow2"
}
},
{
"name": "500G",
"images": {
"hda_disk_image": "empty500G.qcow2"
}
},
{
"name": "1T",
"images": {
"hda_disk_image": "empty1T.qcow2"
}
}
]
}
+17
View File
@@ -0,0 +1,17 @@
{
"appliance_id": "f59a5cf6-baaa-45a6-9685-989a2c3f3f4a",
"name": "endhost",
"category": "guest",
"description": "General purpose alpine-based endhost",
"vendor_name": "endhost",
"vendor_url": "https://www.alpinelinux.org",
"product_name": "endhost",
"registry_version": 4,
"status": "experimental",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"docker": {
"adapters": 1,
"image": "gns3/endhost:latest"
}
}
@@ -5,6 +5,7 @@
"description": "The VOSS VM is a software emulation of a VSP8K switch.",
"vendor_name": "Extreme Networks",
"vendor_url": "http://www.extremenetworks.com",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/VOSS VM.jpeg",
"documentation_url": "http://www.extremenetworks.com/support/documentation",
"product_name": "VOSS_VM",
"registry_version": 4,
@@ -27,6 +28,13 @@
"options": "-nographic"
},
"images": [
{
"filename": "VOSSGNS3.8.10.1.0.qcow2",
"version": "v8.10.1.0",
"md5sum": "d8f09f5a9759882be84ad7e4be575ed3",
"filesize": 433258496,
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_VOSS/VOSSGNS3.8.10.1.0.qcow2"
},
{
"filename": "VOSSGNS3.8.8.0.0.qcow2",
"version": "v8.8.0.0",
@@ -85,6 +93,13 @@
}
],
"versions": [
{
"name": "v8.10.1.0",
"images":
{
"hda_disk_image": "VOSSGNS3.8.10.1.0.qcow2"
}
},
{
"name": "v8.8.0.0",
"images": {
+45
View File
@@ -26,6 +26,30 @@
"options": "-nographic"
},
"images": [
{
"filename": "Fedora-Cloud-Base-38-1.6.x86_64.qcow2",
"version": "38-1.6",
"md5sum": "53ddfe7b28666d5ddc55e93ff06abad2",
"filesize": 497287168,
"download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/38/Cloud/x86_64/images",
"direct_download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/38/Cloud/x86_64/images/Fedora-Cloud-Base-38-1.6.x86_64.qcow2"
},
{
"filename": "Fedora-Cloud-Base-37-1.7.x86_64.qcow2",
"version": "37-1.7",
"md5sum": "36f7b464b6ab46ad97c001b539495e90",
"filesize": 492830720,
"download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/37/Cloud/x86_64/images",
"direct_download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/37/Cloud/x86_64/images/Fedora-Cloud-Base-37-1.7.x86_64.qcow2"
},
{
"filename": "Fedora-Cloud-Base-36-1.5.x86_64.qcow2",
"version": "36-1.5",
"md5sum": "7f7cdad25b77f232078bf454c39529d3",
"filesize": 448266240,
"download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/36/Cloud/x86_64/images",
"direct_download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/36/Cloud/x86_64/images/Fedora-Cloud-Base-36-1.5.x86_64.qcow2"
},
{
"filename": "Fedora-Cloud-Base-35-1.2.x86_64.qcow2",
"version": "35-1.2",
@@ -44,6 +68,27 @@
}
],
"versions": [
{
"name": "38-1.6",
"images": {
"hda_disk_image": "Fedora-Cloud-Base-38-1.6.x86_64.qcow2",
"cdrom_image": "fedora-cloud-init-data.iso"
}
},
{
"name": "37-1.7",
"images": {
"hda_disk_image": "Fedora-Cloud-Base-37-1.7.x86_64.qcow2",
"cdrom_image": "fedora-cloud-init-data.iso"
}
},
{
"name": "36-1.5",
"images": {
"hda_disk_image": "Fedora-Cloud-Base-36-1.5.x86_64.qcow2",
"cdrom_image": "fedora-cloud-init-data.iso"
}
},
{
"name": "35-1.2",
"images": {
+1
View File
@@ -5,6 +5,7 @@
"description": "A light Linux based on TinyCore Linux with Firefox preinstalled",
"vendor_name": "Mozilla Foundation",
"vendor_url": "http://www.mozilla.org",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/Firefox.png",
"documentation_url": "https://support.mozilla.org",
"product_name": "Firefox",
"product_url": "https://www.mozilla.org/firefox",
+62 -4
View File
@@ -5,20 +5,22 @@
"description": "FortiAnalyzer Network Security Logging, Analysis, and Reporting Appliances securely aggregate log data from Fortinet Security Appliances. A comprehensive suite of easily customable reports allows you to quickly analyze and visualize network threats, inefficiencies and usage.",
"vendor_name": "Fortinet",
"vendor_url": "http://www.fortinet.com/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/FortiAnalyzer.jpg",
"documentation_url": "http://docs.fortinet.com/fortianalyzer/",
"product_name": "FortiAnalyzer",
"product_url": "https://www.fortinet.com/products-services/products/management-reporting/fortianalyzer.html",
"registry_version": 4,
"status": "stable",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"usage": "Default username is admin, no password is set.\n\n- Versions 7.0 and higher require:\n--RAM: 8192 MB\n--CPU:4",
"maintainer": "Ean Towne",
"maintainer_email": "ean.fortinet@gmail.com",
"usage": "Default username is admin, no password is set.\n\n- Versions lower than 7.0.x can reduce CPU/RAM",
"symbol": "fortinet.svg",
"port_name_format": "Port{port1}",
"qemu": {
"adapter_type": "e1000",
"adapters": 4,
"ram": 4096,
"ram": 16384,
"cpus": 4,
"hda_disk_interface": "virtio",
"hdb_disk_interface": "virtio",
"arch": "x86_64",
@@ -27,6 +29,20 @@
"kvm": "allow"
},
"images": [
{
"filename": "FAZ_VM64_KVM-v7.4.1-build2308-FORTINET.out.kvm.qcow2",
"version": "7.4.1",
"md5sum": "f30caac36854c2a0cc1e35c4ab5f310d",
"filesize": 435310592,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FAZ_VM64_KVM-v7.2.4-build1460-FORTINET.out.kvm.qcow2",
"version": "7.2.4",
"md5sum": "d53bd5c61cc3f5e387557dfcfe9bc530",
"filesize": 363327488,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FAZ_VM64_KVM-v7.2.2-build1334-FORTINET.out.kvm.qcow2",
"version": "7.2.2",
@@ -41,6 +57,13 @@
"filesize": 340631552,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FAZ_VM64_KVM-v7.0.9-build0489-FORTINET.out.kvm.qcow2",
"version": "7.0.9",
"md5sum": "3f69c9bc4fa7776476edf0ce9728ebd7",
"filesize": 347889664,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FAZ_VM64_KVM-v7.0.6-build0372-FORTINET.out.kvm.qcow2",
"version": "7.0.6",
@@ -55,6 +78,13 @@
"filesize": 334184448,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FAZ_VM64_KVM-v6.4.12-build2610-FORTINET.out.kvm.qcow2",
"version": "6.4.12",
"md5sum": "b9e164c2d4e778348a6a7107d375abf3",
"filesize": 300691456,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FAZ_VM64_KVM-v6-build2288-FORTINET.out.kvm.qcow2",
"version": "6.4.5",
@@ -205,6 +235,20 @@
}
],
"versions": [
{
"name": "7.4.1",
"images": {
"hda_disk_image": "FAZ_VM64_KVM-v7.4.1-build2308-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.2.4",
"images": {
"hda_disk_image": "FAZ_VM64_KVM-v7.2.4-build1460-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.2.2",
"images": {
@@ -219,6 +263,13 @@
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.0.9",
"images": {
"hda_disk_image": "FAZ_VM64_KVM-v7.0.9-build0489-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.0.6",
"images": {
@@ -233,6 +284,13 @@
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "6.4.12",
"images": {
"hda_disk_image": "FAZ_VM64_KVM-v6.4.12-build2610-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "6.4.5",
"images": {
@@ -5,6 +5,7 @@
"description": "FortiAuthenticator user identity management appliances strengthen enterprise security by simplifying and centralizing the management and storage of user identity information.",
"vendor_name": "Fortinet",
"vendor_url": "http://www.fortinet.com/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/FortiAuthenticator.jpg",
"documentation_url": "http://docs.fortinet.com/fortiauthenticator/admin-guides",
"product_name": "FortiAuthenticator",
"product_url": "https://www.fortinet.com/products/identity-access-management/fortiauthenticator.html",
+1
View File
@@ -5,6 +5,7 @@
"description": "FortiCache VM high performance Web Caching virtual appliances address bandwidth saturation, high latency, and poor performance caused by caching popular internet content locally for carriers, service providers, enterprises and educational networks. FortiCache VM appliances reduce the cost and impact of cached content on the network, while increasing performance and end- user satisfaction by improving the speed of delivery of popular repeated content.",
"vendor_name": "Fortinet",
"vendor_url": "http://www.fortinet.com/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/FortiCache.jpg",
"documentation_url": "http://docs.fortinet.com/forticache/admin-guides",
"product_name": "FortiCache",
"product_url": "https://www.fortinet.com/products-services/products/wan-appliances/forticache.html",
+74 -3
View File
@@ -5,20 +5,21 @@
"description": "FortiGate Virtual Appliance offers the same level of advanced threat prevention features like the physical appliances in private, hybrid and public cloud deployment.",
"vendor_name": "Fortinet",
"vendor_url": "http://www.fortinet.com/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/FortiGate.jpg",
"documentation_url": "http://docs.fortinet.com/p/inside-fortios",
"product_name": "FortiGate",
"product_url": "http://www.fortinet.com/products/fortigate/virtual-appliances.html",
"registry_version": 4,
"status": "stable",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"maintainer": "Ean Towne",
"maintainer_email": "ean.fortinet@gmail.com",
"usage": "Default username is admin, no password is set.\n\n- FortiGate version 7.0.0 and above require 2GB RAM.\n\n- FortiGate versions higher than 7.2.0 trial license is VERY restrictive, not recommended for use.",
"symbol": "fortinet.svg",
"port_name_format": "Port{port1}",
"qemu": {
"adapter_type": "e1000",
"adapters": 10,
"ram": 1024,
"ram": 2048,
"hda_disk_interface": "virtio",
"hdb_disk_interface": "virtio",
"arch": "x86_64",
@@ -27,6 +28,20 @@
"kvm": "allow"
},
"images": [
{
"filename": "FGT_VM64_KVM-v7.4.1.F-build2463-FORTINET.out.kvm.qcow2",
"version": "7.4.1",
"md5sum": "362a2f3d4ca842aaabd87191d4446584",
"filesize": 116064256,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FGT_VM64_KVM-v7.2.6.F-build1575-FORTINET.out.kvm.qcow2",
"version": "7.2.6",
"md5sum": "b5ef3c844abb4947f98b88ae0048660b",
"filesize": 103022592,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FGT_VM64_KVM-v7.2.4.F-build1396-FORTINET.out.kvm.qcow2",
"version": "7.2.4",
@@ -48,6 +63,20 @@
"filesize": 86704128,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FGT_VM64_KVM-v7.0.13.M-build0566-FORTINET.out.kvm.qcow2",
"version": "7.0.13",
"md5sum": "47a4bab29407153a635c54b64d6a226e",
"filesize": 89325568,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FGT_VM64_KVM-v7.0.12.M-build0523-FORTINET.out.kvm.qcow2",
"version": "7.0.12",
"md5sum": "7cd2452dde489c80f48c40a7f8a48c8e",
"filesize": 88997888,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FGT_VM64_KVM-v7.0.10.M-build0450-FORTINET.out.kvm.qcow2",
"version": "7.0.10",
@@ -62,6 +91,13 @@
"filesize": 77135872,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FGT_VM64_KVM-v6.4.14.M-build2093-FORTINET.out.kvm.qcow2",
"version": "6.4.14",
"md5sum": "5758340f9d3e1a03139176ab46e63e8d",
"filesize": 81461248,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FGT_VM64_KVM-v6.4.12.M-build2060-FORTINET.out.kvm.qcow2",
"version": "6.4.12",
@@ -303,6 +339,20 @@
}
],
"versions": [
{
"name": "7.4.1",
"images": {
"hda_disk_image": "FGT_VM64_KVM-v7.4.1.F-build2463-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.2.6",
"images": {
"hda_disk_image": "FGT_VM64_KVM-v7.2.6.F-build1575-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.2.4",
"images": {
@@ -324,6 +374,20 @@
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.0.13",
"images": {
"hda_disk_image": "FGT_VM64_KVM-v7.0.13.M-build0566-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.0.12",
"images": {
"hda_disk_image": "FGT_VM64_KVM-v7.0.12.M-build0523-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.0.10",
"images": {
@@ -338,6 +402,13 @@
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "6.4.14",
"images": {
"hda_disk_image": "FGT_VM64_KVM-v6.4.14.M-build2093-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "6.4.12",
"images": {
+1
View File
@@ -5,6 +5,7 @@
"description": "FortiMail is a complete Secure Email Gateway offering suitable for any size organization. It provides a single solution to protect against inbound attacks - including advanced malware -, as well as outbound threats and data loss with a wide range of top-rated security capabilities.",
"vendor_name": "Fortinet",
"vendor_url": "http://www.fortinet.com/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/FortiMail.jpg",
"documentation_url": "http://docs.fortinet.com/fortimail/admin-guides",
"product_name": "FortiMail",
"product_url": "http://www.fortinet.com/products/fortimail/index.html",
+62 -4
View File
@@ -5,20 +5,22 @@
"description": "FortiManager Security Management appliances allow you to centrally manage any number of Fortinet Network Security devices, from several to thousands, including FortiGate, FortiWiFi, and FortiCarrier.",
"vendor_name": "Fortinet",
"vendor_url": "http://www.fortinet.com/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/FortiManager.jpg",
"documentation_url": "http://docs.fortinet.com/p/inside-fortios",
"product_name": "FortiManager",
"product_url": "http://www.fortinet.com/products/fortimanager/virtual-security-management.html",
"registry_version": 4,
"status": "stable",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"usage": "Default username is admin, no password is set.\n\n- Versions 7.0 and higher require:\n--RAM: 8192 MB\n--CPU:4",
"maintainer": "Ean Towne",
"maintainer_email": "ean.fortinet@gmail.com",
"usage": "Default username is admin, no password is set.\n\n- Versions lower than 7.0.x require less CPU/RAM",
"symbol": "fortinet.svg",
"port_name_format": "Port{port1}",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 4,
"ram": 2048,
"ram": 8192,
"cpus": 4,
"hda_disk_interface": "virtio",
"hdb_disk_interface": "virtio",
"arch": "x86_64",
@@ -27,6 +29,20 @@
"kvm": "allow"
},
"images": [
{
"filename": "FMG_VM64_KVM-v7.4.1-build2308-FORTINET.out.kvm.qcow2",
"version": "7.4.1",
"md5sum": "e542cc8f2d8f46e9c32b783bf31bef39",
"filesize": 309387264,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v7.2.4-build1460-FORTINET.out.kvm.qcow2",
"version": "7.2.4",
"md5sum": "98fa9830d9ecb5911a703d03b80026b6",
"filesize": 261992448,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v7.2.2-build1334-FORTINET.out.kvm.qcow2",
"version": "7.2.2",
@@ -41,6 +57,13 @@
"filesize": 242814976,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v7.0.9-build0489-FORTINET.out.kvm.qcow2",
"version": "7.0.9",
"md5sum": "dbeb6a79b6e421000573dbbbdb50b8b5",
"filesize": 247955456,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v7.0.6-build0372-FORTINET.out.kvm.qcow2",
"version": "7.0.6",
@@ -55,6 +78,13 @@
"filesize": 237535232,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v6.4.12-build2610-FORTINET.out.kvm.qcow2",
"version": "6.4.12",
"md5sum": "36c0dc531d921e5f1e1e09b030f7c813",
"filesize": 219455488,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v6-build2288-FORTINET.out.kvm.qcow2",
"version": "6.4.5",
@@ -205,6 +235,20 @@
}
],
"versions": [
{
"name": "7.4.1",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v7.4.1-build2308-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.2.4",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v7.2.4-build1460-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.2.2",
"images": {
@@ -219,6 +263,13 @@
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.0.9",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v7.0.9-build0489-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.0.6",
"images": {
@@ -233,6 +284,13 @@
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "6.4.12",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v6.4.12-build2610-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "6.4.5",
"images": {
+1
View File
@@ -5,6 +5,7 @@
"description": "Today's threats are increasingly sophisticated and often bypass traditional malware security by masking their malicious activity. A sandbox augments your security architecture by validating threats in a separate, secure environment. FortiSandbox offers a powerful combination of advanced detection, automated mitigation, actionable insight, and flexible deployment to stop targeted attacks and subsequent data loss. It's also a key component of our Advanced Threat Protection solution.",
"vendor_name": "Fortinet",
"vendor_url": "http://www.fortinet.com/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/FortiSandbox.jpg",
"documentation_url": "http://docs.fortinet.com/fortisandbox/admin-guides",
"product_name": "FortiSandbox",
"product_url": "https://www.fortinet.com/products/sandbox/fortisandbox.html",
@@ -5,6 +5,7 @@
"description": "Breaches to network security continue to occur across all industry verticals, even to the most respected brands. The time it takes to discover, isolate, and remediate the incident continues to be measured in hundreds of days-having material impacts on security and compliance standards. It is no wonder that many organizations are struggling. As recent surveys have shown, enterprises have an average of 32 different vendors' devices in their network, with no automated ability to cross-correlate the data that each is collecting. It is also easy to see why organizations are strapped for the cyber security personnel they need to manage all the data in these complex environments.\n\nFrom its inception, FortiSIEM was built to reduce complexity in managing network and security operations. FortiSIEM provides organizations of all sizes with a comprehensive, holistic, and scalable solution for managing security, performance, and compliance from IoT to the cloud.",
"vendor_name": "Fortinet",
"vendor_url": "http://www.fortinet.com/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/FortiSIEM.jpg",
"documentation_url": "http://docs.fortinet.com/fortisiem/admin-guides",
"product_name": "FortiSIEM",
"product_url": "https://www.fortinet.com/products/siem/fortisiem.html",
+1
View File
@@ -5,6 +5,7 @@
"description": "FortiWeb Web Application Firewalls provide specialized, layered web application threat protection for medium/large enterprises, application service providers, and SaaS providers.",
"vendor_name": "Fortinet",
"vendor_url": "http://www.fortinet.com/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/FortiWeb.jpg",
"documentation_url": "http://docs.fortinet.com/fortiweb",
"product_name": "FortiWeb",
"product_url": "http://www.fortinet.com/products/fortiweb/index.html",
+1
View File
@@ -5,6 +5,7 @@
"description": "FreeBSD is an advanced computer operating system used to power modern servers, desktops, and embedded platforms. A large community has continually developed it for more than thirty years. Its advanced networking, security, and storage features have made FreeBSD the platform of choice for many of the busiest web sites and most pervasive embedded networking and storage devices.",
"vendor_name": "FreeBSD",
"vendor_url": "http://www.freebsd.org",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/FreeBSD.jpg",
"documentation_url": "https://www.freebsd.org/docs.html",
"product_name": "FreeBSD",
"registry_version": 4,
+18
View File
@@ -0,0 +1,18 @@
{
"appliance_id": "79df483d-8cc9-48de-85ea-e6cb45b93e2a",
"name": "haproxy",
"category": "guest",
"description": "haproxy alpine container",
"vendor_name": "haproxy",
"vendor_url": "https://www.haproxy.org",
"product_name": "haproxy",
"registry_version": 4,
"status": "experimental",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"usage": "Modify /etc/haproxy/haproxy.cfg to suit your needs.",
"docker": {
"adapters": 1,
"image": "gns3/haproxy:latest"
}
}
+1
View File
@@ -5,6 +5,7 @@
"description": "The HPE VSR1000 Virtual Services Router Series is a software application, running on a server, which provides functionality similar to that of a physical router: robust routing between networked devices using a number of popular routing protocols. It also delivers the critical network services associated with today's enterprise routers such as VPN gateway, firewall and other security and traffic management functions.\n\nThe virtual services router (VSR) application runs on a hypervqcor on the server, and supports VMware vSphere and Linux KVM hypervqcors. From one to eight virtual CPUs are supported, depending on license.\n\nBecause the VSR1000 Series application runs the same HPE Comware version 7 operating system as HPE switches and routers, it enables significant operational savings. And being virtual, additional agility and ease of deployment is realized, as resources on the VSR can be dynamically allocated and upgraded upon demand as performance requirements grow.\n\nA variety of deployment models are supported including enterprise branch CPE routing, and cloud offload for small to medium workloads.",
"vendor_name": "HPE",
"vendor_url": "http://www.hpe.com",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/HPE VSR1001.jpg",
"documentation_url": "https://support.hpe.com/hpesc/public/home/documentHome?document_type=135&sp4ts.oid=5195141",
"product_name": "VSR1001",
"product_url": "https://www.hpe.com/us/en/product-catalog/networking/networking-routers/pip.hpe-flexnetwork-vsr1000-virtual-services-router-series.5443163.html",
+1 -1
View File
@@ -21,7 +21,7 @@
"arch": "x86_64",
"console_type": "telnet",
"kvm": "require",
"options": "-machine type=pc-1.0,accel=kvm -serial mon:stdio -nographic -nodefaults -rtc base=utc -cpu host"
"options": "-machine type=pc,accel=kvm -serial mon:stdio -nographic -nodefaults -rtc base=utc -cpu host"
},
"images": [
{
+1 -1
View File
@@ -23,7 +23,7 @@
"arch": "x86_64",
"console_type": "telnet",
"kvm": "require",
"options": "-machine type=pc-1.0,accel=kvm -serial mon:stdio -nographic -nodefaults -rtc base=utc -cpu host"
"options": "-machine type=pc,accel=kvm -serial mon:stdio -nographic -nodefaults -rtc base=utc -cpu host"
},
"images": [
{
@@ -5,6 +5,7 @@
"description": "Kerio Connect makes email, calendars, contacts and task management easy and affordable. With Kerio Connect, you have immediate, secure access to your communications anytime, anywhere, on any device - without complexity or expensive overhead.",
"vendor_name": "Kerio Technologies Inc.",
"vendor_url": "http://www.kerio.com",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/Kerio Connect.jpg",
"documentation_url": "http://kb.kerio.com/product/kerio-connect/",
"product_name": "Kerio Connect",
"product_url": "http://www.kerio.com/products/kerio-connect",
@@ -5,6 +5,7 @@
"description": "Protect your network from viruses, malware and malicious activity with Kerio Control, the easy-to-administer yet powerful all-in-one security solution.\nKerio Control brings together next-generation firewall capabilities - including a network firewall and router, intrusion detection and prevention (IPS), gateway anti-virus, VPN, and web content and application filtering. These comprehensive capabilities and unmatched deployment flexibility make Kerio Control the ideal choice for small and mid-sized businesses.",
"vendor_name": "Kerio Technologies Inc.",
"vendor_url": "http://www.kerio.com",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/Kerio Control.jpg",
"documentation_url": "http://kb.kerio.com/product/kerio-control/",
"product_name": "Kerio Control",
"product_url": "http://www.kerio.com/products/kerio-control",
@@ -5,6 +5,7 @@
"description": "Stay connected to your customers and colleagues without being chained to your desk.\nKerio Operator is a VoIP based phone system that provides powerful yet affordable enterprise-class voice and video communication capabilities for small and mid-sized businesses globally.",
"vendor_name": "Kerio Technologies Inc.",
"vendor_url": "http://www.kerio.com",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/Kerio Operator.jpg",
"documentation_url": "http://kb.kerio.com/product/kerio-operator/",
"product_name": "Kerio Operator",
"product_url": "http://www.kerio.com/products/kerio-operator",
+30
View File
@@ -27,6 +27,15 @@
"options": "-nographic"
},
"images": [
{
"filename": "chr-7.11.2.img",
"version": "7.11.2",
"md5sum": "fbffd097d2c5df41fc3335c3977f782c",
"filesize": 134217728,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download.mikrotik.com/routeros/7.11.2/chr-7.11.2.img.zip",
"compression": "zip"
},
{
"filename": "chr-7.10.1.img",
"version": "7.10.1",
@@ -72,6 +81,15 @@
"direct_download_url": "https://download.mikrotik.com/routeros/7.1.5/chr-7.1.5.img.zip",
"compression": "zip"
},
{
"filename": "chr-6.49.10.img",
"version": "6.49.10",
"md5sum": "49ae1ecfe310aea1df37b824aa13cf84",
"filesize": 67108864,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download.mikrotik.com/routeros/6.49.10/chr-6.49.10.img.zip",
"compression": "zip"
},
{
"filename": "chr-6.49.6.img",
"version": "6.49.6",
@@ -92,6 +110,12 @@
}
],
"versions": [
{
"name": "7.11.2",
"images": {
"hda_disk_image": "chr-7.11.2.img"
}
},
{
"name": "7.10.1",
"images": {
@@ -122,6 +146,12 @@
"hda_disk_image": "chr-7.1.5.img"
}
},
{
"name": "6.49.10",
"images": {
"hda_disk_image": "chr-6.49.10.img"
}
},
{
"name": "6.49.6",
"images": {
+1
View File
@@ -5,6 +5,7 @@
"description": "ntopng is the next generation version of the original ntop, a network traffic probe that shows the network usage, similar to what the popular top Unix command does. ntopng is based on libpcap and it has been written in a portable way in order to virtually run on every Unix platform, MacOSX and on Windows as well. ntopng users can use a a web browser to navigate through ntop (that acts as a web server) traffic information and get a dump of the network status. In the latter case, ntopng can be seen as a simple RMON-like agent with an embedded web interface.",
"vendor_name": "ntop",
"vendor_url": "https://www.ntop.org/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/ntopng.jpg",
"documentation_url": "https://www.ntop.org/guides/ntopng/",
"product_name": "ntopng",
"registry_version": 4,
+1
View File
@@ -5,6 +5,7 @@
"description": "Over 200,000 IT staff across medium to large enterprises worldwide are currently using OP5 Monitor as their preferred network monitoring software.\nOP5 Monitor allows you to take control of your IT, enabling your network to be more responsive, more reliable and even faster than ever before. With unparalleled scalability, OP5 Monitor grows as your company grows, so you'll understand why we say this is the last network monitor you'll ever need to purchase.",
"vendor_name": "OP5",
"vendor_url": "https://www.op5.com/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/OP5 Monitor.jpg",
"documentation_url": "https://kb.op5.com/display/MAN/Documentation+Home#sthash.pohb5bis.dpbs",
"product_name": "OP5 Monitor",
"product_url": "https://www.op5.com/op5-monitor/",
@@ -26,6 +26,14 @@
"kvm": "require"
},
"images": [
{
"filename": "openmediavault_6.5.0-amd64.iso",
"version": "6.5.0",
"md5sum": "aa40e5ca50748b139cba2f4ac704a72d",
"filesize": 941621248,
"download_url": "https://www.openmediavault.org/download.html",
"direct_download_url": "https://sourceforge.net/projects/openmediavault/files/6.5.0/openmediavault_6.5.0-amd64.iso"
},
{
"filename": "openmediavault_6.0.24-amd64.iso",
"version": "6.0.24",
@@ -60,6 +68,14 @@
}
],
"versions": [
{
"name": "6.5.0",
"images": {
"hda_disk_image": "empty30G.qcow2",
"hdb_disk_image": "empty30G.qcow2",
"cdrom_image": "openmediavault_6.5.0-amd64.iso"
}
},
{
"name": "6.0.24",
"images": {
+1
View File
@@ -5,6 +5,7 @@
"description": "openSUSE is a free and Linux-based operating system for PC, Laptop or Server. The openSUSE project is a community program sponsored by Novell. It is a general purpose operating system built on top of the Linux kernel, developed by the community-supported openSUSE Project and sponsored by SUSE and a number of other companies.",
"vendor_name": "SUSE LLC.",
"vendor_url": "https://www.opensuse.org/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/openSUSE.png",
"documentation_url": "https://en.opensuse.org/Main_Page",
"product_name": "openSUSE",
"product_url": "https://www.opensuse.org/#Leap",
+1
View File
@@ -5,6 +5,7 @@
"description": "Open vSwitch is a production quality, multilayer virtual switch licensed under the open source Apache 2.0 license. It is designed to enable massive network automation through programmatic extension, while still supporting standard management interfaces and protocols (e.g. NetFlow, sFlow, IPFIX, RSPAN, CLI, LACP, 802.1ag). In addition, it is designed to support distribution across multiple physical servers similar to VMware's vNetwork distributed vswitch or Cisco's Nexus 1000V.",
"vendor_name": "Open vSwitch",
"vendor_url": "http://openvswitch.org/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/Open vSwitch.jpg",
"documentation_url": "http://openvswitch.org/support/",
"product_name": "Open vSwitch",
"product_url": "http://openvswitch.org/",
+17 -2
View File
@@ -23,6 +23,15 @@
"kvm": "allow"
},
"images": [
{
"filename": "openwrt-23.05.0-x86-64-generic-ext4-combined.img",
"version": "23.05.0",
"md5sum": "8d53c7aa2605a8848b0b2ca759fc924f",
"filesize": 126353408,
"download_url": "https://downloads.openwrt.org/releases/23.05.0/targets/x86/64/",
"direct_download_url": "https://downloads.openwrt.org/releases/23.05.0/targets/x86/64/openwrt-23.05.0-x86-64-generic-ext4-combined.img.gz",
"compression": "gzip"
},
{
"filename": "openwrt-22.03.0-x86-64-generic-ext4-combined.img",
"version": "22.03.0",
@@ -170,7 +179,7 @@
{
"filename": "openwrt-18.06.5-x86-64-combined-ext4.img",
"version": "18.06.5",
"md5sum": "6fce24c15f0bc75af16c133b839aea30",
"md5sum": "a0f72f4e75e15bef06396fa31eb1bc82",
"filesize": 285736960,
"download_url": "https://downloads.openwrt.org/releases/18.06.5/targets/x86/64/",
"direct_download_url": "https://downloads.openwrt.org/releases/18.06.5/targets/x86/64/openwrt-18.06.5-x86-64-combined-ext4.img.gz",
@@ -179,7 +188,7 @@
{
"filename": "openwrt-18.06.2-x86-64-combined-ext4.img",
"version": "18.06.2",
"md5sum": "d112cd432bf51e2ddadbf9513f272fd9",
"md5sum": "9996a3c070b3e2ea582d28293bd78055",
"filesize": 285736960,
"download_url": "https://downloads.openwrt.org/releases/18.06.2/targets/x86/64/",
"direct_download_url": "https://downloads.openwrt.org/releases/18.06.2/targets/x86/64/openwrt-18.06.2-x86-64-combined-ext4.img.gz",
@@ -214,6 +223,12 @@
}
],
"versions": [
{
"name": "23.05.0",
"images": {
"hda_disk_image": "openwrt-23.05.0-x86-64-generic-ext4-combined.img"
}
},
{
"name": "22.03.0",
"images": {
@@ -26,6 +26,14 @@
"options": "-cpu host -nographic"
},
"images": [
{
"filename": "OL9U2_x86_64-kvm-b197.qcow",
"version": "9.2",
"md5sum": "2ff3d0bc8a243ad89c96215f303f1c73",
"filesize": 560791552,
"download_url": "https://yum.oracle.com/oracle-linux-templates.html",
"direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL9/u2/x86_64/OL9U2_x86_64-kvm-b197.qcow"
},
{
"filename": "OL9U1_x86_64-kvm-b158.qcow",
"version": "9.1",
@@ -34,6 +42,14 @@
"download_url": "https://yum.oracle.com/oracle-linux-templates.html",
"direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL9/u1/x86_64/OL9U1_x86_64-kvm-b158.qcow"
},
{
"filename": "OL8U8_x86_64-kvm-b198.qcow",
"version": "8.8",
"md5sum": "717622f373d77349cc102a3a325efbd3",
"filesize": 934215680,
"download_url": "https://yum.oracle.com/oracle-linux-templates.html",
"direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL8/u8/x86_64/OL8U8_x86_64-kvm-b198.qcow"
},
{
"filename": "OL8U7_x86_64-kvm-b148.qcow",
"version": "8.7",
@@ -42,6 +58,14 @@
"download_url": "https://yum.oracle.com/oracle-linux-templates.html",
"direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL8/u7/x86_64/OL8U7_x86_64-kvm-b148.qcow"
},
{
"filename": "OL7U9_x86_64-kvm-b145.qcow",
"version": "7.9",
"md5sum": "e60d4145a69b34026db6121109ca9131",
"filesize": 725221376,
"download_url": "https://yum.oracle.com/oracle-linux-templates.html",
"direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL7/u9/x86_64/OL7U9_x86_64-kvm-b145.qcow"
},
{
"filename": "oracle-cloud-init-data.iso",
"version": "1.1",
@@ -52,6 +76,13 @@
}
],
"versions": [
{
"name": "9.2",
"images": {
"hda_disk_image": "OL9U2_x86_64-kvm-b197.qcow",
"cdrom_image": "oracle-cloud-init-data.iso"
}
},
{
"name": "9.1",
"images": {
@@ -59,12 +90,26 @@
"cdrom_image": "oracle-cloud-init-data.iso"
}
},
{
"name": "8.8",
"images": {
"hda_disk_image": "OL8U8_x86_64-kvm-b198.qcow",
"cdrom_image": "oracle-cloud-init-data.iso"
}
},
{
"name": "8.7",
"images": {
"hda_disk_image": "OL8U7_x86_64-kvm-b148.qcow",
"cdrom_image": "oracle-cloud-init-data.iso"
}
},
{
"name": "7.9",
"images": {
"hda_disk_image": "OL7U9_x86_64-kvm-b145.qcow",
"cdrom_image": "oracle-cloud-init-data.iso"
}
}
]
}
+1
View File
@@ -5,6 +5,7 @@
"description": "Packet crafter and traffic generator for network engineers",
"vendor_name": "Ostinato",
"vendor_url": "https://ostinato.org/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/Ostinato.png",
"documentation_url": "https://ostinato.org/docs",
"product_name": "Ostinato",
"product_url": "https://ostinato.org/",
@@ -5,6 +5,7 @@
"description": "PacketFence is a fully supported, trusted, Free and Open Source network access control (NAC) solution. Boasting an impressive feature set including a captive-portal for registration and remediation, centralized wired and wireless management, 802.1X support, layer-2 isolation of problematic devices, integration with the Snort IDS and the Nessus vulnerability scanner; PacketFence can be used to effectively secure networks - from small to very large heterogeneous networks.",
"vendor_name": "Inverse inc.",
"vendor_url": "https://packetfence.org/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/PacketFence ZEN.jpg",
"documentation_url": "https://packetfence.org/support/index.html#/documentation",
"product_name": "PacketFence ZEN",
"product_url": "https://packetfence.org/about.html",
+86 -2
View File
@@ -13,7 +13,7 @@
"availability": "service-contract",
"maintainer": "Neyder Achahuanco",
"maintainer_email": "neyder@neyder.net",
"usage": "You should download Red Hat Enterprise Linux KVM Guest Image from https://access.redhat.com/downloads/content/479/ver=/rhel---8/8.5/x86_64/product-software attach/customize cloud-init.iso and start.\nusername: cloud-user\npassword: redhat",
"usage": "You should download Red Hat Enterprise Linux KVM Guest Image from https://access.redhat.com/downloads/content/479/ver=/rhel---9/9.2/x86_64/product-software attach/customize cloud-init.iso and start.\nusername: cloud-user\npassword: redhat",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 1,
@@ -23,9 +23,51 @@
"console_type": "telnet",
"boot_priority": "c",
"kvm": "require",
"options": "-nographic"
"options": "-cpu host -nographic"
},
"images": [
{
"filename": "rhel-9.2-x86_64-kvm.qcow2",
"version": "9.2",
"md5sum": "f33845298b387dbcfbf162c6b4e3f8c8",
"filesize": 819265536,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/9.2/x86_64/product-software"
},
{
"filename": "rhel-baseos-9.1-x86_64-kvm.qcow2",
"version": "9.1",
"md5sum": "622de743da83bcec1ad2959ecaedb8f4",
"filesize": 753401856,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/9.1/x86_64/product-software"
},
{
"filename": "rhel-baseos-9.0-x86_64-kvm.qcow2",
"version": "9.0",
"md5sum": "4a41497d354fe99a4abf55f1ed73edcb",
"filesize": 696582144,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/9.0/x86_64/product-software"
},
{
"filename": "rhel-8.8-x86_64-kvm.qcow2",
"version": "8.8",
"md5sum": "bf22af816ba6abd846bbb0c9ecf7bce1",
"filesize": 926810112,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/8.8/x86_64/product-software"
},
{
"filename": "rhel-8.7-x86_64-kvm.qcow2",
"version": "8.7",
"md5sum": "ab71a2c4cc276441bf999f531e064507",
"filesize": 858128384,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/8.7/x86_64/product-software"
},
{
"filename": "rhel-8.6-x86_64-kvm.qcow2",
"version": "8.6",
"md5sum": "19501666f46df6b5472db1254e86a339",
"filesize": 832438272,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/8.6/x86_64/product-software"
},
{
"filename": "rhel-8.5-x86_64-kvm.qcow2",
"version": "8.5",
@@ -70,6 +112,48 @@
}
],
"versions": [
{
"name": "9.2",
"images": {
"hda_disk_image": "rhel-9.2-x86_64-kvm.qcow2",
"cdrom_image": "rhel-cloud-init.iso"
}
},
{
"name": "9.1",
"images": {
"hda_disk_image": "rhel-baseos-9.1-x86_64-kvm.qcow2",
"cdrom_image": "rhel-cloud-init.iso"
}
},
{
"name": "9.0",
"images": {
"hda_disk_image": "rhel-baseos-9.0-x86_64-kvm.qcow2",
"cdrom_image": "rhel-cloud-init.iso"
}
},
{
"name": "8.8",
"images": {
"hda_disk_image": "rhel-8.8-x86_64-kvm.qcow2",
"cdrom_image": "rhel-cloud-init.iso"
}
},
{
"name": "8.7",
"images": {
"hda_disk_image": "rhel-8.7-x86_64-kvm.qcow2",
"cdrom_image": "rhel-cloud-init.iso"
}
},
{
"name": "8.6",
"images": {
"hda_disk_image": "rhel-8.6-x86_64-kvm.qcow2",
"cdrom_image": "rhel-cloud-init.iso"
}
},
{
"name": "8.5",
"images": {
+23 -8
View File
@@ -27,12 +27,20 @@
},
"images": [
{
"filename": "Rocky-8-GenericCloud-8.5-20211114.2.x86_64.qcow2",
"version": "8.5",
"md5sum": "44982ddace75a1dba17942401086d72c",
"filesize": 1502701568,
"download_url": "https://download.rockylinux.org/pub/rocky/8/images/",
"direct_download_url": "https://download.rockylinux.org/pub/rocky/8/images/Rocky-8-GenericCloud-8.5-20211114.2.x86_64.qcow2"
"filename": "Rocky-9-GenericCloud-Base-9.2-20230513.0.x86_64.qcow2",
"version": "9.2",
"md5sum": "2022bdb49a691119f1fd3cc76de0a846",
"filesize": 989265920,
"download_url": "https://download.rockylinux.org/pub/rocky/9/images/x86_64/",
"direct_download_url": "https://download.rockylinux.org/pub/rocky/9/images/x86_64/Rocky-9-GenericCloud-Base-9.2-20230513.0.x86_64.qcow2"
},
{
"filename": "Rocky-8-GenericCloud-Base-8.8-20230518.0.x86_64.qcow2",
"version": "8.8",
"md5sum": "3ad7d355909cc37100c037562e4b3b6d",
"filesize": 1800536064,
"download_url": "https://download.rockylinux.org/pub/rocky/8/images/x86_64/",
"direct_download_url": "https://download.rockylinux.org/pub/rocky/8/images/x86_64/Rocky-8-GenericCloud-Base-8.8-20230518.0.x86_64.qcow2"
},
{
"filename": "rocky-cloud-init-data.iso",
@@ -45,9 +53,16 @@
],
"versions": [
{
"name": "8.5",
"name": "9.2",
"images": {
"hda_disk_image": "Rocky-8-GenericCloud-8.5-20211114.2.x86_64.qcow2",
"hda_disk_image": "Rocky-9-GenericCloud-Base-9.2-20230513.0.x86_64.qcow2",
"cdrom_image": "rocky-cloud-init-data.iso"
}
},
{
"name": "8.8",
"images": {
"hda_disk_image": "Rocky-8-GenericCloud-Base-8.8-20230518.0.x86_64.qcow2",
"cdrom_image": "rocky-cloud-init-data.iso"
}
}
@@ -5,6 +5,7 @@
"description": "Security Onion is a Linux distro for intrusion detection, network security monitoring, and log management. It's based on Ubuntu and contains Snort, Suricata, Bro, OSSEC, Sguil, Squert, ELSA, Xplico, NetworkMiner, and many other security tools. The easy-to-use Setup wizard allows you to build an army of distributed sensors for your enterprise in minutes!",
"vendor_name": "Security Onion Solutions, LLC",
"vendor_url": "https://securityonion.net/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/Security Onion.png",
"documentation_url": "https://github.com/Security-Onion-Solutions/security-onion/wiki",
"product_name": "Security Onion",
"product_url": "https://securityonion.net/",
+22 -6
View File
@@ -5,6 +5,7 @@
"description": "The term 'Ubuntu Cloud Guest' refers to the Official Ubuntu images that are available at http://cloud-images.ubuntu.com . These images are built by Canonical. They are then registered on EC2, and compressed tarfiles are made also available for download. For using those images on a public cloud such as Amazon EC2, you simply choose an image and launch it. To use those images on a private cloud, or to run the image on a local hypervisor (such as KVM) you would need to download those images and either publish them to your private cloud, or launch them directly on a hypervisor. The following sections explain in more details how to perform each of those actions",
"vendor_name": "Canonical Inc.",
"vendor_url": "https://www.ubuntu.com",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/Ubuntu Cloud Guest.png",
"documentation_url": "https://help.ubuntu.com/community/UEC/Images",
"product_name": "Ubuntu Cloud Guest",
"product_url": "https://www.ubuntu.com/cloud",
@@ -26,9 +27,17 @@
"options": "-nographic"
},
"images": [
{
"filename": "ubuntu-23.04-server-cloudimg-arm64.img",
"version": "Ubuntu 23.04 (Lunar Lobster)",
"md5sum": "35fa3b31b65717af6f0520a769aac8c0",
"filesize": 786432000,
"download_url": "https://cloud-images.ubuntu.com/releases/23.04/release/",
"direct_download_url": "https://cloud-images.ubuntu.com/releases/23.04/release/ubuntu-23.04-server-cloudimg-arm64.img"
},
{
"filename": "ubuntu-22.04-server-cloudimg-amd64.img",
"version": "22.04 (LTS)",
"version": "Ubuntu 22.04 LTS (Jammy Jellyfish)",
"md5sum": "3ce0b84f9592482fb645e8253b979827",
"filesize": 686096384,
"download_url": "https://cloud-images.ubuntu.com/releases/jammy/release",
@@ -36,7 +45,7 @@
},
{
"filename": "ubuntu-20.04-server-cloudimg-amd64.img",
"version": "20.04 (LTS)",
"version": "Ubuntu 20.04 LTS (Focal Fossa)",
"md5sum": "044bc979b2238192ee3edb44e2bb6405",
"filesize": 552337408,
"download_url": "https://cloud-images.ubuntu.com/releases/focal/release-20210119.1/",
@@ -44,7 +53,7 @@
},
{
"filename": "ubuntu-18.04-server-cloudimg-amd64.img",
"version": "18.04 (LTS)",
"version": "Ubuntu 18.04 LTS (Bionic Beaver)",
"md5sum": "f4134e7fa16d7fa766c7467cbe25c949",
"filesize": 336134144,
"download_url": "https://cloud-images.ubuntu.com/releases/18.04/release-20180426.2/",
@@ -61,21 +70,28 @@
],
"versions": [
{
"name": "22.04 (LTS)",
"name": "Ubuntu 23.04 (Lunar Lobster)",
"images": {
"hda_disk_image": "ubuntu-23.04-server-cloudimg-arm64.img",
"cdrom_image": "ubuntu-cloud-init-data.iso"
}
},
{
"name": "Ubuntu 22.04 LTS (Jammy Jellyfish)",
"images": {
"hda_disk_image": "ubuntu-22.04-server-cloudimg-amd64.img",
"cdrom_image": "ubuntu-cloud-init-data.iso"
}
},
{
"name": "20.04 (LTS)",
"name": "Ubuntu 20.04 LTS (Focal Fossa)",
"images": {
"hda_disk_image": "ubuntu-20.04-server-cloudimg-amd64.img",
"cdrom_image": "ubuntu-cloud-init-data.iso"
}
},
{
"name": "18.04 (LTS)",
"name": "Ubuntu 18.04 LTS (Bionic Beaver)",
"images": {
"hda_disk_image": "ubuntu-18.04-server-cloudimg-amd64.img",
"cdrom_image": "ubuntu-cloud-init-data.iso"
@@ -5,6 +5,7 @@
"description": "Ubuntu is a Debian-based Linux operating system, with Unity as its default desktop environment. It is based on free software and named after the Southern African philosophy of ubuntu (literally, \"human-ness\"), which often is translated as \"humanity towards others\" or \"the belief in a universal bond of sharing that connects all humanity\".",
"vendor_name": "Canonical",
"vendor_url": "http://www.ubuntu.com",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/Ubuntu Docker Guest.png",
"product_name": "Ubuntu",
"registry_version": 4,
"status": "stable",
+1
View File
@@ -5,6 +5,7 @@
"description": "Ubuntu is a full-featured Linux operating system which is based on Debian distribution and freely available with both community and professional support, it comes with Unity as its default desktop environment. There are other flavors of Ubuntu available with other desktops as default like Ubuntu Gnome, Lubuntu, Xubuntu, and so on. A tightly-integrated selection of excellent applications is included, and an incredible variety of add-on software is just a few clicks away. A default installation of Ubuntu contains a wide range of software that includes LibreOffice, Firefox, Empathy, Transmission, etc.",
"vendor_name": "Canonical Inc.",
"vendor_url": "https://www.ubuntu.com",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/Ubuntu Desktop Guest.png",
"documentation_url": "https://help.ubuntu.com",
"product_name": "Ubuntu",
"product_url": "https://www.ubuntu.com/desktop",
+1
View File
@@ -5,6 +5,7 @@
"description": "Untangle's NG Firewall enables you to quickly and easily create the network policies that deliver the perfect balance between security and productivity. Untangle combines Unified Threat Management (UTM)-to address all of the key network threats-with policy management tools that enable you to define access and control by individuals, groups or company-wide. And with industry-leading reports, you'll have complete visibility into and control over everything that's happening on your network.",
"vendor_name": "Untangle",
"vendor_url": "https://www.untangle.com/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/Untangle NG.jpg",
"documentation_url": "http://wiki.untangle.com/index.php/Main_Page",
"product_name": "Untangle NG",
"product_url": "https://www.untangle.com/untangle-ng-firewall/",
+5 -5
View File
@@ -60,7 +60,7 @@
"md5sum": "3fece6363f9766f862e26d292d0ed5a3",
"filesize": 430964736,
"download_url": "https://support.vyos.io/en/downloads/files/vyos-1-2-9-s1-generic-iso-image",
"direct_download_url": "https://s3-us.vyos.io/1.2.9-S1/vyos-1.2.9-S1-amd64.iso"
"direct_download_url": "https://legacy-lts-images.vyos.io/1.2.9-S1/vyos-1.2.9-S1-amd64.iso"
},
{
"filename": "vyos-1.2.9-S1-10G-qemu.qcow2",
@@ -68,7 +68,7 @@
"md5sum": "0a70d78b80a3716d42487c02ef44f41f",
"filesize": 426967040,
"download_url": "https://support.vyos.io/en/downloads/files/vyos-1-2-9-s1-for-kvm",
"direct_download_url": "https://s3-us.vyos.io/1.2.9-S1/vyos-1.2.9-S1-10G-qemu.qcow2"
"direct_download_url": "https://legacy-lts-images.vyos.io/1.2.9-S1/vyos-1.2.9-S1-10G-qemu.qcow2"
},
{
"filename": "vyos-1.2.9-amd64.iso",
@@ -76,7 +76,7 @@
"md5sum": "586be23b6256173e174c82d8f1f699a1",
"filesize": 430964736,
"download_url": "https://support.vyos.io/en/downloads/files/vyos-1-2-9-generic-iso-image",
"direct_download_url": "https://s3-us.vyos.io/1.2.9/vyos-1.2.9-amd64.iso"
"direct_download_url": "https://legacy-lts-images.vyos.io/1.2.9/vyos-1.2.9-amd64.iso"
},
{
"filename": "vyos-1.2.9-10G-qemu.qcow2",
@@ -84,7 +84,7 @@
"md5sum": "76871c7b248c32f75177c419128257ac",
"filesize": 427360256,
"download_url": "https://support.vyos.io/en/downloads/files/vyos-1-2-9-10g-qemu-qcow2",
"direct_download_url": "https://s3-us.vyos.io/1.2.9/vyos-1.2.9-10G-qemu.qcow2"
"direct_download_url": "https://legacy-lts-images.vyos.io/1.2.9/vyos-1.2.9-10G-qemu.qcow2"
},
{
"filename": "vyos-1.2.8-amd64.iso",
@@ -98,7 +98,7 @@
"version": "1.1.8",
"md5sum": "95a141d4b592b81c803cdf7e9b11d8ea",
"filesize": 241172480,
"direct_download_url": "https://s3-us.vyos.io/vyos-1.1.8-amd64.iso"
"direct_download_url": "https://legacy-lts-images.vyos.io/vyos-1.1.8-amd64.iso"
},
{
"filename": "empty8G.qcow2",
@@ -29,6 +29,14 @@
"kvm": "require"
},
"images": [
{
"filename": "WinDev2308Eval-disk1.vmdk",
"version": "2308",
"md5sum": "6a9b4ed6d7481f7bbf8a054c797b1eee",
"filesize": 24945341952,
"download_url": "https://download.microsoft.com/download/7/1/3/7135f2ab-8528-49fc-9252-8d5d94c697ef/WinDev2308Eval.VMWare.zip",
"compression": "zip"
},
{
"filename": "WinDev2212Eval-disk1.vmdk",
"version": "2212",
@@ -48,6 +56,13 @@
}
],
"versions": [
{
"name": "2308",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "WinDev2308Eval-disk1.vmdk"
}
},
{
"name": "2212",
"images": {
+1
View File
@@ -5,6 +5,7 @@
"description": "Microsoft Windows, or simply Windows, is a metafamily of graphical operating systems developed, marketed, and sold by Microsoft. It consists of several families of operating systems, each of which cater to a certain sector of the computing industry with the OS typically associated with IBM PC compatible architecture.",
"vendor_name": "Microsoft",
"vendor_url": "http://www.microsoft.com/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/Windows.jpg",
"documentation_url": "https://technet.microsoft.com/en-us/library/cc498727.aspx",
"product_name": "Windows",
"product_url": "https://www.microsoft.com/en-us/windows",
@@ -5,6 +5,7 @@
"description": "Microsoft Windows, or simply Windows, is a metafamily of graphical operating systems developed, marketed, and sold by Microsoft. It consists of several families of operating systems, each of which cater to a certain sector of the computing industry with the OS typically associated with IBM PC compatible architecture.",
"vendor_name": "Microsoft",
"vendor_url": "http://www.microsoft.com/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/Windows Server.jpg",
"documentation_url": "https://technet.microsoft.com/en-us/library/cc498727.aspx",
"product_name": "Windows Server",
"product_url": "https://www.microsoft.com/en-us/windows",
@@ -27,6 +28,13 @@
"options": "-usbdevice tablet"
},
"images": [
{
"filename": "SERVER_EVAL_x64FRE_en-us.iso",
"version": "2022",
"md5sum": "e7908933449613edc97e1b11180429d1",
"filesize": 5044094976,
"download_url": "https://www.microsoft.com/en-gb/evalcenter/evaluate-windows-server-2022"
},
{
"filename": "Win2k16_14393.0.161119-1705.RS1_REFRESH_SERVER_EVAL_X64FRE_EN-US.ISO",
"version": "2016",
@@ -51,6 +59,13 @@
}
],
"versions": [
{
"name": "2022",
"images": {
"hda_disk_image": "empty100G.qcow2",
"cdrom_image": "SERVER_EVAL_x64FRE_en-us.iso"
}
},
{
"name": "2016",
"images": {
+1 -1
View File
@@ -406,7 +406,7 @@ class DockerVM(BaseNode):
await self._start_vnc()
params["Env"].append("QT_GRAPHICSSYSTEM=native") # To fix a Qt issue: https://github.com/GNS3/gns3-server/issues/556
params["Env"].append("DISPLAY=:{}".format(self._display))
params["HostConfig"]["Binds"].append("/tmp/.X11-unix/:/tmp/.X11-unix/")
params["HostConfig"]["Binds"].append("/tmp/.X11-unix/X{0}:/tmp/.X11-unix/X{0}:ro".format(self._display))
if self._extra_hosts:
extra_hosts = self._format_extra_hosts(self._extra_hosts)
+6 -1
View File
@@ -539,7 +539,12 @@ class IOUVM(BaseNode):
# create a symbolic link to the image to avoid IOU error "failed code signing checks"
# on newer images, see https://github.com/GNS3/gns3-server/issues/1484
try:
symlink = os.path.join(self.working_dir, os.path.basename(self.path))
iou_image_path = os.path.basename(self.path)
if len(iou_image_path) > 63:
# IOU file basename length must be <= 63 chars
iou_file_name, iou_file_ext = os.path.splitext(iou_image_path)
iou_image_path = iou_file_name[:63 - len(iou_file_ext)] + iou_file_ext
symlink = os.path.join(self.working_dir, iou_image_path)
if os.path.islink(symlink):
os.unlink(symlink)
os.symlink(self.path, symlink)
+10 -7
View File
@@ -16,12 +16,14 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import aiohttp
import asyncio
import psutil
import platform
from .project import Project
from ..config import Config
from uuid import UUID
import logging
log = logging.getLogger(__name__)
@@ -128,10 +130,11 @@ class ProjectManager:
:returns: boolean
"""
for project in self._projects.values():
for node in project.nodes:
if node == source_node:
continue
if node.hw_virtualization and node.__class__.__name__ != source_node.__class__.__name__:
return False
if Config.instance().get_section_config("Server").getboolean("hardware_virtualization_check", True):
for project in self._projects.values():
for node in project.nodes:
if node == source_node:
continue
if node.hw_virtualization and node.__class__.__name__ != source_node.__class__.__name__:
return False
return True
+3
View File
@@ -26,6 +26,7 @@ import sys
import re
import subprocess
from ...utils import shlex_quote
from ...utils.asyncio import subprocess_check_output
from ...utils.get_resource import get_resource
from ..base_manager import BaseManager
@@ -337,6 +338,8 @@ class Qemu(BaseManager):
command.append(path)
command.append("{}M".format(img_size))
command_string = " ".join(shlex_quote(s) for s in command)
log.info("Creating disk image with {}".format(command_string))
process = await asyncio.create_subprocess_exec(*command)
await process.wait()
except (OSError, subprocess.SubprocessError) as e:
+8 -1
View File
@@ -109,9 +109,16 @@ class VirtualBox(BaseManager):
command = [vboxmanage_path, "--nologo", subcommand]
command.extend(args)
command_string = " ".join(command)
env = os.environ.copy()
env["LANG"] = "en" # force english output because we rely on it to parse the output
log.info("Executing VBoxManage with command: {}".format(command_string))
try:
process = await asyncio.create_subprocess_exec(*command, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE)
process = await asyncio.create_subprocess_exec(
*command,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
env=env
)
except (OSError, subprocess.SubprocessError) as e:
raise VirtualBoxError("Could not execute VBoxManage: {}".format(e))
@@ -13,7 +13,8 @@ logging console discriminator EXCESS
!
no ip icmp rate-limit unreachable
!
ip cef
! due to some bugs with IOU, try to change the following line to 'ip cef' if your routing does not work
no ip cef
no ip domain-lookup
!
!
@@ -12,7 +12,8 @@ no ip icmp rate-limit unreachable
!
!
!
ip cef
! due to some bugs with IOU, try to change the following line to 'ip cef' if your routing does not work
no ip cef
no ip domain-lookup
!
!
+27 -25
View File
@@ -191,29 +191,28 @@ class Controller:
Save the controller configuration on disk
"""
if self._config_loaded is False:
return
controller_settings = dict()
if self._config_loaded:
controller_settings = {"computes": [],
"templates": [],
"gns3vm": self.gns3vm.__json__(),
"iou_license": self._iou_license_settings,
"appliances_etag": self._appliance_manager.appliances_etag,
"version": __version__}
controller_settings = {"computes": [],
"templates": [],
"gns3vm": self.gns3vm.__json__(),
"iou_license": self._iou_license_settings,
"appliances_etag": self._appliance_manager.appliances_etag,
"version": __version__}
for template in self._template_manager.templates.values():
if not template.builtin:
controller_settings["templates"].append(template.__json__())
for template in self._template_manager.templates.values():
if not template.builtin:
controller_settings["templates"].append(template.__json__())
for compute in self._computes.values():
if compute.id != "local" and compute.id != "vm":
controller_settings["computes"].append({"host": compute.host,
"name": compute.name,
"port": compute.port,
"protocol": compute.protocol,
"user": compute.user,
"password": compute.password,
"compute_id": compute.id})
for compute in self._computes.values():
if compute.id != "local" and compute.id != "vm":
controller_settings["computes"].append({"host": compute.host,
"name": compute.name,
"port": compute.port,
"protocol": compute.protocol,
"user": compute.user,
"password": compute.password,
"compute_id": compute.id})
try:
os.makedirs(os.path.dirname(self._config_file), exist_ok=True)
@@ -229,8 +228,7 @@ class Controller:
try:
if not os.path.exists(self._config_file):
self._config_loaded = True
self.save()
self.save() # this will create the config file
with open(self._config_file) as f:
controller_settings = json.load(f)
except (OSError, ValueError) as e:
@@ -251,7 +249,11 @@ class Controller:
self._iou_license_settings = controller_settings["iou_license"]
previous_version = controller_settings.get("version")
if not previous_version or parse_version(__version__) > parse_version(previous_version):
log.info("Comparing controller version {} with config version {}".format(__version__, previous_version))
if not previous_version or \
parse_version(__version__.split("+")[0]) > parse_version(previous_version.split("+")[0]):
self._appliance_manager.install_builtin_appliances()
elif not os.listdir(self._appliance_manager.builtin_appliances_path()):
self._appliance_manager.install_builtin_appliances()
self._appliance_manager.appliances_etag = controller_settings.get("appliances_etag")
@@ -293,7 +295,7 @@ class Controller:
if not os.path.exists(os.path.join(dst_path, filename)):
shutil.copy(os.path.join(resource_path, filename), os.path.join(dst_path, filename))
else:
for entry in importlib_resources.files(f'gns3server.{resource_name}').iterdir():
for entry in importlib_resources.files('gns3server').joinpath(resource_name).iterdir():
full_path = os.path.join(dst_path, entry.name)
if entry.is_file() and not os.path.exists(full_path):
log.debug(f'Installing {resource_name} resource file "{entry.name}" to "{full_path}"')
+12 -8
View File
@@ -15,13 +15,14 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import sys
import os
import json
import uuid
import asyncio
import aiohttp
import shutil
import platformdirs
try:
import importlib_resources
@@ -81,13 +82,13 @@ class ApplianceManager:
os.makedirs(appliances_path, exist_ok=True)
return appliances_path
def _builtin_appliances_path(self, delete_first=False):
def builtin_appliances_path(self, delete_first=False):
"""
Get the built-in appliance storage directory
"""
config = Config.instance()
appliances_dir = os.path.join(config.config_dir, "appliances")
appname = vendor = "GNS3"
appliances_dir = os.path.join(platformdirs.user_data_dir(appname, vendor, roaming=True), "appliances")
if delete_first:
shutil.rmtree(appliances_dir, ignore_errors=True)
os.makedirs(appliances_dir, exist_ok=True)
@@ -98,7 +99,7 @@ class ApplianceManager:
At startup we copy the built-in appliances files.
"""
dst_path = self._builtin_appliances_path(delete_first=True)
dst_path = self.builtin_appliances_path(delete_first=True)
log.info(f"Installing built-in appliances in '{dst_path}'")
from . import Controller
try:
@@ -112,7 +113,7 @@ class ApplianceManager:
"""
self._appliances = {}
for directory, builtin in ((self._builtin_appliances_path(), True,), (self._custom_appliances_path(), False,)):
for directory, builtin in ((self.builtin_appliances_path(), True,), (self._custom_appliances_path(), False,)):
if directory and os.path.isdir(directory):
for file in os.listdir(directory):
if not file.endswith('.gns3a') and not file.endswith('.gns3appliance'):
@@ -200,7 +201,10 @@ class ApplianceManager:
log.info("Checking if appliances are up-to-date (ETag {})".format(self._appliances_etag))
headers["If-None-Match"] = self._appliances_etag
async with aiohttp.ClientSession() as session:
async with session.get('https://api.github.com/repos/GNS3/gns3-registry/contents/appliances', headers=headers) as response:
async with session.get(
'https://api.github.com/repos/GNS3/gns3-registry/contents/appliances',
headers=headers
) as response:
if response.status == 304:
log.info("Appliances are already up-to-date (ETag {})".format(self._appliances_etag))
return
@@ -212,7 +216,7 @@ class ApplianceManager:
from . import Controller
Controller.instance().save()
json_data = await response.json()
appliances_dir = self._builtin_appliances_path()
appliances_dir = self.builtin_appliances_path()
downloaded_appliance_files = []
for appliance in json_data:
if appliance["type"] == "file":
@@ -15,11 +15,13 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import re
import sys
import aiohttp
import logging
import asyncio
import socket
import ipaddress
from .base_gns3_vm import BaseGNS3VM
from .gns3_vm_error import GNS3VMError
@@ -89,16 +91,16 @@ class VirtualBoxGNS3VM(BaseGNS3VM):
if not self._system_properties:
await self._get_system_properties()
if "API version" not in self._system_properties:
raise VirtualBoxError("Can't access to VirtualBox API version:\n{}".format(self._system_properties))
raise GNS3VMError("Can't access to VirtualBox API version:\n{}".format(self._system_properties))
from cpuinfo import get_cpu_info
cpu_info = await wait_run_in_executor(get_cpu_info)
vendor_id = cpu_info.get('vendor_id_raw')
if vendor_id == "GenuineIntel":
if parse_version(self._system_properties["API version"]) < parse_version("6_1"):
raise VirtualBoxError("VirtualBox version 6.1 or above is required to run the GNS3 VM with nested virtualization enabled on Intel processors")
raise GNS3VMError("VirtualBox version 6.1 or above is required to run the GNS3 VM with nested virtualization enabled on Intel processors")
elif vendor_id == "AuthenticAMD":
if parse_version(self._system_properties["API version"]) < parse_version("6_0"):
raise VirtualBoxError("VirtualBox version 6.0 or above is required to run the GNS3 VM with nested virtualization enabled on AMD processors")
raise GNS3VMError("VirtualBox version 6.0 or above is required to run the GNS3 VM with nested virtualization enabled on AMD processors")
else:
log.warning("Could not determine CPU vendor: {}".format(vendor_id))
@@ -159,6 +161,44 @@ class VirtualBoxGNS3VM(BaseGNS3VM):
return True
return False
async def _add_dhcp_server(self, vboxnet):
"""
Add a DHCP server for vboxnet.
:param vboxnet: vboxnet name
"""
hostonlyifs = await self._execute("list", ["hostonlyifs"])
pattern = r"IPAddress:\s+(\d+\.\d+\.\d+\.\d+)\nNetworkMask:\s+(\d+\.\d+\.\d+\.\d+)"
match = re.search(pattern, hostonlyifs)
if match:
ip_address = match.group(1)
netmask = match.group(2)
else:
raise GNS3VMError("Could not find IP address and netmask for vboxnet {}".format(vboxnet))
try:
interface = ipaddress.IPv4Interface(f"{ip_address}/{netmask}")
subnet = ipaddress.IPv4Network(str(interface.network))
dhcp_server_ip = str(interface.ip + 1)
netmask = str(subnet.netmask)
lower_ip = str(interface.ip + 2)
upper_ip = str(subnet.network_address + subnet.num_addresses - 2)
except ValueError:
raise GNS3VMError("Invalid IP address and netmask for vboxnet {}: {}/{}".format(vboxnet, ip_address, netmask))
dhcp_server_args = [
"add",
"--network=HostInterfaceNetworking-{}".format(vboxnet),
"--server-ip={}".format(dhcp_server_ip),
"--netmask={}".format(netmask),
"--lower-ip={}".format(lower_ip),
"--upper-ip={}".format(upper_ip),
"--enable"
]
await self._execute("dhcpserver", dhcp_server_args)
async def _check_vboxnet_exists(self, vboxnet, vboxnet_type):
"""
Check if the vboxnet interface exists
@@ -261,12 +301,20 @@ class VirtualBoxGNS3VM(BaseGNS3VM):
await self.set_hostonly_network(interface_number, first_available_vboxnet)
vboxnet = first_available_vboxnet
else:
raise GNS3VMError('VirtualBox host-only network "{}" does not exist, please make the sure the network adapter {} configuration is valid for "{}"'.format(vboxnet,
interface_number,
self._vmname))
try:
await self._execute("hostonlyif", ["create"])
except GNS3VMError:
raise GNS3VMError('VirtualBox host-only network "{}" does not exist and could not be automatically created, please make the sure the network adapter {} configuration is valid for "{}"'.format(
vboxnet,
interface_number,
self._vmname
))
if backend_type == "hostonlyadapter" and not (await self._check_dhcp_server(vboxnet)):
raise GNS3VMError('DHCP must be enabled on VirtualBox host-only network "{}"'.format(vboxnet))
try:
await self._add_dhcp_server(vboxnet)
except GNS3VMError as e:
raise GNS3VMError("Could not add DHCP server for vboxnet {}: {}, please configure manually".format(vboxnet, e))
vm_state = await self._get_state()
log.info('"{}" state is {}'.format(self._vmname, vm_state))
@@ -299,7 +347,7 @@ class VirtualBoxGNS3VM(BaseGNS3VM):
except OSError as e:
raise GNS3VMError("Error while getting random port: {}".format(e))
if (await self._check_vbox_port_forwarding()):
if await self._check_vbox_port_forwarding():
# delete the GNS3VM NAT port forwarding rule if it exists
log.info("Removing GNS3VM NAT port forwarding rule from interface {}".format(nat_interface_number))
await self._execute("controlvm", [self._vmname, "natpf{}".format(nat_interface_number), "delete", "GNS3VM"])
+1 -1
View File
@@ -485,7 +485,7 @@ class Node:
# None properties are not be send. Because it can mean the emulator doesn't support it
for key in list(data.keys()):
if data[key] is None or data[key] is {} or key in self.CONTROLLER_ONLY_PROPERTIES:
if data[key] is None or data[key] == {} or key in self.CONTROLLER_ONLY_PROPERTIES:
del data[key]
return data
+2 -14
View File
@@ -29,11 +29,9 @@ import struct
import platform
import locale
import distro
import urllib3
from .version import __version__, __version_info__
from .config import Config
from .utils.get_resource import get_resource
import logging
log = logging.getLogger(__name__)
@@ -59,7 +57,7 @@ class CrashReport:
Report crash to a third party service
"""
DSN = "https://e27fbedc2e824ceb9f8d8508c5d37507@o19455.ingest.sentry.io/38482"
DSN = "https://dcbac52ef824b8386b67cc8f07c4de70@o19455.ingest.sentry.io/38482"
_instance = None
def __init__(self):
@@ -72,24 +70,14 @@ class CrashReport:
sentry_uncaught.disabled = True
if SENTRY_SDK_AVAILABLE:
cacert = None
if hasattr(sys, "frozen"):
cacert_resource = get_resource("cacert.pem")
if cacert_resource is not None and os.path.isfile(cacert_resource):
cacert = cacert_resource
else:
log.error("The SSL certificate bundle file '{}' could not be found".format(cacert_resource))
# Don't send log records as events.
sentry_logging = LoggingIntegration(level=logging.INFO, event_level=None)
try:
sentry_sdk.init(dsn=CrashReport.DSN,
release=__version__,
ca_certs=cacert,
default_integrations=False,
integrations=[sentry_logging])
except urllib3.exceptions.HTTPError as e:
except Exception as e:
log.error("Crash report could not be sent: {}".format(e))
return
@@ -17,6 +17,7 @@
import aiohttp
import asyncio
import ipaddress
from gns3server.web.route import Route
from gns3server.controller import Controller
@@ -477,11 +478,27 @@ class NodeHandler:
await ws.prepare(request)
request.app['websockets'].add(ws)
ws_console_compute_url = "ws://{compute_host}:{compute_port}/v2/compute/projects/{project_id}/{node_type}/nodes/{node_id}/console/ws".format(compute_host=compute.host,
compute_port=compute.port,
project_id=project.id,
node_type=node.node_type,
node_id=node.id)
compute_host = compute.host
try:
# handle IPv6 address
ip = ipaddress.ip_address(compute_host)
if isinstance(ip, ipaddress.IPv6Address):
compute_host = '[' + compute_host + ']'
except ValueError:
pass
ws_protocol = "ws"
if request.scheme == "https":
ws_protocol = "wss"
ws_console_compute_url = "{protocol}://{compute_host}:{compute_port}/v2/compute/projects/{project_id}/{node_type}/nodes/{node_id}/console/ws".format(
protocol=ws_protocol,
compute_host=compute_host,
compute_port=compute.port,
project_id=project.id,
node_type=node.node_type,
node_id=node.id
)
async def ws_forward(ws_client):
async for msg in ws:
@@ -494,7 +511,7 @@ class NodeHandler:
try:
async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(limit=None, force_close=True)) as session:
async with session.ws_connect(ws_console_compute_url) as ws_client:
async with session.ws_connect(ws_console_compute_url, ssl=False) as ws_client:
asyncio.ensure_future(ws_forward(ws_client))
async for msg in ws_client:
if msg.type == aiohttp.WSMsgType.TEXT:
@@ -505,6 +522,8 @@ class NodeHandler:
break
except ConnectionResetError:
log.info("Websocket console connection with compute disconnected")
except aiohttp.ClientError as e:
log.error("Websocket console connection with compute failed: {}".format(e))
finally:
if not ws.closed:
await ws.close()
+7 -1
View File
@@ -35,7 +35,6 @@ from gns3server.version import __version__
from gns3server.config import Config
from gns3server.crash_report import CrashReport
import logging
log = logging.getLogger(__name__)
@@ -243,6 +242,13 @@ def run():
user_log.info("Running with Python {major}.{minor}.{micro} and has PID {pid}".format(major=sys.version_info[0], minor=sys.version_info[1],
micro=sys.version_info[2], pid=os.getpid()))
try:
import truststore
truststore.inject_into_ssl()
log.info("Using system certificate store for SSL connections")
except ImportError:
pass
# check for the correct locale (UNIX/Linux only)
locale_check()
+2 -2
View File
@@ -65,8 +65,8 @@ QEMU_TEMPLATE_PROPERTIES = {
"description": "QEMU adapter type",
"type": "string",
"enum": ["e1000", "e1000-82544gc", "e1000-82545em", "e1000e", "i82550", "i82551", "i82557a", "i82557b", "i82557c", "i82558a",
"i82558b", "i82559a", "i82559b", "i82559c", "i82559er", "i82562", "i82801", "ne2k_pci", "pcnet", "rocker", "rtl8139",
"virtio", "virtio-net-pci", "vmxnet3"],
"i82558b", "i82559a", "i82559b", "i82559c", "i82559er", "i82562", "i82801", "igb", "ne2k_pci", "pcnet", "rocker",
"rtl8139", "virtio", "virtio-net-pci", "vmxnet3"],
"default": "e1000"
},
"mac_address": {
+1 -1
View File
@@ -46,6 +46,6 @@
gtag('config', 'G-5D6FZL9923');
</script>
<script src="runtime.baa1121a4737aeb68bb7.js" defer></script><script src="polyfills-es5.865074f5cd9a121111a2.js" nomodule defer></script><script src="polyfills.2f91a039d848e57ff02e.js" defer></script><script src="main.1379a5647e8bc6d3e401.js" defer></script>
<script src="runtime.baa1121a4737aeb68bb7.js" defer></script><script src="polyfills-es5.865074f5cd9a121111a2.js" nomodule defer></script><script src="polyfills.2f91a039d848e57ff02e.js" defer></script><script src="main.383fdade2fd9dbccffbc.js" defer></script>
</body></html>
@@ -1 +0,0 @@
(self.webpackChunkgns3_web_ui=self.webpackChunkgns3_web_ui||[]).push([[179],{98255:function(ue){function q(f){return Promise.resolve().then(function(){var U=new Error("Cannot find module '"+f+"'");throw U.code="MODULE_NOT_FOUND",U})}q.keys=function(){return[]},q.resolve=q,q.id=98255,ue.exports=q},82908:function(ue){ue.exports=function(f,U){(null==U||U>f.length)&&(U=f.length);for(var B=0,V=new Array(U);B<U;B++)V[B]=f[B];return V},ue.exports.default=ue.exports,ue.exports.__esModule=!0},36457:function(ue){ue.exports=function(f){if(Array.isArray(f))return f},ue.exports.default=ue.exports,ue.exports.__esModule=!0},35036:function(ue){ue.exports=function(f,U){var B=null==f?null:"undefined"!=typeof Symbol&&f[Symbol.iterator]||f["@@iterator"];if(null!=B){var R,b,V=[],Z=!0,T=!1;try{for(B=B.call(f);!(Z=(R=B.next()).done)&&(V.push(R.value),!U||V.length!==U);Z=!0);}catch(v){T=!0,b=v}finally{try{!Z&&null!=B.return&&B.return()}finally{if(T)throw b}}return V}},ue.exports.default=ue.exports,ue.exports.__esModule=!0},13969:function(ue){ue.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")},ue.exports.default=ue.exports,ue.exports.__esModule=!0},6326:function(ue,q,f){var U=f(36457),B=f(35036),V=f(54850),Z=f(13969);ue.exports=function(R,b){return U(R)||B(R,b)||V(R,b)||Z()},ue.exports.default=ue.exports,ue.exports.__esModule=!0},54850:function(ue,q,f){var U=f(82908);ue.exports=function(V,Z){if(V){if("string"==typeof V)return U(V,Z);var T=Object.prototype.toString.call(V).slice(8,-1);if("Object"===T&&V.constructor&&(T=V.constructor.name),"Map"===T||"Set"===T)return Array.from(V);if("Arguments"===T||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(T))return U(V,Z)}},ue.exports.default=ue.exports,ue.exports.__esModule=!0},26552:function(ue,q,f){ue.exports=f(55590)},61855:function(ue,q,f){"use strict";f.d(q,{ZT:function(){return B},mG:function(){return v},Jh:function(){return I},ev:function(){return N}});var U=function($,ae){return(U=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(se,ce){se.__proto__=ce}||function(se,ce){for(var le in ce)Object.prototype.hasOwnProperty.call(ce,le)&&(se[le]=ce[le])})($,ae)};function B($,ae){if("function"!=typeof ae&&null!==ae)throw new TypeError("Class extends value "+String(ae)+" is not a constructor or null");function se(){this.constructor=$}U($,ae),$.prototype=null===ae?Object.create(ae):(se.prototype=ae.prototype,new se)}function v($,ae,se,ce){return new(se||(se=Promise))(function(oe,Ae){function be(_t){try{qe(ce.next(_t))}catch(yt){Ae(yt)}}function it(_t){try{qe(ce.throw(_t))}catch(yt){Ae(yt)}}function qe(_t){_t.done?oe(_t.value):function(oe){return oe instanceof se?oe:new se(function(Ae){Ae(oe)})}(_t.value).then(be,it)}qe((ce=ce.apply($,ae||[])).next())})}function I($,ae){var ce,le,oe,Ae,se={label:0,sent:function(){if(1&oe[0])throw oe[1];return oe[1]},trys:[],ops:[]};return Ae={next:be(0),throw:be(1),return:be(2)},"function"==typeof Symbol&&(Ae[Symbol.iterator]=function(){return this}),Ae;function be(qe){return function(_t){return function(qe){if(ce)throw new TypeError("Generator is already executing.");for(;se;)try{if(ce=1,le&&(oe=2&qe[0]?le.return:qe[0]?le.throw||((oe=le.return)&&oe.call(le),0):le.next)&&!(oe=oe.call(le,qe[1])).done)return oe;switch(le=0,oe&&(qe=[2&qe[0],oe.value]),qe[0]){case 0:case 1:oe=qe;break;case 4:return se.label++,{value:qe[1],done:!1};case 5:se.label++,le=qe[1],qe=[0];continue;case 7:qe=se.ops.pop(),se.trys.pop();continue;default:if(!(oe=(oe=se.trys).length>0&&oe[oe.length-1])&&(6===qe[0]||2===qe[0])){se=0;continue}if(3===qe[0]&&(!oe||qe[1]>oe[0]&&qe[1]<oe[3])){se.label=qe[1];break}if(6===qe[0]&&se.label<oe[1]){se.label=oe[1],oe=qe;break}if(oe&&se.label<oe[2]){se.label=oe[2],se.ops.push(qe);break}oe[2]&&se.ops.pop(),se.trys.pop();continue}qe=ae.call($,se)}catch(_t){qe=[6,_t],le=0}finally{ce=oe=0}if(5&qe[0])throw qe[1];return{value:qe[0]?qe[1]:void 0,done:!0}}([qe,_t])}}}function N($,ae,se){if(se||2===arguments.length)for(var oe,ce=0,le=ae.length;ce<le;ce++)(oe||!(ce in ae))&&(oe||(oe=Array.prototype.slice.call(ae,0,ce)),oe[ce]=ae[ce]);return $.concat(oe||Array.prototype.slice.call(ae))}},739:function(ue,q,f){"use strict";f.d(q,{l3:function(){return T},_j:function(){return V},LC:function(){return Z},ZN:function(){return O},jt:function(){return b},pV:function(){return E},F4:function(){return M},IO:function(){return A},vP:function(){return I},SB:function(){return k},oB:function(){return D},eR:function(){return _},X$:function(){return R},ZE:function(){return F},k1:function(){return z}});var U=f(14105),B=f(18967),V=function K(){(0,B.Z)(this,K)},Z=function K(){(0,B.Z)(this,K)},T="*";function R(K,j){return{type:7,name:K,definitions:j,options:{}}}function b(K){var j=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return{type:4,styles:j,timings:K}}function I(K){var j=arguments.length>1&&void 0!==arguments[1]?arguments[1]Line truncated
@@ -0,0 +1 @@
(self.webpackChunkgns3_web_ui=self.webpackChunkgns3_web_ui||[]).push([[179],{98255:function(ue){function q(f){return Promise.resolve().then(function(){var U=new Error("Cannot find module '"+f+"'");throw U.code="MODULE_NOT_FOUND",U})}q.keys=function(){return[]},q.resolve=q,q.id=98255,ue.exports=q},82908:function(ue){ue.exports=function(f,U){(null==U||U>f.length)&&(U=f.length);for(var B=0,V=new Array(U);B<U;B++)V[B]=f[B];return V},ue.exports.default=ue.exports,ue.exports.__esModule=!0},36457:function(ue){ue.exports=function(f){if(Array.isArray(f))return f},ue.exports.default=ue.exports,ue.exports.__esModule=!0},35036:function(ue){ue.exports=function(f,U){var B=null==f?null:"undefined"!=typeof Symbol&&f[Symbol.iterator]||f["@@iterator"];if(null!=B){var R,b,V=[],Z=!0,T=!1;try{for(B=B.call(f);!(Z=(R=B.next()).done)&&(V.push(R.value),!U||V.length!==U);Z=!0);}catch(v){T=!0,b=v}finally{try{!Z&&null!=B.return&&B.return()}finally{if(T)throw b}}return V}},ue.exports.default=ue.exports,ue.exports.__esModule=!0},13969:function(ue){ue.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")},ue.exports.default=ue.exports,ue.exports.__esModule=!0},6326:function(ue,q,f){var U=f(36457),B=f(35036),V=f(54850),Z=f(13969);ue.exports=function(R,b){return U(R)||B(R,b)||V(R,b)||Z()},ue.exports.default=ue.exports,ue.exports.__esModule=!0},54850:function(ue,q,f){var U=f(82908);ue.exports=function(V,Z){if(V){if("string"==typeof V)return U(V,Z);var T=Object.prototype.toString.call(V).slice(8,-1);if("Object"===T&&V.constructor&&(T=V.constructor.name),"Map"===T||"Set"===T)return Array.from(V);if("Arguments"===T||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(T))return U(V,Z)}},ue.exports.default=ue.exports,ue.exports.__esModule=!0},26552:function(ue,q,f){ue.exports=f(55590)},61855:function(ue,q,f){"use strict";f.d(q,{ZT:function(){return B},mG:function(){return v},Jh:function(){return I},ev:function(){return N}});var U=function($,ae){return(U=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(se,ce){se.__proto__=ce}||function(se,ce){for(var le in ce)Object.prototype.hasOwnProperty.call(ce,le)&&(se[le]=ce[le])})($,ae)};function B($,ae){if("function"!=typeof ae&&null!==ae)throw new TypeError("Class extends value "+String(ae)+" is not a constructor or null");function se(){this.constructor=$}U($,ae),$.prototype=null===ae?Object.create(ae):(se.prototype=ae.prototype,new se)}function v($,ae,se,ce){return new(se||(se=Promise))(function(oe,Ae){function be(_t){try{qe(ce.next(_t))}catch(yt){Ae(yt)}}function it(_t){try{qe(ce.throw(_t))}catch(yt){Ae(yt)}}function qe(_t){_t.done?oe(_t.value):function(oe){return oe instanceof se?oe:new se(function(Ae){Ae(oe)})}(_t.value).then(be,it)}qe((ce=ce.apply($,ae||[])).next())})}function I($,ae){var ce,le,oe,Ae,se={label:0,sent:function(){if(1&oe[0])throw oe[1];return oe[1]},trys:[],ops:[]};return Ae={next:be(0),throw:be(1),return:be(2)},"function"==typeof Symbol&&(Ae[Symbol.iterator]=function(){return this}),Ae;function be(qe){return function(_t){return function(qe){if(ce)throw new TypeError("Generator is already executing.");for(;se;)try{if(ce=1,le&&(oe=2&qe[0]?le.return:qe[0]?le.throw||((oe=le.return)&&oe.call(le),0):le.next)&&!(oe=oe.call(le,qe[1])).done)return oe;switch(le=0,oe&&(qe=[2&qe[0],oe.value]),qe[0]){case 0:case 1:oe=qe;break;case 4:return se.label++,{value:qe[1],done:!1};case 5:se.label++,le=qe[1],qe=[0];continue;case 7:qe=se.ops.pop(),se.trys.pop();continue;default:if(!(oe=(oe=se.trys).length>0&&oe[oe.length-1])&&(6===qe[0]||2===qe[0])){se=0;continue}if(3===qe[0]&&(!oe||qe[1]>oe[0]&&qe[1]<oe[3])){se.label=qe[1];break}if(6===qe[0]&&se.label<oe[1]){se.label=oe[1],oe=qe;break}if(oe&&se.label<oe[2]){se.label=oe[2],se.ops.push(qe);break}oe[2]&&se.ops.pop(),se.trys.pop();continue}qe=ae.call($,se)}catch(_t){qe=[6,_t],le=0}finally{ce=oe=0}if(5&qe[0])throw qe[1];return{value:qe[0]?qe[1]:void 0,done:!0}}([qe,_t])}}}function N($,ae,se){if(se||2===arguments.length)for(var oe,ce=0,le=ae.length;ce<le;ce++)(oe||!(ce in ae))&&(oe||(oe=Array.prototype.slice.call(ae,0,ce)),oe[ce]=ae[ce]);return $.concat(oe||Array.prototype.slice.call(ae))}},739:function(ue,q,f){"use strict";f.d(q,{l3:function(){return T},_j:function(){return V},LC:function(){return Z},ZN:function(){return O},jt:function(){return b},pV:function(){return E},F4:function(){return M},IO:function(){return A},vP:function(){return I},SB:function(){return k},oB:function(){return D},eR:function(){return _},X$:function(){return R},ZE:function(){return F},k1:function(){return z}});var U=f(14105),B=f(18967),V=function K(){(0,B.Z)(this,K)},Z=function K(){(0,B.Z)(this,K)},T="*";function R(K,j){return{type:7,name:K,definitions:j,options:{}}}function b(K){var j=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return{type:4,styles:j,timings:K}}function I(K){var j=arguments.length>1&&void 0!==arguments[1]?arguments[1]Line truncated
+3 -2
View File
@@ -20,7 +20,7 @@ import hashlib
from ..config import Config
from . import force_unix_path
from io import DEFAULT_BUFFER_SIZE
import logging
log = logging.getLogger(__name__)
@@ -167,12 +167,13 @@ def md5sum(path, stopped_event=None):
try:
m = hashlib.md5()
log.debug("Calculating MD5 sum of `{}`".format(path))
with open(path, 'rb') as f:
while True:
if stopped_event is not None and stopped_event.is_set():
log.error("MD5 sum calculation of `{}` has stopped due to cancellation".format(path))
return
buf = f.read(128)
buf = f.read(DEFAULT_BUFFER_SIZE)
if not buf:
break
m.update(buf)
+2 -2
View File
@@ -23,8 +23,8 @@
# or negative for a release candidate or beta (after the base version
# number has been incremented)
__version__ = "2.2.41"
__version_info__ = (2, 2, 41, 0)
__version__ = "2.2.44"
__version_info__ = (2, 2, 44, 0)
if "dev" in __version__:
try:
+1 -2
View File
@@ -232,8 +232,7 @@ class Route(object):
response.set_status(408)
response.json({"message": "Request canceled", "status": 408})
raise # must raise to let aiohttp know the connection has been closed
except aiohttp.ClientError:
log.warning("Client error")
except (ConnectionResetError, aiohttp.ClientError):
response = Response(request=request, route=route)
response.set_status(408)
response.json({"message": "Client error", "status": 408})
+21 -5
View File
@@ -29,6 +29,7 @@ import functools
import time
import atexit
import weakref
import concurrent.futures
# Import encoding now, to avoid implicit import later.
# Implicit import within threads may cause LookupError when standard library is in a ZIP
@@ -38,7 +39,7 @@ from .route import Route
from ..config import Config
from ..compute import MODULES
from ..compute.port_manager import PortManager
from ..compute.qemu import Qemu
from ..utils.images import list_images
from ..controller import Controller
# do not delete this import
@@ -87,6 +88,8 @@ class WebServer:
except (RuntimeError, OSError, asyncio.CancelledError) as e:
log.critical("Could not start the server: {}".format(e))
return False
except KeyboardInterrupt:
return False
return True
async def reload_server(self):
@@ -230,16 +233,27 @@ class WebServer:
atexit.register(close_asyncio_loop)
async def _compute_image_checksums(self):
"""
Compute image checksums.
"""
loop = asyncio.get_event_loop()
with concurrent.futures.ProcessPoolExecutor(max_workers=1) as pool:
log.info("Computing image checksums...")
await loop.run_in_executor(pool, list_images, "qemu")
log.info("Finished computing image checksums")
async def _on_startup(self, *args):
"""
Called when the HTTP server start
"""
await Controller.instance().start()
# Because with a large image collection
# without md5sum already computed we start the
# computing with server start
asyncio.ensure_future(Qemu.instance().list_images())
# Start computing checksums now because it can take a long time
# for a large image collection
await self._compute_image_checksums()
def run(self):
"""
@@ -330,6 +344,8 @@ class WebServer:
try:
self._loop.run_forever()
except ConnectionResetError:
log.warning("Connection reset by peer")
except TypeError as e:
# This is to ignore an asyncio.windows_events exception
# on Windows when the process gets the SIGBREAK signal
+9 -6
View File
@@ -1,16 +1,19 @@
jsonschema>=4.17.3,<4.18; python_version >= '3.7'
jsonschema>=4.17.3,<4.18; python_version >= '3.7' # v4.17.3 is the last version to support Python 3.7
jsonschema==3.2.0; python_version < '3.7' # v3.2.0 is the last version to support Python 3.6
aiohttp>=3.8.4,<3.9
aiohttp>=3.8.5,<3.9; python_version < '3.12'
aiohttp==3.9.0b0; python_version == '3.12'
aiohttp-cors>=0.7.0,<0.8
aiofiles>=22.1.0,<22.2; python_version >= '3.7'
aiofiles>=23.2.1,<23.3; python_version >= '3.7'
aiofiles==0.8.0; python_version < '3.7' # v0.8.0 is the last version to support Python 3.6
Jinja2>=3.1.2,<3.2; python_version >= '3.7'
Jinja2==3.0.3; python_version < '3.7' # v3.0.3 is the last version to support Python 3.6
sentry-sdk==1.17.0,<1.18
psutil==5.9.4
sentry-sdk==1.34.0,<1.35
psutil==5.9.6
async-timeout>=4.0.2,<4.1
distro>=1.8.0
py-cpuinfo>=9.0.0,<10.0
importlib-resources>=1.3; python_version <= '3.9'
platformdirs>=2.4.0
importlib-resources>=1.3; python_version < '3.9'
truststore>=0.8.0; python_version >= '3.10'
setuptools>=60.8.1; python_version >= '3.7'
setuptools==59.6.0; python_version < '3.7' # v59.6.0 is the last version to support Python 3.6
+40
View File
@@ -0,0 +1,40 @@
#!/bin/bash
# -*- coding: utf-8 -*-
#
# Copyright (C) 2020 GNS3 Technologies Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Bash shell script for generating self-signed certs.
# The certificate is automatically put in your GNS3 config
DST_DIR="$HOME/.config/GNS3/ssl"
OLD_DIR=`pwd`
fail_if_error() {
[ $1 != 0 ] && {
unset PASSPHRASE
cd $OLD_DIR
exit 10
}
}
mkdir -p $DST_DIR
fail_if_error $?
cd $DST_DIR
SUBJ="/C=US/ST=Texas/O=GNS3SELF/localityName=Austin/commonName=localhost/organizationalUnitName=GNS3Server/emailAddress=gns3cert@gns3.com"
openssl req -nodes -new -x509 -keyout server.key -out server.cert -subj "$SUBJ"
+6 -1
View File
@@ -72,7 +72,7 @@ if [ "$CUSTOM_REPO" = false ] ; then
else
cd "$REPO_DIR"
git checkout master
git checkout 2.2
git fetch --tags
git pull
@@ -96,3 +96,8 @@ yarn ng build --source-map=false --configuration=production --base-href /static/
cp -R $REPO_DIR/dist/* "$GNS3SERVER_DIR/gns3server/static/web-ui/"
cd "$GNS3SERVER_DIR"
git add gns3server/static/web-ui/*
if [[ -n "$TAG" ]]
then
git commit -m "Bundle web-ui ${TAG}"
fi
+1
View File
@@ -109,6 +109,7 @@ setup(
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: Implementation :: CPython",
],
)
+1 -1
View File
@@ -182,7 +182,7 @@ async def test_create_vnc(compute_project, manager):
"Binds": [
"{}:/gns3:ro".format(get_resource("compute/docker/resources")),
"{}:/gns3volumes/etc/network".format(os.path.join(vm.working_dir, "etc", "network")),
'/tmp/.X11-unix/:/tmp/.X11-unix/'
"/tmp/.X11-unix/X{0}:/tmp/.X11-unix/X{0}:ro".format(vm._display)
],
"Privileged": True
},
+13 -12
View File
@@ -208,18 +208,18 @@ async def test_termination_callback_error(vm, tmpdir):
async def test_reload(vm):
with asyncio_patch("gns3server.compute.qemu.QemuVM._control_vm") as mock:
with asyncio_patch("gns3server.compute.qemu.QemuVM._control_vm") as m:
await vm.reload()
assert mock.called_with("system_reset")
m.assert_called_with("system_reset")
async def test_suspend(vm):
async def test_suspend(vm, running_subprocess_mock):
control_vm_result = MagicMock()
control_vm_result.match.group.decode.return_value = "running"
with asyncio_patch("gns3server.compute.qemu.QemuVM._control_vm", return_value=control_vm_result) as mock:
await vm.suspend()
assert mock.called_with("system_reset")
vm._process = running_subprocess_mock
with asyncio_patch("gns3server.compute.qemu.QemuVM._get_vm_status", return_value="running"):
with asyncio_patch("gns3server.compute.qemu.QemuVM._control_vm") as m:
await vm.suspend()
m.assert_called_with("stop")
async def test_add_nio_binding_udp(vm):
@@ -490,14 +490,15 @@ def test_json(vm, compute_project):
assert json["project_id"] == compute_project.id
async def test_control_vm(vm):
async def test_control_vm(vm, running_subprocess_mock):
vm._process = MagicMock()
vm._process = running_subprocess_mock
vm._monitor = 4242
reader = MagicMock()
writer = MagicMock()
with asyncio_patch("asyncio.open_connection", return_value=(reader, writer)):
res = await vm._control_vm("test")
assert writer.write.called_with("test")
writer.write.assert_called_with(b"test\n")
assert res is None
@@ -514,7 +515,7 @@ async def test_control_vm_expect_text(vm, running_subprocess_mock):
vm._monitor = 4242
res = await vm._control_vm("test", [b"epic"])
assert writer.write.called_with("test")
writer.write.assert_called_with(b"test\n")
assert res == "epic product"
+2 -2
View File
@@ -255,7 +255,7 @@ async def test_qemu_list_binaries(compute_api, vm):
with asyncio_patch("gns3server.compute.qemu.Qemu.binary_list", return_value=ret) as mock:
response = await compute_api.get("/qemu/binaries".format(project_id=vm["project_id"]))
assert mock.called_with(None)
mock.assert_called_with(None)
assert response.status == 200
assert response.json == ret
@@ -271,7 +271,7 @@ async def test_qemu_list_binaries_filter(compute_api, vm):
with asyncio_patch("gns3server.compute.qemu.Qemu.binary_list", return_value=ret) as mock:
response = await compute_api.get("/qemu/binaries".format(project_id=vm["project_id"]), body={"archs": ["i386"]})
assert response.status == 200
assert mock.called_with(["i386"])
mock.assert_called_with(["i386"])
assert response.json == ret
+1 -1
View File
@@ -1,4 +1,4 @@
-rrequirements.txt
pywin32==305
pywin32==306
wmi==1.5.1