summaryrefslogtreecommitdiffstats
path: root/base/common/sbin/pki-upgrade
diff options
context:
space:
mode:
Diffstat (limited to 'base/common/sbin/pki-upgrade')
-rwxr-xr-xbase/common/sbin/pki-upgrade146
1 files changed, 146 insertions, 0 deletions
diff --git a/base/common/sbin/pki-upgrade b/base/common/sbin/pki-upgrade
new file mode 100755
index 000000000..8b30f8fff
--- /dev/null
+++ b/base/common/sbin/pki-upgrade
@@ -0,0 +1,146 @@
+#!/usr/bin/python
+# Authors:
+# Endi S. Dewata <edewata@redhat.com>
+#
+# 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; version 2 of the License.
+#
+# 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, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright (C) 2013 Red Hat, Inc.
+# All rights reserved.
+#
+
+import getopt
+import os
+import signal
+import sys
+
+import pki
+import pki.upgrade
+
+
+def interrupt_handler(signal, frame):
+ print
+ print
+ print 'Upgrade canceled.'
+ sys.exit(1)
+
+
+def usage():
+ print 'Usage: pki-upgrade [OPTIONS]'
+ print
+ print ' --scriptlet-version <version> Run scriptlets for a specific version only.'
+ print ' --scriptlet-index <index> Run a specific scriptlet only.'
+ print
+ print ' --silent Upgrade in silent mode. Ignore any failures.'
+ print ' --status Show upgrade status only. Do not perform upgrade.'
+ print
+ print ' -X Show advanced usage.'
+ print ' -v, --verbose Run in verbose mode.'
+ print ' -h, --help Show this help message.'
+
+
+def advancedUsage():
+ print 'WARNING: These options may render the system unusable.'
+ print 'Usage: pki-upgrade [OPTIONS]'
+ print ' --remove-tracker Remove tracker'
+ print ' --reset-tracker Reset tracker to match package version'
+
+
+def main(argv):
+
+ signal.signal(signal.SIGINT, interrupt_handler)
+
+ try:
+ opts, args = getopt.getopt(argv[1:], 'hi:s:t:vX', [
+ 'scriptlet-version=', 'scriptlet-index=',
+ 'silent', 'status',
+ 'remove-tracker', 'reset-tracker',
+ 'verbose', 'help'])
+
+ except getopt.GetoptError as e:
+ print 'ERROR: ' + str(e)
+ usage()
+ sys.exit(1)
+
+ version = None
+ index = None
+
+ silent = False
+ status = False
+ remove_tracker = False
+ reset_tracker = False
+
+ for o, a in opts:
+ if o == '--scriptlet-version':
+ version = a
+
+ elif o == '--scriptlet-index':
+ index = int(a)
+
+ elif o == '--silent':
+ silent = True
+
+ elif o == '--status':
+ status = True
+
+ elif o == '--remove-tracker':
+ remove_tracker = True
+
+ elif o == '--reset-tracker':
+ reset_tracker = True
+
+ elif o in ('-v', '--verbose'):
+ pki.upgrade.verbose = True
+
+ elif o in ('-h', '--help'):
+ usage()
+ sys.exit()
+
+ elif o == '-X':
+ advancedUsage()
+ sys.exit()
+
+ else:
+ print 'ERROR: unknown option ' + o
+ usage()
+ sys.exit(1)
+
+ if index and not version:
+ print 'ERROR: --scriptlet-index requires --scriptlet-version'
+ usage()
+ sys.exit(1)
+
+ try:
+ upgrader = pki.upgrade.PKIUpgrader(
+ version = version,
+ index = index,
+ silent = silent)
+
+ if status:
+ upgrader.status()
+
+ elif remove_tracker:
+ upgrader.remove_tracker()
+
+ elif reset_tracker:
+ upgrader.reset_tracker()
+
+ else:
+ upgrader.upgrade()
+
+ except pki.PKIException as e:
+ print e.message
+
+
+if __name__ == '__main__':
+ main(sys.argv)