diff --git a/CHANGELOG b/CHANGELOG
index a0bb413d6..ab416f18d 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,16 @@
# Change Log
+## 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
diff --git a/gns3server/appliances/almalinux.gns3a b/gns3server/appliances/almalinux.gns3a
index 0f60291b3..56e3f9cf7 100644
--- a/gns3server/appliances/almalinux.gns3a
+++ b/gns3server/appliances/almalinux.gns3a
@@ -24,6 +24,22 @@
"kvm": "allow"
},
"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 +58,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": {
diff --git a/gns3server/appliances/centos-cloud.gns3a b/gns3server/appliances/centos-cloud.gns3a
index 4a41ff7db..c9666c403 100644
--- a/gns3server/appliances/centos-cloud.gns3a
+++ b/gns3server/appliances/centos-cloud.gns3a
@@ -26,6 +26,22 @@
"options": "-nographic"
},
"images": [
+ {
+ "filename": "CentOS-Stream-GenericCloud-9-20230727.1.x86_64.qcow2",
+ "version": "Stream-9 (20230727.1)",
+ "md5sum": "b66b7e4951cb5491ae44d5616d56b7cf",
+ "filesize": 1128764416,
+ "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-20230727.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 (20230727.1)",
+ "images": {
+ "hda_disk_image": "CentOS-Stream-GenericCloud-9-20230727.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": {
diff --git a/gns3server/appliances/debian.gns3a b/gns3server/appliances/debian.gns3a
index 9b76e476f..bb3909f4c 100644
--- a/gns3server/appliances/debian.gns3a
+++ b/gns3server/appliances/debian.gns3a
@@ -24,12 +24,12 @@
},
"images": [
{
- "filename": "debian-12-genericcloud-amd64-20230612-1409.qcow2",
- "version": "12.0",
- "md5sum": "524cf33a1284d6e3363bd4d843756386",
+ "filename": "debian-12-genericcloud-amd64-20230723-1450.qcow2",
+ "version": "12.1",
+ "md5sum": "6d1efcaa206de01eeeb590d773421c5c",
"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"
+ "direct_download_url": "https://cloud.debian.org/images/cloud/bookworm/20230723-1450/debian-12-genericcloud-amd64-20230723-1450.qcow2"
},
{
"filename": "debian-11-genericcloud-amd64-20230601-1398.qcow2",
@@ -58,9 +58,9 @@
],
"versions": [
{
- "name": "12.0",
+ "name": "12.1",
"images": {
- "hda_disk_image": "debian-12-genericcloud-amd64-20230612-1409.qcow2",
+ "hda_disk_image": "debian-12-genericcloud-amd64-20230723-1450.qcow2",
"cdrom_image": "debian-cloud-init-data.iso"
}
},
diff --git a/gns3server/appliances/endhost.gns3a b/gns3server/appliances/endhost.gns3a
new file mode 100644
index 000000000..574db3472
--- /dev/null
+++ b/gns3server/appliances/endhost.gns3a
@@ -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"
+ }
+}
diff --git a/gns3server/appliances/extreme-networks-voss.gns3a b/gns3server/appliances/extreme-networks-voss.gns3a
index b2d355ef6..abe362756 100644
--- a/gns3server/appliances/extreme-networks-voss.gns3a
+++ b/gns3server/appliances/extreme-networks-voss.gns3a
@@ -27,6 +27,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 +92,13 @@
}
],
"versions": [
+ {
+ "name": "v8.10.1.0",
+ "images":
+ {
+ "hda_disk_image": "VOSSGNS3.8.10.1.0.qcow2"
+ }
+ },
{
"name": "v8.8.0.0",
"images": {
diff --git a/gns3server/appliances/fedora-cloud.gns3a b/gns3server/appliances/fedora-cloud.gns3a
index 93ec221bc..1a1c27e69 100644
--- a/gns3server/appliances/fedora-cloud.gns3a
+++ b/gns3server/appliances/fedora-cloud.gns3a
@@ -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": {
diff --git a/gns3server/appliances/haproxy.gns3a b/gns3server/appliances/haproxy.gns3a
new file mode 100644
index 000000000..3aa86a1e1
--- /dev/null
+++ b/gns3server/appliances/haproxy.gns3a
@@ -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"
+ }
+}
diff --git a/gns3server/appliances/huawei-ce12800.gns3a b/gns3server/appliances/huawei-ce12800.gns3a
index 8626d8cb8..8d05abeb2 100644
--- a/gns3server/appliances/huawei-ce12800.gns3a
+++ b/gns3server/appliances/huawei-ce12800.gns3a
@@ -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": [
{
diff --git a/gns3server/appliances/huawei-ne40e.gns3a b/gns3server/appliances/huawei-ne40e.gns3a
index 4248f2046..1e7f89d6c 100644
--- a/gns3server/appliances/huawei-ne40e.gns3a
+++ b/gns3server/appliances/huawei-ne40e.gns3a
@@ -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": [
{
diff --git a/gns3server/appliances/rhel.gns3a b/gns3server/appliances/rhel.gns3a
index feacaf27f..cff503077 100644
--- a/gns3server/appliances/rhel.gns3a
+++ b/gns3server/appliances/rhel.gns3a
@@ -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,
@@ -26,6 +26,48 @@
"options": "-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": {
diff --git a/gns3server/appliances/ubuntu-cloud.gns3a b/gns3server/appliances/ubuntu-cloud.gns3a
index ad8d24212..49d007cf1 100644
--- a/gns3server/appliances/ubuntu-cloud.gns3a
+++ b/gns3server/appliances/ubuntu-cloud.gns3a
@@ -26,9 +26,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 +44,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 +52,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 +69,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"
diff --git a/gns3server/appliances/windows_server.gns3a b/gns3server/appliances/windows_server.gns3a
index 153391baa..fec9bcf02 100644
--- a/gns3server/appliances/windows_server.gns3a
+++ b/gns3server/appliances/windows_server.gns3a
@@ -27,6 +27,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 +58,13 @@
}
],
"versions": [
+ {
+ "name": "2022",
+ "images": {
+ "hda_disk_image": "empty100G.qcow2",
+ "cdrom_image": "SERVER_EVAL_x64FRE_en-us.iso"
+ }
+ },
{
"name": "2016",
"images": {
diff --git a/gns3server/controller/__init__.py b/gns3server/controller/__init__.py
index 33552c6ac..2220f7e5f 100644
--- a/gns3server/controller/__init__.py
+++ b/gns3server/controller/__init__.py
@@ -251,7 +251,9 @@ def _load_controller_settings(self):
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()
self._appliance_manager.appliances_etag = controller_settings.get("appliances_etag")
diff --git a/gns3server/controller/appliance_manager.py b/gns3server/controller/appliance_manager.py
index 679926f16..76cadfbf0 100644
--- a/gns3server/controller/appliance_manager.py
+++ b/gns3server/controller/appliance_manager.py
@@ -15,7 +15,6 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-import sys
import os
import json
import uuid
@@ -23,6 +22,7 @@
import aiohttp
import shutil
+
try:
import importlib_resources
except ImportError:
@@ -200,7 +200,10 @@ async def download_appliances(self):
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
diff --git a/gns3server/controller/gns3vm/virtualbox_gns3_vm.py b/gns3server/controller/gns3vm/virtualbox_gns3_vm.py
index ab8f84edf..ac9045b9b 100644
--- a/gns3server/controller/gns3vm/virtualbox_gns3_vm.py
+++ b/gns3server/controller/gns3vm/virtualbox_gns3_vm.py
@@ -80,6 +80,9 @@ async def _get_system_properties(self):
except ValueError:
continue
self._system_properties[name.strip()] = value.strip()
+ if "API Version" in self._system_properties:
+ # API version is not consistent between VirtualBox versions, the key is named "API Version" in VirtualBox 7
+ self._system_properties["API version"] = self._system_properties.pop("API Version")
async def _check_requirements(self):
"""
diff --git a/gns3server/crash_report.py b/gns3server/crash_report.py
index 728a033c4..708320e99 100644
--- a/gns3server/crash_report.py
+++ b/gns3server/crash_report.py
@@ -29,11 +29,9 @@
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://226eee142b22cc399d1566b3dd4cbc86@o19455.ingest.sentry.io/38482"
_instance = None
def __init__(self):
@@ -72,24 +70,14 @@ def __init__(self):
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
diff --git a/gns3server/handlers/api/controller/node_handler.py b/gns3server/handlers/api/controller/node_handler.py
index c9e7c057d..900d04000 100644
--- a/gns3server/handlers/api/controller/node_handler.py
+++ b/gns3server/handlers/api/controller/node_handler.py
@@ -17,6 +17,7 @@
import aiohttp
import asyncio
+import ipaddress
from gns3server.web.route import Route
from gns3server.controller import Controller
@@ -477,7 +478,16 @@ async def ws_console(request, response):
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_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_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,
diff --git a/gns3server/run.py b/gns3server/run.py
index 2d0cf98b7..672cc357f 100644
--- a/gns3server/run.py
+++ b/gns3server/run.py
@@ -35,7 +35,6 @@
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()
diff --git a/gns3server/static/web-ui/index.html b/gns3server/static/web-ui/index.html
index 0664b3967..62604bcf6 100644
--- a/gns3server/static/web-ui/index.html
+++ b/gns3server/static/web-ui/index.html
@@ -46,6 +46,6 @@
gtag('config', 'G-5D6FZL9923');
-
+