123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- #!/usr/bin/python3
- # -*- Mode: Python; indent-tabs-mode: nil; tab-width: 4; coding: utf-8 -*-
- #
- # Copyright (c) 2004-2012 Canonical
- # 2004-2008 Michael Vogt
- # 2004 Michiel Sikkes
- #
- # Author: Michiel Sikkes <michiel@eyesopened.nl>
- # Michael Vogt <mvo@debian.org>
- #
- # 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 2 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, write to the Free Software
- # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- # USA
- from __future__ import print_function
- import os
- import subprocess
- import sys
- from DistUpgrade.DistUpgradeVersion import VERSION
- from DistUpgrade.DistUpgradeController import DistUpgradeController
- from DistUpgrade.DistUpgradeConfigParser import DistUpgradeConfig
- from DistUpgrade.DistUpgradeMain import (
- setup_logging,
- setup_view,
- )
- import locale
- import gettext
- from optparse import OptionParser
- if __name__ == "__main__":
- #FIXME: Workaround a bug in optparser which doesn't handle unicode/str
- # correctly, see http://bugs.python.org/issue4391
- # Should be resolved by Python3
- gettext.bindtextdomain("ubuntu-release-upgrader", "/usr/share/locale")
- gettext.textdomain("ubuntu-release-upgrader")
- translation = gettext.translation("ubuntu-release-upgrader", fallback=True)
- if sys.version >= '3':
- _ = translation.gettext
- else:
- _ = translation.ugettext
- try:
- locale.setlocale(locale.LC_ALL, "")
- except:
- pass
- # gtk2 used to throw a exception when it failed to init the display,
- # so back then it was safe to try to import the frontend and fallback
- # to text if the import failed. this is no longer the case so we need
- # do figure it out here :/
- if "DISPLAY" in os.environ:
- default_frontend = "DistUpgradeViewGtk3"
- else:
- default_frontend = "DistUpgradeViewText"
- # Begin parsing of options
- parser = OptionParser()
- parser.add_option ("-V", "--version", action="store_true",
- dest="show_version", default=False,
- help=_("Show version and exit"))
- parser.add_option ("--data-dir", "", dest="datadir",
- default="/usr/share/ubuntu-release-upgrader/",
- help=_("Directory that contains the data files"))
- parser.add_option ("-f", "--frontend", default=default_frontend,
- dest="frontend",
- help=_("Run the specified frontend"))
- (options, args) = parser.parse_args()
- datadir = os.path.normpath(options.datadir)+"/"
- if options.show_version:
- print("%s: version %s" % (os.path.basename(sys.argv[0]), VERSION))
- sys.exit(0)
- # raise privileges when not started as root
- if os.getuid() != 0:
- # apply workaround for Wayland
- if ((options.frontend in {"DistUpgradeViewGtk3"} and
- 'WAYLAND_DISPLAY' in os.environ)):
- subprocess.run(['xhost', '+si:localuser:root'])
- os.execv("/usr/bin/pkexec", ["pkexec"] + sys.argv)
- # we are by definition in partial upgrade mode
- options.partial = True
- config = DistUpgradeConfig(options.datadir)
- logdir = setup_logging(options, config)
- view = setup_view(options, config, logdir)
- if options.frontend == "DistUpgradeViewGtk3":
- from gi.repository import Gtk
- import gi
- gi.require_version("Gtk", "3.0")
- Gtk.init_check(sys.argv)
- Gtk.Window.set_default_icon_name("system-software-update")
- view.label_title.set_markup("<b><big>%s</big></b>" %
- _("Running partial upgrade"))
- controller = DistUpgradeController(view, datadir=datadir)
- controller.doPartialUpgrade()
|