Skip to content

Commit

Permalink
gns3: "Improve" the packaging
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
primeos committed Sep 22, 2017
1 parent 1acf671 commit 5257232
Show file tree
Hide file tree
Showing 4 changed files with 100 additions and 24 deletions.
30 changes: 30 additions & 0 deletions 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";
};
}
27 changes: 16 additions & 11 deletions 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
Expand All @@ -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 ];
Expand Down
62 changes: 51 additions & 11 deletions 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
'';

Expand All @@ -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 ];
Expand Down
5 changes: 3 additions & 2 deletions pkgs/top-level/all-packages.nix
Expand Up @@ -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;
Expand Down

0 comments on commit 5257232

Please sign in to comment.