diff --git a/gns3server/main.py b/gns3server/main.py
index 30360876..e0bf9af2 100644
--- a/gns3server/main.py
+++ b/gns3server/main.py
@@ -16,6 +16,16 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
+
+# WARNING
+# Due to buggy user machines we choose to put this as the first loading modules
+# otherwise the egg cache is initialized in his standard location and
+# if is not writetable the application crash. It's the user fault
+# because one day the user as used sudo to run an egg and break his
+# filesystem permissions, but it's a common mistake.
+import gns3server.utils.get_resource
+
+
import os
import datetime
import sys
diff --git a/gns3server/modules/iou/iou_vm.py b/gns3server/modules/iou/iou_vm.py
index b7214bd4..d666fc95 100644
--- a/gns3server/modules/iou/iou_vm.py
+++ b/gns3server/modules/iou/iou_vm.py
@@ -433,7 +433,10 @@ class IOUVM(BaseVM):
yield from self._library_check()
- self._rename_nvram_file()
+ try:
+ self._rename_nvram_file()
+ except OSError as e:
+ raise IOUError("Could not rename nvram files: {}".format(e))
iourc_path = self.iourc_path
if iourc_path is None:
diff --git a/gns3server/utils/get_resource.py b/gns3server/utils/get_resource.py
new file mode 100644
index 00000000..dae285fc
--- /dev/null
+++ b/gns3server/utils/get_resource.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2015 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 .
+
+import tempfile
+import pkg_resources
+import atexit
+import logging
+
+log = logging.getLogger(__name__)
+
+try:
+ egg_cache_dir = tempfile.mkdtemp()
+ pkg_resources.set_extraction_path(egg_cache_dir)
+except ValueError:
+ # If the path is already set the module throw an error
+ pass
+
+
+@atexit.register
+def clean_egg_cache():
+ try:
+ import shutil
+ log.debug("Clean egg cache %s", egg_cache_dir)
+ shutil.rmtree(egg_cache_dir)
+ except Exception:
+ # We don't care if we can not cleanup
+ pass
diff --git a/tests/modules/qemu/test_qemu_vm.py b/tests/modules/qemu/test_qemu_vm.py
index 5d00e1c5..ac939473 100644
--- a/tests/modules/qemu/test_qemu_vm.py
+++ b/tests/modules/qemu/test_qemu_vm.py
@@ -272,12 +272,13 @@ def test_build_command(vm, loop, fake_qemu_binary, port_manager):
os.path.join(vm.working_dir, "flash.qcow2"),
"-serial",
"telnet:127.0.0.1:{},server,nowait".format(vm.console),
+ "-net",
+ "none",
"-device",
- "e1000,mac=00:00:ab:0e:0f:00,netdev=gns3-0",
- "-netdev",
- "user,id=gns3-0"
+ "e1000,mac=00:00:ab:0e:0f:00"
]
+
@pytest.mark.skipif(sys.platform.startswith("win"), reason="Not supported on Windows")
def test_build_command_without_display(vm, loop, fake_qemu_binary):
@@ -313,6 +314,7 @@ def test_hdb_disk_image(vm, tmpdir):
vm.hdb_disk_image = "test"
assert vm.hdb_disk_image == str(tmpdir / "QEMU" / "test")
+
def test_hdc_disk_image(vm, tmpdir):
with patch("gns3server.config.Config.get_section_config", return_value={"images_path": str(tmpdir)}):
@@ -321,6 +323,7 @@ def test_hdc_disk_image(vm, tmpdir):
vm.hdc_disk_image = "test"
assert vm.hdc_disk_image == str(tmpdir / "QEMU" / "test")
+
def test_hdd_disk_image(vm, tmpdir):
with patch("gns3server.config.Config.get_section_config", return_value={"images_path": str(tmpdir)}):