From ebe4fdc5b54992212ba581684edb72629117afa0 Mon Sep 17 00:00:00 2001 From: grossmj Date: Wed, 28 Jan 2026 18:44:51 +0800 Subject: [PATCH 1/6] Development on 2.2.57.dev2 --- gns3server/version.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gns3server/version.py b/gns3server/version.py index b4b765e96..c520f0086 100644 --- a/gns3server/version.py +++ b/gns3server/version.py @@ -23,8 +23,8 @@ # or negative for a release candidate or beta (after the base version # number has been incremented) -__version__ = "2.2.56.1" -__version_info__ = (2, 2, 56, 0) +__version__ = "2.2.57.dev2" +__version_info__ = (2, 2, 57, 99) if "dev" in __version__: try: From 44d4a426b505b173c4dfad54de891f2086eea7c5 Mon Sep 17 00:00:00 2001 From: grossmj Date: Wed, 11 Feb 2026 16:46:21 +0800 Subject: [PATCH 2/6] Upgrade sentry-sdk and psutil dependencies --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 9c322ec53..8743cc7a0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,8 +3,8 @@ aiohttp>=3.13.3,<3.14 aiohttp-cors>=0.8.1,<0.9 aiofiles>=25.1.0,<26.0 Jinja2>=3.1.6,<3.2 -sentry-sdk>=2.50.0,<3 # optional dependency -psutil>=7.2.1 +sentry-sdk>=2.52.0,<3 # optional dependency +psutil>=7.2.2 async-timeout>=5.0.1,<5.1 # this library has effectively been upstreamed into Python 3.11+ distro>=1.9.0 py-cpuinfo>=9.0.0,<10.0 From dd87ccff4d6a080a856a6b873ea72c7fed7a9781 Mon Sep 17 00:00:00 2001 From: grossmj Date: Wed, 11 Feb 2026 17:38:49 +0800 Subject: [PATCH 3/6] Upgrade pytest and jsonschema dependencies --- dev-requirements.txt | 3 ++- requirements.txt | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/dev-requirements.txt b/dev-requirements.txt index ece129f97..49eec2b3e 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,6 +1,7 @@ -rrequirements.txt -pytest==8.4.2 # version 8.4.2 is the last one supporting Python 3.9 +pytest==8.4.2; python_version == '3.9' # version 8.4.2 is the last one supporting Python 3.9 +pytest==9.0.2; python_version >= '3.10' flake8==7.3.0 pytest-timeout==2.4.0 pytest-aiohttp==1.1.0 diff --git a/requirements.txt b/requirements.txt index 8743cc7a0..4a55c7bfa 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ -jsonschema>=4.25.1,<4.26 # version 4.25.1 is the last to support Python 3.9 +jsonschema==4.25.1; python_version == '3.9' # version 4.25.1 is the last to support Python 3.9 +jsonschema>=4.26.0,<4.27; python_version >= '3.10' aiohttp>=3.13.3,<3.14 aiohttp-cors>=0.8.1,<0.9 aiofiles>=25.1.0,<26.0 From 3dd4184193df244c13f873deaf8db2202f3573a5 Mon Sep 17 00:00:00 2001 From: Dale Arbogast Date: Thu, 19 Feb 2026 16:44:01 -0500 Subject: [PATCH 4/6] fix: busybox static link detection on Alpine/musl On musl-based systems (Alpine), ldd returns exit code 0 for static binaries, unlike glibc which returns 1. This causes install_busybox() to reject all busybox binaries as "dynamically linked" on Alpine. Fix by also accepting binaries whose executable name contains "static" (i.e. busybox-static, busybox.static), which are the first two candidates checked by the function. The generic "busybox" fallback still relies on the ldd return code check. --- gns3server/compute/docker/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gns3server/compute/docker/__init__.py b/gns3server/compute/docker/__init__.py index 696646ade..a441af830 100644 --- a/gns3server/compute/docker/__init__.py +++ b/gns3server/compute/docker/__init__.py @@ -79,8 +79,10 @@ class Docker(BaseManager): stderr=asyncio.subprocess.DEVNULL ) stdout, _ = await proc.communicate() - if proc.returncode == 1: + if proc.returncode == 1 or "static" in busybox_exec: # ldd returns 1 if the file is not a dynamic executable + # on Alpine/musl, ldd returns 0 even for static binaries, + # so also trust binaries named busybox-static or busybox.static log.info(f"Installing busybox from '{busybox_path}' to '{dst_busybox}'") shutil.copy2(busybox_path, dst_busybox, follow_symlinks=True) return From 715b7032bc538e0d86c30aab0bc81f58e0506465 Mon Sep 17 00:00:00 2001 From: grossmj Date: Fri, 20 Feb 2026 15:50:25 +0800 Subject: [PATCH 5/6] Fix tests --- tests/compute/docker/test_docker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/compute/docker/test_docker.py b/tests/compute/docker/test_docker.py index 9e411503d..1bc98568d 100644 --- a/tests/compute/docker/test_docker.py +++ b/tests/compute/docker/test_docker.py @@ -251,7 +251,7 @@ async def test_install_busybox_dynamic_linked(): mock_process.communicate = AsyncioMagicMock(return_value=(b"Dynamically linked library", b"")) with patch("os.path.isfile", return_value=False): - with patch("gns3server.compute.docker.shutil.which", return_value="/usr/bin/busybox"): + with patch("gns3server.compute.docker.shutil.which", side_effect=lambda name: "/usr/bin/busybox" if name == "busybox" else None): with asyncio_patch("gns3server.compute.docker.asyncio.create_subprocess_exec", return_value=mock_process): with pytest.raises(DockerError) as e: dst_dir = Docker.resources_path() From 47cc827c1f5789f83146d6afa5299b0a0e2934ee Mon Sep 17 00:00:00 2001 From: grossmj Date: Fri, 20 Feb 2026 15:56:08 +0800 Subject: [PATCH 6/6] Remove some files not related to PR --- dev-requirements.txt | 3 +-- gns3server/version.py | 4 ++-- requirements.txt | 7 +++---- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/dev-requirements.txt b/dev-requirements.txt index 49eec2b3e..ece129f97 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,7 +1,6 @@ -rrequirements.txt -pytest==8.4.2; python_version == '3.9' # version 8.4.2 is the last one supporting Python 3.9 -pytest==9.0.2; python_version >= '3.10' +pytest==8.4.2 # version 8.4.2 is the last one supporting Python 3.9 flake8==7.3.0 pytest-timeout==2.4.0 pytest-aiohttp==1.1.0 diff --git a/gns3server/version.py b/gns3server/version.py index c520f0086..b4b765e96 100644 --- a/gns3server/version.py +++ b/gns3server/version.py @@ -23,8 +23,8 @@ # or negative for a release candidate or beta (after the base version # number has been incremented) -__version__ = "2.2.57.dev2" -__version_info__ = (2, 2, 57, 99) +__version__ = "2.2.56.1" +__version_info__ = (2, 2, 56, 0) if "dev" in __version__: try: diff --git a/requirements.txt b/requirements.txt index 4a55c7bfa..9c322ec53 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,11 +1,10 @@ -jsonschema==4.25.1; python_version == '3.9' # version 4.25.1 is the last to support Python 3.9 -jsonschema>=4.26.0,<4.27; python_version >= '3.10' +jsonschema>=4.25.1,<4.26 # version 4.25.1 is the last to support Python 3.9 aiohttp>=3.13.3,<3.14 aiohttp-cors>=0.8.1,<0.9 aiofiles>=25.1.0,<26.0 Jinja2>=3.1.6,<3.2 -sentry-sdk>=2.52.0,<3 # optional dependency -psutil>=7.2.2 +sentry-sdk>=2.50.0,<3 # optional dependency +psutil>=7.2.1 async-timeout>=5.0.1,<5.1 # this library has effectively been upstreamed into Python 3.11+ distro>=1.9.0 py-cpuinfo>=9.0.0,<10.0