hets_script revision f1ad856e8c8cf6b66ae72a6612b4903ee1f80cfc
9a80079e082fdf4fe8e19f8fc61e6cd8799b47a7Christian Maeder# this script is part of Hets
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu# - Heterogenous Tool Set -
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu# Handling switches
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanuimport fcntl, os, sys, subprocess;
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanusubprocess.DEVNULL=os.open(os.devnull, os.O_RDWR)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanusubprocess.STDOUT=sys.stdout
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanusubprocess.STDERR=sys.stderr
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanuclass UpdateFailure(Exception):
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu def __init__(self, msg):
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu self.value = msg
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu def __str__(self):
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu return repr(self.msg)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu f = open("/var/lib/dpkg/lock", 'w')
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu fcntl.lockf(f, fcntl.LOCK_EX|fcntl.LOCK_NB)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu print "Retrieving latest Hets OWL2Parser.jar...",
9a80079e082fdf4fe8e19f8fc61e6cd8799b47a7Christian Maeder subprocess.call("rm -r -f /tmp/OWL2Parser.jar",shell=True,stderr=subprocess.DEVNULL)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu sys.stdout.flush()
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.check_call("curl -sG http://www.informatik.uni-bremen.de/agbkb/forschung/formal_methods/CoFI/hets/src-distribution/OWL2Parser.jar \
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu > /tmp/OWL2Parser.jar",shell=True,stdout=sys.stdout,stderr=sys.stderr)
9a80079e082fdf4fe8e19f8fc61e6cd8799b47a7Christian Maeder except subprocess.CalledProcessError:
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu raise UpdateFailure("Failed to retrieve Hets OWL2Parser.jar!")
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu print "Retrieving latest Hets library...",
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu sys.stdout.flush()
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.call("rm -r -f /tmp/hets*",shell=True,stderr=subprocess.DEVNULL)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.check_call(["svn","export", "--force", "-q",
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu "https://svn-agbkb.informatik.uni-bremen.de/Hets-lib/trunk","/tmp/hets-lib"],
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu stdout=subprocess.STDOUT,stderr=subprocess.STDERR)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu except subprocess.CalledProcessError:
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu raise UpdateFailure("Failed to retrieve latest Hets library!")
9a80079e082fdf4fe8e19f8fc61e6cd8799b47a7Christian Maeder print "Retrieving latest Hets binary...",
9a80079e082fdf4fe8e19f8fc61e6cd8799b47a7Christian Maeder sys.stdout.flush()
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.call(["rm", "-f", "/tmp/hets-$HETS_DAILY_VERSION*"],stderr=subprocess.DEVNULL)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu if os.uname()[4] == "x86_64":
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.check_call("curl -sG http://www.informatik.uni-bremen.de/agbkb/forschung/formal_methods/CoFI/hets/linux64/daily/hets.bz2 \
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu > /tmp/hets-$HETS_DAILY_VERSION.bz2",shell=True,stdout=sys.stdout,stderr=sys.stderr)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.check_call("curl -sG http://www.informatik.uni-bremen.de/agbkb/forschung/formal_methods/CoFI/hets/linux/daily/hets.bz2 \
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu > /tmp/hets-$HETS_DAILY_VERSION.bz2",shell=True,stdout=sys.stdout,stderr=sys.stderr)
9a80079e082fdf4fe8e19f8fc61e6cd8799b47a7Christian Maeder except subprocess.CalledProcessError:
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu raise UpdateFailure("Failed to retrieve latest Hets binary...")
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.check_call(["bunzip2", "/tmp/hets-$HETS_DAILY_VERSION.bz2"],
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu stdout=subprocess.STDOUT,stderr=subprocess.STDERR)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.call(["chmod","+x","/tmp/hets-$HETS_DAILY_VERSION"])
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.check_call(["/tmp/hets-$HETS_DAILY_VERSION","-V"],stdout=subprocess.DEVNULL,stderr=subprocess.DEVNULL)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu except subprocess.CalledProcessError:
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu raise UpdateFailure("Retrieved Hets binary seems broken. Please try again later!")
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu print "Creating Backups ...",
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu sys.stdout.flush()
9a80079e082fdf4fe8e19f8fc61e6cd8799b47a7Christian Maeder subprocess.check_call(["mv", "/usr/lib/hets/hets-owl-tools/OWL2Parser.jar",
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu "/usr/lib/hets/hets-owl-tools/OWL2Parser.jar.bak"],stderr=subprocess.DEVNULL)
9a80079e082fdf4fe8e19f8fc61e6cd8799b47a7Christian Maeder subprocess.check_call(["mv", "/usr/lib/hets/hets",
9a80079e082fdf4fe8e19f8fc61e6cd8799b47a7Christian Maeder "/usr/lib/hets/hets.bak"],stderr=subprocess.DEVNULL)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.check_call(["mv","/usr/lib/hets/hets-lib",
9a80079e082fdf4fe8e19f8fc61e6cd8799b47a7Christian Maeder "/usr/lib/hets/hets-lib.bak"],stderr=subprocess.DEVNULL)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu except subprocess.CalledProcessError:
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu raise UpdateFailure("Couldn't create backups. Please make sure the package hets-core is properly installed!")
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu print "Installing new files ...",
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu sys.stdout.flush()
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.check_call(["install", "-m", "755", "/tmp/hets-$HETS_DAILY_VERSION",
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu "/usr/lib/hets/hets"],stderr=subprocess.DEVNULL)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.check_call(["cp", "-r", "/tmp/hets-lib", "/usr/lib/hets/hets-lib"])
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.check_call(["install", "-m", "644", "/tmp/OWL2Parser.jar",
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu "/usr/lib/hets/hets-owl-tools"],stderr=subprocess.DEVNULL)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu except subprocess.CalledProcessError:
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.call(["rm", "-r", "-f", "/usr/lib/hets/hets-owl-tools/OWL2Parser.jar",
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu "/usr/lib/hets/hets", "/usr/lib/hets/hets-lib"],stderr=subprocess.DEVNULL)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanuexcept IOError:
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu print "Could not acquire lock \"/var/lib/dpkg/lock\""
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanuexcept UpdateFailure as e:
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu print "Experienced update failure: ", e.value
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.call(["mv", "/usr/lib/hets/hets-owl-tools/OWL2Parser.jar.bak",
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu "/usr/lib/hets/hets-owl-tools/OWL2Parser.jar"],stderr=subprocess.DEVNULL)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.call(["mv", "/usr/lib/hets/hets.bak",
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu "/usr/lib/hets/hets"],stderr=subprocess.DEVNULL)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.call(["mv","/usr/lib/hets/hets-lib.bak",
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu "/usr/lib/hets/hets-lib"],stderr=subprocess.DEVNULL)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu if not os.path.exists("/usr/lib/hets/hets-lib"):
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.call(["mv","/usr/lib/hets/hets-lib.bak","/usr/lib/hets/hets-lib"],stderr=subprocess.DEVNULL)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu if not os.path.exists("/usr/lib/hets/hets"):
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.call(["mv","/usr/lib/hets/hets.bak","/usr/lib/hets/hets"],stderr=subprocess.DEVNULL)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu if not os.path.exists("/usr/lib/hets/hets-owl-tools/OWL2Parser.jar"):
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.call(["mv","/usr/lib/hets/hets-owl-tools/OWL2Parser.jar.bak",
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu "/usr/lib/hets/hets-owl-tools/OWL2Parser.jar"],stderr=subprocess.DEVNULL)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.call("rm -r -f /tmp/hets*",shell=True,stderr=subprocess.DEVNULL)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.call("rm -r -f /tmp/OWL2Parser.jar",shell=True,stderr=subprocess.DEVNULL)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu echo "Root access required for \"hets -update\""
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanuimport fcntl, os, sys, subprocess;
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanusubprocess.DEVNULL=os.open(os.devnull, os.O_RDWR)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanusubprocess.STDOUT=sys.stdout
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanusubprocess.STDERR=sys.stderr
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanuclass UpdateFailure(Exception):
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu def __init__(self, msg):
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu self.value = msg
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu def __str__(self):
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu return repr(self.msg)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu f = open("/var/lib/dpkg/lock", 'w')
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu fcntl.lockf(f, fcntl.LOCK_EX|fcntl.LOCK_NB)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu print "Reverting to previous Hets binary... ",
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.check_call(["mv", "/usr/lib/hets/hets.bak",
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu "/usr/lib/hets/hets"],stderr=subprocess.DEVNULL);
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu if os.path.exists("/usr/lib/hets/hets-lib.bak"):
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.check_call(["rm", "-r", "-f", "/usr/lib/hets/hets-lib"],
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu stderr=subprocess.DEVNULL)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu subprocess.check_call(["mv", "/usr/lib/hets/hets-lib.bak",
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu "/usr/lib/hets/hets-lib"],stderr=subprocess.DEVNULL)
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu except subprocess.CalledProcessError:
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu raise UpdateFailure("Couldn't restore backup!")
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanuexcept IOError:
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu print "Could not acquire lock \"/var/lib/dpkg/lock\""
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanuexcept UpdateFailure as e:
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu print "Experienced revert failure: ", e.value
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu echo "No hets.bak found to revert."
3ee0a2095e7213b1b7889025658f784ef48426eaRazvan Pascanu echo "Root access required for \"hets -revert\""