From 5257232ac7a59dc3c7598042f0d21dc4ae60ea14 Mon Sep 17 00:00:00 2001 From: Michael Weiss Date: Fri, 22 Sep 2017 21:18:37 +0200 Subject: [PATCH] gns3: "Improve" the packaging This is "a bit" hacky tho... The improvement is that it now covers the stable as well as the preview releases and doesn't require Python 3.4 anymore. --- pkgs/applications/networking/gns3/default.nix | 30 +++++++++ pkgs/applications/networking/gns3/gui.nix | 27 ++++---- pkgs/applications/networking/gns3/server.nix | 62 +++++++++++++++---- pkgs/top-level/all-packages.nix | 5 +- 4 files changed, 100 insertions(+), 24 deletions(-) create mode 100644 pkgs/applications/networking/gns3/default.nix diff --git a/pkgs/applications/networking/gns3/default.nix b/pkgs/applications/networking/gns3/default.nix new file mode 100644 index 000000000000..bec700367da8 --- /dev/null +++ b/pkgs/applications/networking/gns3/default.nix @@ -0,0 +1,30 @@ +{ callPackage, stdenv }: + +let + stableVersion = "2.0.3"; + previewVersion = "2.1.0rc1"; + addVersion = args: + let version = if args.stable then stableVersion else previewVersion; + branch = if args.stable then "stable" else "preview"; + in args // { inherit version branch; }; + mkGui = args: callPackage (import ./gui.nix (addVersion args)) { }; + mkServer = args: callPackage (import ./server.nix (addVersion args)) { }; +in { + guiStable = mkGui { + stable = true; + sha256Hash = "10qp6430md8d0h2wamgfaq7pai59mqmcw6sw3i1gvb20m0avvsvb"; + }; + guiPreview = mkGui { + stable = false; + sha256Hash = "0rmvanzc0fjw9giqwnf98yc49cxaz637w8b865dv08lcf1fg9j8l"; + }; + + serverStable = mkServer { + stable = true; + sha256Hash = "1c7mzj1r2zh90a7vs3s17jakfp9s43b8nnj29rpamqxvl3qhbdy7"; + }; + serverPreview = mkServer { + stable = false; + sha256Hash = "181689fpjxq4hy2lyxk4zciqhgnhj5srvb4xsxdlbf68n89fj2zf"; + }; +} diff --git a/pkgs/applications/networking/gns3/gui.nix b/pkgs/applications/networking/gns3/gui.nix index 284c4f8cee1a..1352774953df 100644 --- a/pkgs/applications/networking/gns3/gui.nix +++ b/pkgs/applications/networking/gns3/gui.nix @@ -1,19 +1,22 @@ -{ stdenv, python34Packages, fetchFromGitHub }: +{ stable, branch, version, sha256Hash }: -# TODO: Python 3.6 was failing -python34Packages.buildPythonPackage rec { +{ stdenv, python3Packages, fetchFromGitHub }: + +let + pythonPackages = python3Packages; + +in pythonPackages.buildPythonPackage rec { name = "${pname}-${version}"; pname = "gns3-gui"; - version = "2.0.3"; src = fetchFromGitHub { owner = "GNS3"; repo = pname; rev = "v${version}"; - sha256 = "10qp6430md8d0h2wamgfaq7pai59mqmcw6sw3i1gvb20m0avvsvb"; + sha256 = sha256Hash; }; - propagatedBuildInputs = with python34Packages; [ + propagatedBuildInputs = with pythonPackages; [ raven psutil jsonschema # tox for check # Runtime dependencies sip pyqt5 @@ -22,11 +25,13 @@ python34Packages.buildPythonPackage rec { doCheck = false; # Failing meta = with stdenv.lib; { - description = "Graphical Network Simulator"; - #longDescription = '' - # ... - #''; - homepage = "https://www.gns3.com/"; + description = "Graphical Network Simulator 3 GUI (${branch} release)"; + longDescription = '' + Graphical user interface for controlling the GNS3 network simulator. This + requires access to a local or remote GNS3 server (it's recommended to + download the official GNS3 VM). + ''; + homepage = https://www.gns3.com/; license = licenses.gpl3Plus; platforms = platforms.linux; maintainers = with maintainers; [ primeos ]; diff --git a/pkgs/applications/networking/gns3/server.nix b/pkgs/applications/networking/gns3/server.nix index 7d5d9433bf31..9d7bf6f5a3ab 100644 --- a/pkgs/applications/networking/gns3/server.nix +++ b/pkgs/applications/networking/gns3/server.nix @@ -1,23 +1,63 @@ -{ stdenv, python3Packages, fetchFromGitHub }: +{ stable, branch, version, sha256Hash }: -python3Packages.buildPythonPackage rec { +{ stdenv, python3Packages, fetchFromGitHub, fetchurl }: + +let + pythonPackages = python3Packages; + yarl = if (!stable) then pythonPackages.yarl + else (stdenv.lib.overrideDerivation pythonPackages.yarl (oldAttrs: + rec { + pname = "yarl"; + version = "0.9.8"; + name = "${pname}-${version}"; + src = pythonPackages.fetchPypi { + inherit pname version; + sha256 = "1v2dsmr7bqp0yx51pwhbxyvzza8m2f88prsnbd926mi6ah38p0d7"; + }; + })); + aiohttp = if (!stable) then pythonPackages.aiohttp + else (stdenv.lib.overrideDerivation pythonPackages.aiohttp (oldAttrs: + rec { + pname = "aiohttp"; + version = "1.3.5"; + name = "${pname}-${version}"; + src = pythonPackages.fetchPypi { + inherit pname version; + sha256 = "0hpqdiaifgyfqmxkyzwypwvrnvz5rqzgzylzhihfidc5ldfs856d"; + }; + propagatedBuildInputs = [ yarl ] + ++ (with pythonPackages; [ async-timeout chardet multidict ]); + })); + aiohttp-cors = if (!stable) then pythonPackages.aiohttp-cors + else (stdenv.lib.overrideDerivation pythonPackages.aiohttp-cors (oldAttrs: + rec { + pname = "aiohttp-cors"; + version = "0.5.1"; + name = "${pname}-${version}"; + src = pythonPackages.fetchPypi { + inherit pname version; + sha256 = "0szma27ri25fq4nwwvs36myddggw3jz4pyzmq63yz4xpw0jjdxck"; + }; + propagatedBuildInputs = [ aiohttp ]; + })); +in pythonPackages.buildPythonPackage rec { name = "${pname}-${version}"; pname = "gns3-server"; - version = "2.1.0rc1"; src = fetchFromGitHub { owner = "GNS3"; repo = pname; rev = "v${version}"; - sha256 = "181689fpjxq4hy2lyxk4zciqhgnhj5srvb4xsxdlbf68n89fj2zf"; + sha256 = sha256Hash; }; - propagatedBuildInputs = with python3Packages; [ - aiohttp jinja2 psutil zipstream aiohttp-cors raven jsonschema yarl typing - prompt_toolkit - ]; + propagatedBuildInputs = [ yarl aiohttp aiohttp-cors ] + ++ (with pythonPackages; [ + jinja2 psutil zipstream raven jsonschema typing + prompt_toolkit + ]); - postPatch = '' + postPatch = stdenv.lib.optionalString (!stable) '' sed -i 's/yarl>=0.11,<0.12/yarl/g' requirements.txt ''; @@ -28,13 +68,13 @@ python3Packages.buildPythonPackage rec { rm $out/bin/gns3loopback # For windows only ''; meta = with stdenv.lib; { - description = "Graphical Network Simulator 3 server"; + description = "Graphical Network Simulator 3 server (${branch} release)"; longDescription = '' The GNS3 server manages emulators such as Dynamips, VirtualBox or Qemu/KVM. Clients like the GNS3 GUI control the server using a HTTP REST API. ''; - homepage = "https://www.gns3.com/"; + homepage = https://www.gns3.com/; license = licenses.gpl3Plus; platforms = platforms.linux; maintainers = with maintainers; [ primeos ]; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 374dc8e81c79..0798cb204e0b 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -8256,8 +8256,9 @@ with pkgs; # A GMP fork mpir = callPackage ../development/libraries/mpir {}; - gns3-gui = callPackage ../applications/networking/gns3/gui.nix { }; - gns3-server = callPackage ../applications/networking/gns3/server.nix { }; + gns3Packages = callPackage ../applications/networking/gns3 { }; + gns3-gui = gns3Packages.guiStable; + gns3-server = gns3Packages.serverStable; gobjectIntrospection = callPackage ../development/libraries/gobject-introspection { nixStoreDir = config.nix.storeDir or builtins.storeDir;