From 595c1a970b823c7da22b274f3347c73215ee4618 Mon Sep 17 00:00:00 2001 From: gau1991 Date: Wed, 6 May 2015 15:46:11 +0530 Subject: [PATCH] Added function to check missing GPG keys, fixed #470 --- ee/cli/plugins/stack.py | 12 +++++++++++- ee/cli/plugins/stack_migrate.py | 11 ++++++++++- ee/cli/plugins/stack_upgrade.py | 10 +++++++++- ee/core/aptget.py | 4 ++-- ee/core/gpgkeyfix.py | 20 ++++++++++++++++++++ 5 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 ee/core/gpgkeyfix.py diff --git a/ee/cli/plugins/stack.py b/ee/cli/plugins/stack.py index cd0d624f..24854bbb 100644 --- a/ee/cli/plugins/stack.py +++ b/ee/cli/plugins/stack.py @@ -16,6 +16,7 @@ from ee.core.checkfqdn import check_fqdn from pynginxconfig import NginxConfig from ee.core.services import EEService from ee.core.variables import EEVariables +from ee.core.gpgkeyfix import gpgkeyfix import random import string import configparser @@ -1583,7 +1584,16 @@ class EEStackController(CementBaseController): if len(apt_packages): EESwap.add(self) Log.info(self, "Updating apt-cache, please wait...") - EEAptGet.update(self) + + if not EEAptGet.update(self): + Log.info(self, "Fixing mixing GPG keys, please wait...") + gpgkeyfix(self) + if not EEAptGet.update(self): + Log.info(self, Log.FAIL + "Oops Something went " + "wrong!!") + Log.error(self, "Check logs for reason " + "`tail /var/log/ee/ee.log` & Try Again!!!") + Log.info(self, "Installing packages, please wait...") EEAptGet.install(self, apt_packages) if len(packages): diff --git a/ee/cli/plugins/stack_migrate.py b/ee/cli/plugins/stack_migrate.py index e200036b..7a864239 100644 --- a/ee/cli/plugins/stack_migrate.py +++ b/ee/cli/plugins/stack_migrate.py @@ -7,6 +7,7 @@ from ee.core.aptget import EEAptGet from ee.core.shellexec import EEShellExec from ee.core.apt_repo import EERepo from ee.core.services import EEService +from ee.core.gpgkeyfix import gpgkeyfix import configparser import os @@ -88,7 +89,15 @@ class EEStackMigrateController(CementBaseController): "libclass-dbi-mysql-perl"] Log.info(self, "Updating apt-cache, please wait...") - EEAptGet.update(self) + + if not EEAptGet.update(self): + Log.info(self, "Fixing mixing GPG keys, please wait...") + gpgkeyfix(self) + if not EEAptGet.update(self): + Log.info(self, Log.FAIL + "Oops Something went wrong!!") + Log.error(self, "Check logs for reason " + "`tail /var/log/ee/ee.log` & Try Again!!!") + Log.info(self, "Installing MariaDB, please wait...") EEAptGet.remove(self, ["mysql-common", "libmysqlclient18"]) EEAptGet.auto_remove(self) diff --git a/ee/cli/plugins/stack_upgrade.py b/ee/cli/plugins/stack_upgrade.py index 1bfe07e3..f1b17718 100644 --- a/ee/cli/plugins/stack_upgrade.py +++ b/ee/cli/plugins/stack_upgrade.py @@ -7,6 +7,7 @@ from ee.core.apt_repo import EERepo from ee.core.services import EEService from ee.core.fileutils import EEFileUtils from ee.core.shellexec import EEShellExec +from ee.core.gpgkeyfix import gpgkeyfix import configparser import os @@ -76,7 +77,14 @@ class EEStackUpgradeController(CementBaseController): "php55", "php56") Log.info(self, "Updating apt-cache, please wait...") - EEAptGet.update(self) + if not EEAptGet.update(self): + Log.info(self, "Fixing mixing GPG keys, please wait...") + gpgkeyfix(self) + if not EEAptGet.update(self): + Log.info(self, Log.FAIL + "Oops Something went wrong!!") + Log.error(self, "Check logs for reason " + "`tail /var/log/ee/ee.log` & Try Again!!!") + Log.info(self, "Installing packages, please wait ...") EEAptGet.install(self, EEVariables.ee_php) diff --git a/ee/core/aptget.py b/ee/core/aptget.py index a4071a4a..27c16382 100644 --- a/ee/core/aptget.py +++ b/ee/core/aptget.py @@ -13,7 +13,7 @@ class EEAptGet(): def update(self): """ - Similar to `apt-get upgrade` + Similar to `apt-get update` """ try: with open('/var/log/ee/ee.log', 'a') as f: @@ -26,7 +26,7 @@ class EEAptGet(): if proc.returncode == 0: return True else: - Log.error(self, "Unable to run apt-get update") + return False except Exception as e: Log.error(self, "Error while installing packages, " diff --git a/ee/core/gpgkeyfix.py b/ee/core/gpgkeyfix.py new file mode 100644 index 00000000..b020338d --- /dev/null +++ b/ee/core/gpgkeyfix.py @@ -0,0 +1,20 @@ +"""EasyEngine apt-get update GPG Key fix module""" + +import os +import subprocess + + +def gpgkeyfix(self): + try: + sub = subprocess.Popen('apt-get update', stdout=subprocess.PIPE, + stderr=subprocess.PIPE, shell=True) + sub.wait() + output, error_output = sub.communicate() + if "NO_PUBKEY" in str(error_output): + error_list = str(error_output).split("\\n") + for single_error in error_list: + if "NO_PUBKEY" in single_error: + key = single_error.rsplit(None, 1)[-1] + EERepo.add_key(self, key) + except Exception as e: + Log.error(self, "Error while fixing GPG keys")