summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Sivak <msivak@redhat.com>2012-08-06 13:43:32 +0200
committerMartin Sivak <msivak@redhat.com>2012-08-06 13:43:32 +0200
commita518f8919488710842dc50d6e28f1d9bea5a186d (patch)
treeef1d8e64aef6cf133d4f92177eea3ed6644b49f1
parent72c797294e5d70a221cab91d3d97ce805ad4b851 (diff)
parent86dd8ff76ba9a6fd10a7325df2c0691339d7fb76 (diff)
downloadanaconda-a518f8919488710842dc50d6e28f1d9bea5a186d.tar.gz
anaconda-a518f8919488710842dc50d6e28f1d9bea5a186d.tar.xz
anaconda-a518f8919488710842dc50d6e28f1d9bea5a186d.zip
Merge master into newtui
-rw-r--r--Makefile.am2
-rwxr-xr-xanaconda314
-rw-r--r--anaconda.spec.in22
-rw-r--r--configure.ac4
-rw-r--r--data/Makefile.am8
-rw-r--r--data/interactive-defaults.ks4
-rw-r--r--data/post-scripts/80-setfilecons.ks10
-rw-r--r--data/post-scripts/95-copy-logs.ks1
-rw-r--r--data/systemd/Makefile.am3
-rw-r--r--data/systemd/anaconda-cleanup-initramfs.service2
-rwxr-xr-xdata/systemd/anaconda-generator2
-rw-r--r--data/systemd/anaconda-tmux@.service15
-rw-r--r--data/systemd/anaconda.service (renamed from data/systemd/anaconda@.service)10
-rw-r--r--data/systemd/anaconda.target1
-rw-r--r--data/systemd/fedora-import-state14
-rw-r--r--data/systemd/fedora-import-state.service13
-rw-r--r--data/tmux.conf16
-rw-r--r--data/ui/GroupSelector.glade394
-rw-r--r--data/ui/Makefile.am25
-rw-r--r--data/ui/account.glade278
-rw-r--r--data/ui/adddrive.glade337
-rw-r--r--data/ui/addrepo.glade1017
-rw-r--r--data/ui/anaconda.glade161
-rw-r--r--data/ui/autopart.glade373
-rw-r--r--data/ui/blwhere.glade378
-rw-r--r--data/ui/cleardisks.glade300
-rw-r--r--data/ui/create-storage.glade380
-rw-r--r--data/ui/detailed-dialog.glade171
-rw-r--r--data/ui/device-options.glade91
-rw-r--r--data/ui/fcoe-config.glade144
-rw-r--r--data/ui/filter.glade1399
-rw-r--r--data/ui/iscsi-dialogs.glade568
-rw-r--r--data/ui/lukspassphrase.glade428
-rw-r--r--data/ui/network.glade259
-rw-r--r--data/ui/reinitialize-dialog.glade255
-rw-r--r--data/ui/tasksel.glade335
-rw-r--r--data/ui/zfcp-config.glade276
-rwxr-xr-xdracut/parse-kickstart46
-rw-r--r--gptsync/.gitignore2
-rw-r--r--gptsync/Makefile.am35
-rw-r--r--gptsync/README41
-rw-r--r--gptsync/gptsync.c469
-rw-r--r--gptsync/gptsync.h219
-rw-r--r--gptsync/lib.c469
-rw-r--r--gptsync/os_unix.c265
-rw-r--r--gptsync/showpart.c257
-rw-r--r--gptsync/syslinux_mbr.h90
-rw-r--r--po/POTFILES.in55
-rw-r--r--po/anaconda.pot4525
-rw-r--r--pyanaconda/__init__.py12
-rw-r--r--pyanaconda/anaconda_log.py10
-rw-r--r--pyanaconda/backend.py3
-rw-r--r--pyanaconda/backend_log.py95
-rw-r--r--pyanaconda/bootloader.py46
-rw-r--r--pyanaconda/errors.py2
-rw-r--r--pyanaconda/exception.py54
-rw-r--r--pyanaconda/install.py3
-rw-r--r--pyanaconda/installclass.py9
-rw-r--r--pyanaconda/installclasses/fedora.py13
-rw-r--r--pyanaconda/installclasses/rhel.py3
-rw-r--r--pyanaconda/iutil.py59
-rw-r--r--pyanaconda/kickstart.py142
-rw-r--r--pyanaconda/network.py837
-rw-r--r--pyanaconda/packaging/__init__.py43
-rw-r--r--pyanaconda/packaging/yumpayload.py61
-rw-r--r--pyanaconda/rescue.py163
-rw-r--r--pyanaconda/security.py25
-rw-r--r--pyanaconda/storage/__init__.py111
-rw-r--r--pyanaconda/storage/deviceaction.py5
-rw-r--r--pyanaconda/storage/devicelibs/crypto.py2
-rw-r--r--pyanaconda/storage/devicelibs/swap.py41
-rw-r--r--pyanaconda/storage/devices.py86
-rw-r--r--pyanaconda/storage/devicetree.py68
-rw-r--r--pyanaconda/storage/fcoe.py6
-rw-r--r--pyanaconda/storage/formats/fs.py5
-rw-r--r--pyanaconda/storage/formats/swap.py3
-rw-r--r--pyanaconda/storage/partitioning.py41
-rw-r--r--pyanaconda/storage/udev.py35
-rw-r--r--pyanaconda/text.py6
-rw-r--r--pyanaconda/textw/add_drive_text.py8
-rw-r--r--pyanaconda/textw/netconfig_text.py37
-rw-r--r--pyanaconda/textw/network_text.py3
-rw-r--r--pyanaconda/ui/__init__.py19
-rw-r--r--pyanaconda/ui/common.py1
-rw-r--r--pyanaconda/ui/gui/Makefile.am2
-rw-r--r--pyanaconda/ui/gui/TODO4
-rw-r--r--pyanaconda/ui/gui/__init__.py18
-rw-r--r--pyanaconda/ui/gui/hubs/Makefile.am2
-rw-r--r--pyanaconda/ui/gui/hubs/__init__.py6
-rw-r--r--pyanaconda/ui/gui/hubs/progress.glade (renamed from pyanaconda/ui/gui/hubs/progress.ui)0
-rw-r--r--pyanaconda/ui/gui/hubs/progress.py11
-rw-r--r--pyanaconda/ui/gui/hubs/summary.glade (renamed from pyanaconda/ui/gui/hubs/summary.ui)0
-rw-r--r--pyanaconda/ui/gui/hubs/summary.py2
-rw-r--r--pyanaconda/ui/gui/main.glade (renamed from pyanaconda/ui/gui/main.ui)0
-rw-r--r--pyanaconda/ui/gui/spokes/Makefile.am2
-rw-r--r--pyanaconda/ui/gui/spokes/__init__.py27
-rw-r--r--pyanaconda/ui/gui/spokes/custom.glade (renamed from pyanaconda/ui/gui/spokes/custom.ui)0
-rw-r--r--pyanaconda/ui/gui/spokes/custom.py6
-rw-r--r--pyanaconda/ui/gui/spokes/datetime_spoke.glade (renamed from pyanaconda/ui/gui/spokes/datetime_spoke.ui)0
-rw-r--r--pyanaconda/ui/gui/spokes/datetime_spoke.py4
-rw-r--r--pyanaconda/ui/gui/spokes/keyboard.glade (renamed from pyanaconda/ui/gui/spokes/keyboard.ui)0
-rw-r--r--pyanaconda/ui/gui/spokes/keyboard.py4
-rw-r--r--pyanaconda/ui/gui/spokes/lib/Makefile.am2
-rw-r--r--pyanaconda/ui/gui/spokes/lib/cart.glade (renamed from pyanaconda/ui/gui/spokes/lib/cart.ui)0
-rw-r--r--pyanaconda/ui/gui/spokes/lib/cart.py2
-rw-r--r--pyanaconda/ui/gui/spokes/lib/detailederror.glade90
-rw-r--r--pyanaconda/ui/gui/spokes/lib/detailederror.py58
-rw-r--r--pyanaconda/ui/gui/spokes/network.glade (renamed from pyanaconda/ui/gui/spokes/network.ui)0
-rw-r--r--pyanaconda/ui/gui/spokes/network.py6
-rw-r--r--pyanaconda/ui/gui/spokes/software.glade (renamed from pyanaconda/ui/gui/spokes/software.ui)4
-rw-r--r--pyanaconda/ui/gui/spokes/software.py50
-rw-r--r--pyanaconda/ui/gui/spokes/source.glade (renamed from pyanaconda/ui/gui/spokes/source.ui)0
-rw-r--r--pyanaconda/ui/gui/spokes/source.py10
-rw-r--r--pyanaconda/ui/gui/spokes/storage.glade (renamed from pyanaconda/ui/gui/spokes/storage.ui)0
-rw-r--r--pyanaconda/ui/gui/spokes/storage.py24
-rw-r--r--pyanaconda/ui/gui/spokes/welcome.glade (renamed from pyanaconda/ui/gui/spokes/welcome.ui)0
-rw-r--r--pyanaconda/ui/gui/spokes/welcome.py4
-rwxr-xr-xpyanaconda/ui/gui/tools/run-spoke.py1
-rw-r--r--pyanaconda/upgrade.py341
-rw-r--r--pyanaconda/vnc.py11
-rw-r--r--pyanaconda/yuminstall.py7
-rwxr-xr-xscripts/makeupdates52
-rw-r--r--tests/pyanaconda_test/network_test.py255
-rw-r--r--tests/pyanaconda_test/upgrade_test.py241
-rwxr-xr-xutils/handle-sshpw8
-rw-r--r--widgets/src/BaseWindow.c53
-rw-r--r--widgets/src/BaseWindow.h4
127 files changed, 2788 insertions, 15063 deletions
diff --git a/Makefile.am b/Makefile.am
index 84531c467..733a57527 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -19,7 +19,7 @@
ACLOCAL_AMFLAGS = -I m4
-SUBDIRS = pyanaconda gptsync po data \
+SUBDIRS = pyanaconda po data \
tests utils scripts docs dracut widgets
EXTRA_DIST = config.rpath COPYING \
diff --git a/anaconda b/anaconda
index 256e7cd3e..780900dc9 100755
--- a/anaconda
+++ b/anaconda
@@ -71,13 +71,13 @@ def exitHandler(rebootData, storage, exitCode=None):
dracut_eject(drive.path)
if rebootData.action == KS_SHUTDOWN:
- os.system("systemctl --force --no-wall poweroff")
+ os.system("systemctl --no-wall poweroff")
elif rebootData.action == KS_WAIT:
- os.system("systemctl --force --no-wall halt")
+ os.system("systemctl --no-wall halt")
else: # reboot action is KS_REBOOT or None
- os.system("systemctl --force --no-wall reboot")
+ os.system("systemctl --no-wall reboot")
elif flags.livecdInstall:
- os.system("systemctl --force --no-wall reboot")
+ os.system("systemctl --no-wall reboot")
def startMetacityWM():
childpid = os.fork()
@@ -463,127 +463,126 @@ def setupDisplay(anaconda, opts):
anaconda.writeXdriver(root="/")
if anaconda.rescue:
- anaconda.displayMode = 'r'
- else:
- if anaconda.ksdata:
- if anaconda.ksdata.vnc.enabled:
- flags.usevnc = 1
- anaconda.displayMode = 'g'
-
- if vncS.password == "":
- vncS.password = anaconda.ksdata.vnc.password
-
- if vncS.vncconnecthost == "":
- vncS.vncconnecthost = anaconda.ksdata.vnc.host
-
- if vncS.vncconnectport == "":
- vncS.vncconnectport = anaconda.ksdata.vnc.port
-
- flags.vncquestion = False
-
- # disable VNC over text question when not enough memory is available
- if iutil.memInstalled() < isys.MIN_GUI_RAM:
- flags.vncquestion = False
-
- if os.environ.has_key('DISPLAY'):
- flags.preexisting_x11 = True
-
- if anaconda.displayMode == 't' and flags.vncquestion:
- #we prefer vnc over text mode, so ask about that
- title = _("Would you like to use VNC?")
- message = _("Text mode provides a limited set of installation "
- "options. It does not allow you to specify your "
- "own partitioning layout or package selections. "
- "Would you like to use VNC mode instead?")
-
- ret = vnc.askVncWindow(title, message)
- if ret != -1:
- anaconda.displayMode = 'g'
- flags.usevnc = 1
- if ret is not None:
- vncS.password = ret
-
- log.info("Display mode = %s" % anaconda.displayMode)
- check_memory(anaconda, opts)
-
- # Should we try to start Xorg?
- want_x = anaconda.displayMode == 'g' and \
- not (flags.preexisting_x11 or flags.usevnc)
-
- # X on a headless (e.g. s390) system? Nonsense!
- if want_x and anaconda.isHeadless:
- stdoutLog.warning(_("DISPLAY variable not set. Starting text mode."))
+ return
+
+ if anaconda.ksdata.vnc.enabled:
+ flags.usevnc = 1
+ anaconda.displayMode = 'g'
+
+ if vncS.password == "":
+ vncS.password = anaconda.ksdata.vnc.password
+
+ if vncS.vncconnecthost == "":
+ vncS.vncconnecthost = anaconda.ksdata.vnc.host
+
+ if vncS.vncconnectport == "":
+ vncS.vncconnectport = anaconda.ksdata.vnc.port
+
+ flags.vncquestion = False
+
+ # disable VNC over text question when not enough memory is available
+ if iutil.memInstalled() < isys.MIN_GUI_RAM:
+ flags.vncquestion = False
+
+ if os.environ.has_key('DISPLAY'):
+ flags.preexisting_x11 = True
+
+ if anaconda.displayMode == 't' and flags.vncquestion:
+ #we prefer vnc over text mode, so ask about that
+ title = _("Would you like to use VNC?")
+ message = _("Text mode provides a limited set of installation "
+ "options. It does not allow you to specify your "
+ "own partitioning layout or package selections. "
+ "Would you like to use VNC mode instead?")
+
+ ret = vnc.askVncWindow(title, message)
+ if ret != -1:
+ anaconda.displayMode = 'g'
+ flags.usevnc = 1
+ if ret is not None:
+ vncS.password = ret
+
+ log.info("Display mode = %s" % anaconda.displayMode)
+ check_memory(anaconda, opts)
+
+ # Should we try to start Xorg?
+ want_x = anaconda.displayMode == 'g' and \
+ not (flags.preexisting_x11 or flags.usevnc)
+
+ # X on a headless (e.g. s390) system? Nonsense!
+ if want_x and anaconda.isHeadless:
+ stdoutLog.warning(_("DISPLAY variable not set. Starting text mode."))
+ anaconda.displayMode = 't'
+ graphical_failed = 1
+ time.sleep(2)
+ want_x = False
+
+ # Is Xorg is actually available?
+ if want_x and not os.access("/usr/bin/Xorg", os.X_OK):
+ stdoutLog.warning(_("Graphical installation is not available. "
+ "Starting text mode."))
+ time.sleep(2)
+ anaconda.displayMode = 't'
+ want_x = False
+
+ if want_x:
+ # The following code depends on no SIGCHLD being delivered,
+ # possibly only except the one from a failing X.org. Thus
+ # make sure before entering this section that all the other
+ # children of anaconda have terminated or were forked into
+ # an orphan (which won't deliver a SIGCHLD to mess up the
+ # fragile signaling below). start X with its USR1 handler
+ # set to ignore. this will make it send us SIGUSR1 if it
+ # succeeds. if it fails, catch SIGCHLD and bomb out.
+ def sigchld_handler(num, frame):
+ raise OSError(0, "SIGCHLD caught when trying to start the X server.")
+
+ def sigusr1_handler(num, frame):
+ log.debug("X server has signalled a successful start.")
+
+ def preexec_fn():
+ signal.signal(signal.SIGUSR1, signal.SIG_IGN)
+
+ old_sigusr1 = signal.signal(signal.SIGUSR1, sigusr1_handler)
+ old_sigchld = signal.signal(signal.SIGCHLD, sigchld_handler)
+ xout = open("/dev/tty5", "w")
+ try:
+ proc = subprocess.Popen(["Xorg", "-br",
+ "-logfile", "/tmp/X.log",
+ ":1", "vt6", "-s", "1440", "-ac",
+ "-nolisten", "tcp", "-dpi", "96",
+ "-noreset"],
+ close_fds=True,
+ stdout=xout, stderr=xout,
+ preexec_fn=preexec_fn)
+
+ signal.pause()
+ os.environ["DISPLAY"] = ":1"
+ doStartupX11Actions()
+ except (OSError, RuntimeError):
+ stdoutLog.warning("X startup failed, falling back to text mode")
anaconda.displayMode = 't'
graphical_failed = 1
time.sleep(2)
- want_x = False
-
- # Is Xorg is actually available?
- if want_x and not os.access("/usr/bin/Xorg", os.X_OK):
- stdoutLog.warning(_("Graphical installation is not available. "
- "Starting text mode."))
- time.sleep(2)
- anaconda.displayMode = 't'
- want_x = False
-
- if want_x:
- # The following code depends on no SIGCHLD being delivered,
- # possibly only except the one from a failing X.org. Thus
- # make sure before entering this section that all the other
- # children of anaconda have terminated or were forked into
- # an orphan (which won't deliver a SIGCHLD to mess up the
- # fragile signaling below). start X with its USR1 handler
- # set to ignore. this will make it send us SIGUSR1 if it
- # succeeds. if it fails, catch SIGCHLD and bomb out.
- def sigchld_handler(num, frame):
- raise OSError(0, "SIGCHLD caught when trying to start the X server.")
-
- def sigusr1_handler(num, frame):
- log.debug("X server has signalled a successful start.")
-
- def preexec_fn():
- signal.signal(signal.SIGUSR1, signal.SIG_IGN)
-
- old_sigusr1 = signal.signal(signal.SIGUSR1, sigusr1_handler)
- old_sigchld = signal.signal(signal.SIGCHLD, sigchld_handler)
- xout = open("/dev/tty5", "w")
- try:
- proc = subprocess.Popen(["Xorg", "-br",
- "-logfile", "/tmp/X.log",
- ":1", "vt6", "-s", "1440", "-ac",
- "-nolisten", "tcp", "-dpi", "96",
- "-noreset"],
- close_fds=True,
- stdout=xout, stderr=xout,
- preexec_fn=preexec_fn)
-
- signal.pause()
- os.environ["DISPLAY"] = ":1"
- doStartupX11Actions()
- except (OSError, RuntimeError):
- stdoutLog.warning("X startup failed, falling back to text mode")
- anaconda.displayMode = 't'
- graphical_failed = 1
- time.sleep(2)
- finally:
- signal.signal(signal.SIGUSR1, old_sigusr1)
- signal.signal(signal.SIGCHLD, old_sigchld)
-
- set_x_resolution(opts.runres)
-
- if anaconda.displayMode == 't' and graphical_failed and \
- not anaconda.ksdata:
- ret = vnc.askVncWindow()
- if ret != -1:
- anaconda.displayMode = 'g'
- flags.usevnc = 1
- if ret is not None:
- vncS.password = ret
-
- # if they want us to use VNC do that now
- if anaconda.displayMode == 'g' and flags.usevnc:
- runVNC(vncS)
- doStartupX11Actions()
+ finally:
+ signal.signal(signal.SIGUSR1, old_sigusr1)
+ signal.signal(signal.SIGCHLD, old_sigchld)
+
+ set_x_resolution(opts.runres)
+
+ if anaconda.displayMode == 't' and graphical_failed and \
+ not anaconda.ksdata:
+ ret = vnc.askVncWindow()
+ if ret != -1:
+ anaconda.displayMode = 'g'
+ flags.usevnc = 1
+ if ret is not None:
+ vncS.password = ret
+
+ # if they want us to use VNC do that now
+ if anaconda.displayMode == 'g' and flags.usevnc:
+ runVNC(vncS)
+ doStartupX11Actions()
# with X running we can initialize the UI interface
anaconda.initInterface()
@@ -616,23 +615,11 @@ def prompt_for_ssh():
# see if we can sniff out network info
netinfo = network.Network()
- devices = netinfo.netdevices
- active_devs = network.getActiveNetDevs()
+ ip = netinfo.getFirstRealIP()
- ip = None
- if active_devs != []:
- devname = devices[active_devs[0]].iface
- try:
- ips = (isys.getIPAddresses(devname, version=4) +
- isys.getIPAddresses(devname, version=6))
- except Exception as e:
- stdoutLog.warning("Got an exception trying to get the ip addr "
- "of %s: %s" % (devname, e))
- else:
- if ips and ips[0] not in ("127.0.0.1", "::1"):
- stdoutLog.debug("IPs (using first) of device %s: %s" % (devname,
- ips))
- ip = ips[0]
+ if not ip:
+ stdoutLog.error("No IP addresses found, cannot continue installation.")
+ sys.exit(1)
ipstr = ip
@@ -663,6 +650,8 @@ def prompt_for_ssh():
if __name__ == "__main__":
+ print "Starting installer, one moment..."
+
setupPythonPath()
# Allow a file to be loaded as early as possible
@@ -726,10 +715,12 @@ if __name__ == "__main__":
from pyanaconda import kickstart
from pyanaconda import ntp
- # to set UTF8 mode on the terminal, we need LANG to be set usefully
- if os.environ.get("LANG", "C") == "C":
- os.environ['LANG'] = DEFAULT_LANG
- print "\033%G" # UTF8 power go!
+ verdesc = "%s for %s %s" % (getAnacondaVersion(),
+ product.productName, product.productVersion)
+ if product.isFinal:
+ print "anaconda %s started." % verdesc
+ else:
+ print "anaconda %s (pre-release) started." % verdesc
import gettext
_ = lambda x: gettext.ldgettext("anaconda", x)
@@ -840,22 +831,37 @@ if __name__ == "__main__":
os.system("udevadm control --env=ANACONDA=1")
- # parse (not execute) kickstart now, the ks commands can affect things like
- # UI interface type or enabling rescue mode
+ # If we were given a kickstart file on the command line, parse (but do not
+ # execute) that now. Otherwise, load in defaults from kickstart files
+ # shipped with the installation media.
+ ksdata = None
if opts.ksfile:
flags.automatedInstall = True
+ files = [opts.ksfile]
+ else:
+ files = ["/tmp/updates/interactive-defaults.ks",
+ "/usr/share/anaconda/interactive-defaults.ks"]
- kickstart.preScriptPass(opts.ksfile)
- ksdata = kickstart.parseKickstart(opts.ksfile)
- if ksdata.rescue.rescue:
- anaconda.rescue = True
+ for f in files:
+ if not os.path.exists(f):
+ continue
- # Some kickstart commands must be executed immediately, as they affect
- # how anaconda operates.
- ksdata.logging.execute()
- else:
+ kickstart.preScriptPass(f)
+ ksdata = kickstart.parseKickstart(f)
+
+ # Only load the first defaults file we find.
+ break
+
+ if not ksdata:
ksdata = kickstart.AnacondaKSHandler()
+ if ksdata.rescue.rescue:
+ anaconda.rescue = True
+
+ # Some kickstart commands must be executed immediately, as they affect
+ # how anaconda operates.
+ ksdata.logging.execute()
+
anaconda.ksdata = ksdata
# Some post-install parts of anaconda are implemented as kickstart
@@ -946,6 +952,10 @@ if __name__ == "__main__":
from pyanaconda.packaging import payloadInitialize
from pyanaconda.threads import initThreading, threadMgr, AnacondaThread
+ if anaconda.rescue:
+ from pyanaconda.rescue import doRescue
+ doRescue(anaconda.rescue_mount, ksdata, anaconda.platform)
+
initThreading()
threadMgr.add(AnacondaThread(name="AnaStorageThread", target=storageInitialize, args=(anaconda.storage, ksdata, anaconda.protected)))
threadMgr.add(AnacondaThread(name="AnaPayloadThread", target=payloadInitialize, args=(anaconda.storage, ksdata, anaconda.payload)))
diff --git a/anaconda.spec.in b/anaconda.spec.in
index 2c5b246c7..86fc57ea6 100644
--- a/anaconda.spec.in
+++ b/anaconda.spec.in
@@ -26,7 +26,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%define intltoolver 0.31.2-3
%define libnlver 1.0
%define libselinuxver 1.6
-%define pykickstartver 1.99.4
+%define pykickstartver 1.99.14
%define rpmpythonver 4.2-0.61
%define slangver 2.0.6-2
%define yumver 2.9.2
@@ -40,7 +40,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%define yumutilsver 1.1.11-3
%define iscsiver 6.2.0.870-3
%define pythoncryptsetupver 0.1.1
-%define mehver 0.8
+%define mehver 0.13-1
%define sckeyboardver 1.3.1
%define libblkidver 2.17.1-1
%define fcoeutilsver 1.0.12-3.20100323git
@@ -52,8 +52,11 @@ BuildRequires: device-mapper-devel >= %{dmver}
BuildRequires: e2fsprogs-devel >= %{e2fsver}
BuildRequires: elfutils-devel
BuildRequires: gettext >= %{gettextver}
-BuildRequires: gtk3-devel gtk-doc
-BuildRequires: gobject-introspection-devel glade-devel pygobject3
+BuildRequires: gtk3-devel
+BuildRequires: gtk-doc
+BuildRequires: gobject-introspection-devel
+BuildRequires: glade-devel
+BuildRequires: pygobject3
BuildRequires: intltool >= %{intltoolver}
BuildRequires: isomd5sum-static >= %{isomd5sumver}
BuildRequires: libarchive-devel
@@ -84,7 +87,8 @@ BuildRequires: yum >= %{yumver}
BuildRequires: zlib-devel
BuildRequires: NetworkManager-devel >= %{nmver}
BuildRequires: NetworkManager-glib-devel >= %{nmver}
-BuildRequires: dbus-devel >= %{dbusver}, dbus-python
+BuildRequires: dbus-devel >= %{dbusver}
+BuildRequires: dbus-python
BuildRequires: system-config-keyboard >= %{sckeyboardver}
%ifarch %livearches
BuildRequires: desktop-file-utils
@@ -258,10 +262,6 @@ update-desktop-database &> /dev/null || :
%{_sbindir}/handle-sshpw
%{_sbindir}/logpicker
%{_sbindir}/anaconda-cleanup-initramfs
-%ifarch i386 i486 i586 i686 x86_64
-%{_sbindir}/gptsync
-%{_sbindir}/showpart
-%endif
%{_datadir}/anaconda
%{_prefix}/libexec/anaconda
%{_libdir}/python*/site-packages/pyanaconda/*
@@ -295,6 +295,10 @@ update-desktop-database &> /dev/null || :
/usr/lib/dracut/modules.d/80%{name}/*
%changelog
+* Fri Aug 03 2012 Chris Lumens <clumens@redhat.com> - 18.3-1
+- New graphical user interface.
+- Removed loader.
+
* Wed Apr 18 2012 Brian C. Lane <bcl@redhat.com> - 18.2-1
- Fixes from F17 branch
diff --git a/configure.ac b/configure.ac
index f10eed404..530dd6778 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,7 +20,7 @@
m4_define(python_required_version, 2.5)
AC_PREREQ([2.63])
-AC_INIT([anaconda], [18.2], [anaconda-devel-list@redhat.com])
+AC_INIT([anaconda], [18.3], [anaconda-devel-list@redhat.com])
AM_INIT_AUTOMAKE([foreign no-dist-gzip dist-bzip2])
AC_CONFIG_HEADERS([config.h])
@@ -259,7 +259,6 @@ AC_CONFIG_FILES([Makefile
data/command-stubs/Makefile
docs/Makefile
dracut/Makefile
- gptsync/Makefile
pyanaconda/installclasses/Makefile
data/liveinst/Makefile
data/liveinst/console.apps/Makefile
@@ -314,7 +313,6 @@ AC_CONFIG_FILES([Makefile
tests/logpicker_test/archiving_test/Makefile
tests/logpicker_test/logmining_test/Makefile
pyanaconda/textw/Makefile
- data/ui/Makefile
data/post-scripts/Makefile
utils/Makefile
utils/log_picker/Makefile
diff --git a/data/Makefile.am b/data/Makefile.am
index c3bd58b62..18e165f47 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -17,11 +17,14 @@
#
# Author: Martin Sivak <msivak@redhat.com>
-SUBDIRS = bootdisk command-stubs icons liveinst pixmaps systemd ui post-scripts
+SUBDIRS = bootdisk command-stubs icons liveinst pixmaps systemd post-scripts
EXTRA_DIST = lang-table
CLEANFILES = *~ lang-names
+ksdir = $(datadir)/$(PACKAGE_NAME)
+dist_ks_DATA = interactive-defaults.ks
+
udevdir = /lib/udev/rules.d
dist_udev_DATA = 70-anaconda.rules
@@ -29,6 +32,9 @@ langdir = $(datadir)/$(PACKAGE_NAME)
lang_DATA = lang-names
dist_lang_DATA = lang-table
+tmuxdir = $(datadir)/$(PACKAGE_NAME)
+dist_tmux_DATA = tmux.conf
+
if IS_S390
shareddir = $(datadir)/$(PACKAGE_NAME)
dist_shared_SCRIPTS = linuxrc.s390
diff --git a/data/interactive-defaults.ks b/data/interactive-defaults.ks
new file mode 100644
index 000000000..f692ccdc8
--- /dev/null
+++ b/data/interactive-defaults.ks
@@ -0,0 +1,4 @@
+# Kickstart defaults file for an interative install.
+# This is not loaded if a kickstart file is provided on the command line.
+auth --enableshadow --passalgo=sha512
+firstboot --enable
diff --git a/data/post-scripts/80-setfilecons.ks b/data/post-scripts/80-setfilecons.ks
index 7b0c8c963..93ac9620c 100644
--- a/data/post-scripts/80-setfilecons.ks
+++ b/data/post-scripts/80-setfilecons.ks
@@ -1,6 +1,6 @@
%post
-restorecon -ir /etc/sysconfig/network-scripts /var/lib/rpm /var/lib/yum /etc/lvm \
+restorecon -ir /etc/sysconfig/network-scripts /var/lib /etc/lvm \
/dev /etc/iscsi /var/lib/iscsi /root /var/lock /var/log \
/etc/modprobe.d /etc/sysconfig /var/cache/yum
@@ -8,7 +8,11 @@ restorecon -i /etc/rpm/macros /etc/dasd.conf /etc/zfcp.conf /lib64 /usr/lib64 \
/etc/blkid.tab* /etc/mtab /etc/fstab /etc/resolv.conf \
/etc/modprobe.conf* /var/log/*tmp /etc/crypttab \
/etc/mdadm.conf /etc/sysconfig/network /root/install.log* \
- /etc/udev/rules.d/70-persistent-net.rules /etc/*shadow* \
- /etc/dhcp/dhclient-*.conf /etc/localtime
+ /etc/*shadow* /etc/dhcp/dhclient-*.conf /etc/localtime \
+ /root/install.log*
+
+if [ -e /etc/zipl.conf ]; then
+ restorecon -i /etc/zipl.conf
+fi
%end
diff --git a/data/post-scripts/95-copy-logs.ks b/data/post-scripts/95-copy-logs.ks
index 016b70c6c..7c9866274 100644
--- a/data/post-scripts/95-copy-logs.ks
+++ b/data/post-scripts/95-copy-logs.ks
@@ -5,6 +5,7 @@ mkdir -p /mnt/sysimage/var/log/anaconda
[ -e /tmp/syslog ] && cp /tmp/syslog $ANA_INSTALL_PATH/var/log/anaconda/syslog
[ -e /tmp/X.log ] && cp /tmp/X.log $ANA_INSTALL_PATH/var/log/anaconda.anaconda.xlog
[ -e /tmp/program.log ] && cp /tmp/program.log $ANA_INSTALL_PATH/var/log/anaconda/anaconda.program.log
+[ -e /tmp/packaging.log ] && cp /tmp/packaging.log $ANA_INSTALL_PATH/var/log/anaconda/anaconda.packaging.log
[ -e /tmp/storage.log ] && cp /tmp/storage.log $ANA_INSTALL_PATH/var/log/anaconda/anaconda.storage.log
[ -e /tmp/ifcfg.log ] && cp /tmp/ifcfg.log $ANA_INSTALL_PATH/var/log/anaconda/anaconda.ifcfg.log
[ -e /tmp/yum.log ] && cp /tmp/yum.log $ANA_INSTALL_PATH/var/log/anaconda/anaconda.yum.log
diff --git a/data/systemd/Makefile.am b/data/systemd/Makefile.am
index 8579ece04..96bd8f0cb 100644
--- a/data/systemd/Makefile.am
+++ b/data/systemd/Makefile.am
@@ -20,8 +20,9 @@
systemddir = /lib/systemd/system
generatordir = /lib/systemd/system-generators
-dist_systemd_DATA = anaconda@.service \
+dist_systemd_DATA = anaconda.service \
anaconda.target \
+ anaconda-tmux@.service \
anaconda-shell@.service \
instperf.service \
anaconda-sshd.service \
diff --git a/data/systemd/anaconda-cleanup-initramfs.service b/data/systemd/anaconda-cleanup-initramfs.service
index 1d10bfc7a..cc493572d 100644
--- a/data/systemd/anaconda-cleanup-initramfs.service
+++ b/data/systemd/anaconda-cleanup-initramfs.service
@@ -1,6 +1,6 @@
[Unit]
Description=Clean Up Initramfs
-Before=anaconda@.service
+Before=anaconda.service
ConditionPathIsDirectory=/run/initramfs/usr/lib/modules
[Service]
diff --git a/data/systemd/anaconda-generator b/data/systemd/anaconda-generator
index cb4704023..71e35e718 100755
--- a/data/systemd/anaconda-generator
+++ b/data/systemd/anaconda-generator
@@ -25,7 +25,7 @@ done
consoletty="$tty"
# put anaconda on the real console
-service_on_tty anaconda@.service $consoletty
+service_on_tty anaconda-tmux@.service $consoletty
# put a shell on tty2 and the first virtualization console we find
for tty in tty2 hvc0 hvc1 xvc0 hvsi0 hvsi1 hvsi2; do
diff --git a/data/systemd/anaconda-tmux@.service b/data/systemd/anaconda-tmux@.service
new file mode 100644
index 000000000..0b8376588
--- /dev/null
+++ b/data/systemd/anaconda-tmux@.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Anaconda Text Console
+Requires=anaconda.service
+After=anaconda.target anaconda.service
+
+[Service]
+Type=simple
+WorkingDirectory=/root
+Environment=LANG=en_US.UTF-8
+ExecStartPre=/usr/bin/echo -e \033%G
+ExecStart=/usr/bin/tmux -u attach -t anaconda
+StandardInput=tty-force
+TTYPath=/dev/%I
+TTYReset=yes
+Restart=always
diff --git a/data/systemd/anaconda@.service b/data/systemd/anaconda.service
index 03ecabb17..0946d709e 100644
--- a/data/systemd/anaconda@.service
+++ b/data/systemd/anaconda.service
@@ -3,11 +3,7 @@ Description=Anaconda
After=anaconda.target
[Service]
-Environment=HOME=/root MALLOC_CHECK_=2 MALLOC_PERTURB_=204 PATH=/usr/bin:/bin:/sbin:/usr/sbin:/mnt/sysimage/bin:/mnt/sysimage/usr/bin:/mnt/sysimage/usr/sbin:/mnt/sysimage/sbin
-Type=oneshot
+Type=forking
+Environment=HOME=/root MALLOC_CHECK_=2 MALLOC_PERTURB_=204 PATH=/usr/bin:/bin:/sbin:/usr/sbin:/mnt/sysimage/bin:/mnt/sysimage/usr/bin:/mnt/sysimage/usr/sbin:/mnt/sysimage/sbin LANG=en_US.UTF-8
WorkingDirectory=/root
-ExecStart=/usr/sbin/anaconda
-StandardInput=tty-force
-TTYPath=/dev/%I
-TTYReset=yes
-TimeoutSec=0
+ExecStart=/usr/bin/tmux -u -f /usr/share/anaconda/tmux.conf start
diff --git a/data/systemd/anaconda.target b/data/systemd/anaconda.target
index 9a95c6615..597adfde3 100644
--- a/data/systemd/anaconda.target
+++ b/data/systemd/anaconda.target
@@ -3,7 +3,6 @@ Description=Anaconda System Services
Requires=basic.target
After=basic.target
AllowIsolate=yes
-Before=anaconda@.service
Wants=anaconda-cleanup-initramfs.service
Wants=instperf.service
Wants=rsyslog.service
diff --git a/data/systemd/fedora-import-state b/data/systemd/fedora-import-state
deleted file mode 100644
index a853ab9cd..000000000
--- a/data/systemd/fedora-import-state
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-# fedora-import-state: import state files from initramfs (e.g. network config)
-
-# exit early if root isn't writeable
-[ -w / ] || exit 0
-
-# copy state into root
-cd /run/initramfs/state
-cp -a -t / .
-
-# run restorecon on the copied files
-if [ -e /sys/fs/selinux/enforce ]; then
- find . | ( cd /; restorecon -i -f -; ) || :
-fi
diff --git a/data/systemd/fedora-import-state.service b/data/systemd/fedora-import-state.service
deleted file mode 100644
index 5294fe172..000000000
--- a/data/systemd/fedora-import-state.service
+++ /dev/null
@@ -1,13 +0,0 @@
-[Unit]
-Description=Import network configuration from initramfs
-DefaultDependencies=no
-ConditionDirectoryNotEmpty=/run/initramfs/state
-Conflicts=shutdown.target
-Before=shutdown.target emergency.service emergency.target systemd-tmpfiles-setup.service
-After=remount-rootfs.service
-
-[Service]
-ExecStart=/lib/systemd/fedora-import-state
-Type=oneshot
-TimeoutSec=0
-RemainAfterExit=yes
diff --git a/data/tmux.conf b/data/tmux.conf
new file mode 100644
index 000000000..3639fcbec
--- /dev/null
+++ b/data/tmux.conf
@@ -0,0 +1,16 @@
+# tmux.conf for the anaconda environment
+set-option -s exit-unattached off
+set-option -g base-index 1
+
+new-session -s anaconda -n main "anaconda"
+
+set-option set-remain-on-exit on
+set-option status-right ""
+set-option status-right-length 0
+
+new-window -d -n shell "bash --login"
+new-window -d -n log "tail -F /tmp/anaconda.log"
+new-window -d -n storage-log "tail -F /tmp/storage.log"
+new-window -d -n program-log "tail -F /tmp/program.log"
+
+detach-client -s anaconda
diff --git a/data/ui/GroupSelector.glade b/data/ui/GroupSelector.glade
deleted file mode 100644
index 956b020c1..000000000
--- a/data/ui/GroupSelector.glade
+++ /dev/null
@@ -1,394 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkWindow" id="groupSelectionWindow">
- <property name="visible">True</property>
- <property name="title" translatable="yes">window1</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <signal name="destroy_event" handler="on_groupSelectionWindow_destroy_event" last_modification_time="Fri, 02 Dec 2005 21:41:59 GMT"/>
- <signal name="delete_event" handler="on_groupSelectionWindow_delete_event" last_modification_time="Fri, 02 Dec 2005 21:42:23 GMT"/>
-
- <child>
- <widget class="GtkVBox" id="groupSelectionBox">
- <property name="border_width">12</property>
- <property name="width_request">700</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkHBox" id="hbox1">
- <property name="border_width">12</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">12</property>
-
- <child>
- <widget class="GtkScrolledWindow" id="categorySW">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <widget class="GtkTreeView" id="categoryList">
- <property name="width_request">275</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="headers_visible">False</property>
- <property name="rules_hint">False</property>
- <property name="reorderable">False</property>
- <property name="enable_search">True</property>
- <property name="fixed_height_mode">False</property>
- <property name="hover_selection">False</property>
- <property name="hover_expand">False</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkScrolledWindow" id="groupSW">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <widget class="GtkTreeView" id="groupList">
- <property name="width_request">325</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="headers_visible">False</property>
- <property name="rules_hint">False</property>
- <property name="reorderable">False</property>
- <property name="enable_search">True</property>
- <property name="fixed_height_mode">False</property>
- <property name="hover_selection">False</property>
- <property name="hover_expand">False</property>
- <signal name="button_press_event" handler="on_groupList_button_press" last_modification_time="Sat, 04 Feb 2006 01:22:04 GMT"/>
- <signal name="popup_menu" handler="on_groupList_popup_menu" last_modification_time="Sat, 04 Feb 2006 01:22:13 GMT"/>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkAlignment" id="alignment1">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">0.75</property>
- <property name="yscale">1</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="GtkVBox" id="vbox2">
- <property name="border_width">12</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkScrolledWindow" id="scrolledwindow3">
- <property name="height_request">82</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <widget class="GtkTextView" id="groupDescriptionTextView">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="overwrite">False</property>
- <property name="accepts_tab">True</property>
- <property name="justification">GTK_JUSTIFY_LEFT</property>
- <property name="wrap_mode">GTK_WRAP_WORD</property>
- <property name="cursor_visible">False</property>
- <property name="pixels_above_lines">0</property>
- <property name="pixels_below_lines">0</property>
- <property name="pixels_inside_wrap">0</property>
- <property name="left_margin">0</property>
- <property name="right_margin">0</property>
- <property name="indent">0</property>
- <property name="text" translatable="yes"></property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="optionalLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_RIGHT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.949999988079</property>
- <property name="yalign">1</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHButtonBox" id="hbuttonbox2">
- <property name="border_width">6</property>
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkButton" id="detailsButton">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Optional packages</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_detailsButton_clicked" last_modification_time="Fri, 02 Dec 2005 21:39:06 GMT"/>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkDialog" id="groupDetailsDialog">
- <property name="width_request">550</property>
- <property name="height_request">300</property>
- <property name="title" translatable="yes">dialog1</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
- <property name="modal">True</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <property name="has_separator">True</property>
- <signal name="destroy" handler="on_groupDetailsDialog_destroy" last_modification_time="Tue, 06 Dec 2005 21:31:56 GMT"/>
- <signal name="delete_event" handler="on_groupDetailsDialog_delete_event" last_modification_time="Tue, 06 Dec 2005 21:32:34 GMT"/>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="groupDetailsCloseButton">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-close</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-7</property>
- <signal name="clicked" handler="on_groupDetailsCloseButton_clicked" last_modification_time="Tue, 06 Dec 2005 21:31:46 GMT"/>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox4">
- <property name="border_width">12</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Some packages associated with this group are not required to be installed but may provide additional functionality. Please choose the packages which you would like to have installed.</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkScrolledWindow" id="packageSW">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <widget class="GtkTreeView" id="packageList">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="headers_visible">False</property>
- <property name="rules_hint">False</property>
- <property name="reorderable">False</property>
- <property name="enable_search">True</property>
- <property name="fixed_height_mode">False</property>
- <property name="hover_selection">False</property>
- <property name="hover_expand">False</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkMenu" id="groupPopupMenu">
-
- <child>
- <widget class="GtkMenuItem" id="selectgrp">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Select</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="on_selectgrp_activate" last_modification_time="Wed, 13 Sep 2006 16:57:47 GMT"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkMenuItem" id="select">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Select all optional packages</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="on_select_activate" last_modification_time="Sat, 04 Feb 2006 00:26:28 GMT"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkMenuItem" id="deselectgrp">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Deselect</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="on_deselectgrp_activate" last_modification_time="Wed, 13 Sep 2006 16:57:47 GMT"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkMenuItem" id="deselect">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Deselect all optional packages</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="on_deselect_activate" last_modification_time="Sat, 04 Feb 2006 00:26:28 GMT"/>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/data/ui/Makefile.am b/data/ui/Makefile.am
deleted file mode 100644
index 39e1c5624..000000000
--- a/data/ui/Makefile.am
+++ /dev/null
@@ -1,25 +0,0 @@
-# ui/Makefile.am for anaconda
-#
-# Copyright (C) 2009 Red Hat, Inc.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Author: David Cantrell <dcantrell@redhat.com>
-
-uidir = $(datadir)/$(PACKAGE_NAME)/ui
-dist_ui_DATA = *.glade
-
-MAINTAINERCLEANFILES = Makefile.in
-
-CLEANFILES = *.h
diff --git a/data/ui/account.glade b/data/ui/account.glade
deleted file mode 100644
index c93fcdd15..000000000
--- a/data/ui/account.glade
+++ /dev/null
@@ -1,278 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkWindow" id="account_window">
- <property name="border_width">18</property>
- <property name="title" translatable="yes"></property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
-
- <child>
- <widget class="GtkAlignment" id="account_align">
- <property name="width_request">400</property>
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="xscale">1</property>
- <property name="yscale">1</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="GtkVBox" id="account_box">
- <property name="border_width">5</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">10</property>
-
- <child>
- <widget class="GtkAlignment" id="alignment2">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="xscale">1</property>
- <property name="yscale">1</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="GtkHBox" id="desc_box">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkImage" id="icon">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="desc">
- <property name="visible">True</property>
- <property name="label" translatable="yes">The root account is used for administering the system. Enter a password for the root user.</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkAlignment" id="alignment4">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">1</property>
- <property name="yscale">1</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="GtkTable" id="table1">
- <property name="width_request">365</property>
- <property name="visible">True</property>
- <property name="n_rows">3</property>
- <property name="n_columns">2</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">5</property>
- <property name="column_spacing">5</property>
-
- <child>
- <widget class="GtkLabel" id="pwlabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Root Password:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="confirmlabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Confirm:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="capslock">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="pw">
- <property name="width_request">256</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="has_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">False</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">•</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="confirm">
- <property name="width_request">256</property>
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="has_default">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">False</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">•</property>
- <property name="activates_default">True</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/data/ui/adddrive.glade b/data/ui/adddrive.glade
deleted file mode 100644
index bfce9ee6c..000000000
--- a/data/ui/adddrive.glade
+++ /dev/null
@@ -1,337 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkDialog" id="addDriveDialog">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Advanced Storage Options</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_CENTER</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog1-vbox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog1-action_area">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="cancelButton">
- <property name="visible">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-6</property>
- <signal name="clicked" handler="on_cancelButton_clicked"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="okButton">
- <property name="visible">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-5</property>
- <signal name="clicked" handler="on_okButton_clicked"/>
-
- <child>
- <widget class="GtkLabel" id="label2">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Add drive</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox1">
- <property name="border_width">18</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">12</property>
-
- <child>
- <widget class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">How would you like to modify your drive configuration?</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox2">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkRadioButton" id="iscsiRadio">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Add _iSCSI target</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">iscsiRadio</property>
- <signal name="group-changed" handler="on_radio_changed"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkAlignment" id="alignment2">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">1</property>
- <property name="yscale">1</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">18</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="GtkCheckButton" id="iscsiBindCheck">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Bind targets to network interfaces</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="zfcpRadio">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Add _ZFCP LUN</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">iscsiRadio</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="fcoeRadio">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Add _FCoE SAN</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">iscsiRadio</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHSeparator" id="hseparator1">
- <property name="visible">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox2">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">7</property>
-
- <child>
- <widget class="GtkLabel" id="label3">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Active network interfaces:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="ifaceLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">None</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox3">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <placeholder/>
- </child>
-
- <child>
- <widget class="GtkButton" id="netconfButton">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">C_onfigure Network</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/data/ui/addrepo.glade b/data/ui/addrepo.glade
deleted file mode 100644
index 1722f27d3..000000000
--- a/data/ui/addrepo.glade
+++ /dev/null
@@ -1,1017 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkDialog" id="addRepoDialog">
- <property name="width_request">440</property>
- <property name="height_request">400</property>
- <property name="visible">True</property>
- <property name="title" translatable="yes">Add Repository</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_CENTER</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <property name="has_separator">True</property>
- <signal name="destroy" handler="on_addRepoDialog_destroy" last_modification_time="Thu, 24 Apr 2008 14:22:26 GMT"/>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="cancelButton">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-6</property>
- <signal name="clicked" handler="on_cancelButton_clicked" last_modification_time="Thu, 24 Apr 2008 14:25:58 GMT"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="okButton">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-5</property>
- <signal name="clicked" handler="on_okButton_clicked" last_modification_time="Thu, 24 Apr 2008 14:25:51 GMT"/>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">5</property>
-
- <child>
- <widget class="GtkLabel" id="descLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Please provide the configuration information for this software repository.</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">5</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="table5">
- <property name="visible">True</property>
- <property name="n_rows">2</property>
- <property name="n_columns">2</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">5</property>
- <property name="column_spacing">5</property>
-
- <child>
- <widget class="GtkLabel" id="nameLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;Repository _name:&lt;/b&gt;</property>
- <property name="use_underline">True</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">nameEntry</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="nameEntry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">•</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="typeLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;Repository _type:&lt;/b&gt;</property>
- <property name="use_underline">True</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">typeComboBox</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkComboBox" id="typeComboBox">
- <property name="visible">True</property>
- <property name="items" translatable="yes">HTTP/FTP
-CD/DVD
-NFS
-Hard Drive</property>
- <property name="add_tearoffs">False</property>
- <property name="focus_on_click">True</property>
- <signal name="changed" handler="on_typeComboBox_changed" last_modification_time="Thu, 24 Apr 2008 13:48:24 GMT"/>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkNotebook" id="typeNotebook">
- <property name="visible">True</property>
- <property name="show_tabs">False</property>
- <property name="show_border">False</property>
- <property name="tab_pos">GTK_POS_TOP</property>
- <property name="scrollable">False</property>
- <property name="enable_popup">False</property>
-
- <child>
- <widget class="GtkVBox" id="urlVBox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">5</property>
-
- <child>
- <widget class="GtkHBox" id="hbox3">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">5</property>
-
- <child>
- <widget class="GtkLabel" id="label20">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Repository _URL</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">baseurlEntry</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="baseurlEntry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">•</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="mirrorlistCheckbox">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">URL is a _mirror list</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="on_mirrorlistCheckbox_toggled" last_modification_time="Thu, 24 Apr 2008 15:23:14 GMT"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="proxyCheckbox">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Configure _proxy</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="on_proxyCheckbox_toggled" last_modification_time="Thu, 24 Apr 2008 13:49:32 GMT"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="proxyTable">
- <property name="visible">True</property>
- <property name="n_rows">3</property>
- <property name="n_columns">2</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">10</property>
- <property name="column_spacing">5</property>
-
- <child>
- <widget class="GtkLabel" id="label11">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Proxy U_RL (host:port)</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">10</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">proxyEntry</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label12">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Proxy u_sername</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">10</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">usernameEntry</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label13">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Proxy pass_word</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">10</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">passwordEntry</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="proxyEntry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">•</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="usernameEntry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">•</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="passwordEntry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">False</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">•</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label21">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <placeholder/>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label22">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label19">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label23">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <placeholder/>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label24">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="table3">
- <property name="visible">True</property>
- <property name="n_rows">3</property>
- <property name="n_columns">2</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">10</property>
- <property name="column_spacing">5</property>
-
- <child>
- <widget class="GtkLabel" id="label14">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Server</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">nfsServerEntry</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label15">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Path</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">nfsPathEntry</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label16">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Opt_ions</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">nfsOptionsEntry</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="nfsServerEntry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">•</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="nfsPathEntry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">•</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="nfsOptionsEntry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">•</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label25">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <placeholder/>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label26">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="table4">
- <property name="visible">True</property>
- <property name="n_rows">2</property>
- <property name="n_columns">2</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">10</property>
- <property name="column_spacing">5</property>
-
- <child>
- <widget class="GtkLabel" id="label17">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Partition</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label18">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Directory</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkComboBox" id="partitionComboBox">
- <property name="visible">True</property>
- <property name="add_tearoffs">False</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFileChooserButton" id="directoryChooserButton">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Select A Directory</property>
- <property name="action">GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER</property>
- <property name="local_only">True</property>
- <property name="show_hidden">False</property>
- <property name="do_overwrite_confirmation">False</property>
- <property name="width_chars">-1</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label27">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <placeholder/>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label28">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/data/ui/anaconda.glade b/data/ui/anaconda.glade
deleted file mode 100644
index ab3a55e82..000000000
--- a/data/ui/anaconda.glade
+++ /dev/null
@@ -1,161 +0,0 @@
-<?xml version="1.0"?>
-<glade-interface>
- <!-- interface-requires gtk+ 2.6 -->
- <!-- interface-naming-policy toplevel-contextual -->
- <widget class="GtkWindow" id="mainWindow">
- <property name="resizable">False</property>
- <property name="window_position">center</property>
- <property name="default_width">800</property>
- <property name="default_height">600</property>
- <property name="gravity">center</property>
- <signal name="key_release_event" handler="on_mainWindow_key_release_event"/>
- <signal name="delete_event" handler="on_mainWindow_delete_event"/>
- <child>
- <widget class="GtkVBox" id="mainBox">
- <property name="visible">True</property>
- <property name="border_width">6</property>
- <property name="spacing">12</property>
- <child>
- <widget class="GtkImage" id="headerImage">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">10</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <widget class="GtkFrame" id="installFrame">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
- <child>
- <widget class="GtkAlignment" id="alignment5">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <placeholder/>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkHButtonBox" id="buttonBar">
- <property name="visible">True</property>
- <property name="spacing">18</property>
- <property name="layout_style">end</property>
- <child>
- <widget class="GtkButton" id="debugButton">
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <signal name="clicked" handler="on_debugButton_clicked"/>
- <child>
- <widget class="GtkLabel" id="label4">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Debug</property>
- <property name="use_underline">True</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="backButton">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">True</property>
- <signal name="clicked" handler="on_backButton_clicked"/>
- <child>
- <widget class="GtkLabel" id="label8">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Back</property>
- <property name="use_underline">True</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="nextButton">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">True</property>
- <signal name="clicked" handler="on_nextButton_clicked"/>
- <child>
- <widget class="GtkLabel" id="label6">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Next</property>
- <property name="use_underline">True</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="rebootButton">
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">True</property>
- <signal name="clicked" handler="on_rebootButton_clicked"/>
- <child>
- <widget class="GtkLabel" id="label7">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Reboo_t</property>
- <property name="use_underline">True</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">3</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="closeButton">
- <property name="label">gtk-close</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">True</property>
- <property name="use_stock">True</property>
- <signal name="clicked" handler="on_closeButton_clicked"/>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">4</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="padding">6</property>
- <property name="position">2</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
-</glade-interface>
diff --git a/data/ui/autopart.glade b/data/ui/autopart.glade
deleted file mode 100644
index b1346f66d..000000000
--- a/data/ui/autopart.glade
+++ /dev/null
@@ -1,373 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkWindow" id="unused1">
- <property name="border_width">18</property>
- <property name="title" translatable="yes"></property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="default_width">440</property>
- <property name="default_height">250</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
-
- <child>
- <widget class="GtkTable" id="parttypeTable">
- <property name="visible">True</property>
- <property name="n_rows">5</property>
- <property name="n_columns">1</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">0</property>
- <property name="column_spacing">0</property>
-
- <child>
- <widget class="GtkLabel" id="mainlabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Which type of installation would you like?</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox3">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkCheckButton" id="lvmButton">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Use _LVM</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox5">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkCheckButton" id="encryptButton">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Encrypt system</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox6">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkCheckButton" id="reviewButton">
- <property name="label" translatable="yes">Re_view and modify partitioning layout</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkDialog" id="shrinkDialog">
- <property name="border_width">12</property>
- <property name="visible">True</property>
- <property name="title" translatable="yes">Volume to Shrink</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_CENTER</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="button4">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button5">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-5</property>
-
- <child>
- <widget class="GtkLabel" id="label7">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Shrink</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox2">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label5">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Which partition would you like to shrink to make room for your installation?</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkComboBox" id="shrinkPartCombo">
- <property name="visible">True</property>
- <property name="add_tearoffs">False</property>
- <property name="focus_on_click">True</property>
- <signal name="changed" handler="on_resizePartCombo_changed" last_modification_time="Tue, 05 Feb 2008 18:27:52 GMT"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox4">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label6">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;Shrink partition _to size (in MB):&lt;/b&gt;</property>
- <property name="use_underline">True</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">shrinkSB</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkSpinButton" id="shrinkSB">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="climb_rate">1</property>
- <property name="digits">0</property>
- <property name="numeric">True</property>
- <property name="update_policy">GTK_UPDATE_IF_VALID</property>
- <property name="snap_to_ticks">False</property>
- <property name="wrap">False</property>
- <property name="adjustment">1 0 100 1 1 0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/data/ui/blwhere.glade b/data/ui/blwhere.glade
deleted file mode 100644
index b0434134a..000000000
--- a/data/ui/blwhere.glade
+++ /dev/null
@@ -1,378 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkDialog" id="blwhereDialog">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Boot loader device</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_CENTER_ALWAYS</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="cancelbutton1">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="okbutton1">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-5</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Where would you like to install the boot loader for your system?</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="mbrRadio">
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">MBR</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="bootRadio">
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">/boot</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">mbrRadio</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkExpander" id="expander1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="expanded">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkAlignment" id="alignment1">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">0.75</property>
- <property name="yscale">1</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="GtkTable" id="table1">
- <property name="visible">True</property>
- <property name="n_rows">4</property>
- <property name="n_columns">2</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">18</property>
-
- <child>
- <widget class="GtkLabel" id="bd1Label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">First BIOS drive:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="bd2Label">
- <property name="label" translatable="yes">Second BIOS drive:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="bd3Label">
- <property name="label" translatable="yes">Third BIOS drive:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="bd4Label">
- <property name="label" translatable="yes">Fourth BIOS drive:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkComboBox" id="bd2Combo">
- <property name="add_tearoffs">False</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkComboBox" id="bd4Combo">
- <property name="add_tearoffs">False</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkComboBox" id="bd3Combo">
- <property name="add_tearoffs">False</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkComboBox" id="bd1Combo">
- <property name="visible">True</property>
- <property name="add_tearoffs">False</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label2">
- <property name="visible">True</property>
- <property name="label" translatable="yes">BIOS Drive Order</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/data/ui/cleardisks.glade b/data/ui/cleardisks.glade
deleted file mode 100644
index 5fb86e586..000000000
--- a/data/ui/cleardisks.glade
+++ /dev/null
@@ -1,300 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkWindow" id="cleardisksWindow">
- <property name="border_width">6</property>
- <property name="width_request">600</property>
- <property name="title" translatable="yes"></property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
-
- <child>
- <widget class="GtkVBox" id="vbox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">12</property>
-
- <child>
- <widget class="GtkLabel" id="label1">
- <property name="width_request">600</property>
- <property name="visible">True</property>
- <property name="label" translatable="yes">Below are the storage devices you've selected to be a part of this installation. Please indicate using the arrows below which devices you'd like to use as data devices (these will not be formatted, only mounted) and which devices you'd like to use as installation target devices (these may be formatted). Please also indicate which system drive will have the bootloader installed.</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox2">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkVBox" id="vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkLabel" id="label4">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;Data Storage Devices&lt;/b&gt; (to be mounted only)</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkScrolledWindow" id="leftScroll">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVButtonBox" id="vbuttonbox1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_SPREAD</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkButton" id="addButton">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
-
- <child>
- <widget class="GtkImage" id="image3">
- <property name="visible">True</property>
- <property name="stock">gtk-go-forward</property>
- <property name="icon_size">4</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="removeButton">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
-
- <child>
- <widget class="GtkImage" id="image2">
- <property name="visible">True</property>
- <property name="stock">gtk-go-back</property>
- <property name="icon_size">4</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox2">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkLabel" id="label5">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;Install Target Devices&lt;/b&gt;</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkScrolledWindow" id="rightScroll">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="installTargetHBox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkImage" id="installTargetImage">
- <property name="visible">True</property>
- <property name="stock">gtk-dialog-info</property>
- <property name="icon_size">4</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="installTargetTip">
- <property name="width_request">600</property>
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;Tip:&lt;/b&gt; Install target devices will be reformatted and wiped of any data. Make sure you have backups.</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/data/ui/create-storage.glade b/data/ui/create-storage.glade
deleted file mode 100644
index 79dd45ddf..000000000
--- a/data/ui/create-storage.glade
+++ /dev/null
@@ -1,380 +0,0 @@
-<?xml version="1.0"?>
-<glade-interface>
- <!-- interface-requires gtk+ 2.10 -->
- <!-- interface-naming-policy toplevel-contextual -->
- <widget class="GtkDialog" id="create_storage_dialog">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Create Storage</property>
- <property name="modal">True</property>
- <property name="window_position">center-always</property>
- <property name="type_hint">dialog</property>
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">2</property>
- <child>
- <widget class="GtkVBox" id="vbox1">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <widget class="GtkHBox" id="hbox1">
- <property name="visible">True</property>
- <child>
- <widget class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="xpad">2</property>
- <property name="label" translatable="yes">Create Partition</property>
- </widget>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <widget class="GtkVBox" id="vbox2">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <widget class="GtkRadioButton" id="create_storage_rb_standard_part">
- <property name="label" translatable="yes">Standard Partition</property>
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label4">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="xpad">20</property>
- <property name="label" translatable="yes">&lt;span size="small" color="gray"&gt;General purpose partition creation&lt;/span&gt;</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkHBox" id="hbox2">
- <property name="visible">True</property>
- <child>
- <widget class="GtkLabel" id="label2">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="xpad">2</property>
- <property name="label" translatable="yes">Create Software RAID</property>
- </widget>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLinkButton" id="create_storage_info_raid">
- <property name="label">gtk-info</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="has_tooltip">True</property>
- <property name="relief">none</property>
- <property name="use_stock">True</property>
- <property name="xalign">1</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <widget class="GtkVBox" id="vbox3">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <widget class="GtkRadioButton" id="create_storage_rb_raid_part">
- <property name="label" translatable="yes">RAID Partition</property>
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">create_storage_rb_standard_part</property>
- </widget>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label5">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="xpad">20</property>
- <property name="label" translatable="yes">&lt;span size="small" color="gray"&gt;Create a RAID formatted partition&lt;/span&gt;</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">3</property>
- </packing>
- </child>
- <child>
- <widget class="GtkVBox" id="vbox4">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <widget class="GtkRadioButton" id="create_storage_rb_raid_dev">
- <property name="label" translatable="yes">RAID Device</property>
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">create_storage_rb_standard_part</property>
- </widget>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label6">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="xpad">20</property>
- <property name="label" translatable="yes">&lt;span size="small" color="gray"&gt;Requires at least 2 free RAID formatted partitions&lt;/span&gt;</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">4</property>
- </packing>
- </child>
- <child>
- <widget class="GtkHBox" id="hbox3">
- <property name="visible">True</property>
- <child>
- <widget class="GtkLabel" id="label3">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="xpad">2</property>
- <property name="label" translatable="yes">Create LVM</property>
- </widget>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLinkButton" id="create_storage_info_lvm">
- <property name="label">gtk-info</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="has_tooltip">True</property>
- <property name="relief">none</property>
- <property name="use_stock">True</property>
- <property name="xalign">1</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">5</property>
- </packing>
- </child>
- <child>
- <widget class="GtkVBox" id="vbox6">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <widget class="GtkRadioButton" id="create_storage_rb_lvm_vg">
- <property name="label" translatable="yes">LVM Volume Group</property>
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">create_storage_rb_standard_part</property>
- </widget>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label8">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="xpad">20</property>
- <property name="label" translatable="yes">&lt;span size="small" color="gray"&gt;Requires at least 1 free LVM formatted partition&lt;/span&gt;</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">6</property>
- </packing>
- </child>
- <child>
- <widget class="GtkVBox" id="vbox7">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <widget class="GtkHBox" id="create_storage_hb_lvm_lv">
- <property name="visible">True</property>
- <child>
- <widget class="GtkRadioButton" id="create_storage_rb_lvm_lv">
- <property name="label" translatable="yes">LVM Logical Volume</property>
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">create_storage_rb_standard_part</property>
- </widget>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label9">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="xpad">20</property>
- <property name="label" translatable="yes">&lt;span size="small" color="gray"&gt;Create a logical volume on selected volume group&lt;/span&gt;</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">7</property>
- </packing>
- </child>
- <child>
- <widget class="GtkVBox" id="vbox8">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <widget class="GtkRadioButton" id="create_storage_rb_lvm_part">
- <property name="label" translatable="yes">LVM Physical Volume</property>
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">create_storage_rb_standard_part</property>
- </widget>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label10">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="xpad">20</property>
- <property name="label" translatable="yes">&lt;span size="small" color="gray"&gt;Create an LVM formatted partition&lt;/span&gt;</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">8</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">end</property>
- <child>
- <widget class="GtkButton" id="storage_create_button_cancel">
- <property name="label">gtk-cancel</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_stock">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="storage_create_button_create">
- <property name="label" translatable="yes">C_reate</property>
- <property name="response_id">1</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_underline">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
-</glade-interface>
diff --git a/data/ui/detailed-dialog.glade b/data/ui/detailed-dialog.glade
deleted file mode 100644
index 7c69656a9..000000000
--- a/data/ui/detailed-dialog.glade
+++ /dev/null
@@ -1,171 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkDialog" id="detailedDialog">
- <property name="visible">True</property>
- <property name="title"></property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_CENTER</property>
- <property name="modal">True</property>
- <property name="default_width">550</property>
- <property name="default_height">400</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="detailedDialog-vbox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">12</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="buttonBox">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="mainVBox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">12</property>
-
- <child>
- <widget class="GtkHBox" id="hbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <placeholder/>
- </child>
-
- <child>
- <widget class="GtkLabel" id="info">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Info</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkExpander" id="detailedExpander">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="expanded">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkScrolledWindow" id="scrolledwindow2">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <widget class="GtkTextView" id="detailedView">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="overwrite">False</property>
- <property name="accepts_tab">True</property>
- <property name="justification">GTK_JUSTIFY_LEFT</property>
- <property name="wrap_mode">GTK_WRAP_NONE</property>
- <property name="cursor_visible">False</property>
- <property name="pixels_above_lines">0</property>
- <property name="pixels_below_lines">0</property>
- <property name="pixels_inside_wrap">0</property>
- <property name="left_margin">0</property>
- <property name="right_margin">0</property>
- <property name="indent">0</property>
- <property name="text" translatable="yes"></property>
- </widget>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Details</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/data/ui/device-options.glade b/data/ui/device-options.glade
deleted file mode 100644
index 003998d05..000000000
--- a/data/ui/device-options.glade
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkDialog" id="options_dialog">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Device Options</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <property name="has_separator">False</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="cancelbutton1">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="okbutton1">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-5</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="mpath_friendly_names">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">If enabled the multipath devices are named following the /dev/mapper/mpath&lt;letter&gt; format instead of /dev/mapper/&lt;wwid&gt;. Note that the user friendly names are assigned by multipath tools and are not guaranteed to be the same between installs.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Use _friendly names for multipath devices</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/data/ui/fcoe-config.glade b/data/ui/fcoe-config.glade
deleted file mode 100644
index dab0fffa4..000000000
--- a/data/ui/fcoe-config.glade
+++ /dev/null
@@ -1,144 +0,0 @@
-<?xml version="1.0"?>
-<glade-interface>
- <!-- interface-requires gtk+ 2.16 -->
- <!-- interface-naming-policy toplevel-contextual -->
- <widget class="GtkDialog" id="fcoeDialog">
- <property name="title" translatable="yes">Configure FCoE Parameters</property>
- <property name="window_position">center</property>
- <property name="type_hint">dialog</property>
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <widget class="GtkVBox" id="vbox1">
- <property name="visible">True</property>
- <property name="border_width">12</property>
- <property name="orientation">vertical</property>
- <property name="spacing">12</property>
- <child>
- <widget class="GtkLabel" id="label3">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Please select the network interface which is connected to
-your FCoE switch.</property>
- <property name="wrap">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <widget class="GtkHBox" id="hbox2">
- <property name="visible">True</property>
- <child>
- <widget class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">NIC:</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <widget class="GtkComboBox" id="fcoeNicCombo">
- <property name="visible">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkCheckButton" id="dcbCheckbutton">
- <property name="label" translatable="yes">Use DCB</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <widget class="GtkCheckButton" id="autovlanCheckbutton">
- <property name="label" translatable="yes">Use auto vlan</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="position">3</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">end</property>
- <child>
- <widget class="GtkButton" id="button1">
- <property name="label">gtk-cancel</property>
- <property name="response_id">-6</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- <property name="use_stock">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="button2">
- <property name="response_id">-10</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- <child>
- <widget class="GtkLabel" id="label6">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Add FCoE Disk(s)</property>
- <property name="use_underline">True</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
-</glade-interface>
diff --git a/data/ui/filter.glade b/data/ui/filter.glade
deleted file mode 100644
index c4b301f03..000000000
--- a/data/ui/filter.glade
+++ /dev/null
@@ -1,1399 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkWindow" id="advancedFilterWindow">
- <property name="border_width">6</property>
- <property name="title" translatable="yes"></property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
-
- <child>
- <widget class="GtkVBox" id="vbox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label1">
- <property name="width_request">600</property>
- <property name="visible">True</property>
- <property name="label" translatable="yes">Please select the drives you'd like to install the operating system on, as well as any drives you'd like to automatically mount on your system:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkNotebook" id="notebook">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="show_tabs">True</property>
- <property name="show_border">True</property>
- <property name="tab_pos">GTK_POS_TOP</property>
- <property name="scrollable">False</property>
- <property name="enable_popup">False</property>
-
- <child>
- <widget class="GtkScrolledWindow" id="basicScroll">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label4">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Basic Devices</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkScrolledWindow" id="raidScroll">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label5">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Firmware RAID</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="mpathVBox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkHBox" id="mpathFilterHBox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label11">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Filter By:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkComboBoxEntry" id="mpathFilterBy">
- <property name="visible">True</property>
- <property name="items" translatable="yes">Interconnect
-Vendor
-Identifier</property>
- <property name="add_tearoffs">False</property>
- <property name="has_frame">True</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkNotebook" id="mpathNotebook">
- <property name="visible">True</property>
- <property name="show_tabs">False</property>
- <property name="show_border">False</property>
- <property name="tab_pos">GTK_POS_TOP</property>
- <property name="scrollable">False</property>
- <property name="enable_popup">False</property>
-
- <child>
- <widget class="GtkHBox" id="hbox11">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label28">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Show Only Devices Using:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkComboBoxEntry" id="mpathInterconnectEntry">
- <property name="visible">True</property>
- <property name="add_tearoffs">False</property>
- <property name="has_frame">True</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label29">
- <property name="visible">True</property>
- <property name="label" translatable="yes">label22</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox12">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label30">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Show Only Devices From:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkComboBoxEntry" id="mpathVendorEntry">
- <property name="visible">True</property>
- <property name="add_tearoffs">False</property>
- <property name="has_frame">True</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label31">
- <property name="visible">True</property>
- <property name="label" translatable="yes">label23</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox13">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label32">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Show Identifiers that Include:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="mpathIDEntry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">●</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label33">
- <property name="visible">True</property>
- <property name="label" translatable="yes">label24</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkScrolledWindow" id="mpathScroll">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label6">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Multipath Devices</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="otherVBox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkHBox" id="otherFilterHBox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label35">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Filter By:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkComboBoxEntry" id="otherFilterBy">
- <property name="visible">True</property>
- <property name="items" translatable="yes">Interconnect
-Vendor
-Identifier</property>
- <property name="add_tearoffs">False</property>
- <property name="has_frame">True</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkNotebook" id="otherNotebook">
- <property name="visible">True</property>
- <property name="show_tabs">False</property>
- <property name="show_border">False</property>
- <property name="tab_pos">GTK_POS_TOP</property>
- <property name="scrollable">False</property>
- <property name="enable_popup">False</property>
-
- <child>
- <widget class="GtkHBox" id="hbox15">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label36">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Show Only Devices Using:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkComboBoxEntry" id="otherInterconnectEntry">
- <property name="visible">True</property>
- <property name="add_tearoffs">False</property>
- <property name="has_frame">True</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label37">
- <property name="visible">True</property>
- <property name="label" translatable="yes">label22</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox16">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label38">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Show Only Devices From:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkComboBoxEntry" id="otherVendorEntry">
- <property name="visible">True</property>
- <property name="add_tearoffs">False</property>
- <property name="has_frame">True</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label39">
- <property name="visible">True</property>
- <property name="label" translatable="yes">label23</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox17">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label40">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Show Identifiers that Include:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="otherIDEntry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">●</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label41">
- <property name="visible">True</property>
- <property name="label" translatable="yes">label24</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkScrolledWindow" id="otherScroll">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label34">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Other SAN Devices</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="searchVBox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkHBox" id="searchFilterHBox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label15">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Search By:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkComboBoxEntry" id="searchFilterBy">
- <property name="visible">True</property>
- <property name="items" translatable="yes">Port / Target / LUN
-Target Identifier</property>
- <property name="add_tearoffs">False</property>
- <property name="has_frame">True</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkNotebook" id="searchNotebook">
- <property name="visible">True</property>
- <property name="show_tabs">False</property>
- <property name="show_border">False</property>
- <property name="tab_pos">GTK_POS_TOP</property>
- <property name="scrollable">False</property>
- <property name="enable_popup">False</property>
-
- <child>
- <widget class="GtkHBox" id="hbox6">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label18">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Port:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="searchPortEntry">
- <property name="width_request">50</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">●</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label19">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Target:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="searchTargetEntry">
- <property name="width_request">50</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">●</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label20">
- <property name="visible">True</property>
- <property name="label" translatable="yes">LUN:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="searchLUNEntry">
- <property name="width_request">50</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">●</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label16">
- <property name="visible">True</property>
- <property name="label" translatable="yes">label16</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox7">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label21">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Identifier:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="searchIDEntry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">●</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label17">
- <property name="visible">True</property>
- <property name="label" translatable="yes">label17</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label10">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Search Results:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkScrolledWindow" id="searchScroll">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label8">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Search</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHButtonBox" id="buttonBox">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkButton" id="optionsButton">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Device Options</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="addAdvancedButton">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
-
- <child>
- <widget class="GtkLabel" id="label9">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Add Advanced Target</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="sizeLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Selected devices: %s (%s) out of %s (%s).</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkImage" id="image1">
- <property name="visible">True</property>
- <property name="stock">gtk-dialog-info</property>
- <property name="icon_size">4</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label3">
- <property name="width_request">600</property>
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;Tip:&lt;/b&gt; Selected drives will not be formatted unless you choose to do so later during installation. Also, note that post-installation you may mount drives you did not select here by modifying your /etc/fstab file.</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/data/ui/iscsi-dialogs.glade b/data/ui/iscsi-dialogs.glade
deleted file mode 100644
index 591cbf1d0..000000000
--- a/data/ui/iscsi-dialogs.glade
+++ /dev/null
@@ -1,568 +0,0 @@
-<?xml version="1.0"?>
-<glade-interface>
- <!-- interface-requires gtk+ 2.16 -->
- <!-- interface-naming-policy project-wide -->
- <widget class="GtkDialog" id="discovery_dialog">
- <property name="border_width">5</property>
- <property name="title" translatable="yes">iSCSI Discovery Details</property>
- <property name="window_position">center</property>
- <property name="type_hint">normal</property>
- <property name="has_separator">False</property>
- <child internal-child="vbox">
- <widget class="GtkVBox" id="d_discovery_vbox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">2</property>
- <child>
- <widget class="GtkLabel" id="label2">
- <property name="visible">True</property>
- <property name="label" translatable="yes">To use iSCSI disks, you must provide the address of your iSCSI target and the iSCSI initiator name you've configured for your host.</property>
- <property name="wrap">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <widget class="GtkTable" id="table1">
- <property name="visible">True</property>
- <property name="n_rows">2</property>
- <property name="n_columns">2</property>
- <child>
- <widget class="GtkLabel" id="label3">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Target IP Address:</property>
- </widget>
- <packing>
- <property name="x_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label4">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">iSCSI Initiator Name:</property>
- </widget>
- <packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkEntry" id="target_ip">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="invisible_char">&#x25CF;</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- </packing>
- </child>
- <child>
- <widget class="GtkEntry" id="initiator">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="invisible_char">&#x25CF;</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="padding">10</property>
- <property name="position">3</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">What kind of iSCSI &lt;b&gt;discovery authentication&lt;/b&gt; do you wish to perform:</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">4</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <widget class="GtkAlignment" id="credentials_alignment">
- <property name="visible">True</property>
- <property name="yalign">0</property>
- <property name="yscale">0</property>
- <child>
- <widget class="GtkTable" id="table_credentials">
- <property name="visible">True</property>
- <property name="n_rows">4</property>
- <property name="n_columns">2</property>
- <child>
- <widget class="GtkLabel" id="username_label">
- <property name="xalign">0</property>
- <property name="label" translatable="yes">CHAP Username:</property>
- </widget>
- <packing>
- <property name="x_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="password_label">
- <property name="xalign">0</property>
- <property name="label" translatable="yes">CHAP Password:</property>
- </widget>
- <packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkEntry" id="username_entry">
- <property name="can_focus">True</property>
- <property name="invisible_char">&#x25CF;</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- </packing>
- </child>
- <child>
- <widget class="GtkEntry" id="password_entry">
- <property name="can_focus">True</property>
- <property name="visibility">False</property>
- <property name="invisible_char">&#x25CF;</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="r_username_label">
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Reverse CHAP Username:</property>
- </widget>
- <packing>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="r_password_label">
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Reverse CHAP Password:</property>
- </widget>
- <packing>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkEntry" id="r_username_entry">
- <property name="can_focus">True</property>
- <property name="invisible_char">&#x25CF;</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- </packing>
- </child>
- <child>
- <widget class="GtkEntry" id="r_password_entry">
- <property name="can_focus">True</property>
- <property name="visibility">False</property>
- <property name="invisible_char">&#x25CF;</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">10</property>
- <property name="pack_type">end</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">end</property>
- <child>
- <widget class="GtkButton" id="button2">
- <property name="label" translatable="yes">_Cancel</property>
- <property name="response_id">-6</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_underline">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="button1">
- <property name="label" translatable="yes">Start _Discovery</property>
- <property name="response_id">1</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="has_default">True</property>
- <property name="receives_default">True</property>
- <property name="use_underline">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- <widget class="GtkDialog" id="nodes_dialog">
- <property name="border_width">5</property>
- <property name="title" translatable="yes">iSCSI Discovered Nodes</property>
- <property name="window_position">center</property>
- <property name="default_width">400</property>
- <property name="type_hint">normal</property>
- <property name="has_separator">False</property>
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox2">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">2</property>
- <child>
- <widget class="GtkLabel" id="label6">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="ypad">5</property>
- <property name="label" translatable="yes">Check the nodes you wish to log into:</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkScrolledWindow" id="nodes_scrolled_window">
- <property name="height_request">250</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">automatic</property>
- <property name="vscrollbar_policy">automatic</property>
- <property name="shadow_type">in</property>
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area2">
- <property name="visible">True</property>
- <property name="layout_style">end</property>
- <child>
- <widget class="GtkButton" id="button4">
- <property name="label" translatable="yes">_Cancel</property>
- <property name="response_id">-6</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_underline">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="button_login">
- <property name="label" translatable="yes">_Login</property>
- <property name="response_id">1</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="has_focus">True</property>
- <property name="is_focus">True</property>
- <property name="can_default">True</property>
- <property name="has_default">True</property>
- <property name="receives_default">True</property>
- <property name="use_underline">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- <widget class="GtkDialog" id="login_dialog">
- <property name="border_width">5</property>
- <property name="title" translatable="yes">iSCSI Nodes Login</property>
- <property name="window_position">center</property>
- <property name="type_hint">normal</property>
- <property name="has_separator">False</property>
- <child internal-child="vbox">
- <widget class="GtkVBox" id="d_login_vbox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">2</property>
- <child>
- <widget class="GtkLabel" id="label5">
- <property name="visible">True</property>
- <property name="label" translatable="yes">What kind of iSCSI &lt;b&gt;login authentication&lt;/b&gt; do you wish to perform:</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <widget class="GtkAlignment" id="login_credentials_alignment">
- <property name="visible">True</property>
- <property name="yalign">0</property>
- <property name="yscale">0</property>
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="padding">10</property>
- <property name="pack_type">end</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area3">
- <property name="visible">True</property>
- <property name="layout_style">end</property>
- <child>
- <widget class="GtkButton" id="button6">
- <property name="label" translatable="yes">_Cancel</property>
- <property name="response_id">-6</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_underline">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="button5">
- <property name="label" translatable="yes">_Login</property>
- <property name="response_id">1</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="has_focus">True</property>
- <property name="is_focus">True</property>
- <property name="can_default">True</property>
- <property name="has_default">True</property>
- <property name="receives_default">True</property>
- <property name="use_underline">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- <widget class="GtkDialog" id="success_dialog">
- <property name="border_width">5</property>
- <property name="title" translatable="yes">iSCSI Login Results</property>
- <property name="window_position">center</property>
- <property name="type_hint">normal</property>
- <property name="has_separator">False</property>
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox3">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">2</property>
- <child>
- <widget class="GtkLabel" id="label_success">
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Successfully logged in and attached the following nodes:</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkScrolledWindow" id="scroll_window_success">
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">automatic</property>
- <property name="vscrollbar_policy">automatic</property>
- <property name="shadow_type">in</property>
- <child>
- <widget class="GtkTextView" id="text_success">
- <property name="height_request">75</property>
- <property name="visible">True</property>
- <property name="editable">False</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <widget class="GtkHSeparator" id="separator"/>
- <packing>
- <property name="expand">False</property>
- <property name="padding">10</property>
- <property name="position">3</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label_fail">
- <property name="xalign">0</property>
- <property name="label" translatable="yes">iSCSI login has failed for the following nodes:</property>
- </widget>
- <packing>
- <property name="position">4</property>
- </packing>
- </child>
- <child>
- <widget class="GtkScrolledWindow" id="scroll_window_fail">
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">automatic</property>
- <property name="vscrollbar_policy">automatic</property>
- <property name="shadow_type">in</property>
- <child>
- <widget class="GtkTextView" id="text_fail">
- <property name="height_request">75</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="position">5</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label_reason">
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Reason:</property>
- </widget>
- <packing>
- <property name="position">6</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label_reason_val">
- <property name="xalign">0</property>
- <property name="label">label</property>
- <property name="selectable">True</property>
- </widget>
- <packing>
- <property name="position">7</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area4">
- <property name="visible">True</property>
- <property name="layout_style">end</property>
- <child>
- <widget class="GtkButton" id="button7">
- <property name="label" translatable="yes">_OK</property>
- <property name="response_id">1</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="has_focus">True</property>
- <property name="is_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_underline">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="button_retry">
- <property name="label" translatable="yes">Retry _Login</property>
- <property name="response_id">-6</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_underline">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
-</glade-interface>
diff --git a/data/ui/lukspassphrase.glade b/data/ui/lukspassphrase.glade
deleted file mode 100644
index 0ec97b50c..000000000
--- a/data/ui/lukspassphrase.glade
+++ /dev/null
@@ -1,428 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkDialog" id="luksPassphraseDialog">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Enter passphrase for encrypted partition</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_CENTER</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="cancelbutton1">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="okbutton1">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-5</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkHBox" id="hbox2">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkImage" id="image2">
- <property name="visible">True</property>
- <property name="icon_size">6</property>
- <property name="icon_name">gtk-dialog-authentication</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="mainLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Choose a passphrase for this encrypted partition. You will be prompted for the passphrase during system boot.</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">5</property>
- <property name="ypad">15</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="entryTable">
- <property name="visible">True</property>
- <property name="n_rows">2</property>
- <property name="n_columns">2</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">10</property>
- <property name="column_spacing">5</property>
-
- <child>
- <widget class="GtkLabel" id="passphraseEntryLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Enter passphrase:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_RIGHT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">5</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="confirmEntryLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Confirm passphrase:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_RIGHT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">5</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="passphraseEntry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">False</property>
- <property name="max_length">500</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">•</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="confirmEntry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">False</property>
- <property name="max_length">500</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">•</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="globalcheckbutton">
- <property name="border_width">5</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Also add this passphrase to all existing encrypted devices to streamline the boot process</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkDialog" id="passphraseEntryDialog">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Passphrase</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_CENTER_ALWAYS</property>
- <property name="modal">True</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="icon_name">gtk-dialog-authentication</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog2-vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog2-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="cancelbutton2">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="okbutton2">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-5</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox2">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkHBox" id="hbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">12</property>
-
- <child>
- <widget class="GtkImage" id="image1">
- <property name="visible">True</property>
- <property name="icon_size">6</property>
- <property name="icon_name">gtk-dialog-authentication</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="passphraseLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">label1</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="passphraseEntry2">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="has_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">False</property>
- <property name="max_length">500</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">•</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/data/ui/network.glade b/data/ui/network.glade
deleted file mode 100644
index fc4c86b88..000000000
--- a/data/ui/network.glade
+++ /dev/null
@@ -1,259 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkWindow" id="network_window">
- <property name="border_width">18</property>
- <property name="title" translatable="yes"></property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
-
- <child>
- <widget class="GtkAlignment" id="network_align">
- <property name="width_request">400</property>
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="xscale">1</property>
- <property name="yscale">1</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="GtkVBox" id="account_box">
- <property name="border_width">5</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">10</property>
-
- <child>
- <widget class="GtkAlignment" id="alignment2">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="xscale">1</property>
- <property name="yscale">1</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="GtkHBox" id="desc_box">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkImage" id="icon">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">10</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="desc">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Please name this computer. The hostname identifies the computer on a network.</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkAlignment" id="alignment4">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">1</property>
- <property name="yscale">1</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="GtkTable" id="table1">
- <property name="width_request">365</property>
- <property name="visible">True</property>
- <property name="n_rows">1</property>
- <property name="n_columns">2</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">5</property>
- <property name="column_spacing">5</property>
-
- <child>
- <widget class="GtkLabel" id="hostnameLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Hostname:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="hostnameEntry">
- <property name="width_request">256</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="has_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">255</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">•</property>
- <property name="activates_default">True</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkAlignment" id="alignment5">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">1</property>
- <property name="yscale">1</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">209</property>
-
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkAlignment" id="alignment6">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">1</property>
- <property name="yscale">1</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="GtkHButtonBox" id="hbuttonbox2">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_START</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkButton" id="netconfButton">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Configure Network</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/data/ui/reinitialize-dialog.glade b/data/ui/reinitialize-dialog.glade
deleted file mode 100644
index 26975b472..000000000
--- a/data/ui/reinitialize-dialog.glade
+++ /dev/null
@@ -1,255 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkDialog" id="reinitializeDialog">
- <property name="border_width">5</property>
- <property name="visible">True</property>
- <property name="title" translatable="yes">Storage Device Warning</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
- <property name="modal">True</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <property name="has_separator">False</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="button1">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Yes, discard any data</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-8</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button2">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="has_focus">True</property>
- <property name="label" translatable="yes">_No, keep any data</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-9</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="table1">
- <property name="visible">True</property>
- <property name="n_rows">2</property>
- <property name="n_columns">2</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">10</property>
- <property name="column_spacing">10</property>
-
- <child>
- <widget class="GtkImage" id="image1">
- <property name="visible">True</property>
- <property name="stock">gtk-dialog-warning</property>
- <property name="icon_size">6</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;span size=&quot;large&quot; weight=&quot;bold&quot;&gt;The storage device below may contain data.&lt;/span&gt;</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox2">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">10</property>
-
- <child>
- <widget class="GtkHBox" id="hbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">10</property>
-
- <child>
- <widget class="GtkImage" id="image2">
- <property name="visible">True</property>
- <property name="stock">gtk-harddisk</property>
- <property name="icon_size">6</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="disk_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label3">
- <property name="visible">True</property>
- <property name="label" translatable="yes">We could not detect partitions or filesystems on this device.
-
-This could be because the device is &lt;b&gt;blank&lt;/b&gt;, &lt;b&gt;unpartitioned&lt;/b&gt;, or &lt;b&gt;virtual&lt;/b&gt;. If not, there may be data on the device that can not be recovered if you use it in this installation. We can remove the device from this installation to protect the data.
-
-Are you sure this device does not contain valuable data?</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">70</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="apply_to_all">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Apply my choice to all devices with undetected partitions or filesystems.</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">True</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">10</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/data/ui/tasksel.glade b/data/ui/tasksel.glade
deleted file mode 100644
index 393e46348..000000000
--- a/data/ui/tasksel.glade
+++ /dev/null
@@ -1,335 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkWindow" id="window1">
- <property name="visible">True</property>
- <property name="title" translatable="yes"></property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="default_width">440</property>
- <property name="default_height">250</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
-
- <child>
- <widget class="GtkVBox" id="taskBox">
- <property name="border_width">12</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">18</property>
-
- <child>
- <widget class="GtkLabel" id="mainLabel">
- <property name="width_request">600</property>
- <property name="visible">True</property>
- <property name="label" translatable="yes">The default installation of %s includes a set of software applicable for general internet usage. What additional tasks would you like your system to support?</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="cbVBox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkScrolledWindow" id="taskSW">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <widget class="GtkTreeView" id="taskList">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="headers_visible">False</property>
- <property name="rules_hint">False</property>
- <property name="reorderable">False</property>
- <property name="enable_search">False</property>
- <property name="fixed_height_mode">False</property>
- <property name="hover_selection">False</property>
- <property name="hover_expand">False</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="customizeBox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label2">
- <property name="width_request">600</property>
- <property name="visible">True</property>
- <property name="label" translatable="yes">You can further customize the software selection now, or after install via the software management application.</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">24</property>
-
- <child>
- <widget class="GtkRadioButton" id="laterRadio">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Customize _later</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="customRadio">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Customize now</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">laterRadio</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="addRepoBox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label4">
- <property name="width_request">600</property>
- <property name="visible">True</property>
- <property name="label" translatable="yes">Please select any additional repositories that you want to use for software installation.</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkScrolledWindow" id="repoSW">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <widget class="GtkTreeView" id="repoList">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="headers_visible">False</property>
- <property name="rules_hint">False</property>
- <property name="reorderable">False</property>
- <property name="enable_search">False</property>
- <property name="fixed_height_mode">False</property>
- <property name="hover_selection">False</property>
- <property name="hover_expand">False</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHButtonBox" id="hbuttonbox1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_START</property>
- <property name="spacing">5</property>
-
- <child>
- <widget class="GtkButton" id="addRepoButton">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
-
- <child>
- <widget class="GtkLabel" id="label5">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Add additional software repositories</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="editRepoButton">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
-
- <child>
- <widget class="GtkLabel" id="label6">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Modify repository</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/data/ui/zfcp-config.glade b/data/ui/zfcp-config.glade
deleted file mode 100644
index 8a096734b..000000000
--- a/data/ui/zfcp-config.glade
+++ /dev/null
@@ -1,276 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkDialog" id="zfcpDialog">
- <property name="title" translatable="yes">Add FCP device</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_CENTER</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="button1">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button2">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-add</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-10</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox1">
- <property name="border_width">12</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">12</property>
-
- <child>
- <widget class="GtkLabel" id="label8">
- <property name="visible">True</property>
- <property name="label" translatable="yes">zSeries machines can access industry-standard SCSI devices via Fibre Channel (FCP). You need to provide a 16 bit device number, a 64 bit World Wide Port Name (WWPN), and a 64 bit FCP LUN for each device.</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="zfcpTable">
- <property name="border_width">12</property>
- <property name="visible">True</property>
- <property name="n_rows">3</property>
- <property name="n_columns">2</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="devnumLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;Device number:&lt;/b&gt;</property>
- <property name="use_underline">True</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="devnumEntry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">•</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options"></property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="wwwpnLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;WWPN:&lt;/b&gt;</property>
- <property name="use_underline">True</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="wwpnEntry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options"></property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="fcplunLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;FCP LUN:&lt;/b&gt;</property>
- <property name="use_underline">True</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="fcplunEntry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options"></property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/dracut/parse-kickstart b/dracut/parse-kickstart
index aa4e0e83e..13a0e8f43 100755
--- a/dracut/parse-kickstart
+++ b/dracut/parse-kickstart
@@ -23,6 +23,15 @@ from collections import OrderedDict
# Default logging: none
log = logging.getLogger('parse-kickstart').addHandler(logging.NullHandler())
+# Helper function for reading simple files in /sys
+def readsysfile(f):
+ '''Return the contents of f, or "" if missing.'''
+ try:
+ val = open(f).readline().strip()
+ except IOError:
+ val = ""
+ return val
+
# Here are the kickstart commands we care about:
class Method(commands.method.F14_Method):
@@ -108,7 +117,6 @@ class DracutHandler(handlerclass):
command = self.commands[cmd]
if hasattr(command, "dracut_args"):
log.debug("kickstart line %u: handling %s", lineno, cmd)
- line = " ".join(args)
self.output.append(command.dracut_args(args, lineno, obj))
return obj
@@ -120,12 +128,16 @@ class KmsgFormatter(logging.Formatter):
elif record.levelno <= logging.WARNING: tag = "<28>"
else: tag = "<24>"
return tag + logging.Formatter.format(self, record)
-def init_logger():
+def init_logger(level=logging.WARNING):
+ if 'rd.debug' in proc_cmdline:
+ level = logging.DEBUG
+ elif 'rd.info' in proc_cmdline:
+ level = logging.INFO
logfmt = "%(name)s %(levelname)s: %(message)s"
stderr = logging.StreamHandler()
stderr.setFormatter(logging.Formatter(logfmt))
logger = logging.getLogger('parse-kickstart')
- logger.setLevel(logging.WARNING)
+ logger.setLevel(level)
logger.addHandler(stderr)
try:
kmsg = logging.FileHandler("/dev/kmsg", "w")
@@ -140,13 +152,9 @@ def is_mac(addr):
def find_devname(mac):
for netif in os.listdir("/sys/class/net"):
- try:
- thismac = readfile("/sys/class/net/%s/address" % netif)
- except IOError:
- pass
- else:
- if thismac.lower() == mac.lower():
- return netif
+ thismac = readsysfile("/sys/class/net/%s/address" % netif)
+ if thismac.lower() == mac.lower():
+ return netif
def ksnet_to_dracut(args, lineno, net, bootdev=False):
'''Translate the kickstart network data into dracut network data.'''
@@ -195,9 +203,9 @@ def ksnet_to_dracut(args, lineno, net, bootdev=False):
if net.mtu:
# XXX FIXME: dracut doesn't support mtu= (yet)
if net.device:
- line.append("mtu=%s:%u" % (net.device, net.mtu))
+ line.append("mtu=%s:%s" % (net.device, net.mtu))
else:
- line.append("mtu=%u" % net.mtu)
+ line.append("mtu=%s" % net.mtu)
# TODO: nodefroute, noipv[46], nodns: pass along to 'ifcfg' module somehow
# TODO FIXME dhcpclass: dracut only uses one dhclient.conf for all ifaces
@@ -215,13 +223,6 @@ def ksnet_to_dracut(args, lineno, net, bootdev=False):
return " ".join(line)
-def readfile(f):
- try:
- val = open(f).readline().strip()
- except IOError:
- val = None
- return val
-
def ksnet_to_ifcfg(net, filename=None):
'''Write an ifcfg file for the given kickstart network config'''
dev = net.device
@@ -235,8 +236,8 @@ def ksnet_to_ifcfg(net, filename=None):
if not os.path.isdir("/tmp/ifcfg"):
os.makedirs("/tmp/ifcfg")
ifcfg['DEVICE'] = dev
- ifcfg['HWADDR'] = readfile("/sys/class/net/%s/address" % dev)
- ifcfg['UUID'] = readfile("/proc/sys/kernel/random/uuid")
+ ifcfg['HWADDR'] = readsysfile("/sys/class/net/%s/address" % dev)
+ ifcfg['UUID'] = readsysfile("/proc/sys/kernel/random/uuid")
ifcfg['ONBOOT'] = "yes" if net.onboot else "no"
# dhcp etc.
@@ -270,6 +271,7 @@ def ksnet_to_ifcfg(net, filename=None):
# TODO: handle essid/wepkey/wpakey (maybe inside anaconda)
try:
+ log.info("writing ifcfg for %s", dev)
outf = open(filename, "w")
outf.write('# Generated by parse-kickstart\n')
for k,v in ifcfg.items():
@@ -284,6 +286,7 @@ def process_kickstart(ksfile):
handler = DracutHandler()
handler.ksdevice = os.environ.get('ksdevice')
parser = KickstartParser(handler)
+ log.info("processing kickstart file %s", ksfile)
processed_file = preprocessKickstart(ksfile)
try:
parser.readKickstart(processed_file)
@@ -291,6 +294,7 @@ def process_kickstart(ksfile):
log.error(str(e))
with open("/tmp/ks.info", "a") as f:
f.write('parsed_kickstart="%s"\n' % processed_file)
+ log.info("finished parsing kickstart")
return processed_file, handler.output
if __name__ == '__main__':
diff --git a/gptsync/.gitignore b/gptsync/.gitignore
deleted file mode 100644
index 4971cfa19..000000000
--- a/gptsync/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-gptsync
-showpart
diff --git a/gptsync/Makefile.am b/gptsync/Makefile.am
deleted file mode 100644
index 7f664325d..000000000
--- a/gptsync/Makefile.am
+++ /dev/null
@@ -1,35 +0,0 @@
-# gptsync/Makefile.am for anaconda
-#
-# Copyright (C) 2009 Red Hat, Inc.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Author: David Cantrell <dcantrell@redhat.com>
-
-COMMON_SRCS = lib.c os_unix.c
-noinst_HEADERS = gptsync.h syslinux_mbr.h
-
-if IS_GPTSYNC_ARCH
-sbin_PROGRAMS = gptsync showpart
-
-gptsync_CFLAGS = -DPROGNAME=gptsync
-gptsync_SOURCES = gptsync.c $(COMMON_SRCS)
-
-showpart_CFLAGS = -DPROGNAME=showpart
-showpart_SOURCES = showpart.c $(COMMON_SRCS)
-endif
-
-EXTRA_DIST = README
-
-MAINTAINERCLEANFILES = Makefile.in
diff --git a/gptsync/README b/gptsync/README
deleted file mode 100644
index cb306bd76..000000000
--- a/gptsync/README
+++ /dev/null
@@ -1,41 +0,0 @@
-gptsync is from refit (refit.sf.net). It has been modified to
-1) Not prompt if you want to copy
-2) Default to Linux native (0x83) instead of fat32 partition id
-
-The original license follows.
-
-
- rEFIt License
-===============
-
-Copyright (c) 2006-2007 Christoph Pfisterer
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the
- distribution.
-
- * Neither the name of Christoph Pfisterer nor the names of the
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
diff --git a/gptsync/gptsync.c b/gptsync/gptsync.c
deleted file mode 100644
index 94c37eb33..000000000
--- a/gptsync/gptsync.c
+++ /dev/null
@@ -1,469 +0,0 @@
-/*
- * gptsync/gptsync.c
- * Platform-independent code for syncing GPT and MBR
- *
- * Copyright (c) 2006-2007 Christoph Pfisterer
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the
- * distribution.
- *
- * * Neither the name of Christoph Pfisterer nor the names of the
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "gptsync.h"
-
-#include "syslinux_mbr.h"
-
-//
-// MBR functions
-//
-
-static UINTN check_mbr(VOID)
-{
- UINTN i, k;
-
- // check each entry
- for (i = 0; i < mbr_part_count; i++) {
- // check for overlap
- for (k = 0; k < mbr_part_count; k++) {
- if (k != i && !(mbr_parts[i].start_lba > mbr_parts[k].end_lba || mbr_parts[k].start_lba > mbr_parts[i].end_lba)) {
- Print(L"Status: MBR partition table is invalid, partitions overlap.\n");
- return 1;
- }
- }
-
- // check for extended partitions
- if (mbr_parts[i].mbr_type == 0x05 || mbr_parts[i].mbr_type == 0x0f || mbr_parts[i].mbr_type == 0x85) {
- Print(L"Status: Extended partition found in MBR table, will not touch this disk.\n",
- gpt_parts[i].gpt_parttype->name);
- return 1;
- }
- }
-
- return 0;
-}
-
-static UINTN write_mbr(VOID)
-{
- UINTN status;
- UINTN i, k;
- UINT8 active;
- UINT64 lba;
- MBR_PARTITION_INFO *table;
- BOOLEAN have_bootcode;
-
- Print(L"\nWriting new MBR...\n");
-
- // read MBR data
- status = read_sector(0, sector);
- if (status != 0)
- return status;
-
- // write partition table
- *((UINT16 *)(sector + 510)) = 0xaa55;
-
- table = (MBR_PARTITION_INFO *)(sector + 446);
- active = 0x80;
- for (i = 0; i < 4; i++) {
- for (k = 0; k < new_mbr_part_count; k++) {
- if (new_mbr_parts[k].index == i)
- break;
- }
- if (k >= new_mbr_part_count) {
- // unused entry
- table[i].flags = 0;
- table[i].start_chs[0] = 0;
- table[i].start_chs[1] = 0;
- table[i].start_chs[2] = 0;
- table[i].type = 0;
- table[i].end_chs[0] = 0;
- table[i].end_chs[1] = 0;
- table[i].end_chs[2] = 0;
- table[i].start_lba = 0;
- table[i].size = 0;
- } else {
- if (new_mbr_parts[k].active) {
- table[i].flags = active;
- active = 0x00;
- } else
- table[i].flags = 0x00;
- table[i].start_chs[0] = 0xfe;
- table[i].start_chs[1] = 0xff;
- table[i].start_chs[2] = 0xff;
- table[i].type = new_mbr_parts[k].mbr_type;
- table[i].end_chs[0] = 0xfe;
- table[i].end_chs[1] = 0xff;
- table[i].end_chs[2] = 0xff;
-
- lba = new_mbr_parts[k].start_lba;
- if (lba > 0xffffffffULL) {
- Print(L"Warning: Partition %d starts beyond 2 TiB limit\n", i+1);
- lba = 0xffffffffULL;
- }
- table[i].start_lba = (UINT32)lba;
-
- lba = new_mbr_parts[k].end_lba + 1 - new_mbr_parts[k].start_lba;
- if (lba > 0xffffffffULL) {
- Print(L"Warning: Partition %d extends beyond 2 TiB limit\n", i+1);
- lba = 0xffffffffULL;
- }
- table[i].size = (UINT32)lba;
- }
- }
-
- // add boot code if necessary
- have_bootcode = FALSE;
- for (i = 0; i < MBR_BOOTCODE_SIZE; i++) {
- if (sector[i] != 0) {
- have_bootcode = TRUE;
- break;
- }
- }
- if (!have_bootcode) {
- // no boot code found in the MBR, add the syslinux MBR code
- SetMem(sector, 0, MBR_BOOTCODE_SIZE);
- CopyMem(sector, syslinux_mbr, SYSLINUX_MBR_SIZE);
- }
-
- // write MBR data
- status = write_sector(0, sector);
- if (status != 0)
- return status;
-
- Print(L"MBR updated successfully!\n");
-
- return 0;
-}
-
-//
-// GPT functions
-//
-
-static UINTN check_gpt(VOID)
-{
- UINTN i, k;
- BOOLEAN found_data_parts;
-
- if (gpt_part_count == 0) {
- Print(L"Status: No GPT partition table, no need to sync.\n");
- return 1;
- }
-
- // check each entry
- found_data_parts = FALSE;
- for (i = 0; i < gpt_part_count; i++) {
- // check sanity
- if (gpt_parts[i].end_lba < gpt_parts[i].start_lba) {
- Print(L"Status: GPT partition table is invalid.\n");
- return 1;
- }
- // check for overlap
- for (k = 0; k < gpt_part_count; k++) {
- if (k != i && !(gpt_parts[i].start_lba > gpt_parts[k].end_lba || gpt_parts[k].start_lba > gpt_parts[i].end_lba)) {
- Print(L"Status: GPT partition table is invalid, partitions overlap.\n");
- return 1;
- }
- }
-
- // check for partitions kind
- if (gpt_parts[i].gpt_parttype->kind == GPT_KIND_FATAL) {
- Print(L"Status: GPT partition of type '%s' found, will not touch this disk.\n",
- gpt_parts[i].gpt_parttype->name);
- return 1;
- }
- if (gpt_parts[i].gpt_parttype->kind == GPT_KIND_DATA ||
- gpt_parts[i].gpt_parttype->kind == GPT_KIND_BASIC_DATA)
- found_data_parts = TRUE;
- }
-
- if (!found_data_parts) {
- Print(L"Status: GPT partition table has no data partitions, no need to sync.\n");
- return 1;
- }
-
- return 0;
-}
-
-//
-// compare GPT and MBR tables
-//
-
-#define ACTION_NONE (0)
-#define ACTION_NOP (1)
-#define ACTION_REWRITE (2)
-
-static UINTN analyze(VOID)
-{
- UINTN action;
- UINTN i, k, iter, count_active, detected_parttype;
- CHARN *fsname;
- UINT64 min_start_lba;
- BOOLEAN have_esp;
-
- new_mbr_part_count = 0;
-
- // determine correct MBR types for GPT partitions
- if (gpt_part_count == 0) {
- Print(L"Status: No GPT partitions defined, nothing to sync.\n");
- return 0;
- }
- have_esp = FALSE;
- for (i = 0; i < gpt_part_count; i++) {
- gpt_parts[i].mbr_type = gpt_parts[i].gpt_parttype->mbr_type;
- if (gpt_parts[i].gpt_parttype->kind == GPT_KIND_BASIC_DATA) {
- // Basic Data: need to look at data in the partition
- detect_mbrtype_fs(gpt_parts[i].start_lba, &detected_parttype, &fsname);
- if (detected_parttype)
- gpt_parts[i].mbr_type = detected_parttype;
- else
- gpt_parts[i].mbr_type = 0x0b; // fallback: FAT32
- } else if (gpt_parts[i].mbr_type == 0xef) {
- // EFI System Partition: GNU parted can put this on any partition,
- // need to detect file systems
- detect_mbrtype_fs(gpt_parts[i].start_lba, &detected_parttype, &fsname);
- if (!have_esp && (detected_parttype == 0x01 || detected_parttype == 0x0e || detected_parttype == 0x0c))
- ; // seems to be a legitimate ESP, don't change
- else if (detected_parttype)
- gpt_parts[i].mbr_type = detected_parttype;
- else if (have_esp) // make sure there's no more than one ESP per disk
- gpt_parts[i].mbr_type = 0x83; // fallback: Linux
- }
- // NOTE: mbr_type may still be 0 if content detection fails for exotic GPT types or file systems
-
- if (gpt_parts[i].mbr_type == 0xef)
- have_esp = TRUE;
- }
-
- // check for common scenarios
- action = ACTION_NONE;
- if (mbr_part_count == 0) {
- // current MBR is empty
- action = ACTION_REWRITE;
- } else if (mbr_part_count == 1 && mbr_parts[0].mbr_type == 0xee) {
- // MBR has just the EFI Protective partition (i.e. untouched)
- action = ACTION_REWRITE;
- }
- if (action == ACTION_NONE && mbr_part_count > 0) {
- if (mbr_parts[0].mbr_type == 0xee &&
- gpt_parts[0].mbr_type == 0xef &&
- mbr_parts[0].start_lba == 1 &&
- mbr_parts[0].end_lba == gpt_parts[0].end_lba) {
- // The Apple Way, "EFI Protective" covering the tables and the ESP
- action = ACTION_NOP;
- if ((mbr_part_count != gpt_part_count && gpt_part_count <= 4) ||
- (mbr_part_count != 4 && gpt_part_count > 4)) {
- // number of partitions has changed
- action = ACTION_REWRITE;
- } else {
- // check partition ranges and types
- for (i = 1; i < mbr_part_count; i++) {
- if (mbr_parts[i].start_lba != gpt_parts[i].start_lba ||
- mbr_parts[i].end_lba != gpt_parts[i].end_lba ||
- (gpt_parts[i].mbr_type && mbr_parts[i].mbr_type != gpt_parts[i].mbr_type))
- // position or type has changed
- action = ACTION_REWRITE;
- }
- }
- // check number of active partitions
- count_active = 0;
- for (i = 0; i < mbr_part_count; i++)
- if (mbr_parts[i].active)
- count_active++;
- if (count_active!= 1)
- action = ACTION_REWRITE;
- }
- }
- if (action == ACTION_NONE && mbr_part_count > 0 && mbr_parts[0].mbr_type == 0xef) {
- // The XOM Way, all partitions mirrored 1:1
- action = ACTION_REWRITE;
- // check partition ranges and types
- for (i = 0; i < mbr_part_count; i++) {
- if (mbr_parts[i].start_lba != gpt_parts[i].start_lba ||
- mbr_parts[i].end_lba != gpt_parts[i].end_lba ||
- (gpt_parts[i].mbr_type && mbr_parts[i].mbr_type != gpt_parts[i].mbr_type))
- // position or type has changed -> better don't touch
- action = ACTION_NONE;
- }
- }
-
- if (action == ACTION_NOP) {
- Print(L"Status: Tables are synchronized, no need to sync.\n");
- return 0;
- } else if (action == ACTION_REWRITE) {
- Print(L"Status: MBR table must be updated.\n");
- } else {
- Print(L"Status: Analysis inconclusive, will not touch this disk.\n");
- return 1;
- }
-
- // generate the new table
-
- // first entry: EFI Protective
- new_mbr_parts[0].index = 0;
- new_mbr_parts[0].start_lba = 1;
- new_mbr_parts[0].mbr_type = 0xee;
- new_mbr_part_count = 1;
-
- if (gpt_parts[0].mbr_type == 0xef) {
- new_mbr_parts[0].end_lba = gpt_parts[0].end_lba;
- i = 1;
- } else {
- min_start_lba = gpt_parts[0].start_lba;
- for (k = 0; k < gpt_part_count; k++) {
- if (min_start_lba > gpt_parts[k].start_lba)
- min_start_lba = gpt_parts[k].start_lba;
- }
- new_mbr_parts[0].end_lba = min_start_lba - 1;
- i = 0;
- }
-
- // add other GPT partitions until the table is full
- // TODO: in the future, prioritize partitions by kind
- for (; i < gpt_part_count && new_mbr_part_count < 4; i++) {
- new_mbr_parts[new_mbr_part_count].index = new_mbr_part_count;
- new_mbr_parts[new_mbr_part_count].start_lba = gpt_parts[i].start_lba;
- new_mbr_parts[new_mbr_part_count].end_lba = gpt_parts[i].end_lba;
- new_mbr_parts[new_mbr_part_count].mbr_type = gpt_parts[i].mbr_type;
- new_mbr_parts[new_mbr_part_count].active = FALSE;
-
- // find matching partition in the old MBR table
- for (k = 0; k < mbr_part_count; k++) {
- if (mbr_parts[k].start_lba == gpt_parts[i].start_lba) {
- // keep type if not detected
- if (new_mbr_parts[new_mbr_part_count].mbr_type == 0)
- new_mbr_parts[new_mbr_part_count].mbr_type = mbr_parts[k].mbr_type;
- // keep active flag
- new_mbr_parts[new_mbr_part_count].active = mbr_parts[k].active;
- break;
- }
- }
-
- if (new_mbr_parts[new_mbr_part_count].mbr_type == 0)
- // final fallback: set to a (hopefully) unused type
- new_mbr_parts[new_mbr_part_count].mbr_type = 0xc0;
-
- new_mbr_part_count++;
- }
-
- // make sure there's exactly one active partition
- for (iter = 0; iter < 3; iter++) {
- // check
- count_active = 0;
- for (i = 0; i < new_mbr_part_count; i++)
- if (new_mbr_parts[i].active)
- count_active++;
- if (count_active == 1)
- break;
-
- // set active on the first matching partition
- if (count_active == 0) {
- for (i = 0; i < new_mbr_part_count; i++) {
- if ((iter >= 0 && (new_mbr_parts[i].mbr_type == 0x07 || // NTFS
- new_mbr_parts[i].mbr_type == 0x0b || // FAT32
- new_mbr_parts[i].mbr_type == 0x0c)) || // FAT32 (LBA)
- (iter >= 1 && (new_mbr_parts[i].mbr_type == 0x83)) || // Linux
- (iter >= 2 && i > 0)) {
- new_mbr_parts[i].active = TRUE;
- break;
- }
- }
- } else if (count_active > 1 && iter == 0) {
- // too many active partitions, try deactivating the ESP / EFI Protective entry
- if ((new_mbr_parts[0].mbr_type == 0xee || new_mbr_parts[0].mbr_type == 0xef) &&
- new_mbr_parts[0].active) {
- new_mbr_parts[0].active = FALSE;
- }
- } else if (count_active > 1 && iter > 0) {
- // too many active partitions, deactivate all but the first one
- count_active = 0;
- for (i = 0; i < new_mbr_part_count; i++)
- if (new_mbr_parts[i].active) {
- if (count_active > 0)
- new_mbr_parts[i].active = FALSE;
- count_active++;
- }
- }
- }
-
- // dump table
- Print(L"\nProposed new MBR partition table:\n");
- Print(L" # A Start LBA End LBA Type\n");
- for (i = 0; i < new_mbr_part_count; i++) {
- Print(L" %d %s %12lld %12lld %02x %s\n",
- new_mbr_parts[i].index + 1,
- new_mbr_parts[i].active ? STR("*") : STR(" "),
- new_mbr_parts[i].start_lba,
- new_mbr_parts[i].end_lba,
- new_mbr_parts[i].mbr_type,
- mbr_parttype_name(new_mbr_parts[i].mbr_type));
- }
-
- return 0;
-}
-
-//
-// sync algorithm entry point
-//
-
-UINTN gptsync(VOID)
-{
- UINTN status = 0;
- UINTN status_gpt, status_mbr;
- // BOOLEAN proceed = FALSE;
-
- // get full information from disk
- status_gpt = read_gpt();
- status_mbr = read_mbr();
- if (status_gpt != 0 || status_mbr != 0)
- return (status_gpt || status_mbr);
-
- // cross-check current situation
- Print(L"\n");
- status = check_gpt(); // check GPT for consistency
- if (status != 0)
- return status;
- status = check_mbr(); // check MBR for consistency
- if (status != 0)
- return status;
- status = analyze(); // analyze the situation & compose new MBR table
- if (status != 0)
- return status;
- if (new_mbr_part_count == 0)
- return status;
-
- // offer user the choice what to do
- // status = input_boolean(STR("\nMay I update the MBR as printed above? [y/N] "), &proceed);
- // if (status != 0 || proceed != TRUE)
- // return status;
-
- // adjust the MBR and write it back
- status = write_mbr();
- if (status != 0)
- return status;
-
- return status;
-}
diff --git a/gptsync/gptsync.h b/gptsync/gptsync.h
deleted file mode 100644
index d1bf3c20e..000000000
--- a/gptsync/gptsync.h
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * gptsync/gptsync.h
- * Common header for gptsync and showpart
- *
- * Copyright (c) 2006 Christoph Pfisterer
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the
- * distribution.
- *
- * * Neither the name of Christoph Pfisterer nor the names of the
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-//
-// config
-//
-
-#if defined(EFI32) || defined(EFIX64)
-#define CONFIG_EFI
-#endif
-
-//
-// platform-dependent types
-//
-
-#ifdef CONFIG_EFI
-
-#include <efi.h>
-#include <efilib.h>
-
-#define copy_guid(destguid, srcguid) (CopyMem(destguid, srcguid, 16))
-#define guids_are_equal(guid1, guid2) (CompareMem(guid1, guid2, 16) == 0)
-
-typedef CHAR16 CHARN;
-#define STR(x) L##x
-
-#endif
-
-
-#ifndef CONFIG_EFI
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <errno.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <fcntl.h>
-
-typedef int INTN;
-typedef unsigned int UINTN;
-typedef uint8_t UINT8;
-typedef uint16_t UINT16;
-typedef uint32_t UINT32;
-typedef uint64_t UINT64;
-typedef void VOID;
-
-typedef int BOOLEAN;
-#ifndef FALSE
-#define FALSE (0)
-#endif
-#ifndef TRUE
-#define TRUE (1)
-#endif
-
-typedef unsigned short CHAR16;
-typedef char CHARN;
-#define STR(x) x
-
-void Print(wchar_t *format, ...);
-
-// FUTURE: use STR(), #define Print printf
-
-#define CopyMem memcpy
-#define SetMem memset
-#define CompareMem memcmp
-
-#define copy_guid(destguid, srcguid) (memcpy(destguid, srcguid, 16))
-#define guids_are_equal(guid1, guid2) (memcmp(guid1, guid2, 16) == 0)
-
-#endif
-
-//
-// platform-independent types
-//
-
-typedef struct {
- UINT8 flags;
- UINT8 start_chs[3];
- UINT8 type;
- UINT8 end_chs[3];
- UINT32 start_lba;
- UINT32 size;
-} MBR_PARTITION_INFO;
-
-typedef struct {
- UINT8 type;
- CHARN *name;
-} MBR_PARTTYPE;
-
-typedef struct {
- UINT64 signature;
- UINT32 spec_revision;
- UINT32 header_size;
- UINT32 header_crc32;
- UINT32 reserved;
- UINT64 header_lba;
- UINT64 alternate_header_lba;
- UINT64 first_usable_lba;
- UINT64 last_usable_lba;
- UINT8 disk_guid[16];
- UINT64 entry_lba;
- UINT32 entry_count;
- UINT32 entry_size;
- UINT32 entry_crc32;
-} GPT_HEADER;
-
-typedef struct {
- UINT8 type_guid[16];
- UINT8 partition_guid[16];
- UINT64 start_lba;
- UINT64 end_lba;
- UINT64 attributes;
- CHAR16 name[36];
-} GPT_ENTRY;
-
-#define GPT_KIND_SYSTEM (0)
-#define GPT_KIND_DATA (1)
-#define GPT_KIND_BASIC_DATA (2)
-#define GPT_KIND_FATAL (3)
-
-typedef struct {
- UINT8 guid[16];
- UINT8 mbr_type;
- CHARN *name;
- UINTN kind;
-} GPT_PARTTYPE;
-
-typedef struct {
- UINTN index;
- UINT64 start_lba;
- UINT64 end_lba;
- UINTN mbr_type;
- UINT8 gpt_type[16];
- GPT_PARTTYPE *gpt_parttype;
- BOOLEAN active;
-} PARTITION_INFO;
-
-//
-// functions provided by the OS-specific module
-//
-
-UINTN read_sector(UINT64 lba, UINT8 *buffer);
-UINTN write_sector(UINT64 lba, UINT8 *buffer);
-UINTN input_boolean(CHARN *prompt, BOOLEAN *bool_out);
-
-//
-// vars and functions provided by the common lib module
-//
-
-extern UINT8 empty_guid[16];
-
-extern PARTITION_INFO mbr_parts[4];
-extern UINTN mbr_part_count;
-extern PARTITION_INFO gpt_parts[128];
-extern UINTN gpt_part_count;
-
-extern PARTITION_INFO new_mbr_parts[4];
-extern UINTN new_mbr_part_count;
-
-extern UINT8 sector[512];
-
-extern MBR_PARTTYPE mbr_types[];
-extern GPT_PARTTYPE gpt_types[];
-extern GPT_PARTTYPE gpt_dummy_type;
-
-CHARN * mbr_parttype_name(UINT8 type);
-UINTN read_mbr(VOID);
-
-GPT_PARTTYPE * gpt_parttype(UINT8 *type_guid);
-UINTN read_gpt(VOID);
-
-UINTN detect_mbrtype_fs(UINT64 partlba, UINTN *parttype, CHARN **fsname);
-
-//
-// actual platform-independent programs
-//
-
-UINTN gptsync(VOID);
-UINTN showpart(VOID);
-
-/* EOF */
diff --git a/gptsync/lib.c b/gptsync/lib.c
deleted file mode 100644
index f2d71b2e1..000000000
--- a/gptsync/lib.c
+++ /dev/null
@@ -1,469 +0,0 @@
-/*
- * gptsync/lib.c
- * Platform-independent code common to gptsync and showpart
- *
- * Copyright (c) 2006-2007 Christoph Pfisterer
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the
- * distribution.
- *
- * * Neither the name of Christoph Pfisterer nor the names of the
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "gptsync.h"
-
-// variables
-
-UINT8 empty_guid[16] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
-
-PARTITION_INFO mbr_parts[4];
-UINTN mbr_part_count = 0;
-PARTITION_INFO gpt_parts[128];
-UINTN gpt_part_count = 0;
-
-PARTITION_INFO new_mbr_parts[4];
-UINTN new_mbr_part_count = 0;
-
-UINT8 sector[512];
-
-MBR_PARTTYPE mbr_types[] = {
- { 0x01, STR("FAT12 (CHS)") },
- { 0x04, STR("FAT16 <32M (CHS)") },
- { 0x05, STR("Extended (CHS)") },
- { 0x06, STR("FAT16 (CHS)") },
- { 0x07, STR("NTFS/HPFS") },
- { 0x0b, STR("FAT32 (CHS)") },
- { 0x0c, STR("FAT32 (LBA)") },
- { 0x0e, STR("FAT16 (LBA)") },
- { 0x0f, STR("Extended (LBA)") },
- { 0x11, STR("Hidden FAT12 (CHS)") },
- { 0x14, STR("Hidden FAT16 <32M (CHS)") },
- { 0x16, STR("Hidden FAT16 (CHS)") },
- { 0x17, STR("Hidden NTFS/HPFS") },
- { 0x1b, STR("Hidden FAT32 (CHS)") },
- { 0x1c, STR("Hidden FAT32 (LBA)") },
- { 0x1e, STR("Hidden FAT16 (LBA)") },
- { 0x82, STR("Linux swap / Solaris") },
- { 0x83, STR("Linux") },
- { 0x85, STR("Linux Extended") },
- { 0x86, STR("NT FAT volume set") },
- { 0x87, STR("NTFS volume set") },
- { 0x8e, STR("Linux LVM") },
- { 0xa5, STR("FreeBSD") },
- { 0xa6, STR("OpenBSD") },
- { 0xa7, STR("NeXTSTEP") },
- { 0xa8, STR("Mac OS X UFS") },
- { 0xa9, STR("NetBSD") },
- { 0xab, STR("Mac OS X Boot") },
- { 0xac, STR("Apple RAID") },
- { 0xaf, STR("Mac OS X HFS+") },
- { 0xbe, STR("Solaris Boot") },
- { 0xbf, STR("Solaris") },
- { 0xeb, STR("BeOS") },
- { 0xee, STR("EFI Protective") },
- { 0xef, STR("EFI System (FAT)") },
- { 0xfd, STR("Linux RAID") },
- { 0, NULL },
-};
-
-GPT_PARTTYPE gpt_types[] = {
- { "\x28\x73\x2A\xC1\x1F\xF8\xD2\x11\xBA\x4B\x00\xA0\xC9\x3E\xC9\x3B", 0xef, STR("EFI System (FAT)"), GPT_KIND_SYSTEM },
- { "\x41\xEE\x4D\x02\xE7\x33\xD3\x11\x9D\x69\x00\x08\xC7\x81\xF3\x9F", 0x00, STR("MBR partition scheme"), GPT_KIND_FATAL },
- { "\x16\xE3\xC9\xE3\x5C\x0B\xB8\x4D\x81\x7D\xF9\x2D\xF0\x02\x15\xAE", 0x00, STR("MS Reserved"), GPT_KIND_SYSTEM },
- { "\xA2\xA0\xD0\xEB\xE5\xB9\x33\x44\x87\xC0\x68\xB6\xB7\x26\x99\xC7", 0x00, STR("Basic Data"), GPT_KIND_BASIC_DATA },
- { "\xAA\xC8\x08\x58\x8F\x7E\xE0\x42\x85\xD2\xE1\xE9\x04\x34\xCF\xB3", 0x00, STR("MS LDM Metadata"), GPT_KIND_FATAL },
- { "\xA0\x60\x9B\xAF\x31\x14\x62\x4F\xBC\x68\x33\x11\x71\x4A\x69\xAD", 0x00, STR("MS LDM Data"), GPT_KIND_FATAL },
- { "\x1E\x4C\x89\x75\xEB\x3A\xD3\x11\xB7\xC1\x7B\x03\xA0\x00\x00\x00", 0x00, STR("HP/UX Data"), GPT_KIND_DATA },
- { "\x28\xE7\xA1\xE2\xE3\x32\xD6\x11\xA6\x82\x7B\x03\xA0\x00\x00\x00", 0x00, STR("HP/UX Service"), GPT_KIND_SYSTEM },
- { "\x0F\x88\x9D\xA1\xFC\x05\x3B\x4D\xA0\x06\x74\x3F\x0F\x84\x91\x1E", 0xfd, STR("Linux RAID"), GPT_KIND_DATA },
- { "\x6D\xFD\x57\x06\xAB\xA4\xC4\x43\x84\xE5\x09\x33\xC8\x4B\x4F\x4F", 0x82, STR("Linux Swap"), GPT_KIND_SYSTEM },
- { "\x79\xD3\xD6\xE6\x07\xF5\xC2\x44\xA2\x3C\x23\x8F\x2A\x3D\xF9\x28", 0x8e, STR("Linux LVM"), GPT_KIND_DATA },
- { "\x39\x33\xA6\x8D\x07\x00\xC0\x60\xC4\x36\x08\x3A\xC8\x23\x09\x08", 0x00, STR("Linux Reserved"), GPT_KIND_SYSTEM },
- { "\xB4\x7C\x6E\x51\xCF\x6E\xD6\x11\x8F\xF8\x00\x02\x2D\x09\x71\x2B", 0xa5, STR("FreeBSD Data"), GPT_KIND_DATA },
- { "\xB5\x7C\x6E\x51\xCF\x6E\xD6\x11\x8F\xF8\x00\x02\x2D\x09\x71\x2B", 0x00, STR("FreeBSD Swap"), GPT_KIND_SYSTEM },
- { "\xB6\x7C\x6E\x51\xCF\x6E\xD6\x11\x8F\xF8\x00\x02\x2D\x09\x71\x2B", 0xa5, STR("FreeBSD UFS"), GPT_KIND_DATA },
- { "\xB8\x7C\x6E\x51\xCF\x6E\xD6\x11\x8F\xF8\x00\x02\x2D\x09\x71\x2B", 0x00, STR("FreeBSD Vinum"), GPT_KIND_DATA },
- { "\x00\x53\x46\x48\x00\x00\xAA\x11\xAA\x11\x00\x30\x65\x43\xEC\xAC", 0xaf, STR("Mac OS X HFS+"), GPT_KIND_DATA },
- { "\x00\x53\x46\x55\x00\x00\xAA\x11\xAA\x11\x00\x30\x65\x43\xEC\xAC", 0xa8, STR("Mac OS X UFS"), GPT_KIND_DATA },
- { "\x74\x6F\x6F\x42\x00\x00\xAA\x11\xAA\x11\x00\x30\x65\x43\xEC\xAC", 0xab, STR("Mac OS X Boot"), GPT_KIND_DATA },
- { "\x44\x49\x41\x52\x00\x00\xAA\x11\xAA\x11\x00\x30\x65\x43\xEC\xAC", 0xac, STR("Apple RAID"), GPT_KIND_DATA },
- { "\x44\x49\x41\x52\x4F\x5F\xAA\x11\xAA\x11\x00\x30\x65\x43\xEC\xAC", 0xac, STR("Apple RAID (Offline)"), GPT_KIND_DATA },
- { "\x65\x62\x61\x4C\x00\x6C\xAA\x11\xAA\x11\x00\x30\x65\x43\xEC\xAC", 0x00, STR("Apple Label"), GPT_KIND_SYSTEM },
- { "\x6F\x63\x65\x52\x65\x76\xAA\x11\xAA\x11\x00\x30\x65\x43\xEC\xAC", 0x00, STR("Apple Recovery"), GPT_KIND_BASIC_DATA },
- { "\x7f\x23\x96\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0x00, STR("Solaris Reserved"), GPT_KIND_SYSTEM },
- { "\x45\xCB\x82\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0xbf, STR("Solaris Boot"), GPT_KIND_DATA },
- { "\x4D\xCF\x85\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0xbf, STR("Solaris Root"), GPT_KIND_DATA },
- { "\x6F\xC4\x87\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0x00, STR("Solaris Swap"), GPT_KIND_SYSTEM },
- { "\xC3\x8C\x89\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0xbf, STR("Solaris Usr"), GPT_KIND_DATA },
- { "\x2B\x64\x8B\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0x00, STR("Solaris Backup"), GPT_KIND_SYSTEM },
- { "\xC7\x2A\x8D\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0xbf, STR("Solaris Stand"), GPT_KIND_DATA },
- { "\xE9\xF2\x8E\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0xbf, STR("Solaris Var"), GPT_KIND_DATA },
- { "\x39\xBA\x90\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0xbf, STR("Solaris Home"), GPT_KIND_DATA },
- { "\xA5\x83\x92\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0xbf, STR("Solaris ALTSCTR"), GPT_KIND_DATA },
- { "\x3B\x5A\x94\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0x00, STR("Solaris Cache"), GPT_KIND_SYSTEM },
- { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, 0, NULL, 0 },
-};
-GPT_PARTTYPE gpt_dummy_type =
- { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, 0, STR("Unknown"), GPT_KIND_FATAL };
-
-//
-// MBR functions
-//
-
-CHARN * mbr_parttype_name(UINT8 type)
-{
- int i;
-
- for (i = 0; mbr_types[i].name; i++)
- if (mbr_types[i].type == type)
- return mbr_types[i].name;
- return STR("Unknown");
-}
-
-UINTN read_mbr(VOID)
-{
- UINTN status;
- UINTN i;
- BOOLEAN used;
- MBR_PARTITION_INFO *table;
-
- Print(L"\nCurrent MBR partition table:\n");
-
- // read MBR data
- status = read_sector(0, sector);
- if (status != 0)
- return status;
-
- // check for validity
- if (*((UINT16 *)(sector + 510)) != 0xaa55) {
- Print(L" No MBR partition table present!\n");
- return 1;
- }
- table = (MBR_PARTITION_INFO *)(sector + 446);
- for (i = 0; i < 4; i++) {
- if (table[i].flags != 0x00 && table[i].flags != 0x80) {
- Print(L" MBR partition table is invalid!\n");
- return 1;
- }
- }
-
- // check if used
- used = FALSE;
- for (i = 0; i < 4; i++) {
- if (table[i].start_lba > 0 && table[i].size > 0) {
- used = TRUE;
- break;
- }
- }
- if (!used) {
- Print(L" No partitions defined\n");
- return 0;
- }
-
- // dump current state & fill internal structures
- Print(L" # A Start LBA End LBA Type\n");
- for (i = 0; i < 4; i++) {
- if (table[i].start_lba == 0 || table[i].size == 0)
- continue;
-
- mbr_parts[mbr_part_count].index = i;
- mbr_parts[mbr_part_count].start_lba = (UINT64)table[i].start_lba;
- mbr_parts[mbr_part_count].end_lba = (UINT64)table[i].start_lba + (UINT64)table[i].size - 1;
- mbr_parts[mbr_part_count].mbr_type = table[i].type;
- mbr_parts[mbr_part_count].active = (table[i].flags == 0x80) ? TRUE : FALSE;
-
- Print(L" %d %s %12lld %12lld %02x %s\n",
- mbr_parts[mbr_part_count].index + 1,
- mbr_parts[mbr_part_count].active ? STR("*") : STR(" "),
- mbr_parts[mbr_part_count].start_lba,
- mbr_parts[mbr_part_count].end_lba,
- mbr_parts[mbr_part_count].mbr_type,
- mbr_parttype_name(mbr_parts[mbr_part_count].mbr_type));
-
- mbr_part_count++;
- }
-
- return 0;
-}
-
-//
-// GPT functions
-//
-
-GPT_PARTTYPE * gpt_parttype(UINT8 *type_guid)
-{
- int i;
-
- for (i = 0; gpt_types[i].name; i++)
- if (guids_are_equal(gpt_types[i].guid, type_guid))
- return &(gpt_types[i]);
- return &gpt_dummy_type;
-}
-
-UINTN read_gpt(VOID)
-{
- UINTN status;
- GPT_HEADER *header;
- GPT_ENTRY *entry;
- UINT64 entry_lba;
- UINTN entry_count, entry_size, i;
-
- Print(L"\nCurrent GPT partition table:\n");
-
- // read GPT header
- status = read_sector(1, sector);
- if (status != 0)
- return status;
-
- // check signature
- header = (GPT_HEADER *)sector;
- if (header->signature != 0x5452415020494645ULL) {
- Print(L" No GPT partition table present!\n");
- return 0;
- }
- if (header->spec_revision != 0x00010000UL) {
- Print(L" Warning: Unknown GPT spec revision 0x%08x\n", header->spec_revision);
- }
- if ((512 % header->entry_size) > 0 || header->entry_size > 512) {
- Print(L" Error: Invalid GPT entry size (misaligned or more than 512 bytes)\n");
- return 0;
- }
-
- // read entries
- entry_lba = header->entry_lba;
- entry_size = header->entry_size;
- entry_count = header->entry_count;
-
- for (i = 0; i < entry_count; i++) {
- if (((i * entry_size) % 512) == 0) {
- status = read_sector(entry_lba, sector);
- if (status != 0)
- return status;
- entry_lba++;
- }
- entry = (GPT_ENTRY *)(sector + ((i * entry_size) % 512));
-
- if (guids_are_equal(entry->type_guid, empty_guid))
- continue;
- if (gpt_part_count == 0) {
- Print(L" # Start LBA End LBA Type\n");
- }
-
- gpt_parts[gpt_part_count].index = i;
- gpt_parts[gpt_part_count].start_lba = entry->start_lba;
- gpt_parts[gpt_part_count].end_lba = entry->end_lba;
- gpt_parts[gpt_part_count].mbr_type = 0;
- copy_guid(gpt_parts[gpt_part_count].gpt_type, entry->type_guid);
- gpt_parts[gpt_part_count].gpt_parttype = gpt_parttype(gpt_parts[gpt_part_count].gpt_type);
- gpt_parts[gpt_part_count].active = FALSE;
-
- Print(L" %d %12lld %12lld %s\n",
- gpt_parts[gpt_part_count].index + 1,
- gpt_parts[gpt_part_count].start_lba,
- gpt_parts[gpt_part_count].end_lba,
- gpt_parts[gpt_part_count].gpt_parttype->name);
-
- gpt_part_count++;
- }
- if (gpt_part_count == 0) {
- Print(L" No partitions defined\n");
- return 0;
- }
-
- return 0;
-}
-
-//
-// detect file system type
-//
-
-UINTN detect_mbrtype_fs(UINT64 partlba, UINTN *parttype, CHARN **fsname)
-{
- UINTN status;
- UINTN signature, score;
- UINTN sectsize, clustersize, reserved, fatcount, dirsize, sectcount, fatsize, clustercount;
-
- *fsname = STR("Unknown");
- *parttype = 0;
-
- // READ sector 0 / offset 0K
- status = read_sector(partlba, sector);
- if (status != 0)
- return status;
-
- // detect XFS
- memcpy(&signature, sector, sizeof(UINT32));
- if (signature == 0x42534658) {
- *parttype = 0x83;
- *fsname = STR("XFS");
- return 0;
- }
-
- // detect FAT and NTFS
- sectsize = *((UINT16 *)(sector + 11));
- clustersize = sector[13];
- if (sectsize >= 512 && (sectsize & (sectsize - 1)) == 0 &&
- clustersize > 0 && (clustersize & (clustersize - 1)) == 0) {
- // preconditions for both FAT and NTFS are now met
-
- if (CompareMem(sector + 3, "NTFS ", 8) == 0) {
- *parttype = 0x07;
- *fsname = STR("NTFS");
- return 0;
- }
-
- score = 0;
- // boot jump
- if ((sector[0] == 0xEB && sector[2] == 0x90) ||
- sector[0] == 0xE9)
- score++;
- // boot signature
- if (sector[510] == 0x55 && sector[511] == 0xAA)
- score++;
- // reserved sectors
- reserved = *((UINT16 *)(sector + 14));
- if (reserved == 1 || reserved == 32)
- score++;
- // number of FATs
- fatcount = sector[16];
- if (fatcount == 2)
- score++;
- // number of root dir entries
- dirsize = *((UINT16 *)(sector + 17));
- // sector count (16-bit and 32-bit versions)
- sectcount = *((UINT16 *)(sector + 19));
- if (sectcount == 0)
- sectcount = *((UINT32 *)(sector + 32));
- // media byte
- if (sector[21] == 0xF0 || sector[21] >= 0xF8)
- score++;
- // FAT size in sectors
- fatsize = *((UINT16 *)(sector + 22));
- if (fatsize == 0)
- fatsize = *((UINT32 *)(sector + 36));
-
- // determine FAT type
- dirsize = ((dirsize * 32) + (sectsize - 1)) / sectsize;
- clustercount = sectcount - (reserved + (fatcount * fatsize) + dirsize);
- clustercount /= clustersize;
-
- if (score >= 3) {
- if (clustercount < 4085) {
- *parttype = 0x01;
- *fsname = STR("FAT12");
- } else if (clustercount < 65525) {
- *parttype = 0x0e;
- *fsname = STR("FAT16");
- } else {
- *parttype = 0x0c;
- *fsname = STR("FAT32");
- }
- // TODO: check if 0e and 0c are okay to use, maybe we should use 06 and 0b instead...
- return 0;
- }
- }
-
- // READ sector 2 / offset 1K
- status = read_sector(partlba + 2, sector);
- if (status != 0)
- return status;
-
- // detect HFS+
- memcpy(&signature, sector, sizeof(UINT16));
- if (signature == 0x4442) {
- *parttype = 0xaf;
- if (*((UINT16 *)(sector + 0x7c)) == 0x2B48)
- *fsname = STR("HFS Extended (HFS+)");
- else
- *fsname = STR("HFS Standard");
- return 0;
- } else if (signature == 0x2B48) {
- *parttype = 0xaf;
- *fsname = STR("HFS Extended (HFS+)");
- return 0;
- }
-
- // detect ext2/ext3
- signature = *((UINT16 *)(sector + 56));
- if (signature == 0xEF53) {
- *parttype = 0x83;
- if (*((UINT16 *)(sector + 92)) & 0x0004)
- *fsname = STR("ext3");
- else
- *fsname = STR("ext2");
- return 0;
- }
-
- // READ sector 128 / offset 64K
- status = read_sector(partlba + 128, sector);
- if (status != 0)
- return status;
-
- // detect ReiserFS
- if (CompareMem(sector + 52, "ReIsErFs", 8) == 0 ||
- CompareMem(sector + 52, "ReIsEr2Fs", 9) == 0 ||
- CompareMem(sector + 52, "ReIsEr3Fs", 9) == 0) {
- *parttype = 0x83;
- *fsname = STR("ReiserFS");
- return 0;
- }
-
- // detect Reiser4
- if (CompareMem(sector, "ReIsEr4", 7) == 0) {
- *parttype = 0x83;
- *fsname = STR("Reiser4");
- return 0;
- }
-
- // READ sector 64 / offset 32K
- status = read_sector(partlba + 64, sector);
- if (status != 0)
- return status;
-
- // detect JFS
- if (CompareMem(sector, "JFS1", 4) == 0) {
- *parttype = 0x83;
- *fsname = STR("JFS");
- return 0;
- }
-
- // READ sector 16 / offset 8K
- status = read_sector(partlba + 16, sector);
- if (status != 0)
- return status;
-
- // detect ReiserFS
- if (CompareMem(sector + 52, "ReIsErFs", 8) == 0 ||
- CompareMem(sector + 52, "ReIsEr2Fs", 9) == 0 ||
- CompareMem(sector + 52, "ReIsEr3Fs", 9) == 0) {
- *parttype = 0x83;
- *fsname = STR("ReiserFS");
- return 0;
- }
-
- return 0;
-}
diff --git a/gptsync/os_unix.c b/gptsync/os_unix.c
deleted file mode 100644
index c034031a2..000000000
--- a/gptsync/os_unix.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- * gptsync/os_unix.c
- * Unix OS glue for gptsync
- *
- * Copyright (c) 2006 Christoph Pfisterer
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the
- * distribution.
- *
- * * Neither the name of Christoph Pfisterer nor the names of the
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "gptsync.h"
-
-#include <stdarg.h>
-
-#define STRINGIFY(s) #s
-#define STRINGIFY2(s) STRINGIFY(s)
-#define PROGNAME_S STRINGIFY2(PROGNAME)
-
-// variables
-
-static int fd;
-
-//
-// error functions
-//
-
-void error(const char *msg, ...)
-{
- va_list par;
- char buf[4096];
-
- va_start(par, msg);
- vsnprintf(buf, 4096, msg, par);
- va_end(par);
-
- fprintf(stderr, PROGNAME_S ": %s\n", buf);
-}
-
-void errore(const char *msg, ...)
-{
- va_list par;
- char buf[4096];
-
- va_start(par, msg);
- vsnprintf(buf, 4096, msg, par);
- va_end(par);
-
- fprintf(stderr, PROGNAME_S ": %s: %s\n", buf, strerror(errno));
-}
-
-//
-// sector I/O functions
-//
-
-UINTN read_sector(UINT64 lba, UINT8 *buffer)
-{
- off_t offset;
- off_t result_seek;
- ssize_t result_read;
-
- offset = lba * 512;
- result_seek = lseek(fd, offset, SEEK_SET);
- if (result_seek != offset) {
- errore("Seek to %llu failed", offset);
- return 1;
- }
-
- result_read = read(fd, buffer, 512);
- if (result_read < 0) {
- errore("Data read failed at position %llu", offset);
- return 1;
- }
- if (result_read != 512) {
- errore("Data read fell short at position %llu", offset);
- return 1;
- }
- return 0;
-}
-
-UINTN write_sector(UINT64 lba, UINT8 *buffer)
-{
- off_t offset;
- off_t result_seek;
- ssize_t result_write;
-
- offset = lba * 512;
- result_seek = lseek(fd, offset, SEEK_SET);
- if (result_seek != offset) {
- errore("Seek to %llu failed", offset);
- return 1;
- }
-
- result_write = write(fd, buffer, 512);
- if (result_write < 0) {
- errore("Data write failed at position %llu", offset);
- return 1;
- }
- if (result_write != 512) {
- errore("Data write fell short at position %llu", offset);
- return 1;
- }
- return 0;
-}
-
-//
-// keyboard input
-//
-
-UINTN input_boolean(CHARN *prompt, BOOLEAN *bool_out)
-{
- int c;
-
- printf("%s", prompt);
- fflush(NULL);
-
- c = getchar();
- if (c == EOF)
- return 1;
-
- if (c == 'y' || c == 'Y') {
- printf("Yes\n");
- *bool_out = TRUE;
- } else {
- printf("No\n");
- *bool_out = FALSE;
- }
-
- return 0;
-}
-
-//
-// EFI-style print function
-//
-
-void Print(wchar_t *format, ...)
-{
- va_list par;
- char formatbuf[256];
- char buf[4096];
- int i;
-
- for (i = 0; format[i]; i++)
- formatbuf[i] = (format[i] > 255) ? '?' : (char)(format[i] & 0xff);
- formatbuf[i] = 0;
-
- va_start(par, format);
- vsnprintf(buf, 4096, formatbuf, par);
- va_end(par);
-
- printf("%s", buf);
-}
-
-//
-// main entry point
-//
-
-int main(int argc, char *argv[])
-{
- char *filename;
- struct stat sb;
- int filekind;
- char *reason;
- int status;
-
- // argument check
- if (argc != 2) {
- fprintf(stderr, "Usage: " PROGNAME_S " <device>\n");
- return 1;
- }
- filename = argv[1];
-
- // set input to unbuffered
- fflush(NULL);
- setvbuf(stdin, NULL, _IONBF, 0);
-
- // stat check
- if (stat(filename, &sb) < 0) {
- errore("Can't stat %.300s", filename);
- return 1;
- }
-
- filekind = 0;
- reason = NULL;
- if (S_ISREG(sb.st_mode))
- ;
- else if (S_ISBLK(sb.st_mode))
- filekind = 1;
- else if (S_ISCHR(sb.st_mode))
- filekind = 2;
- else if (S_ISDIR(sb.st_mode))
- reason = "Is a directory";
- else if (S_ISFIFO(sb.st_mode))
- reason = "Is a FIFO";
-#ifdef S_ISSOCK
- else if (S_ISSOCK(sb.st_mode))
- reason = "Is a socket";
-#endif
- else
- reason = "Is an unknown kind of special file";
-
- if (reason != NULL) {
- error("%.300s: %s", filename, reason);
- return 1;
- }
-
- // open file
- fd = open(filename, O_RDWR);
- if (fd < 0 && errno == EBUSY) {
- fd = open(filename, O_RDONLY);
-#ifndef NOREADONLYWARN
- if (fd >= 0)
- printf("Warning: %.300s opened read-only\n", filename);
-#endif
- }
- if (fd < 0) {
- errore("Can't open %.300s", filename);
- return 1;
- }
-
- // (try to) guard against TTY character devices
- if (filekind == 2) {
- if (isatty(fd)) {
- error("%.300s: Is a TTY device", filename);
- return 1;
- }
- }
-
- // run sync algorithm
- status = PROGNAME();
- printf("\n");
-
- // close file
- if (close(fd) != 0) {
- errore("Error while closing %.300s", filename);
- return 1;
- }
-
- return status;
-}
diff --git a/gptsync/showpart.c b/gptsync/showpart.c
deleted file mode 100644
index 3d52ba34e..000000000
--- a/gptsync/showpart.c
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * gptsync/showpart.c
- * Platform-independent code for analyzing hard disk partitioning
- *
- * Copyright (c) 2006 Christoph Pfisterer
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the
- * distribution.
- *
- * * Neither the name of Christoph Pfisterer nor the names of the
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "gptsync.h"
-
-//
-// memory string search
-//
-
-static INTN FindMem(VOID *Buffer, UINTN BufferLength, VOID *SearchString, UINTN SearchStringLength)
-{
- UINT8 *BufferPtr;
- UINTN Offset;
-
- BufferPtr = Buffer;
- BufferLength -= SearchStringLength;
- for (Offset = 0; Offset < BufferLength; Offset++, BufferPtr++) {
- if (CompareMem(BufferPtr, SearchString, SearchStringLength) == 0)
- return (INTN)Offset;
- }
-
- return -1;
-}
-
-//
-// detect boot code
-//
-
-static UINTN detect_bootcode(UINT64 partlba, CHARN **bootcodename)
-{
- UINTN status;
- BOOLEAN bootable;
-
- // read MBR data
- status = read_sector(partlba, sector);
- if (status != 0)
- return status;
-
- // check bootable signature
- if (*((UINT16 *)(sector + 510)) == 0xaa55 && sector[0] != 0)
- bootable = TRUE;
- else
- bootable = FALSE;
- *bootcodename = NULL;
-
- // detect specific boot codes
- if (CompareMem(sector + 2, "LILO", 4) == 0 ||
- CompareMem(sector + 6, "LILO", 4) == 0) {
- *bootcodename = STR("LILO");
-
- } else if (CompareMem(sector + 3, "SYSLINUX", 8) == 0) {
- *bootcodename = STR("SYSLINUX");
-
- } else if (FindMem(sector, 512, "ISOLINUX", 8) >= 0) {
- *bootcodename = STR("ISOLINUX");
-
- } else if (FindMem(sector, 512, "Geom\0Hard Disk\0Read\0 Error\0", 27) >= 0) {
- *bootcodename = STR("GRUB");
-
- } else if ((*((UINT32 *)(sector + 502)) == 0 &&
- *((UINT32 *)(sector + 506)) == 50000 &&
- *((UINT16 *)(sector + 510)) == 0xaa55) ||
- FindMem(sector, 512, "Starting the BTX loader", 23) >= 0) {
- *bootcodename = STR("FreeBSD");
-
- } else if (FindMem(sector, 512, "!Loading", 8) >= 0 ||
- FindMem(sector, 512, "/cdboot\0/CDBOOT\0", 16) >= 0) {
- *bootcodename = STR("OpenBSD");
-
- } else if (FindMem(sector, 512, "NTLDR", 5) >= 0) {
- *bootcodename = STR("Windows NTLDR");
-
- } else if (FindMem(sector, 512, "BOOTMGR", 7) >= 0) {
- *bootcodename = STR("Windows BOOTMGR (Vista)");
-
- } else if (FindMem(sector, 512, "CPUBOOT SYS", 11) >= 0 ||
- FindMem(sector, 512, "KERNEL SYS", 11) >= 0) {
- *bootcodename = STR("FreeDOS");
-
- } else if (FindMem(sector, 512, "OS2LDR", 6) >= 0 ||
- FindMem(sector, 512, "OS2BOOT", 7) >= 0) {
- *bootcodename = STR("eComStation");
-
- } else if (FindMem(sector, 512, "Be Boot Loader", 14) >= 0) {
- *bootcodename = STR("BeOS");
-
- } else if (FindMem(sector, 512, "yT Boot Loader", 14) >= 0) {
- *bootcodename = STR("ZETA");
-
- } else if (FindMem(sector, 512, "\x04" "beos\x06" "system\x05" "zbeos", 18) >= 0) {
- *bootcodename = STR("Haiku");
-
- }
-
- if (FindMem(sector, 512, "Non-system disk", 15) >= 0) // dummy FAT boot sector
- *bootcodename = STR("None (Non-system disk message)");
-
- // TODO: Add a note if a specific code was detected, but the sector is not bootable?
-
- if (*bootcodename == NULL) {
- if (bootable)
- *bootcodename = STR("Unknown, but bootable");
- else
- *bootcodename = STR("None");
- }
-
- return 0;
-}
-
-//
-// check one partition
-//
-
-static UINTN analyze_part(UINT64 partlba)
-{
- UINTN status;
- UINTN i;
- CHARN *bootcodename;
- UINTN parttype;
- CHARN *fsname;
-
- if (partlba == 0)
- Print(L"\nMBR contents:\n");
- else
- Print(L"\nPartition at LBA %lld:\n", partlba);
-
- // detect boot code
- status = detect_bootcode(partlba, &bootcodename);
- if (status)
- return status;
- Print(L" Boot Code: %s\n", bootcodename);
-
- if (partlba == 0)
- return 0; // short-circuit MBR analysis
-
- // detect file system
- status = detect_mbrtype_fs(partlba, &parttype, &fsname);
- if (status)
- return status;
- Print(L" File System: %s\n", fsname);
-
- // cross-reference with partition table
- for (i = 0; i < gpt_part_count; i++) {
- if (gpt_parts[i].start_lba == partlba) {
- Print(L" Listed in GPT as partition %d, type %s\n", i+1,
- gpt_parts[i].gpt_parttype->name);
- }
- }
- for (i = 0; i < mbr_part_count; i++) {
- if (mbr_parts[i].start_lba == partlba) {
- Print(L" Listed in MBR as partition %d, type %02x %s%s\n", i+1,
- mbr_parts[i].mbr_type,
- mbr_parttype_name(mbr_parts[i].mbr_type),
- mbr_parts[i].active ? STR(", active") : STR(""));
- }
- }
-
- return 0;
-}
-
-//
-// check all partitions
-//
-
-static UINTN analyze_parts(VOID)
-{
- UINTN i, k;
- UINTN status;
- BOOLEAN is_dupe;
-
- // check MBR (bootcode only)
- status = analyze_part(0);
- if (status)
- return status;
-
- // check partitions listed in GPT
- for (i = 0; i < gpt_part_count; i++) {
- status = analyze_part(gpt_parts[i].start_lba);
- if (status)
- return status;
- }
-
- // check partitions listed in MBR, but not in GPT
- for (i = 0; i < mbr_part_count; i++) {
- if (mbr_parts[i].start_lba == 1 && mbr_parts[i].mbr_type == 0xee)
- continue; // skip EFI Protective entry
-
- is_dupe = FALSE;
- for (k = 0; k < gpt_part_count; k++)
- if (gpt_parts[k].start_lba == mbr_parts[i].start_lba)
- is_dupe = TRUE;
-
- if (!is_dupe) {
- status = analyze_part(mbr_parts[i].start_lba);
- if (status)
- return status;
- }
- }
-
- return 0;
-}
-
-//
-// display algorithm entry point
-//
-
-UINTN showpart(VOID)
-{
- UINTN status = 0;
- UINTN status_gpt, status_mbr;
-
- // get full information from disk
- status_gpt = read_gpt();
- status_mbr = read_mbr();
- if (status_gpt != 0 || status_mbr != 0)
- return (status_gpt || status_mbr);
-
- // analyze all partitions
- status = analyze_parts();
- if (status != 0)
- return status;
-
- return status;
-}
diff --git a/gptsync/syslinux_mbr.h b/gptsync/syslinux_mbr.h
deleted file mode 100644
index 1c33e1159..000000000
--- a/gptsync/syslinux_mbr.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * include/syslinux_mbr.h
- * MBR boot code
- *
- * The boot code in this file was taken from syslinux-3.11. It is covered
- * by the following license:
- *
- ; -----------------------------------------------------------------------
- ;
- ; Copyright 2003-2004 H. Peter Anvin - All Rights Reserved
- ;
- ; Permission is hereby granted, free of charge, to any person
- ; obtaining a copy of this software and associated documentation
- ; files (the "Software"), to deal in the Software without
- ; restriction, including without limitation the rights to use,
- ; copy, modify, merge, publish, distribute, sublicense, and/or
- ; sell copies of the Software, and to permit persons to whom
- ; the Software is furnished to do so, subject to the following
- ; conditions:
- ;
- ; The above copyright notice and this permission notice shall
- ; be included in all copies or substantial portions of the Software.
- ;
- ; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- ; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- ; OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- ; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- ; HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- ; WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- ; FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- ; OTHER DEALINGS IN THE SOFTWARE.
- ;
- ; -----------------------------------------------------------------------
- *
- */
-
-#ifndef __SYSLINUX_MBR_H__
-#define __SYSLINUX_MBR_H__
-
-
-#define MBR_BOOTCODE_SIZE (440)
-
-
-#define SYSLINUX_MBR_SIZE (304)
-
-static UINT8 syslinux_mbr[SYSLINUX_MBR_SIZE] = {
- 0xfa, 0x31, 0xc0, 0x8e, 0xd8, 0x8e, 0xc0, 0x8e,
- 0xd0, 0xbc, 0x00, 0x7c, 0xfb, 0xfc, 0x89, 0xe6,
- 0xbf, 0x00, 0x06, 0xb9, 0x00, 0x01, 0xf3, 0xa5,
- 0xea, 0x1d, 0x06, 0x00, 0x00, 0x88, 0x16, 0x00,
- 0x08, 0xb4, 0x08, 0xcd, 0x13, 0x31, 0xc0, 0x88,
- 0xf0, 0x40, 0xa3, 0xf0, 0x06, 0x80, 0xe1, 0x3f,
- 0x88, 0x0e, 0xf2, 0x06, 0xbe, 0xbe, 0x07, 0x31,
- 0xc0, 0xb9, 0x04, 0x00, 0xf6, 0x04, 0x80, 0x74,
- 0x03, 0x40, 0x89, 0xf7, 0x83, 0xc6, 0x10, 0xe2,
- 0xf3, 0x83, 0xf8, 0x01, 0x75, 0x73, 0x8a, 0x16,
- 0x00, 0x08, 0xb8, 0x00, 0x41, 0xbb, 0xaa, 0x55,
- 0x31, 0xc9, 0x30, 0xf6, 0xf9, 0xcd, 0x13, 0x72,
- 0x23, 0x81, 0xfb, 0x55, 0xaa, 0x75, 0x1d, 0xf6,
- 0xc1, 0x01, 0x74, 0x18, 0x57, 0xbe, 0xe0, 0x06,
- 0x8b, 0x5d, 0x08, 0x89, 0x5c, 0x08, 0x8b, 0x5d,
- 0x0a, 0x89, 0x5c, 0x0a, 0x8a, 0x16, 0x00, 0x08,
- 0xb4, 0x42, 0xeb, 0x2a, 0x57, 0x8b, 0x45, 0x08,
- 0x8b, 0x55, 0x0a, 0xf7, 0x36, 0xf2, 0x06, 0x42,
- 0x89, 0xd1, 0x31, 0xd2, 0xf7, 0x36, 0xf0, 0x06,
- 0x88, 0xc5, 0xd1, 0xe8, 0xd1, 0xe8, 0x24, 0xc0,
- 0x08, 0xc1, 0x88, 0xd6, 0x8a, 0x16, 0x00, 0x08,
- 0xbb, 0x00, 0x7c, 0xb8, 0x01, 0x02, 0xcd, 0x13,
- 0x72, 0x16, 0x5e, 0x81, 0x3e, 0xfe, 0x7d, 0x55,
- 0xaa, 0x75, 0x08, 0xfa, 0xea, 0x00, 0x7c, 0x00,
- 0x00, 0x77, 0x05, 0xbe, 0xf4, 0x06, 0xeb, 0x03,
- 0xbe, 0x0f, 0x07, 0xac, 0x20, 0xc0, 0x74, 0x0c,
- 0xb4, 0x0e, 0x8a, 0x3e, 0x62, 0x04, 0xb3, 0x07,
- 0xcd, 0x10, 0xeb, 0xef, 0xeb, 0xfe, 0x00, 0x00,
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x7c, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x73, 0x73,
- 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x70, 0x65, 0x72,
- 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x79,
- 0x73, 0x74, 0x65, 0x6d, 0x0d, 0x0a, 0x00, 0x4f,
- 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67,
- 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20,
- 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20,
- 0x65, 0x72, 0x72, 0x6f, 0x72, 0x0d, 0x0a, 0x00
-};
-
-
-#endif /* __SYSLINUX_MBR_H__ */
-
-/* EOF */
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 79cf1a888..55a6d2a9f 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -3,7 +3,6 @@
# Main anaconda source files
anaconda
-pyanaconda/backend.py
pyanaconda/bootloader.py
pyanaconda/cmdline.py
pyanaconda/compssort.py
@@ -14,13 +13,10 @@ pyanaconda/installclass.py
pyanaconda/installinterfacebase.py
pyanaconda/iutil.py
pyanaconda/kickstart.py
-pyanaconda/livecd.py
pyanaconda/network.py
pyanaconda/packages.py
pyanaconda/platform.py
pyanaconda/rescue.py
-pyanaconda/text.py
-pyanaconda/upgrade.py
pyanaconda/vnc.py
pyanaconda/yuminstall.py
@@ -60,8 +56,11 @@ pyanaconda/storage/partitioning.py
pyanaconda/storage/zfcp.py
# Graphical interface
+pyanaconda/ui/gui/__init__.py
+pyanaconda/ui/gui/categories/__init__.py
pyanaconda/ui/gui/categories/localization.py
pyanaconda/ui/gui/categories/software.py
+pyanaconda/ui/gui/hubs/__init__.py
pyanaconda/ui/gui/hubs/progress.py
pyanaconda/ui/gui/spokes/custom.py
pyanaconda/ui/gui/spokes/datetime_spoke.py
@@ -74,19 +73,20 @@ pyanaconda/ui/gui/spokes/welcome.py
pyanaconda/ui/gui/spokes/lib/accordion.py
pyanaconda/ui/gui/spokes/lib/cart.py
-# Text mode user interface source files
-pyanaconda/textw/complete_text.py
-pyanaconda/textw/constants_text.py
-pyanaconda/textw/keyboard_text.py
-pyanaconda/textw/language_text.py
-pyanaconda/textw/netconfig_text.py
-pyanaconda/textw/partition_text.py
-pyanaconda/textw/progress_text.py
-pyanaconda/textw/timezone_text.py
-pyanaconda/textw/upgrade_bootloader_text.py
-pyanaconda/textw/upgrade_text.py
-pyanaconda/textw/userauth_text.py
-pyanaconda/textw/zipl_text.py
+# Interface files.
+pyanaconda/ui/gui/spokes/datetime_spoke.glade
+pyanaconda/ui/gui/spokes/network.glade
+pyanaconda/ui/gui/spokes/software.glade
+pyanaconda/ui/gui/spokes/storage.glade
+pyanaconda/ui/gui/spokes/keyboard.glade
+pyanaconda/ui/gui/spokes/source.glade
+pyanaconda/ui/gui/spokes/welcome.glade
+pyanaconda/ui/gui/spokes/custom.glade
+pyanaconda/ui/gui/spokes/lib/cart.glade
+pyanaconda/ui/gui/spokes/lib/detailederror.glade
+pyanaconda/ui/gui/main.glade
+pyanaconda/ui/gui/hubs/summary.glade
+pyanaconda/ui/gui/hubs/progress.glade
# welcome screen for GNOME Shell
data/liveinst/gnome/fedora-welcome
@@ -96,26 +96,5 @@ data/liveinst/gnome/fedora-welcome.desktop.in
data/liveinst/liveinst.desktop.in.h
data/liveinst/console.apps/liveinst.h
-# Glade definition files
-data/ui/GroupSelector.glade.h
-data/ui/account.glade.h
-data/ui/adddrive.glade.h
-data/ui/addrepo.glade.h
-data/ui/anaconda.glade.h
-data/ui/autopart.glade.h
-data/ui/blwhere.glade.h
-data/ui/cleardisks.glade.h
-data/ui/create-storage.glade.h
-data/ui/detailed-dialog.glade.h
-data/ui/device-options.glade.h
-data/ui/fcoe-config.glade.h
-data/ui/filter.glade.h
-data/ui/iscsi-dialogs.glade.h
-data/ui/lukspassphrase.glade.h
-data/ui/network.glade.h
-data/ui/tasksel.glade.h
-data/ui/zfcp-config.glade.h
-data/ui/reinitialize-dialog.glade.h
-
# lang-table
data/lang-table.h
diff --git a/po/anaconda.pot b/po/anaconda.pot
index b3d2a9ce9..9e5267a0a 100644
--- a/po/anaconda.pot
+++ b/po/anaconda.pot
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: anaconda 18.1\n"
+"Project-Id-Version: anaconda 18.2\n"
"Report-Msgid-Bugs-To: anaconda-devel-list@redhat.com\n"
-"POT-Creation-Date: 2012-04-18 16:07-0700\n"
+"POT-Creation-Date: 2012-08-03 16:44-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,28 +18,28 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-#: anaconda:349
+#: anaconda:357
msgid "Press <enter> for a shell"
msgstr ""
-#: anaconda:363
+#: anaconda:371
#, c-format
msgid ""
"%s requires %s MB of memory to install, but you only have %s MB on this "
"machine.\n"
msgstr ""
-#: anaconda:365
+#: anaconda:373
#, c-format
msgid ""
"The %s graphical installer requires %s MB of memory, but you only have %s MB."
msgstr ""
-#: anaconda:370
+#: anaconda:378
msgid "Not enough RAM"
msgstr ""
-#: anaconda:371
+#: anaconda:379
msgid ""
" Try the text mode installer by running:\n"
"\n"
@@ -48,155 +48,117 @@ msgid ""
" from a root terminal."
msgstr ""
-#: anaconda:374
+#: anaconda:382
msgid " Starting text mode."
msgstr ""
-#: anaconda:401 pyanaconda/rescue.py:347 pyanaconda/rescue.py:379
-#: pyanaconda/rescue.py:392 pyanaconda/rescue.py:460 pyanaconda/rescue.py:477
-#: pyanaconda/rescue.py:488 pyanaconda/text.py:546
-#: pyanaconda/textw/constants_text.py:44
+#: anaconda:409 pyanaconda/rescue.py:288 pyanaconda/rescue.py:321
+#: pyanaconda/rescue.py:334 pyanaconda/rescue.py:402 pyanaconda/rescue.py:418
+#: pyanaconda/rescue.py:429
msgid "OK"
msgstr ""
-#: anaconda:494
+#: anaconda:492
msgid "Would you like to use VNC?"
msgstr ""
-#: anaconda:495
+#: anaconda:493
msgid ""
"Text mode provides a limited set of installation options. It does not allow "
"you to specify your own partitioning layout or package selections. Would you "
"like to use VNC mode instead?"
msgstr ""
-#: anaconda:516
+#: anaconda:514
msgid "DISPLAY variable not set. Starting text mode."
msgstr ""
-#: anaconda:524
+#: anaconda:522
msgid "Graphical installation is not available. Starting text mode."
msgstr ""
-#: pyanaconda/backend.py:132
-#, python-format
-msgid "%s Upgrading %s\n"
+#: anaconda:647
+#, c-format
+msgid "Please ssh install@%s to begin the install."
msgstr ""
-#: pyanaconda/backend.py:134
-#, python-format
-msgid "%s Installing %s\n"
+#: anaconda:649
+msgid "Please ssh install@<host> to continue installation."
msgstr ""
-#: pyanaconda/bootloader.py:246
+#: pyanaconda/bootloader.py:238
msgid "/boot filesystem"
msgstr ""
-#: pyanaconda/bootloader.py:478
+#: pyanaconda/bootloader.py:387
#, python-format
msgid ""
"RAID sets that contain '%s' must have one of the following raid levels: %s."
msgstr ""
-#: pyanaconda/bootloader.py:486
+#: pyanaconda/bootloader.py:395
#, python-format
msgid ""
"RAID sets that contain '%s' must have one of the following metadata "
"versions: %s."
msgstr ""
-#: pyanaconda/bootloader.py:494
+#: pyanaconda/bootloader.py:403
#, python-format
msgid ""
"RAID sets that contain '%s' must have one of the following device types: %s."
msgstr ""
-#: pyanaconda/bootloader.py:510
+#: pyanaconda/bootloader.py:419
#, python-format
msgid "%s must have one of the following disklabel types: %s."
msgstr ""
-#: pyanaconda/bootloader.py:522 pyanaconda/bootloader.py:666
+#: pyanaconda/bootloader.py:431
#, python-format
msgid "%s cannot be of type %s."
msgstr ""
-#: pyanaconda/bootloader.py:528
+#: pyanaconda/bootloader.py:437
#, python-format
msgid "%s must be mounted on one of %s."
msgstr ""
-#: pyanaconda/bootloader.py:540
+#: pyanaconda/bootloader.py:449
#, python-format
msgid "%s must be between %d and %d MB in size"
msgstr ""
-#: pyanaconda/bootloader.py:545
+#: pyanaconda/bootloader.py:454
#, python-format
msgid "%s must not be smaller than %dMB."
msgstr ""
-#: pyanaconda/bootloader.py:554
+#: pyanaconda/bootloader.py:463
#, python-format
msgid "%s must not be larger than %dMB."
msgstr ""
-#: pyanaconda/bootloader.py:572
+#: pyanaconda/bootloader.py:481
#, python-format
msgid "%s must be within the first %dMB of the disk."
msgstr ""
-#: pyanaconda/bootloader.py:582
+#: pyanaconda/bootloader.py:491
#, python-format
msgid "%s must be on a primary partition."
msgstr ""
-#: pyanaconda/bootloader.py:706 pyanaconda/bootloader.py:811
+#: pyanaconda/bootloader.py:614 pyanaconda/bootloader.py:704
#, python-format
msgid "%s cannot be on an encrypted block device."
msgstr ""
-#: pyanaconda/bootloader.py:769
+#: pyanaconda/bootloader.py:662
#, python-format
msgid "%s cannot be of type %s"
msgstr ""
-#: pyanaconda/bootloader.py:1644
-msgid ""
-"Your BIOS-based system needs a special partition to boot with Fedora's new "
-"disk label format (GPT). To continue, please create a 1MB 'BIOS Boot' type "
-"partition."
-msgstr ""
-
-#: pyanaconda/bootloader.py:2301
-msgid "Bootloader"
-msgstr ""
-
-#: pyanaconda/bootloader.py:2302
-msgid "Installing bootloader."
-msgstr ""
-
-#: pyanaconda/bootloader.py:2309 pyanaconda/bootloader.py:2368
-#: pyanaconda/gui.py:1093 pyanaconda/image.py:87
-#: pyanaconda/installinterfacebase.py:74
-#: pyanaconda/installinterfacebase.py:151 pyanaconda/packages.py:90
-#: pyanaconda/packages.py:325 pyanaconda/text.py:419
-#: pyanaconda/yuminstall.py:1521 pyanaconda/iw/blpasswidget.py:144
-msgid "Warning"
-msgstr ""
-
-#: pyanaconda/bootloader.py:2310
-msgid ""
-"No kernel packages were installed on the system. Bootloader configuration "
-"will not be changed."
-msgstr ""
-
-#: pyanaconda/bootloader.py:2369
-msgid ""
-"There was an error installing the bootloader. The system may not be "
-"bootable."
-msgstr ""
-
#: pyanaconda/cmdline.py:66
msgid "Completed"
msgstr ""
@@ -213,10 +175,7 @@ msgid ""
"configuration file."
msgstr ""
-#: pyanaconda/cmdline.py:104 pyanaconda/gui.py:1148
-#: pyanaconda/kickstart.py:1398 pyanaconda/kickstart.py:1457
-#: pyanaconda/kickstart.py:1465 pyanaconda/kickstart.py:1495
-#: pyanaconda/kickstart.py:1505 pyanaconda/text.py:400
+#: pyanaconda/cmdline.py:104
#, python-format
msgid ""
"The following error was found while parsing the kickstart configuration "
@@ -237,7 +196,7 @@ msgstr ""
msgid "Can't have a question in command line mode!"
msgstr ""
-#: pyanaconda/cmdline.py:162
+#: pyanaconda/cmdline.py:161
#, python-format
msgid "In interactive step can't continue. (%s)"
msgstr ""
@@ -257,307 +216,15 @@ msgstr ""
msgid " against anaconda at %s"
msgstr ""
-#: pyanaconda/gui.py:110
-msgid "An error occurred saving screenshots to disk."
-msgstr ""
-
-#: pyanaconda/gui.py:127
-msgid "Screenshots Copied"
-msgstr ""
-
-#: pyanaconda/gui.py:128
-msgid ""
-"The screenshots have been saved in the directory:\n"
-"\n"
-"\t/root/anaconda-screenshots/\n"
-"\n"
-"You can access these when you reboot and login as root."
-msgstr ""
-
-#: pyanaconda/gui.py:167
-msgid "Saving Screenshot"
-msgstr ""
-
-#: pyanaconda/gui.py:168
-#, python-format
-msgid "A screenshot named '%s' has been saved."
-msgstr ""
-
-#: pyanaconda/gui.py:172
-msgid "Error Saving Screenshot"
-msgstr ""
-
-#: pyanaconda/gui.py:173
-msgid ""
-"An error occurred while saving the screenshot. If this occurred during "
-"package installation, you may need to try several times for it to succeed."
-msgstr ""
-
-#: pyanaconda/gui.py:492 pyanaconda/text.py:146
-msgid ""
-"Choose a passphrase for the encrypted devices. You will be prompted for this "
-"passphrase during system boot."
-msgstr ""
-
-#: pyanaconda/gui.py:511 pyanaconda/gui.py:519 pyanaconda/text.py:184
-#: pyanaconda/text.py:194
-msgid "Error with passphrase"
-msgstr ""
-
-#: pyanaconda/gui.py:512 pyanaconda/text.py:185
-msgid "The passphrases you entered were different. Please try again."
-msgstr ""
-
-#: pyanaconda/gui.py:520
-msgid "The passphrase must be at least eight characters long."
-msgstr ""
-
-#: pyanaconda/gui.py:554 pyanaconda/text.py:222
-#, python-format
-msgid ""
-"Device %s is encrypted. In order to access the device's contents during "
-"installation you must enter the device's passphrase below."
-msgstr ""
-
-#: pyanaconda/gui.py:643 pyanaconda/gui.py:1337
-#: pyanaconda/partIntfHelpers.py:159 pyanaconda/partIntfHelpers.py:344
-#: pyanaconda/text.py:97 pyanaconda/text.py:98
-#: pyanaconda/iw/account_gui.py:132 pyanaconda/textw/constants_text.py:48
-msgid "Cancel"
-msgstr ""
-
-#: pyanaconda/gui.py:655 pyanaconda/gui.py:656 pyanaconda/gui.py:753
-#: pyanaconda/gui.py:834 pyanaconda/gui.py:835 data/ui/anaconda.glade.h:3
-msgid "_Debug"
-msgstr ""
-
-#: pyanaconda/gui.py:934
-msgid "Wireless setup"
-msgstr ""
-
-#: pyanaconda/gui.py:935
-msgid "Scanning access points for wireless devices"
-msgstr ""
-
-#: pyanaconda/gui.py:961 pyanaconda/textw/netconfig_text.py:399
-msgid "Waiting for NetworkManager"
-msgstr ""
-
-#: pyanaconda/gui.py:962
-#, python-format
-msgid "Waiting for NetworkManager to activate these devices: %s"
-msgstr ""
-
-#: pyanaconda/gui.py:989
-#, python-format
-msgid "Failed to activate these network interfaces: %s"
-msgstr ""
-
-#: pyanaconda/gui.py:992
-msgid "Network Configuration"
-msgstr ""
-
-#: pyanaconda/gui.py:1001
-#, python-format
-msgid "An error occurred trying to bring up the %s network interface."
-msgstr ""
-
-#: pyanaconda/gui.py:1003
-msgid "Error Enabling Network"
+#: pyanaconda/installclass.py:69
+msgid "Install on System"
msgstr ""
-#: pyanaconda/gui.py:1058 pyanaconda/installinterfacebase.py:56
-#: pyanaconda/iw/task_gui.py:321
+#: pyanaconda/installinterfacebase.py:51
msgid "Error Setting Up Repository"
msgstr ""
-#: pyanaconda/gui.py:1059
-#, python-format
-msgid ""
-"The following error occurred while setting up the installation repository:\n"
-"\n"
-"%(e)s\n"
-"\n"
-"Please provide the correct information for installing %(productName)s."
-msgstr ""
-
-#: pyanaconda/gui.py:1094 pyanaconda/text.py:420
-msgid ""
-"You do not have an active network connection. This is required by some "
-"exception saving methods. Would you like to configure your network now?"
-msgstr ""
-
-#: pyanaconda/gui.py:1100 pyanaconda/rescue.py:256 pyanaconda/text.py:426
-#: pyanaconda/yuminstall.py:818 pyanaconda/yuminstall.py:1252
-#: pyanaconda/iw/task_gui.py:309
-msgid "No Network Available"
-msgstr ""
-
-#: pyanaconda/gui.py:1101 pyanaconda/text.py:427
-msgid "Remote exception saving methods will not work."
-msgstr ""
-
-#: pyanaconda/gui.py:1116 pyanaconda/gui.py:1153 pyanaconda/gui.py:1337
-#: pyanaconda/image.py:96 pyanaconda/installinterfacebase.py:208
-#: pyanaconda/livecd.py:168 pyanaconda/packages.py:95
-#: pyanaconda/packages.py:143 pyanaconda/upgrade.py:58
-#: pyanaconda/upgrade.py:105 pyanaconda/upgrade.py:203
-#: pyanaconda/yuminstall.py:262 pyanaconda/yuminstall.py:408
-#: pyanaconda/yuminstall.py:823 pyanaconda/yuminstall.py:1001
-#: pyanaconda/yuminstall.py:1006 pyanaconda/yuminstall.py:1043
-#: pyanaconda/yuminstall.py:1095 pyanaconda/yuminstall.py:1101
-#: pyanaconda/yuminstall.py:1257 pyanaconda/yuminstall.py:1272
-#: pyanaconda/yuminstall.py:1327 pyanaconda/yuminstall.py:1517
-#: pyanaconda/yuminstall.py:1550 pyanaconda/yuminstall.py:1573
-#: pyanaconda/storage/__init__.py:99 pyanaconda/storage/__init__.py:105
-#: pyanaconda/storage/__init__.py:107 pyanaconda/storage/__init__.py:199
-#: pyanaconda/storage/__init__.py:251 pyanaconda/storage/__init__.py:2318
-msgid "_Exit installer"
-msgstr ""
-
-#: pyanaconda/gui.py:1150 pyanaconda/text.py:402
-msgid "Error Parsing Kickstart Config"
-msgstr ""
-
-#: pyanaconda/gui.py:1178
-msgid "default:LTR"
-msgstr ""
-
-#: pyanaconda/gui.py:1246 pyanaconda/text.py:521
-msgid "Error!"
-msgstr ""
-
-#: pyanaconda/gui.py:1247 pyanaconda/text.py:522
-#, python-format
-msgid ""
-"An error occurred when attempting to load an installer interface component.\n"
-"\n"
-"className = %s"
-msgstr ""
-
-#: pyanaconda/gui.py:1252 pyanaconda/image.py:159 pyanaconda/image.py:177
-#: pyanaconda/packages.py:342 pyanaconda/storage/__init__.py:2136
-msgid "_Exit"
-msgstr ""
-
-#: pyanaconda/gui.py:1253 pyanaconda/image.py:159 pyanaconda/image.py:177
-#: pyanaconda/livecd.py:168 pyanaconda/yuminstall.py:909
-#: pyanaconda/yuminstall.py:1272 pyanaconda/yuminstall.py:1327
-#: pyanaconda/yuminstall.py:1550
-msgid "_Retry"
-msgstr ""
-
-#: pyanaconda/gui.py:1255 pyanaconda/storage/partitioning.py:386
-msgid "The system will now reboot."
-msgstr ""
-
-#: pyanaconda/gui.py:1256 pyanaconda/packages.py:346
-msgid "_Reboot"
-msgstr ""
-
-#: pyanaconda/gui.py:1258
-msgid "Exiting"
-msgstr ""
-
-#: pyanaconda/gui.py:1334 pyanaconda/installinterfacebase.py:63
-#: pyanaconda/livecd.py:126 pyanaconda/text.py:283 pyanaconda/upgrade.py:194
-msgid "Exit installer"
-msgstr ""
-
-#: pyanaconda/gui.py:1335
-msgid "Are you sure you wish to exit the installer?"
-msgstr ""
-
-#: pyanaconda/gui.py:1345
-#, python-format
-msgid "%s Installer"
-msgstr ""
-
-#: pyanaconda/gui.py:1351
-msgid "Unable to load title bar"
-msgstr ""
-
-#: pyanaconda/gui.py:1449
-msgid "Install Window"
-msgstr ""
-
-#: pyanaconda/image.py:88
-#, python-format
-msgid ""
-"The ISO image %s has a size which is not a multiple of 2048 bytes. This may "
-"mean it was corrupted on transfer to this computer.\n"
-"\n"
-"It is recommended that you exit and abort your installation, but you can "
-"choose to continue if you think this is in error."
-msgstr ""
-
-#: pyanaconda/image.py:97 pyanaconda/kickstart.py:1586
-#: pyanaconda/kickstart.py:1630 pyanaconda/packages.py:95
-#: pyanaconda/upgrade.py:58 pyanaconda/upgrade.py:105
-#: pyanaconda/yuminstall.py:1326 pyanaconda/yuminstall.py:1511
-#: pyanaconda/iw/partition_gui.py:1630 pyanaconda/storage/__init__.py:2319
-msgid "_Continue"
-msgstr ""
-
-#: pyanaconda/image.py:151
-msgid "Couldn't Mount ISO Source"
-msgstr ""
-
-#: pyanaconda/image.py:152
-#, python-format
-msgid ""
-"An error occurred mounting the source device %s. This may happen if your "
-"ISO images are located on an advanced storage device like LVM or RAID, or if "
-"there was a problem mounting a partition. Click exit to abort the "
-"installation."
-msgstr ""
-
-#: pyanaconda/image.py:168
-msgid "Missing ISO 9660 Image"
-msgstr ""
-
-#: pyanaconda/image.py:169
-msgid ""
-"The installer has tried to mount the installation image, but cannot find it "
-"on the hard drive.\n"
-"\n"
-"Please copy this image to the drive and click Retry. Click Exit to abort "
-"the installation."
-msgstr ""
-
-#: pyanaconda/image.py:230 pyanaconda/livecd.py:161
-#: pyanaconda/partIntfHelpers.py:239 pyanaconda/text.py:375
-#: pyanaconda/yuminstall.py:906 pyanaconda/yuminstall.py:993
-#: pyanaconda/yuminstall.py:998 pyanaconda/yuminstall.py:1271
-#: pyanaconda/yuminstall.py:1331 pyanaconda/yuminstall.py:1538
-#: pyanaconda/yuminstall.py:1560 pyanaconda/iw/advanced_storage.py:382
-#: pyanaconda/iw/advanced_storage.py:392 pyanaconda/iw/advanced_storage.py:451
-#: pyanaconda/iw/autopart_type.py:95 pyanaconda/iw/cleardisks_gui.py:44
-#: pyanaconda/iw/cleardisks_gui.py:54 pyanaconda/iw/filter_gui.py:443
-#: pyanaconda/iw/lvm_dialog_gui.py:802 pyanaconda/iw/osbootwidget.py:209
-#: pyanaconda/iw/osbootwidget.py:215 pyanaconda/iw/osbootwidget.py:224
-#: pyanaconda/iw/partition_dialog_gui.py:385
-#: pyanaconda/iw/raid_dialog_gui.py:219 pyanaconda/iw/raid_dialog_gui.py:345
-#: pyanaconda/iw/task_gui.py:51 pyanaconda/iw/task_gui.py:151
-#: pyanaconda/iw/task_gui.py:303 pyanaconda/iw/task_gui.py:466
-#: pyanaconda/storage/__init__.py:247 pyanaconda/storage/__init__.py:2115
-#: pyanaconda/storage/__init__.py:2137 pyanaconda/storage/__init__.py:2224
-#: pyanaconda/storage/zfcp.py:375
-msgid "Error"
-msgstr ""
-
-#: pyanaconda/image.py:231
-#, python-format
-msgid ""
-"An error occurred unmounting the disc. Please make sure you're not "
-"accessing %s from the shell on tty2 and then click OK to retry."
-msgstr ""
-
-#: pyanaconda/installclass.py:68
-msgid "Install on System"
-msgstr ""
-
-#: pyanaconda/installinterfacebase.py:57
+#: pyanaconda/installinterfacebase.py:52
#, python-format
msgid ""
"The following error occurred while setting up the installation repository:\n"
@@ -567,77 +234,11 @@ msgid ""
"Installation can not continue."
msgstr ""
-#: pyanaconda/installinterfacebase.py:75
-#, python-format
-msgid ""
-"Disk %(unusedRaidMems)s contains BIOS RAID metadata, but is not part of any "
-"recognized BIOS RAID sets. Ignoring disk %(unusedRaidMems)s."
-msgid_plural ""
-"Disks %(unusedRaidMems)s contain BIOS RAID metadata, but are not part of any "
-"recognized BIOS RAID sets. Ignoring disks %(unusedRaidMems)s."
-msgstr[0] ""
-msgstr[1] ""
-
-#: pyanaconda/installinterfacebase.py:103
-#: data/ui/reinitialize-dialog.glade.h:3
-msgid "Storage Device Warning"
-msgstr ""
-
-#: pyanaconda/installinterfacebase.py:152
-#, python-format
-msgid ""
-"Error processing LVM.\n"
-"There is inconsistent LVM data on %(msg)s. You can reinitialize all related "
-"PVs (%(pvs)s) which will erase the LVM metadata, or ignore which will "
-"preserve the contents. This action may also be applied to all other PVs "
-"with inconsistent metadata."
-msgstr ""
-
-#: pyanaconda/installinterfacebase.py:159
-#: pyanaconda/installinterfacebase.py:193
-msgid "_Ignore"
-msgstr ""
-
-#: pyanaconda/installinterfacebase.py:160
-msgid "Ignore _all"
-msgstr ""
-
-#: pyanaconda/installinterfacebase.py:161
-msgid "_Re-initialize"
-msgstr ""
-
-#: pyanaconda/installinterfacebase.py:162
-msgid "Re-ini_tialize all"
-msgstr ""
-
-#: pyanaconda/installinterfacebase.py:180
-msgid "Unformatted DASD Device Found"
-msgid_plural "Unformatted DASD Devices Found"
-msgstr[0] ""
-msgstr[1] ""
-
-#: pyanaconda/installinterfacebase.py:182
-#, python-format
-msgid ""
-"Format uninitialized DASD device?\n"
-"\n"
-"There is %d uninitialized DASD device on this system. To continue "
-"installation, the device must be formatted. Formatting will remove any data "
-"on this device."
-msgid_plural ""
-"Format uninitialized DASD devices?\n"
-"\n"
-"There are %d uninitialized DASD devices on this system. To continue "
-"installation, the devices must be formatted. Formatting will remove any "
-"data on these devices."
-msgstr[0] ""
-msgstr[1] ""
-
-#: pyanaconda/installinterfacebase.py:193 pyanaconda/iw/partition_gui.py:887
-msgid "_Format"
+#: pyanaconda/installinterfacebase.py:58
+msgid "Exit installer"
msgstr ""
-#: pyanaconda/installinterfacebase.py:201
+#: pyanaconda/installinterfacebase.py:62
#, python-format
msgid ""
"The installation was stopped due to what seems to be a problem with your "
@@ -648,44 +249,41 @@ msgid ""
" The installer will now terminate."
msgstr ""
-#: pyanaconda/installinterfacebase.py:204
+#: pyanaconda/installinterfacebase.py:65
msgid "Hardware Error Encountered"
msgstr ""
-#: pyanaconda/iutil.py:859
+#: pyanaconda/installinterfacebase.py:69 pyanaconda/yuminstall.py:264
+#: pyanaconda/yuminstall.py:410 pyanaconda/yuminstall.py:836
+#: pyanaconda/yuminstall.py:1014 pyanaconda/yuminstall.py:1019
+#: pyanaconda/yuminstall.py:1056 pyanaconda/yuminstall.py:1108
+#: pyanaconda/yuminstall.py:1114 pyanaconda/yuminstall.py:1270
+#: pyanaconda/yuminstall.py:1285 pyanaconda/yuminstall.py:1340
+#: pyanaconda/yuminstall.py:1530 pyanaconda/yuminstall.py:1563
+#: pyanaconda/yuminstall.py:1586
+msgid "_Exit installer"
+msgstr ""
+
+#: pyanaconda/iutil.py:848
msgid "Error determining boot device's disk name"
msgstr ""
-#: pyanaconda/iutil.py:882
+#: pyanaconda/iutil.py:871
msgid "the device containing /boot"
msgstr ""
-#: pyanaconda/iutil.py:884
+#: pyanaconda/iutil.py:873
#, python-format
msgid ""
"After shutdown, please perform a manual IPL from %s to continue installation."
msgstr ""
-#: pyanaconda/kickstart.py:126
-#, python-format
-msgid ""
-"There was an error running the kickstart script at line %(lineno)s. You may "
-"examine the output in %(msgs)s. This is a fatal error and installation will "
-"be aborted. Press the OK button to exit the installer."
-msgstr ""
-
-#: pyanaconda/kickstart.py:134 pyanaconda/kickstart.py:136
-msgid "Scriptlet Failure"
-msgstr ""
-
-#: pyanaconda/kickstart.py:152
+#: pyanaconda/kickstart.py:153
#, python-format
-msgid ""
-"Escrow certificate with url %s requires network to be enabled in loader or "
-"configured in kickstart file."
+msgid "Escrow certificate %s requires the network."
msgstr ""
-#: pyanaconda/kickstart.py:166
+#: pyanaconda/kickstart.py:161
#, python-format
msgid ""
"The following error was encountered while downloading the escrow "
@@ -694,436 +292,50 @@ msgid ""
"%s"
msgstr ""
-#: pyanaconda/kickstart.py:1530 pyanaconda/livecd.py:196
-msgid "Post-Installation"
-msgstr ""
-
-#: pyanaconda/kickstart.py:1531
-msgid "Running post-installation scripts"
-msgstr ""
-
-#: pyanaconda/kickstart.py:1546
+#: pyanaconda/kickstart.py:1502
msgid "Running pre-installation scripts"
msgstr ""
-#: pyanaconda/kickstart.py:1577
-msgid "Missing Package"
-msgstr ""
-
-#: pyanaconda/kickstart.py:1578
-#, python-format
-msgid ""
-"You have specified that the package '%s' should be installed. This package "
-"does not exist. Would you like to continue or abort this installation?"
-msgstr ""
-
-#: pyanaconda/kickstart.py:1584 pyanaconda/kickstart.py:1628
-msgid "_Abort"
-msgstr ""
-
-#: pyanaconda/kickstart.py:1585 pyanaconda/kickstart.py:1629
-msgid "_Ignore All"
-msgstr ""
-
-#: pyanaconda/kickstart.py:1620
-msgid "Missing Group"
-msgstr ""
-
-#: pyanaconda/kickstart.py:1621
-#, python-format
-msgid ""
-"You have specified that the group '%s' should be installed. This group does "
-"not exist. Would you like to continue or abort this installation?"
-msgstr ""
-
-#: pyanaconda/kickstart.py:1713
-#, python-format
-msgid ""
-"The kickstart configuration file is missing required information that "
-"anaconda cannot prompt for. Please add the following sections and try "
-"again:\n"
-"%s"
-msgstr ""
-
-#: pyanaconda/livecd.py:121
-msgid "Unable to find image"
-msgstr ""
-
-#: pyanaconda/livecd.py:122
-#, python-format
-msgid ""
-"The given location isn't a valid %s live CD to use as an installation source."
-msgstr ""
-
-#: pyanaconda/livecd.py:143
-msgid "Copying live image to hard drive."
-msgstr ""
-
-#: pyanaconda/livecd.py:162
-msgid ""
-"There was an error installing the live image to your hard drive. This could "
-"be due to bad media. Please verify your installation media.\n"
-"\n"
-"If you exit, your system will be left in an inconsistent state that will "
-"require reinstallation."
-msgstr ""
-
-#: pyanaconda/livecd.py:197
-msgid ""
-"Performing post-installation filesystem changes. This may take several "
-"minutes."
-msgstr ""
-
-#: pyanaconda/network.py:81
+#: pyanaconda/network.py:82
msgid "Hostname must be 255 or fewer characters in length."
msgstr ""
-#: pyanaconda/network.py:87
+#: pyanaconda/network.py:88
msgid ""
"Hostname must start with a valid character in the ranges 'a-z', 'A-Z', or "
"'0-9'"
msgstr ""
-#: pyanaconda/network.py:92
+#: pyanaconda/network.py:93
msgid ""
"Hostnames can only contain the characters 'a-z', 'A-Z', '0-9', '-', or '.'"
msgstr ""
-#: pyanaconda/network.py:136
+#: pyanaconda/network.py:129
msgid "IP address is missing."
msgstr ""
-#: pyanaconda/network.py:140
+#: pyanaconda/network.py:133
msgid ""
"IPv4 addresses must contain four numbers between 0 and 255, separated by "
"periods."
msgstr ""
-#: pyanaconda/network.py:143
+#: pyanaconda/network.py:136
#, python-format
msgid "'%s' is not a valid IPv6 address."
msgstr ""
-#: pyanaconda/network.py:145
+#: pyanaconda/network.py:138
#, python-format
msgid "'%s' is an invalid IP address."
msgstr ""
-#: pyanaconda/packages.py:91
-msgid ""
-"Filesystems have already been activated. You cannot go back past this "
-"point.\n"
-"\n"
-"Would you like to continue with the installation?"
-msgstr ""
-
-#: pyanaconda/packages.py:124
-msgid "Resizing Failed"
-msgstr ""
-
-#: pyanaconda/packages.py:125
-#, python-format
-msgid "There was an error encountered while resizing the device %s."
-msgstr ""
-
-#: pyanaconda/packages.py:133
-msgid "Migration Failed"
-msgstr ""
-
-#: pyanaconda/packages.py:134
-#, python-format
-msgid "An error was encountered while migrating filesystem on device %s."
-msgstr ""
-
-#: pyanaconda/packages.py:143
-msgid "_File Bug"
-msgstr ""
-
-#: pyanaconda/packages.py:326
-#, python-format
-msgid ""
-"Warning! This is pre-release software!\n"
-"\n"
-"Thank you for downloading this pre-release of %(productName)s.\n"
-"\n"
-"This is not a final release and is not intended for use on production "
-"systems. The purpose of this release is to collect feedback from testers, "
-"and it is not suitable for day to day usage.\n"
-"\n"
-"To report feedback, please visit:\n"
-"\n"
-" %(bugzillaUrl)s\n"
-"\n"
-"and file a report against '%(fileagainst)s'.\n"
-msgstr ""
-
-#: pyanaconda/packages.py:342
-msgid "_Install Anyway"
-msgstr ""
-
-#: pyanaconda/packages.py:345
-msgid "Your system will now be rebooted..."
-msgstr ""
-
-#: pyanaconda/packages.py:346 pyanaconda/upgrade.py:202
-#: pyanaconda/yuminstall.py:1006 pyanaconda/yuminstall.py:1101
-#: pyanaconda/yuminstall.py:1519 pyanaconda/yuminstall.py:1573
-#: pyanaconda/storage/__init__.py:107 data/ui/anaconda.glade.h:2
-msgid "_Back"
-msgstr ""
-
-#: pyanaconda/packages.py:347
-msgid "Warning! This is pre-release software!"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:47
-msgid "Please enter a volume group name."
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:51
-msgid "Volume Group Names must be less than 128 characters"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:54
-#, python-format
-msgid "Error - the volume group name %s is not valid."
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:59
-msgid ""
-"Error - the volume group name contains illegal characters or spaces. "
-"Acceptable characters are letters, digits, '.' or '_'."
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:69
-msgid "Please enter a logical volume name."
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:73
-msgid "Logical Volume Names must be less than 128 characters"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:77
-#, python-format
-msgid "Error - the logical volume name %s is not valid."
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:83
-msgid ""
-"Error - the logical volume name contains illegal characters or spaces. "
-"Acceptable characters are letters, digits, '.' or '_'."
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:111
-#, python-format
-msgid ""
-"The mount point %s is invalid. Mount points must start with '/' and cannot "
-"end with '/', and must contain printable characters and no spaces."
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:123 pyanaconda/partIntfHelpers.py:130
-msgid "Unable To Delete"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:124
-msgid "You must first select a partition to delete."
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:155 pyanaconda/partIntfHelpers.py:343
-#: pyanaconda/iw/lvm_dialog_gui.py:898
-msgid "Confirm Delete"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:156
-#, python-format
-msgid "You are about to delete all partitions on the device '%s'."
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:159 pyanaconda/partIntfHelpers.py:344
-#: pyanaconda/iw/lvm_dialog_gui.py:901 pyanaconda/iw/lvm_dialog_gui.py:1552
-#: pyanaconda/iw/osbootwidget.py:105 pyanaconda/iw/partition_gui.py:1843
-#: pyanaconda/iw/partition_gui.py:1855
-msgid "_Delete"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:206
-msgid "Notice"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:207
-#, python-format
-msgid ""
-"The following partitions were not deleted because they are in use:\n"
-"\n"
-"%s"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:222
-msgid "Format as Swap?"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:223
-#, python-format
-msgid ""
-"%s has a partition type of 0x82 (Linux swap) but does not appear to be "
-"formatted as a Linux swap partition.\n"
-"\n"
-"Would you like to format this partition as a swap partition?"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:238
-#, python-format
-msgid "You need to select at least one hard drive to install %s."
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:243
-msgid ""
-"You have chosen to use a pre-existing partition for this installation "
-"without formatting it. We recommend that you format this partition to make "
-"sure files from a previous operating system installation do not cause "
-"problems with this installation of Linux. However, if this partition "
-"contains files that you need to keep, such as home directories, then "
-"continue without formatting this partition."
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:251
-msgid "Format?"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:251 pyanaconda/iw/partition_gui.py:1628
-msgid "_Modify Partition"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:251
-msgid "Do _Not Format"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:259
-msgid "Error with Partitioning"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:260
-#, python-format
-msgid ""
-"The following critical errors exist with your requested partitioning scheme. "
-"These errors must be corrected prior to continuing with your install of "
-"%(productName)s.\n"
-"\n"
-"%(errorstr)s"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:276
-msgid "Partitioning Warning"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:277
-#, python-format
-msgid ""
-"The following warnings exist with your requested partition scheme.\n"
-"\n"
-"%s\n"
-"\n"
-"Would you like to continue with your requested partitioning scheme?"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:291
-msgid ""
-"The following pre-existing partitions have been selected to be formatted, "
-"destroying all data."
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:294
-msgid ""
-"Select 'Yes' to continue and format these partitions, or 'No' to go back and "
-"change these settings."
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:300
-msgid "Format Warning"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:327
-#, python-format
-msgid ""
-"You are about to delete the volume group \"%s\".\n"
-"\n"
-"ALL logical volumes in this volume group will be lost!"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:331
-#, python-format
-msgid "You are about to delete the logical volume \"%s\"."
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:334
-msgid "You are about to delete a RAID device."
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:336
-#, python-format
-msgid "You are about to delete the %s partition."
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:340
-#, python-format
-msgid "You are about to delete the %(type)s %(name)s"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:351
-msgid "Confirm Reset"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:352
-msgid ""
-"Are you sure you want to reset the partition table to its original state?"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:361
-msgid "No authentication"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:362
-msgid "CHAP pair"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:363
-msgid "CHAP pair and a reverse pair"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:364
-msgid "Use the credentials from the discovery step"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:471
-msgid "iSCSI Nodes"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:472
-msgid "No iSCSI nodes to log in"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:515
-msgid "iSCSI Error"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:520
-msgid "Discovery"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:520
-msgid "Login"
-msgstr ""
-
-#: pyanaconda/partIntfHelpers.py:521
-#, python-format
-msgid "iSCSI %s Error"
-msgstr ""
-
#: pyanaconda/platform.py:58
msgid "bootloader device"
msgstr ""
-#: pyanaconda/platform.py:59 data/ui/create-storage.glade.h:15
+#: pyanaconda/platform.py:59
msgid "RAID Device"
msgstr ""
@@ -1131,133 +343,130 @@ msgstr ""
msgid "First sector of boot partition"
msgstr ""
-#: pyanaconda/platform.py:157
+#: pyanaconda/platform.py:158 pyanaconda/platform.py:342
msgid "Master Boot Record"
msgstr ""
-#: pyanaconda/platform.py:196
+#: pyanaconda/platform.py:194
msgid "EFI System Partition"
msgstr ""
-#: pyanaconda/platform.py:225
+#: pyanaconda/platform.py:223
msgid "Apple EFI Boot Partition"
msgstr ""
-#: pyanaconda/platform.py:250
+#: pyanaconda/platform.py:248
msgid "PReP Boot Partition"
msgstr ""
-#: pyanaconda/platform.py:273
+#: pyanaconda/platform.py:271
msgid "Apple Bootstrap Partition"
msgstr ""
-#: pyanaconda/platform.py:302
+#: pyanaconda/platform.py:300
msgid "DASD"
msgstr ""
-#: pyanaconda/platform.py:303
+#: pyanaconda/platform.py:301
msgid "zFCP"
msgstr ""
-#: pyanaconda/rescue.py:215 pyanaconda/rescue.py:368 pyanaconda/rescue.py:453
+#: pyanaconda/rescue.py:179 pyanaconda/rescue.py:310 pyanaconda/rescue.py:395
#, python-format
msgid "Run %s to unmount the system when you are finished."
msgstr ""
-#: pyanaconda/rescue.py:218
+#: pyanaconda/rescue.py:182
msgid "When finished please exit from the shell and your system will reboot."
msgstr ""
-#: pyanaconda/rescue.py:232
+#: pyanaconda/rescue.py:196
msgid "Unable to find /bin/sh to execute! Not starting shell"
msgstr ""
-#: pyanaconda/rescue.py:250
+#: pyanaconda/rescue.py:216
msgid "Setup Networking"
msgstr ""
-#: pyanaconda/rescue.py:251
+#: pyanaconda/rescue.py:217
msgid "Do you want to start the network interfaces on this system?"
msgstr ""
-#: pyanaconda/rescue.py:252 pyanaconda/textw/constants_text.py:56
+#: pyanaconda/rescue.py:218
msgid "Yes"
msgstr ""
-#: pyanaconda/rescue.py:252 pyanaconda/rescue.py:254
-#: pyanaconda/textw/constants_text.py:60
+#: pyanaconda/rescue.py:218 pyanaconda/rescue.py:220
msgid "No"
msgstr ""
-#: pyanaconda/rescue.py:257
+#: pyanaconda/rescue.py:222 pyanaconda/yuminstall.py:831
+#: pyanaconda/yuminstall.py:1265
+msgid "No Network Available"
+msgstr ""
+
+#: pyanaconda/rescue.py:223
msgid ""
"Unable to activate a networking device. Networking will not be available in "
"rescue mode."
msgstr ""
-#: pyanaconda/rescue.py:293 pyanaconda/rescue.py:375 pyanaconda/rescue.py:385
-#: pyanaconda/rescue.py:456 pyanaconda/rescue.py:488
+#: pyanaconda/rescue.py:244 pyanaconda/rescue.py:317 pyanaconda/rescue.py:327
+#: pyanaconda/rescue.py:398 pyanaconda/rescue.py:429
msgid "Rescue"
msgstr ""
-#: pyanaconda/rescue.py:294
+#: pyanaconda/rescue.py:245
#, python-format
msgid ""
"The rescue environment will now attempt to find your Linux installation and "
"mount it under the directory %s. You can then make any changes required to "
"your system. If you want to proceed with this step choose 'Continue'. You "
"can also choose to mount your file systems read-only instead of read-write "
-"by choosing 'Read-Only'. If you need to activate SAN devices choose "
-"'Advanced'.\n"
+"by choosing 'Read-Only'. \n"
"\n"
"If for some reason this process fails you can choose 'Skip' and this step "
"will be skipped and you will go directly to a command shell.\n"
"\n"
msgstr ""
-#: pyanaconda/rescue.py:305 pyanaconda/iw/partition_gui.py:774
-#: pyanaconda/storage/__init__.py:159 pyanaconda/storage/devicetree.py:94
+#: pyanaconda/rescue.py:255 pyanaconda/storage/__init__.py:135
+#: pyanaconda/storage/devicetree.py:95
msgid "Continue"
msgstr ""
-#: pyanaconda/rescue.py:305 pyanaconda/rescue.py:314
+#: pyanaconda/rescue.py:255 pyanaconda/rescue.py:261
msgid "Read-Only"
msgstr ""
-#: pyanaconda/rescue.py:305 pyanaconda/rescue.py:307
-#: pyanaconda/storage/__init__.py:2136
+#: pyanaconda/rescue.py:255 pyanaconda/rescue.py:257
msgid "Skip"
msgstr ""
-#: pyanaconda/rescue.py:305 pyanaconda/rescue.py:310
-msgid "Advanced"
-msgstr ""
-
-#: pyanaconda/rescue.py:344
+#: pyanaconda/rescue.py:285
msgid "System to Rescue"
msgstr ""
-#: pyanaconda/rescue.py:345
+#: pyanaconda/rescue.py:286
msgid "Which device holds the root partition of your installation?"
msgstr ""
-#: pyanaconda/rescue.py:347 pyanaconda/rescue.py:351 pyanaconda/text.py:526
-#: pyanaconda/text.py:528
+#: pyanaconda/rescue.py:288 pyanaconda/rescue.py:292
msgid "Exit"
msgstr ""
-#: pyanaconda/rescue.py:365 pyanaconda/rescue.py:450
+#: pyanaconda/rescue.py:307 pyanaconda/rescue.py:392
msgid "The system will reboot automatically when you exit from the shell."
msgstr ""
-#: pyanaconda/rescue.py:376
+#: pyanaconda/rescue.py:318
#, python-format
msgid ""
"Your system had dirty file systems which you chose not to mount. Press "
"return to get a shell from which you can fsck and mount your partitions. %s"
msgstr ""
-#: pyanaconda/rescue.py:386
+#: pyanaconda/rescue.py:328
#, python-format
msgid ""
"Your system has been mounted under %(rootPath)s.\n"
@@ -1270,7 +479,7 @@ msgid ""
"%(msg)s"
msgstr ""
-#: pyanaconda/rescue.py:457
+#: pyanaconda/rescue.py:399
#, python-format
msgid ""
"An error occurred trying to mount some or all of your system. Some of it may "
@@ -1279,250 +488,76 @@ msgid ""
"Press <return> to get a shell."
msgstr ""
-#: pyanaconda/rescue.py:466
+#: pyanaconda/rescue.py:407
msgid "You don't have any Linux partitions. Rebooting.\n"
msgstr ""
-#: pyanaconda/rescue.py:470
+#: pyanaconda/rescue.py:411
msgid " The system will reboot automatically when you exit from the shell."
msgstr ""
-#: pyanaconda/rescue.py:474
+#: pyanaconda/rescue.py:415
msgid "Rescue Mode"
msgstr ""
-#: pyanaconda/rescue.py:475
+#: pyanaconda/rescue.py:416
#, python-format
msgid "You don't have any Linux partitions. Press return to get a shell.%s"
msgstr ""
-#: pyanaconda/rescue.py:487
+#: pyanaconda/rescue.py:428
#, python-format
msgid "Your system is mounted under the %s directory."
msgstr ""
-#: pyanaconda/text.py:151
-msgid "Passphrase for encrypted device"
-msgstr ""
-
-#: pyanaconda/text.py:164
-msgid "Also add this passphrase to all existing encrypted devices"
-msgstr ""
-
-#: pyanaconda/text.py:195
-#, python-format
-msgid "The passphrase must be at least %d character long."
-msgid_plural "The passphrase must be at least %d characters long."
-msgstr[0] ""
-msgstr[1] ""
-
-#: pyanaconda/text.py:229 data/ui/lukspassphrase.glade.h:6
-msgid "Passphrase"
-msgstr ""
-
-#: pyanaconda/text.py:265
-msgid "Yes, discard any data"
-msgstr ""
-
-#: pyanaconda/text.py:266
-msgid "No, keep any data"
-msgstr ""
-
-#: pyanaconda/text.py:376
-msgid "Repository editing is not available in text mode."
-msgstr ""
-
-#: pyanaconda/text.py:445
-#, python-format
-msgid "Welcome to %(productName)s for %(productArch)s"
-msgstr ""
-
-#: pyanaconda/text.py:447
-#, python-format
-msgid "Welcome to %s"
-msgstr ""
-
-#: pyanaconda/text.py:449
-msgid ""
-" <Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next "
-"screen"
-msgstr ""
-
-#: pyanaconda/text.py:526 pyanaconda/textw/constants_text.py:68
-msgid "Retry"
-msgstr ""
-
-#: pyanaconda/text.py:542
-msgid "Cancelled"
-msgstr ""
-
-#: pyanaconda/text.py:543
-msgid "I can't go to the previous step from here. You will have to try again."
-msgstr ""
-
-#: pyanaconda/upgrade.py:51
-msgid "Proceed with upgrade?"
-msgstr ""
-
-#: pyanaconda/upgrade.py:52
-msgid ""
-"The file systems of the Linux installation you have chosen to upgrade have "
-"already been mounted. You cannot go back past this point. \n"
-"\n"
-msgstr ""
-
-#: pyanaconda/upgrade.py:56
-msgid "Would you like to continue with the upgrade?"
-msgstr ""
-
-#: pyanaconda/upgrade.py:87
-#, python-format
-msgid "Unknown release on %s -"
-msgstr ""
-
-#: pyanaconda/upgrade.py:92
-msgid " Product mismatch."
-msgstr ""
-
-#: pyanaconda/upgrade.py:94
-msgid " Version mismatch."
-msgstr ""
-
-#: pyanaconda/upgrade.py:96
-msgid " Architecture mismatch."
-msgstr ""
-
-#: pyanaconda/upgrade.py:98
-msgid "Cannot Upgrade"
-msgstr ""
-
-#: pyanaconda/upgrade.py:99
-#, python-format
-msgid ""
-"Your current installation cannot be upgraded. This is likely due to it being "
-"too old. Only the previous two releases may be upgraded. To upgrade older "
-"releases you must first upgrade through all intermediate releases.\n"
-"\n"
-"%s"
-msgstr ""
-
-#: pyanaconda/upgrade.py:181
-msgid "Mount failed"
-msgstr ""
-
-#: pyanaconda/upgrade.py:182
-#, python-format
-msgid ""
-"The following error occurred when mounting the file systems listed in /etc/"
-"fstab. Please fix this problem and try to upgrade again.\n"
-"%s"
-msgstr ""
-
-#: pyanaconda/upgrade.py:190 pyanaconda/upgrade.py:197
-msgid "Upgrade root not found"
-msgstr ""
-
-#: pyanaconda/upgrade.py:191
-msgid "The root for the previously installed system was not found."
-msgstr ""
-
-#: pyanaconda/upgrade.py:198
-msgid ""
-"The root for the previously installed system was not found. You can exit "
-"installer or backtrack to choose installation instead of upgrade."
-msgstr ""
-
-#: pyanaconda/upgrade.py:221
-msgid ""
-"The following files are absolute symbolic links, which we do not support "
-"during an upgrade. Please change them to relative symbolic links and restart "
-"the upgrade.\n"
-"\n"
-msgstr ""
-
-#: pyanaconda/upgrade.py:227
-msgid "Absolute Symlinks"
-msgstr ""
-
-#: pyanaconda/upgrade.py:238
-msgid ""
-"The following are directories which should instead be symbolic links, which "
-"will cause problems with the upgrade. Please return them to their original "
-"state as symbolic links and restart the upgrade.\n"
-"\n"
-msgstr ""
-
-#: pyanaconda/upgrade.py:244
-msgid "Invalid Directories"
-msgstr ""
-
-#: pyanaconda/upgrade.py:278
-msgid "Upgrade /usr symlinks"
-msgstr ""
-
-#: pyanaconda/upgrade.py:279
-msgid "Running /usr merge script"
-msgstr ""
-
-#: pyanaconda/upgrade.py:288
-msgid "/usr merge failed"
-msgstr ""
-
-#: pyanaconda/upgrade.py:289
-msgid ""
-"The /usr merge script failed. This is required for Fedora 17 to work. The "
-"upgrade cannot continue.\n"
-"\n"
-msgstr ""
-
-#: pyanaconda/vnc.py:125
+#: pyanaconda/vnc.py:124
#, python-format
msgid "%(productName)s %(productVersion)s installation on host %(name)s"
msgstr ""
-#: pyanaconda/vnc.py:131
+#: pyanaconda/vnc.py:130
#, python-format
msgid "%(productName)s %(productVersion)s installation"
msgstr ""
-#: pyanaconda/vnc.py:148
+#: pyanaconda/vnc.py:147
#, python-format
msgid "Attempting to connect to vnc client on host %s..."
msgstr ""
-#: pyanaconda/vnc.py:162
+#: pyanaconda/vnc.py:161
msgid "Connected!"
msgstr ""
-#: pyanaconda/vnc.py:165
+#: pyanaconda/vnc.py:164
msgid "Will try to connect again in 15 seconds..."
msgstr ""
-#: pyanaconda/vnc.py:171
+#: pyanaconda/vnc.py:170
#, python-format
msgid "Giving up attempting to connect after %d try!\n"
msgid_plural "Giving up attempting to connect after %d tries!\n"
msgstr[0] ""
msgstr[1] ""
-#: pyanaconda/vnc.py:182
+#: pyanaconda/vnc.py:181
#, python-format
msgid "Please manually connect your vnc client to %s to begin the install."
msgstr ""
-#: pyanaconda/vnc.py:184
+#: pyanaconda/vnc.py:183
msgid "Please manually connect your vnc client to begin the install."
msgstr ""
-#: pyanaconda/vnc.py:187
+#: pyanaconda/vnc.py:186
msgid "Starting VNC..."
msgstr ""
-#: pyanaconda/vnc.py:224
+#: pyanaconda/vnc.py:227
msgid "The VNC server is now running."
msgstr ""
-#: pyanaconda/vnc.py:228
+#: pyanaconda/vnc.py:231
msgid ""
"\n"
"\n"
@@ -1533,7 +568,7 @@ msgid ""
"\n"
msgstr ""
-#: pyanaconda/vnc.py:233
+#: pyanaconda/vnc.py:236
msgid ""
"\n"
"\n"
@@ -1543,7 +578,7 @@ msgid ""
"\n"
msgstr ""
-#: pyanaconda/vnc.py:237
+#: pyanaconda/vnc.py:240
msgid ""
"\n"
"\n"
@@ -1551,7 +586,7 @@ msgid ""
"\n"
msgstr ""
-#: pyanaconda/vnc.py:239
+#: pyanaconda/vnc.py:242
msgid ""
"\n"
"\n"
@@ -1559,169 +594,175 @@ msgid ""
"\n"
msgstr ""
-#: pyanaconda/vnc.py:261 pyanaconda/vnc.py:354
+#: pyanaconda/vnc.py:264 pyanaconda/vnc.py:357
msgid "VNC Configuration"
msgstr ""
-#: pyanaconda/vnc.py:264 pyanaconda/vnc.py:358
+#: pyanaconda/vnc.py:267 pyanaconda/vnc.py:361
msgid "No password"
msgstr ""
-#: pyanaconda/vnc.py:266 pyanaconda/vnc.py:361
+#: pyanaconda/vnc.py:269 pyanaconda/vnc.py:364
msgid ""
"A password will prevent unauthorized listeners connecting and monitoring "
"your installation progress. Please enter a password to be used for the "
"installation"
msgstr ""
-#: pyanaconda/vnc.py:274 pyanaconda/vnc.py:369
-#: pyanaconda/textw/userauth_text.py:47
+#: pyanaconda/vnc.py:277 pyanaconda/vnc.py:372
msgid "Password:"
msgstr ""
-#: pyanaconda/vnc.py:275 pyanaconda/vnc.py:370
-#: pyanaconda/textw/userauth_text.py:49
+#: pyanaconda/vnc.py:278 pyanaconda/vnc.py:373
msgid "Password (confirm):"
msgstr ""
-#: pyanaconda/vnc.py:293 pyanaconda/vnc.py:392
-#: pyanaconda/textw/userauth_text.py:70
+#: pyanaconda/vnc.py:296 pyanaconda/vnc.py:395
msgid "Password Mismatch"
msgstr ""
-#: pyanaconda/vnc.py:294 pyanaconda/vnc.py:393
-#: pyanaconda/textw/userauth_text.py:71
+#: pyanaconda/vnc.py:297 pyanaconda/vnc.py:396
msgid "The passwords you entered were different. Please try again."
msgstr ""
-#: pyanaconda/vnc.py:299 pyanaconda/vnc.py:398
-#: pyanaconda/textw/userauth_text.py:66
+#: pyanaconda/vnc.py:302 pyanaconda/vnc.py:401
msgid "Password Length"
msgstr ""
-#: pyanaconda/vnc.py:300 pyanaconda/vnc.py:399
+#: pyanaconda/vnc.py:303 pyanaconda/vnc.py:402
msgid "The password must be at least six characters long."
msgstr ""
-#: pyanaconda/vnc.py:322
+#: pyanaconda/vnc.py:325
msgid "Unable to Start X"
msgstr ""
-#: pyanaconda/vnc.py:324
+#: pyanaconda/vnc.py:327
msgid ""
"X was unable to start on your machine. Would you like to start VNC to "
"connect to this computer from another computer and perform a graphical "
"install or continue with a text mode install?"
msgstr ""
-#: pyanaconda/vnc.py:343
+#: pyanaconda/vnc.py:346
msgid "Start VNC"
msgstr ""
-#: pyanaconda/vnc.py:344 pyanaconda/vnc.py:346
+#: pyanaconda/vnc.py:347 pyanaconda/vnc.py:349
msgid "Use text mode"
msgstr ""
-#: pyanaconda/yuminstall.py:86
+#: pyanaconda/yuminstall.py:88
#, python-format
msgid "%s MB"
msgstr ""
-#: pyanaconda/yuminstall.py:89
+#: pyanaconda/yuminstall.py:91
#, python-format
msgid "%s KB"
msgstr ""
-#: pyanaconda/yuminstall.py:91
+#: pyanaconda/yuminstall.py:93
#, python-format
msgid "%s Byte"
msgid_plural "%s Bytes"
msgstr[0] ""
msgstr[1] ""
-#: pyanaconda/yuminstall.py:133
+#: pyanaconda/yuminstall.py:135 pyanaconda/ui/gui/hubs/progress.glade:79
msgid "Preparing to install"
msgstr ""
-#: pyanaconda/yuminstall.py:134
+#: pyanaconda/yuminstall.py:136 pyanaconda/packaging/yumpayload.py:1119
msgid "Preparing transaction from installation source"
msgstr ""
-#: pyanaconda/yuminstall.py:169
+#: pyanaconda/yuminstall.py:171
#, python-format
msgid "<b>Upgrading %(pkgStr)s</b> (%(size)s)\n"
msgstr ""
-#: pyanaconda/yuminstall.py:172
+#: pyanaconda/yuminstall.py:174
#, python-format
msgid "<b>Installing %(pkgStr)s</b> (%(size)s)\n"
msgstr ""
-#: pyanaconda/yuminstall.py:217
+#: pyanaconda/yuminstall.py:219
#, python-format
msgid "Packages completed: %(donepkgs)d of %(numpkgs)d"
msgid_plural "Packages completed: %(donepkgs)d of %(numpkgs)d"
msgstr[0] ""
msgstr[1] ""
-#: pyanaconda/yuminstall.py:231
+#: pyanaconda/yuminstall.py:233
#, python-format
msgid "<b>Cleaning up %s</b>"
msgstr ""
-#: pyanaconda/yuminstall.py:251
+#: pyanaconda/yuminstall.py:253
msgid "cpio"
msgstr ""
-#: pyanaconda/yuminstall.py:253
+#: pyanaconda/yuminstall.py:255
msgid "unpack"
msgstr ""
-#: pyanaconda/yuminstall.py:255
+#: pyanaconda/yuminstall.py:257
msgid "script"
msgstr ""
-#: pyanaconda/yuminstall.py:256
+#: pyanaconda/yuminstall.py:258
msgid "Error Installing Package"
msgstr ""
-#: pyanaconda/yuminstall.py:257
+#: pyanaconda/yuminstall.py:259
#, python-format
msgid ""
"A %s error occurred when installing the %s package. This could indicate "
"errors when reading the installation media. Installation cannot continue."
msgstr ""
-#: pyanaconda/yuminstall.py:405
+#: pyanaconda/yuminstall.py:407
msgid "Wrong Disc"
msgstr ""
-#: pyanaconda/yuminstall.py:406
+#: pyanaconda/yuminstall.py:408
#, python-format
msgid "That's not the correct %s disc."
msgstr ""
-#: pyanaconda/yuminstall.py:552
+#: pyanaconda/yuminstall.py:565
#, python-format
msgid "Repository %r is missing name in configuration, using id"
msgstr ""
-#: pyanaconda/yuminstall.py:819 pyanaconda/yuminstall.py:1253
-#: pyanaconda/iw/task_gui.py:310
+#: pyanaconda/yuminstall.py:832 pyanaconda/yuminstall.py:1266
msgid ""
"Some of your software repositories require networking, but there was an "
"error enabling the network on your system."
msgstr ""
-#: pyanaconda/yuminstall.py:907 pyanaconda/yuminstall.py:909
+#: pyanaconda/yuminstall.py:920 pyanaconda/yuminstall.py:922
msgid "Re_boot"
msgstr ""
-#: pyanaconda/yuminstall.py:907
+#: pyanaconda/yuminstall.py:920
msgid "_Eject"
msgstr ""
-#: pyanaconda/yuminstall.py:913
+#: pyanaconda/yuminstall.py:922 pyanaconda/yuminstall.py:1285
+#: pyanaconda/yuminstall.py:1340 pyanaconda/yuminstall.py:1563
+msgid "_Retry"
+msgstr ""
+
+#: pyanaconda/yuminstall.py:925 pyanaconda/yuminstall.py:1012
+#: pyanaconda/yuminstall.py:1017 pyanaconda/yuminstall.py:1290
+#: pyanaconda/yuminstall.py:1350 pyanaconda/yuminstall.py:1557
+#: pyanaconda/yuminstall.py:1579 pyanaconda/storage/zfcp.py:375
+msgid "Error"
+msgstr ""
+
+#: pyanaconda/yuminstall.py:926
#, python-format
msgid ""
"The file %s cannot be opened. This is due to a missing file, a corrupt "
@@ -1732,96 +773,106 @@ msgid ""
"\n"
msgstr ""
-#: pyanaconda/yuminstall.py:960
+#: pyanaconda/yuminstall.py:973
msgid "Retrying"
msgstr ""
-#: pyanaconda/yuminstall.py:960
+#: pyanaconda/yuminstall.py:973
msgid "Retrying download."
msgstr ""
-#: pyanaconda/yuminstall.py:995
+#: pyanaconda/yuminstall.py:1008
#, python-format
msgid ""
"There was an error running your transaction for the following reason: %s\n"
msgstr ""
-#: pyanaconda/yuminstall.py:1039
+#: pyanaconda/yuminstall.py:1019 pyanaconda/yuminstall.py:1114
+#: pyanaconda/yuminstall.py:1532 pyanaconda/yuminstall.py:1586
+msgid "_Back"
+msgstr ""
+
+#: pyanaconda/yuminstall.py:1052
#, python-format
msgid ""
"There was an error running your transaction for the following reason: %s.\n"
msgstr ""
-#: pyanaconda/yuminstall.py:1041 pyanaconda/yuminstall.py:1093
-#: pyanaconda/yuminstall.py:1098
+#: pyanaconda/yuminstall.py:1054 pyanaconda/yuminstall.py:1106
+#: pyanaconda/yuminstall.py:1111
msgid "Error Running Transaction"
msgstr ""
-#: pyanaconda/yuminstall.py:1047 pyanaconda/yuminstall.py:1048
+#: pyanaconda/yuminstall.py:1060 pyanaconda/yuminstall.py:1061
msgid "file conflicts"
msgstr ""
-#: pyanaconda/yuminstall.py:1049
+#: pyanaconda/yuminstall.py:1062
msgid "older package(s)"
msgstr ""
-#: pyanaconda/yuminstall.py:1050
+#: pyanaconda/yuminstall.py:1063
msgid "insufficient disk space"
msgstr ""
-#: pyanaconda/yuminstall.py:1051
+#: pyanaconda/yuminstall.py:1064
msgid "insufficient disk inodes"
msgstr ""
-#: pyanaconda/yuminstall.py:1052
+#: pyanaconda/yuminstall.py:1065
msgid "package conflicts"
msgstr ""
-#: pyanaconda/yuminstall.py:1053
+#: pyanaconda/yuminstall.py:1066
msgid "package already installed"
msgstr ""
-#: pyanaconda/yuminstall.py:1054
+#: pyanaconda/yuminstall.py:1067
msgid "required package"
msgstr ""
-#: pyanaconda/yuminstall.py:1055
+#: pyanaconda/yuminstall.py:1068
msgid "package for incorrect arch"
msgstr ""
-#: pyanaconda/yuminstall.py:1056
+#: pyanaconda/yuminstall.py:1069
msgid "package for incorrect os"
msgstr ""
-#: pyanaconda/yuminstall.py:1070
+#: pyanaconda/yuminstall.py:1083
msgid "You need more space on the following file systems:\n"
msgstr ""
-#: pyanaconda/yuminstall.py:1083
+#: pyanaconda/yuminstall.py:1096
#, python-format
msgid ""
"There were file conflicts when checking the packages to be installed:\n"
"%s\n"
msgstr ""
-#: pyanaconda/yuminstall.py:1086
+#: pyanaconda/yuminstall.py:1099
#, python-format
msgid ""
"There was an error running your transaction for the following reason(s): "
"%s.\n"
msgstr ""
-#: pyanaconda/yuminstall.py:1278
+#: pyanaconda/yuminstall.py:1291
msgid ""
"Unable to read group information from repositories. This is a problem with "
"the generation of your install tree."
msgstr ""
-#: pyanaconda/yuminstall.py:1327 pyanaconda/textw/constants_text.py:64
+#: pyanaconda/yuminstall.py:1340
msgid "Edit"
msgstr ""
-#: pyanaconda/yuminstall.py:1338 pyanaconda/yuminstall.py:1545
+#: pyanaconda/yuminstall.py:1345 pyanaconda/yuminstall.py:1530
+#: pyanaconda/ui/gui/spokes/storage.glade:45
+msgid "_Continue"
+msgstr ""
+
+#: pyanaconda/yuminstall.py:1351 pyanaconda/yuminstall.py:1558
#, python-format
msgid ""
"Unable to read package metadata. This may be due to a missing repodata "
@@ -1831,7 +882,11 @@ msgid ""
"%s"
msgstr ""
-#: pyanaconda/yuminstall.py:1522
+#: pyanaconda/yuminstall.py:1534
+msgid "Warning"
+msgstr ""
+
+#: pyanaconda/yuminstall.py:1535
msgid ""
"Some of the packages you have selected for install are missing "
"dependencies. You can exit the installation, go back and change your "
@@ -1840,7 +895,7 @@ msgid ""
"missing components."
msgstr ""
-#: pyanaconda/yuminstall.py:1567
+#: pyanaconda/yuminstall.py:1580
#, python-format
msgid ""
"Your selected packages require %d MB of free space for installation, but you "
@@ -1848,56 +903,56 @@ msgid ""
"installer."
msgstr ""
-#: pyanaconda/yuminstall.py:1653
+#: pyanaconda/yuminstall.py:1665
msgid "Post Upgrade"
msgstr ""
-#: pyanaconda/yuminstall.py:1654
+#: pyanaconda/yuminstall.py:1666
msgid "Performing post-upgrade configuration"
msgstr ""
-#: pyanaconda/yuminstall.py:1656
+#: pyanaconda/yuminstall.py:1668
msgid "Post Installation"
msgstr ""
-#: pyanaconda/yuminstall.py:1657
+#: pyanaconda/yuminstall.py:1669
msgid "Performing post-installation configuration"
msgstr ""
-#: pyanaconda/yuminstall.py:1900
+#: pyanaconda/yuminstall.py:1828
msgid "Installation Starting"
msgstr ""
-#: pyanaconda/yuminstall.py:1901
+#: pyanaconda/yuminstall.py:1829
msgid "Starting installation process"
msgstr ""
-#: pyanaconda/yuminstall.py:1939
+#: pyanaconda/yuminstall.py:1867
msgid "Dependency Check"
msgstr ""
-#: pyanaconda/yuminstall.py:1940
+#: pyanaconda/yuminstall.py:1868
msgid "Checking dependencies in packages selected for installation"
msgstr ""
-#: pyanaconda/yuminstall.py:1996 pyanaconda/yuminstall.py:2012
+#: pyanaconda/yuminstall.py:1924 pyanaconda/yuminstall.py:1940
msgid "Retrieving installation information."
msgstr ""
-#: pyanaconda/yuminstall.py:1998 pyanaconda/yuminstall.py:2014
+#: pyanaconda/yuminstall.py:1926 pyanaconda/yuminstall.py:1942
#, python-format
msgid "Retrieving installation information for %s."
msgstr ""
-#: pyanaconda/yuminstall.py:1999 pyanaconda/yuminstall.py:2015
+#: pyanaconda/yuminstall.py:1927 pyanaconda/yuminstall.py:1943
msgid "Installation Progress"
msgstr ""
-#: pyanaconda/installclasses/fedora.py:41
+#: pyanaconda/installclasses/fedora.py:40
msgid "_Fedora"
msgstr ""
-#: pyanaconda/installclasses/fedora.py:42
+#: pyanaconda/installclasses/fedora.py:41
#, python-format
msgid ""
"The default installation of %s includes a set of software applicable for "
@@ -1905,1609 +960,200 @@ msgid ""
"software now."
msgstr ""
-#: pyanaconda/installclasses/fedora.py:51
+#: pyanaconda/installclasses/fedora.py:50
msgid "Graphical Desktop"
msgstr ""
-#: pyanaconda/installclasses/fedora.py:56
+#: pyanaconda/installclasses/fedora.py:55
msgid "Software Development"
msgstr ""
-#: pyanaconda/installclasses/fedora.py:62
+#: pyanaconda/installclasses/fedora.py:61
msgid "Web Server"
msgstr ""
-#: pyanaconda/installclasses/fedora.py:66 pyanaconda/installclasses/rhel.py:44
+#: pyanaconda/installclasses/fedora.py:65 pyanaconda/installclasses/rhel.py:43
msgid "Minimal"
msgstr ""
-#: pyanaconda/installclasses/rhel.py:33
+#: pyanaconda/installclasses/rhel.py:32
msgid "Red Hat Enterprise Linux"
msgstr ""
-#: pyanaconda/installclasses/rhel.py:34
+#: pyanaconda/installclasses/rhel.py:33
#, python-format
msgid ""
"The default installation of %s is a minimum install. You can optionally "
"select a different set of software now."
msgstr ""
-#: pyanaconda/iw/GroupSelector.py:147
-#, python-format
-msgid "Packages in %s"
-msgstr ""
-
-#: pyanaconda/iw/GroupSelector.py:433
-#, python-format
-msgid "Optional packages selected: %(inst)d of %(cnt)d"
+#: pyanaconda/packaging/yumpayload.py:968
+msgid "Starting package installation process"
msgstr ""
-#: pyanaconda/iw/GroupSelector.py:435
-#, python-format
-msgid "<i>%s</i>"
+#: pyanaconda/packaging/yumpayload.py:1139
+msgid "Upgrading"
msgstr ""
-#: pyanaconda/iw/GroupSelector.py:495
-msgid "Uncategorized"
+#: pyanaconda/packaging/yumpayload.py:1141
+msgid "Installing"
msgstr ""
-#: pyanaconda/iw/account_gui.py:52
-msgid "Root _Password:"
+#: pyanaconda/packaging/yumpayload.py:1198
+msgid "Performing post-install setup tasks"
msgstr ""
-#: pyanaconda/iw/account_gui.py:54
-msgid "_Confirm:"
-msgstr ""
-
-#: pyanaconda/iw/account_gui.py:92
-msgid "Caps Lock is on."
-msgstr ""
-
-#: pyanaconda/iw/account_gui.py:102 pyanaconda/iw/account_gui.py:110
-#: pyanaconda/iw/account_gui.py:117 pyanaconda/iw/account_gui.py:139
-#: pyanaconda/textw/userauth_text.py:74
-msgid "Error with Password"
-msgstr ""
-
-#: pyanaconda/iw/account_gui.py:103
-msgid ""
-"You must enter your root password and confirm it by typing it a second time "
-"to continue."
-msgstr ""
-
-#: pyanaconda/iw/account_gui.py:111
-msgid "The passwords you entered were different. Please try again."
-msgstr ""
-
-#: pyanaconda/iw/account_gui.py:118
-msgid "The root password must be at least six characters long."
-msgstr ""
-
-#: pyanaconda/iw/account_gui.py:128 pyanaconda/textw/userauth_text.py:84
-msgid "Weak Password"
-msgstr ""
-
-#: pyanaconda/iw/account_gui.py:129
-#, python-format
-msgid "You have provided a weak password: %s"
-msgstr ""
-
-#: pyanaconda/iw/account_gui.py:132
-msgid "_Use Anyway"
-msgstr ""
-
-#: pyanaconda/iw/account_gui.py:140 pyanaconda/textw/userauth_text.py:75
-msgid ""
-"Requested password contains non-ASCII characters, which are not allowed."
-msgstr ""
-
-#: pyanaconda/iw/advanced_storage.py:259
-msgid "Interface"
-msgstr ""
-
-#: pyanaconda/iw/advanced_storage.py:383
-msgid "You must select a NIC to use."
-msgstr ""
-
-#: pyanaconda/iw/autopart_type.py:96
-msgid ""
-"No partitions are available to resize. Only physical partitions with "
-"specific filesystems can be resized."
-msgstr ""
-
-#: pyanaconda/iw/autopart_type.py:121
-msgid "Resize FileSystem Error"
-msgstr ""
-
-#: pyanaconda/iw/autopart_type.py:122
-#, python-format
-msgid "%(device)s: %(msg)s"
-msgstr ""
-
-#: pyanaconda/iw/autopart_type.py:131
-msgid "Resize Device Error"
-msgstr ""
-
-#: pyanaconda/iw/autopart_type.py:132
-#, python-format
-msgid "%(name)s: %(msg)s"
-msgstr ""
-
-#: pyanaconda/iw/autopart_type.py:269
-msgid "Use _All Space"
-msgstr ""
-
-#: pyanaconda/iw/autopart_type.py:271
-msgid ""
-"Removes all partitions on the selected device(s). This includes partitions "
-"created by other operating systems.\n"
-"\n"
-"<b>Tip:</b> This option will remove data from the selected device(s). Make "
-"sure you have backups."
-msgstr ""
-
-#: pyanaconda/iw/autopart_type.py:277
-msgid "Replace Existing _Linux System(s)"
-msgstr ""
-
-#: pyanaconda/iw/autopart_type.py:279
-msgid ""
-"Removes all Linux partitions on the selected device(s). This does not remove "
-"other partitions you may have on your storage device(s) (such as VFAT or "
-"FAT32).\n"
-"\n"
-"<b>Tip:</b> This option will remove data from the selected device(s). Make "
-"sure you have backups."
-msgstr ""
-
-#: pyanaconda/iw/autopart_type.py:287
-msgid "_Shrink Current System"
-msgstr ""
-
-#: pyanaconda/iw/autopart_type.py:289
-msgid ""
-"Shrinks existing partitions to create free space for the default layout."
-msgstr ""
-
-#: pyanaconda/iw/autopart_type.py:291
-msgid "Use _Free Space"
-msgstr ""
-
-#: pyanaconda/iw/autopart_type.py:293
-msgid ""
-"Retains your current data and partitions and uses only the unpartitioned "
-"space on the selected device(s), assuming you have enough free space "
-"available."
-msgstr ""
-
-#: pyanaconda/iw/autopart_type.py:297
-msgid "Create _Custom Layout"
-msgstr ""
-
-#: pyanaconda/iw/autopart_type.py:299
-msgid ""
-"Manually create your own custom layout on the selected device(s) using our "
-"partitioning tool."
-msgstr ""
-
-#: pyanaconda/iw/blpasswidget.py:43
-msgid "_Use a boot loader password"
-msgstr ""
-
-#: pyanaconda/iw/blpasswidget.py:44
-msgid ""
-"A boot loader password prevents users from changing kernel options, "
-"increasing security."
-msgstr ""
-
-#: pyanaconda/iw/blpasswidget.py:71
-msgid "Change _password"
-msgstr ""
-
-#: pyanaconda/iw/blpasswidget.py:94
-msgid "Enter Boot Loader Password"
-msgstr ""
-
-#: pyanaconda/iw/blpasswidget.py:100
-msgid ""
-"Enter a boot loader password and then confirm it. (Note that your BIOS "
-"keymap may be different than the actual keymap you are used to.)"
-msgstr ""
-
-#: pyanaconda/iw/blpasswidget.py:107
-msgid "_Password:"
-msgstr ""
-
-#: pyanaconda/iw/blpasswidget.py:113
-msgid "Con_firm:"
-msgstr ""
-
-#: pyanaconda/iw/blpasswidget.py:135
-msgid "Passwords don't match"
-msgstr ""
-
-#: pyanaconda/iw/blpasswidget.py:136
-msgid "Passwords do not match"
-msgstr ""
-
-#: pyanaconda/iw/blpasswidget.py:145
-msgid ""
-"Your boot loader password is shorter than six characters. We recommend a "
-"longer boot loader password.\n"
-"\n"
-"Would you like to continue with this password?"
-msgstr ""
-
-#: pyanaconda/iw/bootloader_main_gui.py:36
-msgid "Boot Loader Configuration"
-msgstr ""
-
-#: pyanaconda/iw/bootloader_main_gui.py:167
-#: pyanaconda/iw/bootloader_main_gui.py:184
-#, python-format
-msgid "_Install boot loader on %s."
-msgstr ""
-
-#: pyanaconda/iw/bootloader_main_gui.py:194
-msgid "_Change device"
-msgstr ""
-
-#: pyanaconda/iw/cleardisks_gui.py:34
-msgid "Clear Disks Selector"
-msgstr ""
-
-#: pyanaconda/iw/cleardisks_gui.py:45 pyanaconda/iw/filter_gui.py:444
-msgid "You must select at least one drive to be used for installation."
-msgstr ""
-
-#: pyanaconda/iw/cleardisks_gui.py:55
-msgid "You must select one drive to boot from."
-msgstr ""
-
-#: pyanaconda/iw/cleardisks_gui.py:132 pyanaconda/iw/cleardisks_gui.py:152
-#: pyanaconda/iw/filter_gui.py:506 pyanaconda/iw/filter_gui.py:517
-#: pyanaconda/iw/filter_gui.py:547
-msgid "Model"
-msgstr ""
-
-#: pyanaconda/iw/cleardisks_gui.py:133 pyanaconda/iw/cleardisks_gui.py:153
-msgid "Capacity"
-msgstr ""
-
-#: pyanaconda/iw/cleardisks_gui.py:134 pyanaconda/iw/filter_gui.py:508
-#: pyanaconda/iw/filter_gui.py:527 pyanaconda/iw/filter_gui.py:538
-#: pyanaconda/iw/filter_gui.py:549
-msgid "Vendor"
-msgstr ""
-
-#: pyanaconda/iw/cleardisks_gui.py:135 pyanaconda/iw/cleardisks_gui.py:154
-#: pyanaconda/iw/filter_gui.py:525 pyanaconda/iw/filter_gui.py:536
-#: pyanaconda/iw/filter_gui.py:552
-msgid "Identifier"
-msgstr ""
-
-#: pyanaconda/iw/cleardisks_gui.py:136 pyanaconda/iw/filter_gui.py:509
-#: pyanaconda/iw/filter_gui.py:528 pyanaconda/iw/filter_gui.py:539
-#: pyanaconda/iw/filter_gui.py:550
-msgid "Interconnect"
-msgstr ""
-
-#: pyanaconda/iw/cleardisks_gui.py:150
-msgid ""
-"Boot\n"
-"Loader"
-msgstr ""
-
-#: pyanaconda/iw/cleardisks_gui.py:208
-msgid ""
-"<b>Tip:</b> All Linux filesystems on the install target devices will be "
-"reformatted and wiped of any data. Make sure you have backups."
-msgstr ""
-
-#: pyanaconda/iw/cleardisks_gui.py:210
-msgid ""
-"<b>Tip:</b> The install target devices will be reformatted and wiped of any "
-"data. Make sure you have backups."
-msgstr ""
-
-#: pyanaconda/iw/cleardisks_gui.py:212
-msgid ""
-"<b>Tip:</b> Your filesystems on the install target devices will not be "
-"reformatted unless you choose to do so during customization."
-msgstr ""
-
-#: pyanaconda/iw/congrats_gui.py:34
-msgid "Congratulations"
-msgstr ""
-
-#: pyanaconda/iw/congrats_gui.py:75 pyanaconda/textw/complete_text.py:39
-#, python-format
-msgid ""
-"Congratulations, your %s installation is complete.\n"
-"\n"
-msgstr ""
-
-#: pyanaconda/iw/congrats_gui.py:78 pyanaconda/textw/complete_text.py:42
-msgid "Shutdown"
-msgstr ""
-
-#: pyanaconda/iw/congrats_gui.py:80 pyanaconda/textw/complete_text.py:44
-msgid "Please shutdown to use the installed system.\n"
-msgstr ""
-
-#: pyanaconda/iw/congrats_gui.py:82 pyanaconda/textw/complete_text.py:46
-msgid "Please reboot to use the installed system.\n"
-msgstr ""
-
-#: pyanaconda/iw/congrats_gui.py:87 pyanaconda/textw/complete_text.py:51
-msgid ""
-"Note that updates may be available to ensure the proper functioning of your "
-"system and installation of these updates is recommended after the reboot."
-msgstr ""
-
-#: pyanaconda/iw/congrats_gui.py:91 pyanaconda/textw/complete_text.py:55
-#, python-format
-msgid ""
-"Congratulations, your %s installation is complete.\n"
-"\n"
-"Please reboot to use the installed system. Note that updates may be "
-"available to ensure the proper functioning of your system and installation "
-"of these updates is recommended after the reboot."
-msgstr ""
-
-#: pyanaconda/iw/examine_gui.py:39
-msgid "Upgrade Examine"
-msgstr ""
-
-#: pyanaconda/iw/examine_gui.py:59
-msgid "Fresh Installation"
-msgstr ""
-
-#: pyanaconda/iw/examine_gui.py:61
-#, python-format
-msgid ""
-"Choose this option to install a fresh copy of %s on your system. Existing "
-"software and data may be overwritten depending on your configuration choices."
-msgstr ""
-
-#: pyanaconda/iw/examine_gui.py:66
-msgid "Upgrade an Existing Installation"
-msgstr ""
-
-#: pyanaconda/iw/examine_gui.py:68
-#, python-format
-msgid ""
-"Choose this option if you would like to upgrade your existing %s system. "
-"This option will preserve the existing data on your storage device(s)."
-msgstr ""
-
-#: pyanaconda/iw/examine_gui.py:118
-msgid ""
-"At least one existing installation has been detected on your system. What "
-"would you like to do?"
-msgstr ""
-
-#: pyanaconda/iw/examine_gui.py:137
-#, python-format
-msgid "<b>Which %s installation would you like to upgrade?</b>"
-msgstr ""
-
-#: pyanaconda/iw/examine_gui.py:151
-msgid "Unknown Linux system"
-msgstr ""
-
-#: pyanaconda/iw/filter_gui.py:151
-#, python-format
-msgid ""
-"Selected devices: %(selectedDevices)s (%(selectedSize)s MB) out of "
-"%(totalDevices)s (%(totalSize)s MB)."
-msgstr ""
-
-#: pyanaconda/iw/filter_gui.py:401
-msgid "Device Filter"
-msgstr ""
-
-#: pyanaconda/iw/filter_gui.py:507 pyanaconda/iw/filter_gui.py:518
-#: pyanaconda/iw/filter_gui.py:526 pyanaconda/iw/filter_gui.py:537
-#: pyanaconda/iw/filter_gui.py:548
-msgid "Capacity (MB)"
-msgstr ""
-
-#: pyanaconda/iw/filter_gui.py:510 pyanaconda/iw/filter_gui.py:540
-#: pyanaconda/iw/filter_gui.py:551
-msgid "Serial Number"
-msgstr ""
-
-#: pyanaconda/iw/filter_gui.py:511 pyanaconda/iw/filter_gui.py:519
-#: pyanaconda/iw/filter_gui.py:530 pyanaconda/iw/filter_gui.py:541
-#: pyanaconda/iw/filter_gui.py:556 pyanaconda/iw/osbootwidget.py:64
-#: pyanaconda/iw/partition_gui.py:600
-msgid "Device"
-msgstr ""
-
-#: pyanaconda/iw/filter_gui.py:529
-msgid "Paths"
-msgstr ""
-
-#: pyanaconda/iw/filter_gui.py:553
-msgid "Port"
-msgstr ""
-
-#: pyanaconda/iw/filter_gui.py:554
-msgid "Target"
-msgstr ""
-
-#: pyanaconda/iw/filter_gui.py:555
-msgid "LUN"
-msgstr ""
-
-#: pyanaconda/iw/filter_type.py:59
-msgid "What type of devices will your installation involve?"
-msgstr ""
-
-#: pyanaconda/iw/filter_type.py:65
-msgid "B_asic Storage Devices"
-msgstr ""
-
-#: pyanaconda/iw/filter_type.py:66
-msgid ""
-"Installs or upgrades to typical types of storage devices. If you're not "
-"sure which option is right for you, this is probably it."
-msgstr ""
-
-#: pyanaconda/iw/filter_type.py:70
-msgid "_Specialized Storage Devices"
-msgstr ""
-
-#: pyanaconda/iw/filter_type.py:71
-msgid ""
-"Installs or upgrades to enterprise devices such as Storage Area Networks "
-"(SANs). This option will allow you to add FCoE / iSCSI / zFCP disks and to "
-"filter out devices the installer should ignore."
-msgstr ""
-
-#: pyanaconda/iw/language_gui.py:33 pyanaconda/textw/language_text.py:45
-msgid "Language Selection"
-msgstr ""
-
-#: pyanaconda/iw/language_gui.py:82 pyanaconda/textw/language_text.py:46
-msgid "What language would you like to use during the installation process?"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:134 pyanaconda/iw/lvm_dialog_gui.py:180
-#: pyanaconda/iw/lvm_dialog_gui.py:194 pyanaconda/iw/lvm_dialog_gui.py:233
-#: pyanaconda/iw/lvm_dialog_gui.py:311 pyanaconda/iw/lvm_dialog_gui.py:708
-#: pyanaconda/iw/lvm_dialog_gui.py:729
-msgid "Not enough space"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:135
-msgid ""
-"The physical extent size cannot be changed because otherwise the space "
-"required by the currently defined logical volumes will be increased to more "
-"than the available space."
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:144
-msgid "Confirm Physical Extent Change"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:145
-msgid ""
-"This change in the value of the physical extent will require the sizes of "
-"the current logical volume requests to be rounded up in size to an integer "
-"multiple of the physical extent.\n"
-"\n"
-"This change will take effect immediately."
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:154 pyanaconda/iw/lvm_dialog_gui.py:216
-msgid "C_ontinue"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:181
-#, python-format
-msgid ""
-"The physical extent size cannot be changed because the value selected "
-"(%(curpe)10.2f MB) is larger than the smallest physical volume "
-"(%(maxpvsize)10.2f MB) in the volume group."
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:195
-#, python-format
-msgid ""
-"The physical extent size cannot be changed because the value selected "
-"(%(curpe)10.2f MB) is too large compared to the size of the smallest "
-"physical volume (%(maxpvsize)10.2f MB) in the volume group."
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:209
-msgid "Too small"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:210
-msgid ""
-"This change in the value of the physical extent will waste substantial space "
-"on one or more of the physical volumes in the volume group."
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:234
-#, python-format
-msgid ""
-"The physical extent size cannot be changed because the resulting maximum "
-"logical volume size (%10.2f MB) is smaller than one or more of the currently "
-"defined logical volumes."
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:312
-msgid ""
-"You cannot remove this physical volume because otherwise the volume group "
-"will be too small to hold the currently defined logical volumes."
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:412
-msgid "Make Logical Volume"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:414
-#, python-format
-msgid "Edit Logical Volume: %s"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:453 pyanaconda/iw/raid_dialog_gui.py:453
-msgid "_File System Type:"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:459
-msgid "_Logical Volume Name:"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:469
-#: pyanaconda/iw/partition_dialog_gui.py:510
-msgid "_Size (MB):"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:476
-#, python-format
-msgid "(Max size is %s MB)"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:481
-#: pyanaconda/iw/partition_dialog_gui.py:562
-#: pyanaconda/iw/partition_ui_helpers_gui.py:337
-#: pyanaconda/iw/raid_dialog_gui.py:425
-msgid "_Encrypt"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:490
-#: pyanaconda/iw/partition_dialog_gui.py:492
-#: pyanaconda/iw/raid_dialog_gui.py:463
-msgid "Original File System Type:"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:495
-#: pyanaconda/iw/partition_dialog_gui.py:500
-#: pyanaconda/iw/raid_dialog_gui.py:470
-msgid "Original File System Label:"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:500
-msgid "Logical Volume Name:"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:504
-msgid "Size (MB):"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:531
-#: pyanaconda/iw/partition_dialog_gui.py:443
-#: pyanaconda/iw/raid_dialog_gui.py:444
-msgid "_Mount Point:"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:612
-#: pyanaconda/iw/partition_dialog_gui.py:118
-#: pyanaconda/iw/raid_dialog_gui.py:172
-msgid "Mount Point Error"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:622
-msgid "Illegal Logical Volume Name"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:637
-msgid "Illegal logical volume name"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:638
-#, python-format
-msgid "The logical volume name \"%s\" is already in use. Please pick another."
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:679
-#: pyanaconda/iw/partition_dialog_gui.py:134
-#: pyanaconda/iw/raid_dialog_gui.py:187
-msgid "Mount point in use"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:680
-#: pyanaconda/iw/partition_dialog_gui.py:135
-#: pyanaconda/iw/raid_dialog_gui.py:188
-#, python-format
-msgid "The mount point \"%s\" is in use. Please pick another."
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:695
-msgid "Illegal size"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:696
-msgid "The requested size as entered is not a valid number greater than 0."
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:709
-#, python-format
-msgid ""
-"The current requested size (%(size)10.2f MB) is larger than the maximum "
-"logical volume size (%(maxlv)10.2f MB). To increase this limit you can "
-"create more Physical Volumes from unpartitioned disk space and add them to "
-"this Volume Group."
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:730
-#, python-format
-msgid ""
-"The size entered for this logical volume (%(size)d MB) combined with the "
-"size of the other logical volume(s) exceeds the size of the volume group "
-"(%(tempvgsize)d MB). Please make the volume group larger or make the logical "
-"volume smaller."
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:850
-msgid "No free slots"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:851
-#, python-format
-msgid "You cannot create more than %d logical volume per volume group."
-msgid_plural "You cannot create more than %d logical volumes per volume group."
-msgstr[0] ""
-msgstr[1] ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:861
-msgid "No free space"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:862
-msgid ""
-"There is no room left in the volume group to create new logical volumes. To "
-"add a logical volume you must reduce the size of one or more of the "
-"currently existing logical volumes"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:899
-#, python-format
-msgid "Are you sure you want to delete the logical volume \"%s\"?"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1023
-msgid "Invalid Volume Group Name"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1032
-msgid "Name in use"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1033
-#, python-format
-msgid "The volume group name \"%s\" is already in use. Please pick another."
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1132 pyanaconda/iw/partition_gui.py:1616
-#: pyanaconda/storage/partitioning.py:313
-#: pyanaconda/storage/partitioning.py:351
-msgid "Error Partitioning"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1133
-#, python-format
-msgid ""
-"Could not allocate requested logical volumes:\n"
-"\n"
-"%s."
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1340
-msgid "Not enough physical volumes"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1341
-msgid ""
-"At least one unused physical volume partition is needed to create an LVM "
-"Volume Group.\n"
-"\n"
-"Create a partition or RAID array of type \"physical volume (LVM)\" and then "
-"select the \"LVM\" option again."
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1352
-msgid "Make LVM Volume Group"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1355
-#, python-format
-msgid "Edit LVM Volume Group: %s"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1357
-msgid "Edit LVM Volume Group"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1373
-msgid "_Volume Group Name:"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1382
-msgid "Volume Group Name:"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1390
-msgid "_Physical Extent:"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1405
-msgid "Physical Volumes to _Use:"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1411
-msgid "Used Space:"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1429
-msgid "Snapshot Total:"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1450
-msgid "Reserved Space:"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1470
-msgid "Free Space:"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1488
-msgid "Total Space:"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1526
-msgid "Logical Volume Name"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1529 pyanaconda/iw/partition_gui.py:603
-msgid "Mount Point"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1532 pyanaconda/iw/partition_gui.py:602
-msgid "Size (MB)"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1546 pyanaconda/iw/osbootwidget.py:97
-msgid "_Add"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1549 pyanaconda/iw/osbootwidget.py:101
-#: pyanaconda/iw/partition_gui.py:1842 pyanaconda/iw/partition_gui.py:1852
-msgid "_Edit"
-msgstr ""
-
-#: pyanaconda/iw/lvm_dialog_gui.py:1564
-msgid "_Logical Volumes"
-msgstr ""
-
-#: pyanaconda/iw/network_gui.py:83 pyanaconda/iw/network_gui.py:89
-msgid "Error with Hostname"
-msgstr ""
-
-#: pyanaconda/iw/network_gui.py:84
-msgid "You must enter a valid hostname for this computer."
-msgstr ""
-
-#: pyanaconda/iw/network_gui.py:90
-#, python-format
-msgid ""
-"The hostname \"%(hostname)s\" is not valid for the following reason:\n"
-"\n"
-"%(herrors)s"
-msgstr ""
-
-#: pyanaconda/iw/network_gui.py:137
-msgid "Select network interface"
-msgstr ""
-
-#: pyanaconda/iw/network_gui.py:144
-msgid ""
-"This requires that you have an active network connection during the "
-"installation process. Please configure a network interface."
-msgstr ""
-
-#: pyanaconda/iw/network_gui.py:214
-msgid "Select APs"
-msgstr ""
-
-#: pyanaconda/iw/network_gui.py:221
-msgid "Select APs for wireless devices"
-msgstr ""
-
-#: pyanaconda/iw/osbootwidget.py:49
-msgid "Boot loader operating system list"
-msgstr ""
-
-#: pyanaconda/iw/osbootwidget.py:64
-msgid "Default"
-msgstr ""
-
-#: pyanaconda/iw/osbootwidget.py:64 pyanaconda/iw/partition_gui.py:601
-msgid "Label"
-msgstr ""
-
-#: pyanaconda/iw/osbootwidget.py:131
-msgid "Image"
-msgstr ""
-
-#: pyanaconda/iw/osbootwidget.py:138
-msgid ""
-"Enter a label for the boot loader menu to display. The device (or hard drive "
-"and partition number) is the device from which it boots."
-msgstr ""
-
-#: pyanaconda/iw/osbootwidget.py:146
-msgid "_Label"
-msgstr ""
-
-#: pyanaconda/iw/osbootwidget.py:154
-msgid "_Device"
-msgstr ""
-
-#: pyanaconda/iw/osbootwidget.py:185
-msgid "Default Boot _Target"
-msgstr ""
-
-#: pyanaconda/iw/osbootwidget.py:210
-msgid "You must select a device."
-msgstr ""
-
-#: pyanaconda/iw/osbootwidget.py:216
-msgid "You must specify a label for the entry"
-msgstr ""
-
-#: pyanaconda/iw/osbootwidget.py:225
-msgid "Boot label contains illegal characters"
-msgstr ""
-
-#: pyanaconda/iw/osbootwidget.py:247
-msgid "Duplicate Label"
-msgstr ""
-
-#: pyanaconda/iw/osbootwidget.py:248
-msgid "This label is already in use for another boot entry."
-msgstr ""
-
-#: pyanaconda/iw/osbootwidget.py:259
-msgid "Duplicate Device"
-msgstr ""
-
-#: pyanaconda/iw/osbootwidget.py:260
-msgid "This device is already being used for another boot entry."
-msgstr ""
-
-#: pyanaconda/iw/osbootwidget.py:308
-msgid "Cannot Delete"
-msgstr ""
-
-#: pyanaconda/iw/osbootwidget.py:309
-#, python-format
-msgid ""
-"This boot target cannot be deleted because it is for the %s system you are "
-"about to install."
-msgstr ""
-
-#: pyanaconda/iw/partition_dialog_gui.py:58
-msgid "Additional Size Options"
-msgstr ""
-
-#: pyanaconda/iw/partition_dialog_gui.py:63
-msgid "_Fixed size"
-msgstr ""
-
-#: pyanaconda/iw/partition_dialog_gui.py:65
-msgid "Fill all space _up to (MB):"
-msgstr ""
-
-#: pyanaconda/iw/partition_dialog_gui.py:72
-msgid "Fill to maximum _allowable size"
-msgstr ""
-
-#: pyanaconda/iw/partition_dialog_gui.py:193
-msgid "Error With Request"
-msgstr ""
-
-#: pyanaconda/iw/partition_dialog_gui.py:413
-msgid "Add Partition"
-msgstr ""
-
-#: pyanaconda/iw/partition_dialog_gui.py:415
-#, python-format
-msgid "Edit Partition: %s"
-msgstr ""
-
-#: pyanaconda/iw/partition_dialog_gui.py:452
-msgid "File System _Type:"
-msgstr ""
-
-#: pyanaconda/iw/partition_dialog_gui.py:468
-msgid "Allowable _Drives:"
-msgstr ""
-
-#: pyanaconda/iw/partition_dialog_gui.py:549
-msgid "Force to be a _primary partition"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:361
-#, python-format
-msgid "Drive %(drive)s (%(size)-0.f MB) (Model: %(model)s)"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:384 pyanaconda/iw/partition_gui.py:396
-#: pyanaconda/iw/partition_gui.py:486 pyanaconda/iw/partition_gui.py:1012
-#: pyanaconda/iw/partition_gui.py:1100
-msgid "Free"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:451
-#, python-format
-msgid "LVM Volume Group %(vgName)s (%(vgSize)-0.f MB)"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:518
-#, python-format
-msgid "%(desc)s %(mdPath)s (%(mdSize)-0.f MB)"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:548
-#, python-format
-msgid "%(desc)s %(mdUUID)s (%(mdSize)-0.f MB)"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:604
-msgid "Type"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:605 pyanaconda/storage/__init__.py:2136
-msgid "Format"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:642
-msgid ""
-"Mount Point/\n"
-"RAID/Volume"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:644
-msgid ""
-"Size\n"
-"(MB)"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:749
-msgid "Partitioning"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:839
-msgid ""
-"The partitioning scheme you requested caused the following critical errors."
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:841
-#, python-format
-msgid ""
-"You must correct these errors before you continue your installation of %s."
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:847
-msgid "Partitioning Errors"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:854
-msgid "The partitioning scheme you requested generated the following warnings."
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:856
-msgid "Would you like to continue with your requested partitioning scheme?"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:861
-msgid "Partitioning Warnings"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:870
-msgid ""
-"The following pre-existing devices have been selected to be formatted, "
-"destroying all data."
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:882
-msgid "Format Warnings"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:1000
-msgid "LVM Volume Groups"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:1022
-msgid "RAID Devices"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:1034
-msgid "BTRFS Volumes"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:1047
-msgid "Hard Drives"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:1104
-msgid "Extended"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:1398
-msgid "Cannot perform any creation action"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:1399
-msgid ""
-"Note that the creation action requires one of the following:\n"
-"\n"
-"* Free space in one of the Hard Drives.\n"
-"* At least two free Software RAID partitions.\n"
-"* At least one free physical volume (LVM) partition.\n"
-"* At least one Volume Group with free space."
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:1502
-#, python-format
-msgid ""
-"Software RAID allows you to combine several disks into a larger RAID "
-"device. A RAID device can be configured to provide additional speed and "
-"reliability compared to using an individual drive. For more information on "
-"using RAID devices please consult the %s documentation.\n"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:1508
-msgid ""
-"To use RAID you must first create at least two partitions of type 'software "
-"RAID'. Then you can create a RAID device that can be formatted and "
-"mounted.\n"
-"\n"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:1512
-#, python-format
-msgid "You currently have %d software RAID partition free to use."
-msgid_plural "You currently have %d software RAID partitions free to use."
-msgstr[0] ""
-msgstr[1] ""
-
-#: pyanaconda/iw/partition_gui.py:1516
-msgid "About RAID"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:1522
-#, python-format
-msgid ""
-"Logical Volume Manager (LVM) is a 3 level construct. The first level is made "
-"up of disks or partitions formatted with LVM metadata called Physical "
-"Volumes (PV). A Volume Group (VG) sits on top of one or more PVs. The VG, "
-"in turn, is the base to create one or more Logical Volumes (LV). Note that "
-"a VG can be an aggregate of PVs from multiple physical disks. For more "
-"information on using LVM please consult the %s documentation\n"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:1530
-msgid ""
-"To create a PV you need a partition with free space. To create a VG you "
-"need a PV that is not part of any existing VG. To create an LV you need a "
-"VG with free space.\n"
-"\n"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:1534
-#, python-format
-msgid "You currently have %d available PV free to use.\n"
-msgid_plural "You currently have %d available PVs free to use.\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: pyanaconda/iw/partition_gui.py:1538
-msgid "About LVM"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:1617
-#, python-format
-msgid "Could not allocate requested partitions: %s."
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:1626
-#, python-format
-msgid "Warning: %s."
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:1657
-msgid "Unable To Edit"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:1658
-#, python-format
-msgid ""
-"You cannot edit this device:\n"
-"\n"
-"%s"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:1841
-msgid "_Create"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:1844
-msgid "Re_set"
-msgstr ""
-
-#: pyanaconda/iw/partition_gui.py:1867
-msgid "Please Select A Device"
-msgstr ""
-
-#: pyanaconda/iw/partition_ui_helpers_gui.py:110
-#: pyanaconda/iw/partition_ui_helpers_gui.py:132
-#: pyanaconda/iw/partition_ui_helpers_gui.py:134
-msgid "<Not Applicable>"
-msgstr ""
-
-#: pyanaconda/iw/partition_ui_helpers_gui.py:318
-msgid "_Format as:"
-msgstr ""
-
-#: pyanaconda/iw/partition_ui_helpers_gui.py:340
-msgid "Mi_grate filesystem to:"
-msgstr ""
-
-#: pyanaconda/iw/partition_ui_helpers_gui.py:370
-msgid "_Resize"
-msgstr ""
-
-#: pyanaconda/iw/partition_ui_helpers_gui.py:425
-#, python-format
-msgid ""
-"Partitions of type '%s' must be constrained to a single drive. To do this, "
-"select the drive in the 'Allowable Drives' checklist."
-msgstr ""
-
-#: pyanaconda/iw/raid_dialog_gui.py:392
-msgid ""
-"At least two unused software RAID partitions are needed to create a RAID "
-"device.\n"
-"\n"
-"First create at least two partitions of type \"software RAID\", and then "
-"select the \"RAID\" option again."
-msgstr ""
-
-#: pyanaconda/iw/raid_dialog_gui.py:406
-msgid "Make RAID Device"
-msgstr ""
-
-#: pyanaconda/iw/raid_dialog_gui.py:409
-#, python-format
-msgid "Edit RAID Device: %s"
-msgstr ""
-
-#: pyanaconda/iw/raid_dialog_gui.py:411
-msgid "Edit RAID Device"
-msgstr ""
-
-#: pyanaconda/iw/raid_dialog_gui.py:478
-msgid "RAID _Device:"
-msgstr ""
-
-#: pyanaconda/iw/raid_dialog_gui.py:496
-msgid "RAID _Level:"
-msgstr ""
-
-#: pyanaconda/iw/raid_dialog_gui.py:522
-msgid "_RAID Members:"
-msgstr ""
-
-#: pyanaconda/iw/raid_dialog_gui.py:539
-msgid "Number of _spares:"
-msgstr ""
-
-#: pyanaconda/iw/raid_dialog_gui.py:549
-msgid "_Format partition?"
-msgstr ""
-
-#: pyanaconda/iw/task_gui.py:52
-#, python-format
-msgid ""
-"Unable to read package metadata from repository. This may be due to a "
-"missing repodata directory. Please ensure that your repository has been "
-"correctly generated.\n"
-"\n"
-"%s"
-msgstr ""
-
-#: pyanaconda/iw/task_gui.py:126
-msgid "Edit Repository"
-msgstr ""
-
-#: pyanaconda/iw/task_gui.py:152
-#, python-format
-msgid ""
-"The repository %s has already been added. Please choose a different "
-"repository name and URL."
-msgstr ""
-
-#: pyanaconda/iw/task_gui.py:238
-msgid "Invalid Proxy URL"
-msgstr ""
-
-#: pyanaconda/iw/task_gui.py:239
-msgid "You must provide an HTTP, HTTPS, or FTP URL to a proxy."
-msgstr ""
-
-#: pyanaconda/iw/task_gui.py:251 pyanaconda/iw/task_gui.py:434
-msgid "Invalid Repository URL"
-msgstr ""
-
-#: pyanaconda/iw/task_gui.py:252 pyanaconda/iw/task_gui.py:435
-msgid "You must provide an HTTP, HTTPS, or FTP URL to a repository."
-msgstr ""
-
-#: pyanaconda/iw/task_gui.py:273 pyanaconda/iw/task_gui.py:444
-msgid "No Media Found"
-msgstr ""
-
-#: pyanaconda/iw/task_gui.py:274 pyanaconda/iw/task_gui.py:445
-msgid ""
-"No installation media was found. Please insert a disc into your drive and "
-"try again."
-msgstr ""
-
-#: pyanaconda/iw/task_gui.py:304 pyanaconda/iw/task_gui.py:467
-msgid "Please enter an NFS server and path."
-msgstr ""
-
-#: pyanaconda/iw/task_gui.py:322
-#, python-format
-msgid ""
-"The following error occurred while setting up the repository:\n"
-"\n"
-"%s"
-msgstr ""
-
-#: pyanaconda/iw/task_gui.py:345
-msgid "Invalid Repository Name"
-msgstr ""
-
-#: pyanaconda/iw/task_gui.py:346
-msgid "You must provide a repository name."
-msgstr ""
-
-#: pyanaconda/iw/task_gui.py:499 data/ui/addrepo.glade.h:3
-msgid "Add Repository"
-msgstr ""
-
-#: pyanaconda/iw/task_gui.py:504
-msgid "No Software Repos Enabled"
-msgstr ""
-
-#: pyanaconda/iw/task_gui.py:505
-msgid ""
-"You must have at least one software repository enabled to continue "
-"installation."
-msgstr ""
-
-#: pyanaconda/iw/timezone_gui.py:52 pyanaconda/textw/timezone_text.py:66
-msgid "Time Zone Selection"
-msgstr ""
-
-#: pyanaconda/iw/upgrade_bootloader_gui.py:36
-#: pyanaconda/textw/upgrade_bootloader_text.py:55
-msgid "Upgrade Boot Loader Configuration"
-msgstr ""
-
-#: pyanaconda/iw/upgrade_bootloader_gui.py:56
-#: pyanaconda/textw/upgrade_bootloader_text.py:48
-msgid "_Create new boot loader configuration"
-msgstr ""
-
-#: pyanaconda/iw/upgrade_bootloader_gui.py:58
-msgid ""
-"This option creates a new boot loader configuration. If you wish to switch "
-"boot loaders, you should choose this."
-msgstr ""
-
-#: pyanaconda/iw/upgrade_bootloader_gui.py:65
-#: pyanaconda/textw/upgrade_bootloader_text.py:50
-msgid "_Skip boot loader updating"
-msgstr ""
-
-#: pyanaconda/iw/upgrade_bootloader_gui.py:66
-msgid ""
-"This option makes no changes to boot loader configuration. If you are using "
-"a third party boot loader, you should choose this."
-msgstr ""
-
-#: pyanaconda/iw/upgrade_bootloader_gui.py:88
-msgid "What would you like to do?"
-msgstr ""
-
-#: pyanaconda/iw/upgrade_migratefs_gui.py:38
-#: pyanaconda/textw/upgrade_text.py:42
-msgid "Migrate File Systems"
-msgstr ""
-
-#: pyanaconda/iw/upgrade_migratefs_gui.py:69
-#: pyanaconda/textw/upgrade_text.py:44
-#, python-format
-msgid ""
-"This release of %(productName)s supports an updated file system, which has "
-"several benefits over the file system traditionally shipped in "
-"%(productName)s. This installation program can migrate formatted partitions "
-"without data loss.\n"
-"\n"
-"Which of these partitions would you like to migrate?"
-msgstr ""
-
-#: pyanaconda/iw/zipl_gui.py:37
-msgid "z/IPL Boot Loader Configuration"
-msgstr ""
-
-#: pyanaconda/iw/zipl_gui.py:56
-msgid "The z/IPL boot loader will be installed on your system."
-msgstr ""
-
-#: pyanaconda/iw/zipl_gui.py:58
-msgid ""
-"The z/IPL Boot Loader will now be installed on your system.\n"
-"\n"
-"The root partition will be the one you selected previously in the partition "
-"setup.\n"
-"\n"
-"The kernel used to start the machine will be the one to be installed by "
-"default.\n"
-"\n"
-"If you wish to make changes later after the installation feel free to change "
-"the /etc/zipl.conf configuration file.\n"
-"\n"
-"You can now enter any additional kernel parameters which your machine or "
-"your setup may require."
-msgstr ""
-
-#: pyanaconda/iw/zipl_gui.py:85 pyanaconda/textw/zipl_text.py:54
-msgid "Kernel Parameters"
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:95
-msgid "Unknown Device"
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:96
-#, python-format
-msgid ""
-"The installation source given by device %s could not be found. Please check "
-"your parameters and try again."
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:105
-msgid "_Try again"
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:108
-msgid "No disks found"
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:109
-msgid "No usable disks have been found."
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:122
-msgid "Installation cannot continue."
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:123
-msgid ""
-"The storage configuration you have chosen has already been activated. You "
-"can no longer return to the disk editing screen. Would you like to continue "
-"with the installation process?"
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:151
+#: pyanaconda/storage/__init__.py:127
msgid "Encrypt device?"
msgstr ""
-#: pyanaconda/storage/__init__.py:152
+#: pyanaconda/storage/__init__.py:128
msgid ""
"You specified block device encryption should be enabled, but you have not "
"supplied a passphrase. If you do not go back and provide a passphrase, block "
"device encryption will be disabled."
msgstr ""
-#: pyanaconda/storage/__init__.py:159 pyanaconda/storage/devicetree.py:94
-#: pyanaconda/textw/constants_text.py:52
+#: pyanaconda/storage/__init__.py:135 pyanaconda/storage/devicetree.py:95
msgid "Back"
msgstr ""
-#: pyanaconda/storage/__init__.py:190
-msgid "Missing /boot Volume"
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:191
-msgid ""
-"This platform requires /boot on a dedicated partition or logical volume. If "
-"you do not want a /boot volume, you must place / on a dedicated non-LVM "
-"partition."
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:198
-msgid "Go _back"
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:205 pyanaconda/storage/devicetree.py:103
+#: pyanaconda/storage/__init__.py:155 pyanaconda/storage/devicetree.py:104
msgid "Confirm"
msgstr ""
-#: pyanaconda/storage/__init__.py:206
+#: pyanaconda/storage/__init__.py:156
msgid ""
"The partitioning options you have selected will now be written to disk. Any "
"data on deleted or reformatted partitions will be lost."
msgstr ""
-#: pyanaconda/storage/__init__.py:211
+#: pyanaconda/storage/__init__.py:161
msgid "Go _Back"
msgstr ""
-#: pyanaconda/storage/__init__.py:212
+#: pyanaconda/storage/__init__.py:162
msgid "_Write Changes to Disk"
msgstr ""
-#: pyanaconda/storage/__init__.py:231
-msgid "Running..."
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:232
-msgid "Storing encryption keys"
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:248
-#, python-format
-msgid "Error storing an encryption key: %s\n"
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:460
-msgid "Examining Devices"
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:461
-msgid "Examining storage devices"
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:781
+#: pyanaconda/storage/__init__.py:1027
msgid "This partition is holding the data for the hard drive install."
msgstr ""
-#: pyanaconda/storage/__init__.py:786
+#: pyanaconda/storage/__init__.py:1032
msgid "You cannot delete a partition of a LDL formatted DASD."
msgstr ""
-#: pyanaconda/storage/__init__.py:792
+#: pyanaconda/storage/__init__.py:1038
#, python-format
msgid "This device is part of the RAID device %s."
msgstr ""
-#: pyanaconda/storage/__init__.py:795
+#: pyanaconda/storage/__init__.py:1041
msgid "This device is part of a RAID device."
msgstr ""
-#: pyanaconda/storage/__init__.py:798
+#: pyanaconda/storage/__init__.py:1044
msgid "This device is part of an inconsistent LVM Volume Group."
msgstr ""
-#: pyanaconda/storage/__init__.py:803
+#: pyanaconda/storage/__init__.py:1049
#, python-format
msgid "This device is part of the LVM volume group '%s'."
msgstr ""
-#: pyanaconda/storage/__init__.py:806
+#: pyanaconda/storage/__init__.py:1052
msgid "This device is part of a LVM volume group."
msgstr ""
-#: pyanaconda/storage/__init__.py:822
+#: pyanaconda/storage/__init__.py:1068
msgid ""
"This device is an extended partition which contains logical partitions that "
"cannot be deleted:\n"
"\n"
msgstr ""
-#: pyanaconda/storage/__init__.py:1033
+#: pyanaconda/storage/__init__.py:1277
msgid "You must create a new filesystem on the root device."
msgstr ""
-#: pyanaconda/storage/__init__.py:1180
+#: pyanaconda/storage/__init__.py:1429
#, python-format
msgid ""
"You have not defined a root partition (/), which is required for "
"installation of %s to continue."
msgstr ""
-#: pyanaconda/storage/__init__.py:1185
+#: pyanaconda/storage/__init__.py:1434
#, python-format
msgid ""
"Your root partition is less than 250 megabytes which is usually too small to "
"install %s."
msgstr ""
-#: pyanaconda/storage/__init__.py:1196
-#, python-format
+#: pyanaconda/storage/__init__.py:1448
msgid ""
-"Your / partition is less than %(min)s MB which is lower than recommended for "
-"a normal %(productName)s%(live)s install."
+"This platform requires /boot on a dedicated partition or logical volume. If "
+"you do not want a /boot volume, you must place / on a dedicated non-LVM "
+"partition."
msgstr ""
-#: pyanaconda/storage/__init__.py:1207
+#: pyanaconda/storage/__init__.py:1459
#, python-format
msgid ""
"Your / partition does not match the the live image you are installing from. "
"It must be formatted as %s."
msgstr ""
-#: pyanaconda/storage/__init__.py:1214
+#: pyanaconda/storage/__init__.py:1466
#, python-format
msgid ""
"Your %(mount)s partition is less than %(size)s megabytes which is lower than "
"recommended for a normal %(productName)s install."
msgstr ""
-#: pyanaconda/storage/__init__.py:1224
+#: pyanaconda/storage/__init__.py:1476
#, python-format
msgid ""
"Your %(mount)s partition is too small for %(format)s formatting (allowable "
"size is %(minSize)d MB to %(maxSize)d MB)"
msgstr ""
-#: pyanaconda/storage/__init__.py:1229
+#: pyanaconda/storage/__init__.py:1481
#, python-format
msgid ""
"Your %(mount)s partition is too large for %(format)s formatting (allowable "
"size is %(minSize)d MB to %(maxSize)d MB)"
msgstr ""
-#: pyanaconda/storage/__init__.py:1256
+#: pyanaconda/storage/__init__.py:1508
msgid ""
"Installing on a USB device. This may or may not produce a working system."
msgstr ""
-#: pyanaconda/storage/__init__.py:1259
+#: pyanaconda/storage/__init__.py:1511
msgid ""
"Installing on a FireWire device. This may or may not produce a working "
"system."
msgstr ""
-#: pyanaconda/storage/__init__.py:1265
+#: pyanaconda/storage/__init__.py:1517
msgid "you have not created a bootloader stage1 target device"
msgstr ""
-#: pyanaconda/storage/__init__.py:1274
+#: pyanaconda/storage/__init__.py:1526
msgid "You have not created a bootable partition."
msgstr ""
-#: pyanaconda/storage/__init__.py:1287
+#: pyanaconda/storage/__init__.py:1545
+#, python-format
+msgid ""
+"Your BIOS-based system needs a special partition to boot with %s's new disk "
+"label format (GPT). To continue, please create a 1MB 'BIOS Boot' type "
+"partition."
+msgstr ""
+
+#: pyanaconda/storage/__init__.py:1558
#, python-format
msgid ""
"You have not specified a swap partition. %(requiredMem)s MB of memory is "
@@ -3515,13 +1161,13 @@ msgid ""
"have %(installedMem)s MB."
msgstr ""
-#: pyanaconda/storage/__init__.py:1293
+#: pyanaconda/storage/__init__.py:1564
msgid ""
"You have not specified a swap partition. Although not strictly required in "
"all cases, it will significantly improve performance for most installations."
msgstr ""
-#: pyanaconda/storage/__init__.py:1299
+#: pyanaconda/storage/__init__.py:1570
msgid ""
"At least one of your swap devices does not have a UUID, which is common in "
"swap space created using older versions of mkswap. These devices will be "
@@ -3529,205 +1175,63 @@ msgid ""
"paths can change under a variety of circumstances. "
msgstr ""
-#: pyanaconda/storage/__init__.py:1309
+#: pyanaconda/storage/__init__.py:1580
#, python-format
msgid ""
"This mount point is invalid. The %s directory must be on the / file system."
msgstr ""
-#: pyanaconda/storage/__init__.py:1313
+#: pyanaconda/storage/__init__.py:1584
#, python-format
msgid "The mount point %s must be on a linux file system."
msgstr ""
-#: pyanaconda/storage/__init__.py:1324
-msgid "No Drives Found"
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:1325
-msgid ""
-"An error has occurred - no valid devices were found on which to create new "
-"file systems. Please check your hardware for the cause of this problem."
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:1692 pyanaconda/storage/__init__.py:1701
-msgid "Dirty File Systems"
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:1693
-#, python-format
-msgid ""
-"The following file systems for your Linux system were not unmounted "
-"cleanly. Please boot your Linux installation, let the file systems be "
-"checked and shut down cleanly to upgrade.\n"
-"%s"
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:1702
-#, python-format
-msgid ""
-"The following file systems for your Linux system were not unmounted "
-"cleanly. Would you like to mount them anyway?\n"
-"%s"
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:2111
-msgid ""
-"There is an entry in your /etc/fstab file that contains an invalid or "
-"incorrect filesystem type:\n"
-"\n"
-" "
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:2169
-#, python-format
-msgid ""
-"The swap device:\n"
-"\n"
-" %s\n"
-"\n"
-"is an old-style Linux swap partition. If you want to use this device for "
-"swap space, you must reformat as a new-style Linux swap partition."
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:2180
-#, python-format
-msgid ""
-"The swap device:\n"
-"\n"
-" %s\n"
-"\n"
-"in your /etc/fstab file is currently in use as a software suspend device, "
-"which means your system is hibernating. To perform an upgrade, please shut "
-"down your system rather than hibernating it."
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:2188
-#, python-format
-msgid ""
-"The swap device:\n"
-"\n"
-" %s\n"
-"\n"
-"in your /etc/fstab file is currently in use as a software suspend device, "
-"which means your system is hibernating. If you are performing a new install, "
-"make sure the installer is set to format all swap devices."
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:2200
-#, python-format
-msgid ""
-"The swap device:\n"
-"\n"
-" %s\n"
-"\n"
-"does not contain a supported swap volume. In order to continue "
-"installation, you will need to format the device or skip it."
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:2211
-#, python-format
-msgid ""
-"Error enabling swap device %(name)s: %(msg)s\n"
-"\n"
-"The /etc/fstab on your upgrade partition does not reference a valid swap "
-"device.\n"
-"\n"
-"Press OK to exit the installer"
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:2218
-#, python-format
-msgid ""
-"Error enabling swap device %(name)s: %(msg)s\n"
-"\n"
-"This most likely means this swap device has not been initialized.\n"
-"\n"
-"Press OK to exit the installer."
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:2281 pyanaconda/storage/__init__.py:2293
-msgid "Invalid mount point"
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:2282
-#, python-format
-msgid ""
-"An error occurred when trying to create %s. Some element of this path is "
-"not a directory. This is a fatal error and the install cannot continue.\n"
-"\n"
-"Press <Enter> to exit the installer."
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:2294
-#, python-format
-msgid ""
-"An error occurred when trying to create %(mountpoint)s: %(msg)s. This is a "
-"fatal error and the install cannot continue.\n"
-"\n"
-"Press <Enter> to exit the installer."
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:2310 pyanaconda/storage/__init__.py:2334
-msgid "Unable to mount filesystem"
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:2311
-#, python-format
-msgid ""
-"An error occurred mounting device %(path)s as %(mountpoint)s. You may "
-"continue installation, but there may be problems."
-msgstr ""
-
-#: pyanaconda/storage/__init__.py:2335
-#, python-format
-msgid ""
-"An error occurred mounting device %(path)s as %(mountpoint)s: %(msg)s. This "
-"is a fatal error and the install cannot continue.\n"
-"\n"
-"Press <Enter> to exit the installer."
-msgstr ""
-
-#: pyanaconda/storage/dasd.py:155
+#: pyanaconda/storage/dasd.py:159
msgid "Formatting DASD Device"
msgid_plural "Formatting DASD Devices"
msgstr[0] ""
msgstr[1] ""
-#: pyanaconda/storage/dasd.py:156
+#: pyanaconda/storage/dasd.py:160
#, python-format
msgid "Preparing %d DASD device for use with Linux..."
msgid_plural "Preparing %d DASD devices for use with Linux..."
msgstr[0] ""
msgstr[1] ""
-#: pyanaconda/storage/devicelibs/lvm.py:284
+#: pyanaconda/storage/deviceaction.py:419
#, python-format
-msgid "vginfo failed for %s"
+msgid "Creating %(type)s on %(device)s"
msgstr ""
-#: pyanaconda/storage/devicelibs/lvm.py:313
+#: pyanaconda/storage/deviceaction.py:559
#, python-format
-msgid "lvs failed for %s"
+msgid "Resizing filesystem on %(device)s"
+msgstr ""
+
+#: pyanaconda/storage/deviceaction.py:608
+#, python-format
+msgid "Migrating filesystem on %(device)s"
msgstr ""
-#: pyanaconda/storage/devices.py:791
-msgid "Creating"
+#: pyanaconda/storage/devicelibs/lvm.py:296
+#, python-format
+msgid "vginfo failed for %s"
msgstr ""
-#: pyanaconda/storage/devices.py:792
+#: pyanaconda/storage/devicelibs/lvm.py:325
#, python-format
-msgid "Creating device %s"
+msgid "lvs failed for %s"
msgstr ""
-#: pyanaconda/storage/devices.py:2725
+#: pyanaconda/storage/devices.py:2724
#, python-format
msgid "A RAID%(raidLevel)d set requires at least %(minMembers)d member"
msgid_plural "A RAID%(raidLevel)d set requires at least %(minMembers)d members"
msgstr[0] ""
msgstr[1] ""
-#: pyanaconda/storage/devicetree.py:104
+#: pyanaconda/storage/devicetree.py:105
#, python-format
msgid ""
"Are you sure you want to skip entering a passphrase for device %s?\n"
@@ -3736,11 +1240,7 @@ msgid ""
"installation."
msgstr ""
-#: pyanaconda/storage/fcoe.py:71 pyanaconda/storage/fcoe.py:72
-msgid "Connecting to FCoE SAN"
-msgstr ""
-
-#: pyanaconda/storage/fcoe.py:116
+#: pyanaconda/storage/fcoe.py:110
msgid "FCoE not available"
msgstr ""
@@ -3748,46 +1248,17 @@ msgstr ""
msgid "filesystem configuration missing a type"
msgstr ""
-#: pyanaconda/storage/formats/fs.py:360 pyanaconda/storage/formats/luks.py:197
-#: pyanaconda/storage/formats/lvmpv.py:105
-#: pyanaconda/storage/formats/swap.py:161
-msgid "Formatting"
-msgstr ""
-
-#: pyanaconda/storage/formats/fs.py:361
-#, python-format
-msgid "Creating %(type)s filesystem on %(device)s"
-msgstr ""
-
-#: pyanaconda/storage/formats/fs.py:463
-msgid "Resizing"
-msgstr ""
-
-#: pyanaconda/storage/formats/fs.py:464
-#, python-format
-msgid "Resizing filesystem on %s"
-msgstr ""
-
-#: pyanaconda/storage/formats/fs.py:499
+#: pyanaconda/storage/formats/fs.py:479
#, python-format
msgid "Unknown return code: %d."
msgstr ""
-#: pyanaconda/storage/formats/fs.py:513
-msgid "Checking"
-msgstr ""
-
-#: pyanaconda/storage/formats/fs.py:514
-#, python-format
-msgid "Checking filesystem on %s"
-msgstr ""
-
-#: pyanaconda/storage/formats/fs.py:531
+#: pyanaconda/storage/formats/fs.py:500
#, python-format
msgid "%(type)s filesystem check failure on %(device)s: "
msgstr ""
-#: pyanaconda/storage/formats/fs.py:537
+#: pyanaconda/storage/formats/fs.py:507
msgid ""
"Errors like this usually mean there is a problem with the filesystem that "
"will require user interaction to repair. Before restarting installation, "
@@ -3796,37 +1267,37 @@ msgid ""
"problems on the filesystem."
msgstr ""
-#: pyanaconda/storage/formats/fs.py:545 pyanaconda/storage/partitioning.py:385
+#: pyanaconda/storage/formats/fs.py:515
msgid "Unrecoverable Error"
msgstr ""
-#: pyanaconda/storage/formats/fs.py:919
+#: pyanaconda/storage/formats/fs.py:889
msgid "File system errors left uncorrected."
msgstr ""
-#: pyanaconda/storage/formats/fs.py:920
+#: pyanaconda/storage/formats/fs.py:890
msgid "Operational error."
msgstr ""
-#: pyanaconda/storage/formats/fs.py:921
+#: pyanaconda/storage/formats/fs.py:891
msgid "Usage or syntax error."
msgstr ""
-#: pyanaconda/storage/formats/fs.py:922
+#: pyanaconda/storage/formats/fs.py:892
msgid "e2fsck cancelled by user request."
msgstr ""
-#: pyanaconda/storage/formats/fs.py:923
+#: pyanaconda/storage/formats/fs.py:893
msgid "Shared library error."
msgstr ""
-#: pyanaconda/storage/formats/fs.py:1091
+#: pyanaconda/storage/formats/fs.py:1061
msgid ""
"Recoverable errors have been detected or dosfsck has discovered an internal "
"inconsistency."
msgstr ""
-#: pyanaconda/storage/formats/fs.py:1093
+#: pyanaconda/storage/formats/fs.py:1063
msgid "Usage error."
msgstr ""
@@ -3834,17 +1305,6 @@ msgstr ""
msgid "Encrypted"
msgstr ""
-#: pyanaconda/storage/formats/luks.py:198
-#, python-format
-msgid "Encrypting %s"
-msgstr ""
-
-#: pyanaconda/storage/formats/lvmpv.py:106
-#: pyanaconda/storage/formats/swap.py:162
-#, python-format
-msgid "Creating %(type)s on %(device)s"
-msgstr ""
-
#: pyanaconda/storage/iscsi.py:123
msgid "Unable to change iSCSI initiator name once set"
msgstr ""
@@ -3853,105 +1313,35 @@ msgstr ""
msgid "Must provide an iSCSI initiator name"
msgstr ""
-#: pyanaconda/storage/iscsi.py:191 pyanaconda/storage/iscsi.py:192
-msgid "Scanning iSCSI nodes"
-msgstr ""
-
-#: pyanaconda/storage/iscsi.py:243 pyanaconda/storage/iscsi.py:244
-msgid "Initializing iSCSI initiator"
-msgstr ""
-
-#: pyanaconda/storage/iscsi.py:304
+#: pyanaconda/storage/iscsi.py:293
msgid "iSCSI not available"
msgstr ""
-#: pyanaconda/storage/iscsi.py:306
+#: pyanaconda/storage/iscsi.py:295
msgid "No initiator name set"
msgstr ""
-#: pyanaconda/storage/iscsi.py:345
+#: pyanaconda/storage/iscsi.py:334
msgid "Logging in to iSCSI node"
msgstr ""
-#: pyanaconda/storage/iscsi.py:346
+#: pyanaconda/storage/iscsi.py:335
#, python-format
msgid "Logging in to iSCSI node %s"
msgstr ""
-#: pyanaconda/storage/iscsi.py:380
+#: pyanaconda/storage/iscsi.py:369
msgid "No iSCSI nodes discovered"
msgstr ""
-#: pyanaconda/storage/iscsi.py:402
+#: pyanaconda/storage/iscsi.py:391
msgid "No new iSCSI nodes discovered"
msgstr ""
-#: pyanaconda/storage/iscsi.py:405
+#: pyanaconda/storage/iscsi.py:394
msgid "Could not log in to any of the discovered nodes"
msgstr ""
-#: pyanaconda/storage/partitioning.py:307
-msgid ""
-"Could not find enough free space for automatic partitioning. Press 'OK' to "
-"exit the installer."
-msgstr ""
-
-#: pyanaconda/storage/partitioning.py:310
-msgid ""
-"Could not find enough free space for automatic partitioning, please use "
-"another partitioning method."
-msgstr ""
-
-#: pyanaconda/storage/partitioning.py:335
-msgid "Warnings During Automatic Partitioning"
-msgstr ""
-
-#: pyanaconda/storage/partitioning.py:337
-#, python-format
-msgid ""
-"Following warnings occurred during automatic partitioning:\n"
-"\n"
-"%s"
-msgstr ""
-
-#: pyanaconda/storage/partitioning.py:348
-#: pyanaconda/storage/partitioning.py:369
-msgid ""
-"\n"
-"\n"
-"Press 'OK' to exit the installer."
-msgstr ""
-
-#: pyanaconda/storage/partitioning.py:352
-#, python-format
-msgid ""
-"Could not allocate requested partitions: \n"
-"\n"
-"%(msg)s.%(extra)s"
-msgstr ""
-
-#: pyanaconda/storage/partitioning.py:371
-msgid ""
-"\n"
-"\n"
-"Press 'OK' to choose a different partitioning option."
-msgstr ""
-
-#: pyanaconda/storage/partitioning.py:373
-msgid "Automatic Partitioning Errors"
-msgstr ""
-
-#: pyanaconda/storage/partitioning.py:374
-#, python-format
-msgid ""
-"The following errors occurred with your partitioning:\n"
-"\n"
-"%(errortxt)s\n"
-"\n"
-"This can happen if there is not enough space on your hard drive(s) for the "
-"installation. %(extra)s"
-msgstr ""
-
#: pyanaconda/storage/zfcp.py:51
msgid "You have not specified a device number or the number is invalid"
msgstr ""
@@ -4035,984 +1425,1213 @@ msgstr ""
msgid "Could not set zFCP device %(devnum)s offline (%(e)s)."
msgstr ""
-#: pyanaconda/textw/complete_text.py:32
-msgid "Reboot"
+#: pyanaconda/ui/gui/__init__.py:98
+#, python-format
+msgid "%(productName)s %(productVersion)s INSTALLATION"
msgstr ""
-#: pyanaconda/textw/complete_text.py:34
-msgid "<Enter> to exit"
+#: pyanaconda/ui/gui/__init__.py:114
+msgid "_Exit Installer"
msgstr ""
-#: pyanaconda/textw/complete_text.py:62
-msgid "Complete"
+#: pyanaconda/ui/gui/__init__.py:127
+msgid "_No"
msgstr ""
-#: pyanaconda/textw/constants_text.py:75
-#, python-format
+#: pyanaconda/ui/gui/__init__.py:127
+msgid "_Yes"
+msgstr ""
+
+#: pyanaconda/ui/gui/categories/__init__.py:43
+msgid "DEFAULT TITLE"
+msgstr ""
+
+#: pyanaconda/ui/gui/categories/localization.py:31
+msgid "LOCALIZATION"
+msgstr ""
+
+#: pyanaconda/ui/gui/categories/software.py:31
+msgid "SOFTWARE"
+msgstr ""
+
+#: pyanaconda/ui/gui/hubs/__init__.py:221
msgid ""
-"This storage device may contain data:\n"
-"\n"
-"%(description)s, %(size)s MB, %(devicePath)s\n"
-"\n"
-"We could not detect partitions or filesystems on this device. This could be "
-"because the device is blank, unpartitioned, or virtual. If not, there may be "
-"data on the device that can not be recovered if you use it in this "
-"installation. We can remove the device from this installation to protect the "
-"data.\n"
-"\n"
-"Are you sure this device does not contain valuable data?"
+"When all items marked with this icon are complete, installation will "
+"automatically continue."
msgstr ""
-#: pyanaconda/textw/constants_text.py:88
-msgid "Apply my choice to all devices with undetected partitions."
+#: pyanaconda/ui/gui/hubs/__init__.py:223
+msgid ""
+"Please complete items marked with this icon before continuing to the next "
+"step."
msgstr ""
-#: pyanaconda/textw/keyboard_text.py:48
-msgid "Keyboard Selection"
+#: pyanaconda/ui/gui/hubs/progress.py:183
+msgid "Complete!"
msgstr ""
-#: pyanaconda/textw/keyboard_text.py:49
-msgid "Which model keyboard is attached to this computer?"
+#: pyanaconda/ui/gui/spokes/custom.py:56
+#, python-format
+msgid "New %s %s Installation"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:35 pyanaconda/textw/netconfig_text.py:42
-msgid "Error With Data"
+#: pyanaconda/ui/gui/spokes/custom.py:121
+msgid "MANUAL PARTITIONING"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:36
+#: pyanaconda/ui/gui/spokes/custom.py:239
#, python-format
+msgid "%d storage device selected"
+msgid_plural "%d storage devices selected"
+msgstr[0] ""
+msgstr[1] ""
+
+#: pyanaconda/ui/gui/spokes/custom.py:320
+#: pyanaconda/ui/gui/spokes/network.py:554
+msgid "Unknown"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/custom.py:340
msgid ""
-"An error occurred converting the value entered for \"%(field)s\":\n"
-"%(errmsg)s"
+"The 'swap' area on your computer is used by the operating\n"
+"system when running low on memory."
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:43
-#, python-format
-msgid "A value is required for the field %s"
+#: pyanaconda/ui/gui/spokes/custom.py:343
+msgid ""
+"The 'boot' area on your computer is where files needed\n"
+"to start the operating system are stored."
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:126
-#: pyanaconda/textw/netconfig_text.py:152
-msgid "Enable network interface"
+#: pyanaconda/ui/gui/spokes/custom.py:346
+msgid ""
+"The 'root' area on your computer is where core system\n"
+"files and applications are stored."
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:129
+#: pyanaconda/ui/gui/spokes/custom.py:349
msgid ""
-"This requires that you have an active network connection during the "
-"installation process. Please select network interface to configure."
+"The 'home' area on your computer is where all your personal\n"
+"data is stored."
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/custom.py:352
+msgid "No one knows what this could possibly be for."
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/custom.py:387
+msgid "This file system does not support labels."
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:155
+#: pyanaconda/ui/gui/spokes/custom.py:396
+msgid "This file system may not be resized."
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/custom.py:633
+msgid "BTRFS"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/custom.py:636
+msgid "LVM"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/custom.py:639
+msgid "RAID"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/custom.py:642
+msgid "Standard Partition"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/datetime_spoke.py:44
+msgid "Note: pool servers may not be available all the time"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/datetime_spoke.py:252
+msgid "DATE & TIME"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/datetime_spoke.py:324
+#: pyanaconda/ui/gui/spokes/datetime_spoke.py:326
#, python-format
-msgid "Configure interface %s to be used during installation process."
+msgid "%s timezone"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:160
-msgid "Enable IPv4 Support"
+#: pyanaconda/ui/gui/spokes/datetime_spoke.py:694
+msgid "You need to set up networking first if you want to use NTP"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:164
-msgid "Dynamic IP configuration (DHCP)"
+#: pyanaconda/ui/gui/spokes/datetime_spoke.py:699
+msgid "You have no working NTP server configured"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:167
-#: pyanaconda/textw/netconfig_text.py:207
-msgid "Manual Configuration"
+#: pyanaconda/ui/gui/spokes/keyboard.py:148
+msgid "KEYBOARD"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:175
-msgid "IPv4 Address:"
+#: pyanaconda/ui/gui/spokes/network.py:87
+msgid "Status unknown (missing)"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:184
-#: pyanaconda/textw/netconfig_text.py:224
-msgid "Gateway:"
+#: pyanaconda/ui/gui/spokes/network.py:91
+msgid "Status unknown"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:189
-#: pyanaconda/textw/netconfig_text.py:229
-msgid "Nameserver:"
+#: pyanaconda/ui/gui/spokes/network.py:93
+msgid "Unmanaged"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:197
-msgid "Enable IPv6 Support"
+#: pyanaconda/ui/gui/spokes/network.py:96
+msgid "Firmware missing"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:201
-msgid "Automatic neighbor discovery"
+#: pyanaconda/ui/gui/spokes/network.py:99
+msgid "Cable unplugged"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:204
-msgid "Dynamic IP Configuration (DHCPv6)"
+#: pyanaconda/ui/gui/spokes/network.py:101
+msgid "Unavailable"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:215
-msgid "IPv6 Address:"
+#: pyanaconda/ui/gui/spokes/network.py:103
+msgid "Disconnected"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:270
-msgid "Missing protocol"
+#: pyanaconda/ui/gui/spokes/network.py:108
+msgid "Connecting"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:271
-msgid "You must select at least one protocol version"
+#: pyanaconda/ui/gui/spokes/network.py:110
+msgid "Authentication required"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:279
-#: pyanaconda/textw/netconfig_text.py:282
-msgid "IPv4 Address"
+#: pyanaconda/ui/gui/spokes/network.py:112
+msgid "Connected"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:286
-#: pyanaconda/textw/netconfig_text.py:291
-msgid "IPv4 Prefix"
+#: pyanaconda/ui/gui/spokes/network.py:114
+msgid "Disconnecting"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:290
-msgid "IPv4 CIDR prefix must be between 0 and 32."
+#: pyanaconda/ui/gui/spokes/network.py:116
+msgid "Connection failed"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:298
-msgid "IPv4 Gateway"
+#: pyanaconda/ui/gui/spokes/network.py:543
+msgid "unplugged"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:307
-msgid "IPv4 Nameserver"
+#: pyanaconda/ui/gui/spokes/network.py:556
+msgid "Ethernet"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:315
-#: pyanaconda/textw/netconfig_text.py:318
+#: pyanaconda/ui/gui/spokes/network.py:558
+msgid "Wireless"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/network.py:643
+#: pyanaconda/ui/gui/spokes/network.glade:341
+#: pyanaconda/ui/gui/spokes/network.glade:717
+msgid "IPv4 Address"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/network.py:644
+#: pyanaconda/ui/gui/spokes/network.glade:355
+#: pyanaconda/ui/gui/spokes/network.glade:731
+#: pyanaconda/ui/gui/spokes/network.glade:1372
msgid "IPv6 Address"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:322
-#: pyanaconda/textw/netconfig_text.py:327
-msgid "IPv6 Prefix"
+#: pyanaconda/ui/gui/spokes/network.py:646
+#: pyanaconda/ui/gui/spokes/network.py:648
+#: pyanaconda/ui/gui/spokes/network.glade:1358
+msgid "IP Address"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/network.py:702
+#, python-format
+msgid "%d Mb/s"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:326
-msgid "IPv6 CIDR prefix must be between 0 and 128."
+#: pyanaconda/ui/gui/spokes/network.py:878
+msgid "WEP"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:334
-msgid "IPv6 Gateway"
+#: pyanaconda/ui/gui/spokes/network.py:881
+msgid "WPA"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:342
-msgid "IPv6 Nameserver"
+#: pyanaconda/ui/gui/spokes/network.py:884
+msgid "WPA2"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:399
-msgid "Configuring Network Interfaces"
+#: pyanaconda/ui/gui/spokes/network.py:888
+msgid "Enterprise"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:403
-msgid "Network Error"
+#: pyanaconda/ui/gui/spokes/network.py:893
+msgid "None"
msgstr ""
-#: pyanaconda/textw/netconfig_text.py:404
+#: pyanaconda/ui/gui/spokes/network.py:907
+msgid "NETWORK CONFIGURATION"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/network.py:930
+msgid "Not connected"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/network.py:937
#, python-format
-msgid "There was an error configuring network device %s"
+msgid "Wireless (%s) connected to %s"
msgstr ""
-#: pyanaconda/textw/partition_text.py:58
-msgid "Partitioning Type"
+#: pyanaconda/ui/gui/spokes/network.py:940
+#, python-format
+msgid "Wired (%s) connected"
msgstr ""
-#: pyanaconda/textw/partition_text.py:60
-msgid ""
-"Installation requires partitioning of your hard drive. The default layout "
-"is suitable for most users. Select what space to use and which drives to "
-"use as the install target."
+#: pyanaconda/ui/gui/spokes/network.py:950
+#, python-format
+msgid "Connected devices: %s"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/software.py:47
+msgid "SOFTWARE SELECTION"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/software.py:90
+msgid "Checking software dependencies..."
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/software.py:96
+msgid "Error checking software dependencies"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/software.py:136
+msgid "Error checking software selection"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/software.py:139
+msgid "Installation source not set up"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/software.py:147
+msgid "Custom software selected"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/software.py:149
+#: pyanaconda/ui/gui/spokes/source.py:534
+#: pyanaconda/ui/gui/spokes/source.py:562
+msgid "Nothing selected"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/software.py:163
+#: pyanaconda/ui/gui/spokes/source.py:45
+msgid "Downloading package metadata..."
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/software.py:169
+msgid "Downloading group metadata..."
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/software.py:180
+msgid "No installation source available"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/software.py:237
+msgid "Error checking software dependencies. Click for details."
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/software.py:272 pyanaconda/ui/gui/main.glade:36
+msgid "_Quit"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/software.py:272
+msgid "_Remove Packages"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/software.py:273
+msgid "_Modify Software Source"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/source.py:46
+msgid "Error downloading package metadata..."
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/source.py:139
+msgid "This media is good to install from."
msgstr ""
-#: pyanaconda/textw/partition_text.py:63
-msgid "Use entire drive"
+#: pyanaconda/ui/gui/spokes/source.py:141
+msgid "This media is not good to install from."
msgstr ""
-#: pyanaconda/textw/partition_text.py:64
-msgid "Replace existing Linux system"
+#: pyanaconda/ui/gui/spokes/source.py:336
+msgid "Getting info about requested repository"
msgstr ""
-#: pyanaconda/textw/partition_text.py:65
-msgid "Use free space"
+#: pyanaconda/ui/gui/spokes/source.py:359
+#: pyanaconda/ui/gui/spokes/source.glade:265
+msgid "enter URL of your desired repository"
msgstr ""
-#: pyanaconda/textw/partition_text.py:80
-msgid "Which drive(s) do you want to use for this installation?"
+#: pyanaconda/ui/gui/spokes/source.py:417
+msgid "INSTALLATION SOURCE"
msgstr ""
-#: pyanaconda/textw/partition_text.py:95
-msgid "<Space>,<+>,<-> selection | <F2> Add drive | <F12> next screen"
+#: pyanaconda/ui/gui/spokes/source.py:506
+msgid "Failed to set up install source"
msgstr ""
-#: pyanaconda/textw/progress_text.py:46
-msgid "Package Installation"
+#: pyanaconda/ui/gui/spokes/source.py:508
+msgid "Failed to set up install source, check the repo url"
msgstr ""
-#: pyanaconda/textw/timezone_text.py:52
-msgid "In which time zone are you located?"
+#: pyanaconda/ui/gui/spokes/source.py:510
+msgid "Failed to set up install source, check the repo url and proxy settings"
msgstr ""
-#: pyanaconda/textw/timezone_text.py:64
-msgid "System clock uses UTC"
+#: pyanaconda/ui/gui/spokes/source.py:547
+msgid "Not ready"
msgstr ""
-#: pyanaconda/textw/upgrade_text.py:117
-msgid "Reinstall System"
+#: pyanaconda/ui/gui/spokes/source.py:551
+#, python-format
+msgid "NFS server %s"
msgstr ""
-#: pyanaconda/textw/upgrade_text.py:126
-msgid "System to Upgrade"
+#: pyanaconda/ui/gui/spokes/source.py:553
+msgid "CD/DVD drive"
msgstr ""
-#: pyanaconda/textw/upgrade_text.py:127
+#: pyanaconda/ui/gui/spokes/source.py:558
+msgid "Closest mirror"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/source.py:560
+msgid "Error setting up software source"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/source.py:601
+#: pyanaconda/ui/gui/spokes/storage.py:404
+msgid "Probing storage..."
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/storage.py:136
+#, python-format
msgid ""
-"There seem to be one or more existing Linux installations on your system.\n"
+"You have plenty of space to install <b>%s</b>, so we can automatically\n"
+"configure the rest of the installation for you.\n"
"\n"
-"Please choose one to upgrade, or select 'Reinstall System' to freshly "
-"install your system."
+"You're all set!"
msgstr ""
-#: pyanaconda/textw/userauth_text.py:30
-msgid "Root Password"
+#: pyanaconda/ui/gui/spokes/storage.py:152
+#, python-format
+msgid ""
+"Your current <b>%s</b> software selection requires <b>%s</b> of available "
+"space."
msgstr ""
-#: pyanaconda/textw/userauth_text.py:33
+#: pyanaconda/ui/gui/spokes/storage.py:189
+#, python-format
msgid ""
-"Pick a root password. You must type it twice to ensure you know it and do "
-"not make a typing mistake. "
+"%s\n"
+"The disks you've selected have the following amounts of free space:"
msgstr ""
-#: pyanaconda/textw/userauth_text.py:67
-msgid "The root password must be at least 6 characters long."
+#: pyanaconda/ui/gui/spokes/storage.py:197
+#, python-format
+msgid ""
+"<b>You don't have enough space available to install %s</b>, but we can help "
+"you\n"
+"reclaim space by shrinking or removing existing partitions."
msgstr ""
-#: pyanaconda/textw/userauth_text.py:85
+#: pyanaconda/ui/gui/spokes/storage.py:215
#, python-format
msgid ""
-"You have provided a weak password: %s\n"
-"\n"
-"Would you like to continue with this password?"
+"%s\n"
+"You don't have enough space available to install <b>%s</b>, even if you used "
+"all of the free space\n"
+"available on the selected disks."
msgstr ""
-#: pyanaconda/textw/zipl_text.py:35
+#: pyanaconda/ui/gui/spokes/storage.py:225
+#, python-format
msgid ""
-"The z/IPL Boot Loader will be installed on your system after installation is "
-"complete. You can now enter any additional kernel parameters required by "
-"your machine or setup."
+"<b>You don't have enough space available to install %s</b>, even if you used "
+"all of the free space\n"
+"available on the selected disks. You could add more disks for additional "
+"space,\n"
+"modify your software selection to install a smaller version of <b>%s</b>, or "
+"quit the installer."
msgstr ""
-#: pyanaconda/textw/zipl_text.py:50
-msgid "z/IPL Configuration"
+#: pyanaconda/ui/gui/spokes/storage.py:248
+msgid "Checking storage configuration..."
msgstr ""
-#: data/liveinst/liveinst.desktop.in.h:1
-msgid "Install"
+#: pyanaconda/ui/gui/spokes/storage.py:266
+msgid "INSTALLATION DESTINATION"
msgstr ""
-#: data/liveinst/liveinst.desktop.in.h:2
-msgid "Install the live CD to your hard disk"
+#: pyanaconda/ui/gui/spokes/storage.py:343
+msgid "No disks selected"
msgstr ""
-#: data/liveinst/liveinst.desktop.in.h:3
-msgid "Install to Hard Drive"
+#: pyanaconda/ui/gui/spokes/storage.py:350
+msgid "Error checking storage configuration"
msgstr ""
-#: liveinst:5
-msgid "Starting Install to Hard Drive"
+#: pyanaconda/ui/gui/spokes/storage.py:352
+msgid "Automatic partitioning selected"
msgstr ""
-#: data/ui/GroupSelector.glade.h:1
-msgid ""
-"Some packages associated with this group are not required to be installed "
-"but may provide additional functionality. Please choose the packages which "
-"you would like to have installed."
+#: pyanaconda/ui/gui/spokes/storage.py:354
+msgid "Custom partitioning selected"
msgstr ""
-#: data/ui/GroupSelector.glade.h:2
-msgid "_Deselect"
+#: pyanaconda/ui/gui/spokes/storage.py:465
+msgid "No disks selected; please select at least one disk to install to."
msgstr ""
-#: data/ui/GroupSelector.glade.h:3
-msgid "_Deselect all optional packages"
+#: pyanaconda/ui/gui/spokes/welcome.py:243
+msgid "LANGUAGE"
msgstr ""
-#: data/ui/GroupSelector.glade.h:4
-msgid "_Optional packages"
+#: pyanaconda/ui/gui/spokes/lib/accordion.py:120
+msgid "DATA"
msgstr ""
-#: data/ui/GroupSelector.glade.h:5
-msgid "_Select"
+#: pyanaconda/ui/gui/spokes/lib/accordion.py:125
+msgid "SYSTEM"
msgstr ""
-#: data/ui/GroupSelector.glade.h:6
-msgid "_Select all optional packages"
+#: pyanaconda/ui/gui/spokes/lib/accordion.py:208
+#, python-format
+msgid "You haven't created any mount points for your %s %s installation yet:"
msgstr ""
-#: data/ui/GroupSelector.glade.h:7
-msgid "dialog1"
+#: pyanaconda/ui/gui/spokes/lib/accordion.py:223
+msgid "Or, create new mount points below with the '+' icon."
msgstr ""
-#: data/ui/account.glade.h:1
-msgid "Confirm:"
+#: pyanaconda/ui/gui/spokes/datetime_spoke.glade:83
+msgid "Region:"
msgstr ""
-#: data/ui/account.glade.h:2
-msgid "Root Password:"
+#: pyanaconda/ui/gui/spokes/datetime_spoke.glade:116
+msgid "City:"
msgstr ""
-#: data/ui/account.glade.h:3
-msgid ""
-"The root account is used for administering the system. Enter a password for "
-"the root user."
+#: pyanaconda/ui/gui/spokes/datetime_spoke.glade:158
+msgid "Network Time"
msgstr ""
-#: data/ui/adddrive.glade.h:1
-msgid "Active network interfaces:"
+#: pyanaconda/ui/gui/spokes/datetime_spoke.glade:249
+#: pyanaconda/ui/gui/spokes/datetime_spoke.glade:281
+msgid "00"
msgstr ""
-#: data/ui/adddrive.glade.h:2
-msgid "Add _FCoE SAN"
+#: pyanaconda/ui/gui/spokes/datetime_spoke.glade:265
+msgid ":"
msgstr ""
-#: data/ui/adddrive.glade.h:3
-msgid "Add _ZFCP LUN"
+#: pyanaconda/ui/gui/spokes/datetime_spoke.glade:393
+msgid " "
msgstr ""
-#: data/ui/adddrive.glade.h:4
-msgid "Add _iSCSI target"
+#: pyanaconda/ui/gui/spokes/datetime_spoke.glade:409
+msgid "PM"
msgstr ""
-#: data/ui/adddrive.glade.h:5
-msgid "Advanced Storage Options"
+#: pyanaconda/ui/gui/spokes/datetime_spoke.glade:453
+msgid "24-hour"
msgstr ""
-#: data/ui/adddrive.glade.h:6
-msgid "C_onfigure Network"
+#: pyanaconda/ui/gui/spokes/datetime_spoke.glade:471
+msgid "AM/PM"
msgstr ""
-#: data/ui/adddrive.glade.h:7
-msgid "How would you like to modify your drive configuration?"
+#: pyanaconda/ui/gui/spokes/datetime_spoke.glade:635
+msgid "Add and mark for usage NTP servers"
msgstr ""
-#: data/ui/adddrive.glade.h:8
-msgid "None"
+#: pyanaconda/ui/gui/spokes/datetime_spoke.glade:716
+msgid "Hostname"
msgstr ""
-#: data/ui/adddrive.glade.h:9
-msgid "_Add drive"
+#: pyanaconda/ui/gui/spokes/datetime_spoke.glade:731
+msgid "Working"
msgstr ""
-#: data/ui/adddrive.glade.h:10
-msgid "_Bind targets to network interfaces"
+#: pyanaconda/ui/gui/spokes/datetime_spoke.glade:739
+msgid "Use"
msgstr ""
-#: data/ui/addrepo.glade.h:1
-msgid "<b>Repository _name:</b>"
+#: pyanaconda/ui/gui/spokes/network.glade:75
+msgid ""
+"We'll need network access to fetch information about your location and to "
+"make software\n"
+"updates available for you."
msgstr ""
-#: data/ui/addrepo.glade.h:2
-msgid "<b>Repository _type:</b>"
+#: pyanaconda/ui/gui/spokes/network.glade:313
+#: pyanaconda/ui/gui/spokes/network.glade:689
+msgid "Hardware Address"
msgstr ""
-#: data/ui/addrepo.glade.h:4
-msgid "Configure _proxy"
+#: pyanaconda/ui/gui/spokes/network.glade:327
+#: pyanaconda/ui/gui/spokes/network.glade:703
+#: pyanaconda/ui/gui/spokes/network.glade:1213
+msgid "Speed"
msgstr ""
-#: data/ui/addrepo.glade.h:5
-msgid ""
-"HTTP/FTP\n"
-"CD/DVD\n"
-"NFS\n"
-"Hard Drive"
+#: pyanaconda/ui/gui/spokes/network.glade:369
+msgid "Subnet Mask"
msgstr ""
-#: data/ui/addrepo.glade.h:9
-msgid "Opt_ions"
+#: pyanaconda/ui/gui/spokes/network.glade:383
+#: pyanaconda/ui/gui/spokes/network.glade:745
+#: pyanaconda/ui/gui/spokes/network.glade:1386
+msgid "Default Route"
msgstr ""
-#: data/ui/addrepo.glade.h:10
-msgid ""
-"Please provide the configuration information for this software repository."
+#: pyanaconda/ui/gui/spokes/network.glade:398
+#: pyanaconda/ui/gui/spokes/network.glade:760
+#: pyanaconda/ui/gui/spokes/network.glade:1401
+msgid "DNS"
msgstr ""
-#: data/ui/addrepo.glade.h:11
-msgid "Proxy U_RL (host:port)"
+#: pyanaconda/ui/gui/spokes/network.glade:546
+msgid "C_onfigure..."
msgstr ""
-#: data/ui/addrepo.glade.h:12
-msgid "Proxy pass_word"
+#: pyanaconda/ui/gui/spokes/network.glade:883
+msgid "Security"
msgstr ""
-#: data/ui/addrepo.glade.h:13
-msgid "Proxy u_sername"
+#: pyanaconda/ui/gui/spokes/network.glade:897
+msgid "_Network Name"
msgstr ""
-#: data/ui/addrepo.glade.h:14
-msgid "Repository _URL"
+#: pyanaconda/ui/gui/spokes/network.glade:913
+msgid "Network Name"
msgstr ""
-#: data/ui/addrepo.glade.h:15
-msgid "Select A Directory"
+#: pyanaconda/ui/gui/spokes/network.glade:927
+msgid "Security Key"
msgstr ""
-#: data/ui/addrepo.glade.h:16
-msgid "URL is a _mirror list"
+#: pyanaconda/ui/gui/spokes/network.glade:1017
+msgid "_Use as Hotspot..."
msgstr ""
-#: data/ui/addrepo.glade.h:17
-msgid "_Directory"
+#: pyanaconda/ui/gui/spokes/network.glade:1037
+msgid "_Stop Hotspot..."
msgstr ""
-#: data/ui/addrepo.glade.h:18
-msgid "_Partition"
+#: pyanaconda/ui/gui/spokes/network.glade:1057
+#: pyanaconda/ui/gui/spokes/network.glade:1428
+#: pyanaconda/ui/gui/spokes/network.glade:1714
+msgid "_Configure..."
msgstr ""
-#: data/ui/addrepo.glade.h:19
-msgid "_Path"
+#: pyanaconda/ui/gui/spokes/network.glade:1199
+msgid "IMEI"
msgstr ""
-#: data/ui/addrepo.glade.h:20
-msgid "_Server"
+#: pyanaconda/ui/gui/spokes/network.glade:1227
+msgid "Provider"
msgstr ""
-#: data/ui/anaconda.glade.h:1
-msgid "Reboo_t"
+#: pyanaconda/ui/gui/spokes/network.glade:1542
+msgid "VPN Type"
msgstr ""
-#: data/ui/anaconda.glade.h:4
-msgid "_Next"
+#: pyanaconda/ui/gui/spokes/network.glade:1556
+msgid "Gateway"
msgstr ""
-#: data/ui/autopart.glade.h:1
-msgid "<b>Shrink partition _to size (in MB):</b>"
+#: pyanaconda/ui/gui/spokes/network.glade:1570
+msgid "Group Name"
msgstr ""
-#: data/ui/autopart.glade.h:2
-msgid "Re_view and modify partitioning layout"
+#: pyanaconda/ui/gui/spokes/network.glade:1584
+msgid "Group Password"
msgstr ""
-#: data/ui/autopart.glade.h:3
-msgid "Use _LVM"
+#: pyanaconda/ui/gui/spokes/network.glade:1598
+msgid "Username"
msgstr ""
-#: data/ui/autopart.glade.h:4
-msgid "Volume to Shrink"
+#: pyanaconda/ui/gui/spokes/network.glade:1842
+msgid "_Method"
msgstr ""
-#: data/ui/autopart.glade.h:5
-msgid ""
-"Which partition would you like to shrink to make room for your installation?"
+#: pyanaconda/ui/gui/spokes/network.glade:1870
+msgid "_Configuration URL"
msgstr ""
-#: data/ui/autopart.glade.h:6
-msgid "Which type of installation would you like?"
+#: pyanaconda/ui/gui/spokes/network.glade:1900
+msgid "_HTTP Proxy"
msgstr ""
-#: data/ui/autopart.glade.h:7
-msgid "_Encrypt system"
+#: pyanaconda/ui/gui/spokes/network.glade:1916
+msgid "H_TTPS Proxy"
msgstr ""
-#: data/ui/autopart.glade.h:8
-msgid "_Shrink"
+#: pyanaconda/ui/gui/spokes/network.glade:1932
+msgid "_FTP Proxy"
msgstr ""
-#: data/ui/blwhere.glade.h:1
-msgid "/boot"
+#: pyanaconda/ui/gui/spokes/network.glade:1948
+msgid "_Socks Host"
msgstr ""
-#: data/ui/blwhere.glade.h:2
-msgid "BIOS Drive Order"
+#: pyanaconda/ui/gui/spokes/network.glade:2155
+msgid "Unlock"
msgstr ""
-#: data/ui/blwhere.glade.h:3
-msgid "Boot loader device"
+#: pyanaconda/ui/gui/spokes/network.glade:2176
+msgid "Air_plane Mode"
msgstr ""
-#: data/ui/blwhere.glade.h:4
-msgid "First BIOS drive:"
+#: pyanaconda/ui/gui/spokes/software.glade:74
+msgid "DESKTOP"
msgstr ""
-#: data/ui/blwhere.glade.h:5
-msgid "Fourth BIOS drive:"
+#: pyanaconda/ui/gui/spokes/software.glade:113
+#: pyanaconda/ui/gui/spokes/software.glade:190
+#: pyanaconda/ui/gui/spokes/software.glade:205
+msgid "column"
msgstr ""
-#: data/ui/blwhere.glade.h:6
-msgid "MBR"
+#: pyanaconda/ui/gui/spokes/software.glade:156
+msgid "ADD-ONS"
msgstr ""
-#: data/ui/blwhere.glade.h:7
-msgid "Second BIOS drive:"
+#: pyanaconda/ui/gui/spokes/software.glade:230
+msgid "_Add custom add-on..."
msgstr ""
-#: data/ui/blwhere.glade.h:8
-msgid "Third BIOS drive:"
+#: pyanaconda/ui/gui/spokes/storage.glade:26
+#: pyanaconda/ui/gui/spokes/storage.glade:163
+msgid "Cancel & _add more disks"
msgstr ""
-#: data/ui/blwhere.glade.h:9
-msgid "Where would you like to install the boot loader for your system?"
+#: pyanaconda/ui/gui/spokes/storage.glade:83
+#: pyanaconda/ui/gui/spokes/storage.glade:239
+#: pyanaconda/ui/gui/spokes/storage.glade:503
+msgid "INSTALLATION OPTIONS"
msgstr ""
-#: data/ui/cleardisks.glade.h:1
-msgid "<b>Data Storage Devices</b> (to be mounted only)"
+#: pyanaconda/ui/gui/spokes/storage.glade:99
+#: pyanaconda/ui/gui/spokes/storage.glade:381
+#: pyanaconda/ui/gui/spokes/storage.glade:625
+msgid "Here we'll describe what your options are."
msgstr ""
-#: data/ui/cleardisks.glade.h:2
-msgid "<b>Install Target Devices</b>"
+#: pyanaconda/ui/gui/spokes/storage.glade:110
+msgid "Let me _review & customize the partitioning of the disks anyway."
msgstr ""
-#: data/ui/cleardisks.glade.h:3
-msgid ""
-"<b>Tip:</b> Install target devices will be reformatted and wiped of any "
-"data. Make sure you have backups."
+#: pyanaconda/ui/gui/spokes/storage.glade:182
+#: pyanaconda/ui/gui/spokes/storage.glade:445
+msgid "_Modify software selection"
msgstr ""
-#: data/ui/cleardisks.glade.h:4
-msgid ""
-"Below are the storage devices you've selected to be a part of this "
-"installation. Please indicate using the arrows below which devices you'd "
-"like to use as data devices (these will not be formatted, only mounted) and "
-"which devices you'd like to use as installation target devices (these may be "
-"formatted). Please also indicate which system drive will have the "
-"bootloader installed."
+#: pyanaconda/ui/gui/spokes/storage.glade:202
+msgid "Reclaim _space"
msgstr ""
-#: data/ui/create-storage.glade.h:1
+#: pyanaconda/ui/gui/spokes/storage.glade:252
msgid ""
-"<span size=\"small\" color=\"gray\">Create a RAID formatted partition</span>"
+"I don't need help; let me _review & customize disk partitioning to reclaim "
+"space."
msgstr ""
-#: data/ui/create-storage.glade.h:2
+#: pyanaconda/ui/gui/spokes/storage.glade:275
+#: pyanaconda/ui/gui/spokes/storage.glade:519
msgid ""
-"<span size=\"small\" color=\"gray\">Create a logical volume on selected "
-"volume group</span>"
+"Here we'll describe how much space is needed for the current software "
+"selection."
msgstr ""
-#: data/ui/create-storage.glade.h:3
-msgid ""
-"<span size=\"small\" color=\"gray\">Create an LVM formatted partition</span>"
+#: pyanaconda/ui/gui/spokes/storage.glade:297
+#: pyanaconda/ui/gui/spokes/storage.glade:541
+msgid "disk free"
msgstr ""
-#: data/ui/create-storage.glade.h:4
-msgid ""
-"<span size=\"small\" color=\"gray\">General purpose partition creation</span>"
+#: pyanaconda/ui/gui/spokes/storage.glade:314
+#: pyanaconda/ui/gui/spokes/storage.glade:558
+msgid "Free space available for use."
msgstr ""
-#: data/ui/create-storage.glade.h:5
-msgid ""
-"<span size=\"small\" color=\"gray\">Requires at least 1 free LVM formatted "
-"partition</span>"
+#: pyanaconda/ui/gui/spokes/storage.glade:328
+#: pyanaconda/ui/gui/spokes/storage.glade:572
+msgid "fs free"
msgstr ""
-#: data/ui/create-storage.glade.h:6
-msgid ""
-"<span size=\"small\" color=\"gray\">Requires at least 2 free RAID formatted "
-"partitions</span>"
+#: pyanaconda/ui/gui/spokes/storage.glade:345
+#: pyanaconda/ui/gui/spokes/storage.glade:589
+msgid "Free space unavailable but reclaimable from existing partitions."
msgstr ""
-#: data/ui/create-storage.glade.h:7
-msgid "C_reate"
+#: pyanaconda/ui/gui/spokes/storage.glade:426
+msgid "_Quit installer"
msgstr ""
-#: data/ui/create-storage.glade.h:8
-msgid "Create LVM"
+#: pyanaconda/ui/gui/spokes/storage.glade:465
+#: pyanaconda/ui/gui/spokes/custom.glade:22
+#: pyanaconda/ui/gui/spokes/custom.glade:239 pyanaconda/ui/gui/main.glade:20
+msgid "_Cancel"
msgstr ""
-#: data/ui/create-storage.glade.h:9
-msgid "Create Partition"
+#: pyanaconda/ui/gui/spokes/storage.glade:693
+msgid "LOCAL STANDARD DISKS"
msgstr ""
-#: data/ui/create-storage.glade.h:10
-msgid "Create Software RAID"
+#: pyanaconda/ui/gui/spokes/storage.glade:755
+#: pyanaconda/ui/gui/spokes/custom.glade:1585
+msgid "summary"
msgstr ""
-#: data/ui/create-storage.glade.h:11
-msgid "Create Storage"
+#: pyanaconda/ui/gui/spokes/storage.glade:775
+#: pyanaconda/ui/gui/hubs/summary.glade:91
+msgid "_CONTINUE"
msgstr ""
-#: data/ui/create-storage.glade.h:12
-msgid "LVM Logical Volume"
+#: pyanaconda/ui/gui/spokes/keyboard.glade:76
+msgid "ADD A KEYBOARD LAYOUT"
msgstr ""
-#: data/ui/create-storage.glade.h:13
-msgid "LVM Physical Volume"
+#: pyanaconda/ui/gui/spokes/keyboard.glade:91
+msgid "You may add a keyboard layout by selecting it below:"
msgstr ""
-#: data/ui/create-storage.glade.h:14
-msgid "LVM Volume Group"
+#: pyanaconda/ui/gui/spokes/keyboard.glade:120
+msgid "Name"
msgstr ""
-#: data/ui/create-storage.glade.h:16
-msgid "RAID Partition"
+#: pyanaconda/ui/gui/spokes/keyboard.glade:219
+msgid ""
+"Which keyboard layouts would you like to use on this system? You may move\n"
+"any layout to the top of the list to select it as the default."
msgstr ""
-#: data/ui/create-storage.glade.h:17
-msgid "Standard Partition"
+#: pyanaconda/ui/gui/spokes/keyboard.glade:261
+msgid "name"
msgstr ""
-#: data/ui/detailed-dialog.glade.h:1
-msgid "Info"
+#: pyanaconda/ui/gui/spokes/keyboard.glade:388
+msgid "Test the selected layout below:"
msgstr ""
-#: data/ui/detailed-dialog.glade.h:2
-msgid "_Details"
+#: pyanaconda/ui/gui/spokes/keyboard.glade:414
+msgid "Alt + Shift to switch layouts."
msgstr ""
-#: data/ui/device-options.glade.h:1
-msgid "Device Options"
+#: pyanaconda/ui/gui/spokes/keyboard.glade:427
+msgid "_Options..."
msgstr ""
-#: data/ui/device-options.glade.h:2
-msgid ""
-"If enabled the multipath devices are named following the /dev/mapper/"
-"mpath<letter> format instead of /dev/mapper/<wwid>. Note that the user "
-"friendly names are assigned by multipath tools and are not guaranteed to be "
-"the same between installs."
+#: pyanaconda/ui/gui/spokes/source.glade:37
+msgid "_Add"
msgstr ""
-#: data/ui/device-options.glade.h:3
-msgid "Use _friendly names for multipath devices"
+#: pyanaconda/ui/gui/spokes/source.glade:70
+msgid "ADD A CUSTOM ADD-ON"
msgstr ""
-#: data/ui/fcoe-config.glade.h:1
-msgid "Configure FCoE Parameters"
+#: pyanaconda/ui/gui/spokes/source.glade:86
+msgid "WHERE IS THE YUM REPOSITORY FOR YOUR ADD-ON?"
msgstr ""
-#: data/ui/fcoe-config.glade.h:2
-msgid "NIC:"
+#: pyanaconda/ui/gui/spokes/source.glade:144
+msgid "Repository"
msgstr ""
-#: data/ui/fcoe-config.glade.h:3
-msgid ""
-"Please select the network interface which is connected to\n"
-"your FCoE switch."
+#: pyanaconda/ui/gui/spokes/source.glade:195
+msgid "Fedora People Repositories"
msgstr ""
-#: data/ui/fcoe-config.glade.h:5
-msgid "Use DCB"
+#: pyanaconda/ui/gui/spokes/source.glade:314
+msgid "Standard YUM repository:"
msgstr ""
-#: data/ui/fcoe-config.glade.h:6
-msgid "_Add FCoE Disk(s)"
+#: pyanaconda/ui/gui/spokes/source.glade:451
+msgid "_DONE"
msgstr ""
-#: data/ui/filter.glade.h:1
-msgid ""
-"<b>Tip:</b> Selected drives will not be formatted unless you choose to do so "
-"later during installation. Also, note that post-installation you may mount "
-"drives you did not select here by modifying your /etc/fstab file."
+#: pyanaconda/ui/gui/spokes/source.glade:486
+msgid "MEDIA VERIFICATION"
msgstr ""
-#: data/ui/filter.glade.h:2
-msgid "Basic Devices"
+#: pyanaconda/ui/gui/spokes/source.glade:513
+msgid "Verifying media, please wait..."
msgstr ""
-#: data/ui/filter.glade.h:3
-msgid "Filter By:"
+#: pyanaconda/ui/gui/spokes/source.glade:606
+msgid "_CANCEL"
msgstr ""
-#: data/ui/filter.glade.h:4
-msgid "Firmware RAID"
+#: pyanaconda/ui/gui/spokes/source.glade:623
+msgid "_ADD"
msgstr ""
-#: data/ui/filter.glade.h:5
-msgid "Identifier:"
+#: pyanaconda/ui/gui/spokes/source.glade:653
+msgid "_Enable HTTP Proxy"
msgstr ""
-#: data/ui/filter.glade.h:6
-msgid ""
-"Interconnect\n"
-"Vendor\n"
-"Identifier"
+#: pyanaconda/ui/gui/spokes/source.glade:688
+msgid "<b>Proxy URL</b>"
msgstr ""
-#: data/ui/filter.glade.h:9
-msgid "LUN:"
+#: pyanaconda/ui/gui/spokes/source.glade:703
+msgid "<span size=\"small\"><b>Example:</b> squid.mysite.org:3128</span>"
msgstr ""
-#: data/ui/filter.glade.h:10
-msgid "Multipath Devices"
+#: pyanaconda/ui/gui/spokes/source.glade:739
+msgid "_Use Authentication"
msgstr ""
-#: data/ui/filter.glade.h:11
-msgid "Other SAN Devices"
+#: pyanaconda/ui/gui/spokes/source.glade:768
+msgid "<b>Username</b>"
msgstr ""
-#: data/ui/filter.glade.h:12
-msgid ""
-"Please select the drives you'd like to install the operating system on, as "
-"well as any drives you'd like to automatically mount on your system:"
+#: pyanaconda/ui/gui/spokes/source.glade:783
+msgid "<b>Password</b>"
msgstr ""
-#: data/ui/filter.glade.h:13
-msgid ""
-"Port / Target / LUN\n"
-"Target Identifier"
+#: pyanaconda/ui/gui/spokes/source.glade:884
+msgid "WHICH INSTALLATION SOURCE WOULD YOU LIKE TO USE?"
msgstr ""
-#: data/ui/filter.glade.h:15
-msgid "Port:"
+#: pyanaconda/ui/gui/spokes/source.glade:897
+msgid "_Auto-detected install media:"
msgstr ""
-#: data/ui/filter.glade.h:16
-msgid "Search"
+#: pyanaconda/ui/gui/spokes/source.glade:954
+#: pyanaconda/ui/gui/spokes/source.glade:1053
+msgid "_Verify"
msgstr ""
-#: data/ui/filter.glade.h:17
-msgid "Search By:"
+#: pyanaconda/ui/gui/spokes/source.glade:979
+msgid "_ISO file:"
msgstr ""
-#: data/ui/filter.glade.h:18
-msgid "Search Results:"
+#: pyanaconda/ui/gui/spokes/source.glade:1008
+msgid "Device:"
msgstr ""
-#: data/ui/filter.glade.h:20
-#, no-c-format
-msgid "Selected devices: %s (%s) out of %s (%s)."
+#: pyanaconda/ui/gui/spokes/source.glade:1036
+msgid "_Choose an ISO"
msgstr ""
-#: data/ui/filter.glade.h:21
-msgid "Show Identifiers that Include:"
+#: pyanaconda/ui/gui/spokes/source.glade:1078
+msgid "On the _network:"
msgstr ""
-#: data/ui/filter.glade.h:22
-msgid "Show Only Devices From:"
+#: pyanaconda/ui/gui/spokes/source.glade:1145
+msgid "_Proxy setup..."
msgstr ""
-#: data/ui/filter.glade.h:23
-msgid "Show Only Devices Using:"
+#: pyanaconda/ui/gui/spokes/source.glade:1176
+msgid "NFS mount options:"
msgstr ""
-#: data/ui/filter.glade.h:24
-msgid "Target:"
+#: pyanaconda/ui/gui/spokes/source.glade:1189
+#: pyanaconda/ui/gui/spokes/source.glade:1190
+msgid "This field is optional."
msgstr ""
-#: data/ui/filter.glade.h:25
-msgid "_Add Advanced Target"
+#: pyanaconda/ui/gui/spokes/source.glade:1220
+msgid "UPDATES"
msgstr ""
-#: data/ui/filter.glade.h:26
-msgid "_Device Options"
+#: pyanaconda/ui/gui/spokes/source.glade:1233
+msgid ""
+"_Don't install the latest available software updates. Install the default "
+"versions provided by the install source above."
msgstr ""
-#: data/ui/iscsi-dialogs.glade.h:1
-msgid "CHAP Password:"
+#: pyanaconda/ui/gui/spokes/welcome.glade:21
+msgid "_Get me out of here!"
msgstr ""
-#: data/ui/iscsi-dialogs.glade.h:2
-msgid "CHAP Username:"
+#: pyanaconda/ui/gui/spokes/welcome.glade:37
+msgid "_I accept my fate."
msgstr ""
-#: data/ui/iscsi-dialogs.glade.h:3
-msgid "Check the nodes you wish to log into:"
+#: pyanaconda/ui/gui/spokes/welcome.glade:70
+msgid "This is unstable, pre-release software."
msgstr ""
-#: data/ui/iscsi-dialogs.glade.h:4
-msgid "Reason:"
+#: pyanaconda/ui/gui/spokes/welcome.glade:101
+msgid ""
+"You wake up inside an OS installer in Timbuktu, and it's six\n"
+"months in the future. But, there are bugs. Bugs everywhere.\n"
+"Bugs you must live with. This OS of the future isn't a stable\n"
+"OS you can rely on. It's for testing purposes only."
msgstr ""
-#: data/ui/iscsi-dialogs.glade.h:5
-msgid "Retry _Login"
+#: pyanaconda/ui/gui/spokes/welcome.glade:242
+msgid "WELCOME TO %s %s."
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/welcome.glade:259
+msgid "What language would you like to use during the installation process?"
msgstr ""
-#: data/ui/iscsi-dialogs.glade.h:6
-msgid "Reverse CHAP Password:"
+#: pyanaconda/ui/gui/spokes/welcome.glade:303
+msgid "nativeName"
msgstr ""
-#: data/ui/iscsi-dialogs.glade.h:7
-msgid "Reverse CHAP Username:"
+#: pyanaconda/ui/gui/spokes/welcome.glade:319
+msgid "englishName"
msgstr ""
-#: data/ui/iscsi-dialogs.glade.h:8
-msgid "Start _Discovery"
+#: pyanaconda/ui/gui/spokes/custom.glade:40
+msgid "_Add mount point"
msgstr ""
-#: data/ui/iscsi-dialogs.glade.h:9
-msgid "Successfully logged in and attached the following nodes:"
+#: pyanaconda/ui/gui/spokes/custom.glade:75
+msgid "<b>Desired Capacity:</b>"
msgstr ""
-#: data/ui/iscsi-dialogs.glade.h:10
-msgid "Target IP Address:"
+#: pyanaconda/ui/gui/spokes/custom.glade:90
+msgid "<b>Mount Point:</b>"
msgstr ""
-#: data/ui/iscsi-dialogs.glade.h:11
+#: pyanaconda/ui/gui/spokes/custom.glade:105
+msgid "ADD A NEW MOUNT POINT"
+msgstr ""
+
+#: pyanaconda/ui/gui/spokes/custom.glade:123
msgid ""
-"To use iSCSI disks, you must provide the address of your iSCSI target and "
-"the iSCSI initiator name you've configured for your host."
+"More customization options are available\n"
+"after creating the mount point below."
msgstr ""
-#: data/ui/iscsi-dialogs.glade.h:12
+#: pyanaconda/ui/gui/spokes/custom.glade:169
msgid ""
-"What kind of iSCSI <b>discovery authentication</b> do you wish to perform:"
+"That mount point is already in\n"
+"use. Try something else?"
msgstr ""
-#: data/ui/iscsi-dialogs.glade.h:13
-msgid "What kind of iSCSI <b>login authentication</b> do you wish to perform:"
+#: pyanaconda/ui/gui/spokes/custom.glade:194
+msgid "eg: \"20 GB\", \"500mb\" (minus the quotation marks)"
msgstr ""
-#: data/ui/iscsi-dialogs.glade.h:14
-msgid "_Cancel"
+#: pyanaconda/ui/gui/spokes/custom.glade:256
+msgid "_Delete It"
msgstr ""
-#: data/ui/iscsi-dialogs.glade.h:15
-msgid "_Login"
+#: pyanaconda/ui/gui/spokes/custom.glade:283
+msgid ""
+"Are you sure you want to delete\n"
+"all of the data on %s?"
msgstr ""
-#: data/ui/iscsi-dialogs.glade.h:16
-msgid "_OK"
+#: pyanaconda/ui/gui/spokes/custom.glade:434
+msgid ""
+"When you create mount points for your %s %s install,\n"
+"you'll be able to view their details here."
msgstr ""
-#: data/ui/iscsi-dialogs.glade.h:17
-msgid "iSCSI Discovered Nodes"
+#: pyanaconda/ui/gui/spokes/custom.glade:457
+msgid "Selected Device"
msgstr ""
-#: data/ui/iscsi-dialogs.glade.h:18
-msgid "iSCSI Discovery Details"
+#: pyanaconda/ui/gui/spokes/custom.glade:475
+msgid "Device description"
msgstr ""
-#: data/ui/iscsi-dialogs.glade.h:19
-msgid "iSCSI Initiator Name:"
+#: pyanaconda/ui/gui/spokes/custom.glade:514
+msgid "<b>Label:</b>"
msgstr ""
-#: data/ui/iscsi-dialogs.glade.h:20
-msgid "iSCSI Login Results"
+#: pyanaconda/ui/gui/spokes/custom.glade:542
+msgid "<b>Desired Capacity (MB):</b>"
msgstr ""
-#: data/ui/iscsi-dialogs.glade.h:21
-msgid "iSCSI Nodes Login"
+#: pyanaconda/ui/gui/spokes/custom.glade:591
+msgid "<b>Device Type:</b>"
msgstr ""
-#: data/ui/iscsi-dialogs.glade.h:22
-msgid "iSCSI login has failed for the following nodes:"
+#: pyanaconda/ui/gui/spokes/custom.glade:606
+msgid "<b>File System:</b>"
msgstr ""
-#: data/ui/lukspassphrase.glade.h:1
-msgid ""
-"Also add this passphrase to all existing encrypted devices to streamline the "
-"boot process"
+#: pyanaconda/ui/gui/spokes/custom.glade:651
+msgid "Encrypt"
msgstr ""
-#: data/ui/lukspassphrase.glade.h:2
-msgid ""
-"Choose a passphrase for this encrypted partition. You will be prompted for "
-"the passphrase during system boot."
+#: pyanaconda/ui/gui/spokes/custom.glade:685
+#: pyanaconda/ui/gui/spokes/custom.glade:985
+#: pyanaconda/ui/gui/spokes/custom.glade:1122
+msgid "Redundancy (mirror)"
msgstr ""
-#: data/ui/lukspassphrase.glade.h:3
-msgid "Confirm passphrase:"
+#: pyanaconda/ui/gui/spokes/custom.glade:705
+#: pyanaconda/ui/gui/spokes/custom.glade:749
+#: pyanaconda/ui/gui/spokes/custom.glade:793
+#: pyanaconda/ui/gui/spokes/custom.glade:838
+#: pyanaconda/ui/gui/spokes/custom.glade:871
+#: pyanaconda/ui/gui/spokes/custom.glade:915
+#: pyanaconda/ui/gui/spokes/custom.glade:1005
+#: pyanaconda/ui/gui/spokes/custom.glade:1049
+#: pyanaconda/ui/gui/spokes/custom.glade:1142
+#: pyanaconda/ui/gui/spokes/custom.glade:1186
+#: pyanaconda/ui/gui/spokes/custom.glade:1230
+#: pyanaconda/ui/gui/spokes/custom.glade:1275
+#: pyanaconda/ui/gui/spokes/custom.glade:1308
+msgid "(-0Gb)"
msgstr ""
-#: data/ui/lukspassphrase.glade.h:4
-msgid "Enter passphrase for encrypted partition"
+#: pyanaconda/ui/gui/spokes/custom.glade:730
+#: pyanaconda/ui/gui/spokes/custom.glade:1030
+#: pyanaconda/ui/gui/spokes/custom.glade:1167
+msgid "Optimized performance (stripe)"
msgstr ""
-#: data/ui/lukspassphrase.glade.h:5
-msgid "Enter passphrase:"
+#: pyanaconda/ui/gui/spokes/custom.glade:774
+#: pyanaconda/ui/gui/spokes/custom.glade:1211
+msgid "Error detection (parity)"
msgstr ""
-#: data/ui/network.glade.h:1
-msgid "Hostname:"
+#: pyanaconda/ui/gui/spokes/custom.glade:819
+#: pyanaconda/ui/gui/spokes/custom.glade:1256
+msgid "Distributed"
msgstr ""
-#: data/ui/network.glade.h:2
-msgid ""
-"Please name this computer. The hostname identifies the computer on a "
-"network."
+#: pyanaconda/ui/gui/spokes/custom.glade:851
+#: pyanaconda/ui/gui/spokes/custom.glade:1288
+msgid "Redundant"
msgstr ""
-#: data/ui/network.glade.h:3
-msgid "_Configure Network"
+#: pyanaconda/ui/gui/spokes/custom.glade:896
+msgid "Compression"
msgstr ""
-#: data/ui/tasksel.glade.h:1
-msgid "Customize _later"
+#: pyanaconda/ui/gui/spokes/custom.glade:939
+#: pyanaconda/ui/gui/spokes/custom.glade:1073
+#: pyanaconda/ui/gui/spokes/custom.glade:1332
+msgid "<b>Technology:</b>"
msgstr ""
-#: data/ui/tasksel.glade.h:2
-msgid ""
-"Please select any additional repositories that you want to use for software "
-"installation."
+#: pyanaconda/ui/gui/spokes/custom.glade:1400
+msgid "Customize..."
msgstr ""
-#: data/ui/tasksel.glade.h:4
-#, no-c-format
-msgid ""
-"The default installation of %s includes a set of software applicable for "
-"general internet usage. What additional tasks would you like your system to "
-"support?"
+#: pyanaconda/ui/gui/spokes/custom.glade:1473
+msgid "<span size=\"small\" foreground=\"white\">AVAILABLE SPACE</span>"
msgstr ""
-#: data/ui/tasksel.glade.h:5
-msgid ""
-"You can further customize the software selection now, or after install via "
-"the software management application."
+#: pyanaconda/ui/gui/spokes/custom.glade:1525
+msgid "<span size=\"small\" foreground=\"white\">TOTAL SPACE</span>"
msgstr ""
-#: data/ui/tasksel.glade.h:6
-msgid "_Add additional software repositories"
+#: pyanaconda/ui/gui/spokes/custom.glade:1564
+msgid "_FINISH PARTITIONING"
msgstr ""
-#: data/ui/tasksel.glade.h:7
-msgid "_Customize now"
+#: pyanaconda/ui/gui/spokes/lib/cart.glade:22
+#: pyanaconda/ui/gui/spokes/lib/cart.glade:76
+msgid "SELECTED DISKS"
msgstr ""
-#: data/ui/tasksel.glade.h:8
-msgid "_Modify repository"
+#: pyanaconda/ui/gui/spokes/lib/cart.glade:107
+msgid "Description"
msgstr ""
-#: data/ui/zfcp-config.glade.h:1
-msgid "<b>Device number:</b>"
+#: pyanaconda/ui/gui/spokes/lib/cart.glade:120
+msgid "Capacity"
msgstr ""
-#: data/ui/zfcp-config.glade.h:2
-msgid "<b>FCP LUN:</b>"
+#: pyanaconda/ui/gui/spokes/lib/cart.glade:133
+msgid "Free"
msgstr ""
-#: data/ui/zfcp-config.glade.h:3
-msgid "<b>WWPN:</b>"
+#: pyanaconda/ui/gui/spokes/lib/cart.glade:145
+msgid "Id"
msgstr ""
-#: data/ui/zfcp-config.glade.h:4
-msgid "Add FCP device"
+#: pyanaconda/ui/gui/spokes/lib/cart.glade:188
+msgid "Disk summary goes here"
msgstr ""
-#: data/ui/zfcp-config.glade.h:5
+#: pyanaconda/ui/gui/spokes/lib/detailederror.glade:23
msgid ""
-"zSeries machines can access industry-standard SCSI devices via Fibre Channel "
-"(FCP). You need to provide a 16 bit device number, a 64 bit World Wide Port "
-"Name (WWPN), and a 64 bit FCP LUN for each device."
+"The following software marked for installation has errors. This is likely "
+"caused by an error with\n"
+"your installation source. You can attempt to remove these packages from "
+"your installation,\n"
+"change your installation source, or quit the installer."
msgstr ""
-#: data/ui/reinitialize-dialog.glade.h:1
+#: pyanaconda/ui/gui/main.glade:80
msgid ""
-"<span size=\"large\" weight=\"bold\">The storage device below may contain "
-"data.</span>"
+"Are you sure you wish to quit the\n"
+"installation process?"
msgstr ""
-#: data/ui/reinitialize-dialog.glade.h:2
+#: pyanaconda/ui/gui/hubs/summary.glade:73
+msgid "_QUIT"
+msgstr ""
+
+#: pyanaconda/ui/gui/hubs/progress.glade:134
msgid ""
-"Apply my choice to all devices with undetected partitions or filesystems."
+"%s is now successfully installed on your system and ready\n"
+"for you to use! Go ahead and reboot to start using it!"
msgstr ""
-#: data/ui/reinitialize-dialog.glade.h:4
+#: pyanaconda/ui/gui/hubs/progress.glade:146
+msgid "_REBOOT"
+msgstr ""
+
+#: data/liveinst/gnome/fedora-welcome:64
+msgid "Welcome to Fedora"
+msgstr ""
+
+#: data/liveinst/gnome/fedora-welcome:93
+msgid "Try Fedora"
+msgstr ""
+
+#: data/liveinst/gnome/fedora-welcome:111
msgid ""
-"We could not detect partitions or filesystems on this device.\n"
-"\n"
-"This could be because the device is <b>blank</b>, <b>unpartitioned</b>, or "
-"<b>virtual</b>. If not, there may be data on the device that can not be "
-"recovered if you use it in this installation. We can remove the device from "
-"this installation to protect the data.\n"
-"\n"
-"Are you sure this device does not contain valuable data?"
+"You are currently running Fedora from live media.\n"
+"You can install Fedora now, or choose \"Install to Hard Drive\" in the "
+"Activities Overview at any later time."
+msgstr ""
+
+#: data/liveinst/gnome/fedora-welcome:129
+msgid ""
+"You can choose \"Install to Hard Drive\"\n"
+"in the Activities Overview at any later time."
+msgstr ""
+
+#: data/liveinst/gnome/fedora-welcome:132
+msgid "Close"
msgstr ""
-#: data/ui/reinitialize-dialog.glade.h:9
-msgid "_No, keep any data"
+#: data/liveinst/liveinst.desktop.in.h:1
+msgid "Install to Hard Drive"
+msgstr ""
+
+#: data/liveinst/liveinst.desktop.in.h:2
+msgid "Install"
msgstr ""
-#: data/ui/reinitialize-dialog.glade.h:10
-msgid "_Yes, discard any data"
+#: data/liveinst/liveinst.desktop.in.h:3
+msgid "Install the live CD to your hard disk"
+msgstr ""
+
+#: liveinst:5
+msgid "Starting Install to Hard Drive"
msgstr ""
#: data/lang-table.h:1
diff --git a/pyanaconda/__init__.py b/pyanaconda/__init__.py
index eb44ca90e..cf40ccd04 100644
--- a/pyanaconda/__init__.py
+++ b/pyanaconda/__init__.py
@@ -261,16 +261,18 @@ class Anaconda(object):
self.methodstr = methodstr
def write(self):
+ import network
self.writeXdriver()
self.instLanguage.write()
self.timezone.write()
+ network.write_sysconfig_network()
+ network.disableIPV6()
+ network.copyConfigToPath(ROOT_PATH)
if not self.ksdata:
- self.instClass.setNetworkOnbootDefault(self.network)
- self.network.write()
- self.network.copyConfigToPath()
- self.network.disableNMForStorageDevices(self)
- self.network.autostartFCoEDevices(self)
+ self.instClass.setNetworkOnbootDefault()
+ network.disableNMForStorageDevices(self.storage)
+ network.autostartFCoEDevices(self.storage)
self.desktop.write()
self.security.write()
self.firewall.write()
diff --git a/pyanaconda/anaconda_log.py b/pyanaconda/anaconda_log.py
index f9d884e73..40c1938f2 100644
--- a/pyanaconda/anaconda_log.py
+++ b/pyanaconda/anaconda_log.py
@@ -44,6 +44,7 @@ MAIN_LOG_FILE = "/tmp/anaconda.log"
MAIN_LOG_TTY = "/dev/tty3"
PROGRAM_LOG_FILE = "/tmp/program.log"
STORAGE_LOG_FILE = "/tmp/storage.log"
+PACKAGING_LOG_FILE = "/tmp/packaging.log"
ANACONDA_SYSLOG_FACILITY = SysLogHandler.LOG_LOCAL1
logLevelMap = {"debug": logging.DEBUG, "info": logging.INFO,
@@ -151,6 +152,13 @@ class AnacondaLog:
minLevel=logging.DEBUG)
self.forwardToSyslog(program_logger)
+ # Create the packaging logger.
+ packaging_logger = logging.getLogger("packaging")
+ packaging_logger.setLevel(logging.DEBUG)
+ self.addFileHandler(PACKAGING_LOG_FILE, packaging_logger,
+ minLevel=logging.DEBUG)
+ self.forwardToSyslog(packaging_logger)
+
# Create a second logger for just the stuff we want to dup on
# stdout. Anything written here will also get passed up to the
# parent loggers for processing and possibly be written to the
@@ -224,7 +232,7 @@ class AnacondaLog:
def setupVirtio(self):
"""Setup virtio rsyslog logging.
"""
- TEMPLATE = "*.* %s\n"
+ TEMPLATE = "*.* %s;anaconda_syslog\n"
if not os.path.exists(self.VIRTIO_PORT) \
or not os.access(self.VIRTIO_PORT, os.W_OK):
diff --git a/pyanaconda/backend.py b/pyanaconda/backend.py
index 53e8a9f05..4a3e6c1c5 100644
--- a/pyanaconda/backend.py
+++ b/pyanaconda/backend.py
@@ -25,7 +25,6 @@ import shutil
import iutil
import os, sys
import logging
-import backend_log
from constants import *
import isys
@@ -98,7 +97,6 @@ class AnacondaBackend:
storage.writeEscrowPackets(anaconda)
sys.stdout.flush()
- backend_log.log.stop()
def doInstall(self, anaconda):
log.warning("doInstall not implemented for backend!")
@@ -126,7 +124,6 @@ class AnacondaBackend:
shutil.rmtree (syslogname)
except OSError:
pass
- backend_log.log.start(instPath, syslogname)
if self.anaconda.upgrade:
self.modeText = _("%s Upgrading %s\n")
diff --git a/pyanaconda/backend_log.py b/pyanaconda/backend_log.py
deleted file mode 100644
index 9125d7303..000000000
--- a/pyanaconda/backend_log.py
+++ /dev/null
@@ -1,95 +0,0 @@
-# backend_log.py
-# Logging infrastructure for Anaconda's backend.
-#
-# Copyright (C) 2009 Red Hat, Inc.
-#
-# This copyrighted material is made available to anyone wishing to use,
-# modify, copy, or redistribute it subject to the terms and conditions of
-# the GNU General Public License v.2, or (at your option) any later version.
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY expressed or implied, including the implied warranties 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. Any Red Hat trademarks that are incorporated in the
-# source code or documentation are not subject to the GNU General Public
-# License and may only be used or replicated with the express permission of
-# Red Hat, Inc.
-#
-# Red Hat Author(s): Ales Kozumplik <akozumpl@redhat.com>
-#
-
-import logging
-import os
-import signal
-
-import anaconda_log
-import iutil
-
-SYSLOG_PATH = '/sbin/rsyslogd'
-SYSLOG_PIDFILE = '/var/run/rsyslog_backend.pid'
-SYSLOG_CFGFILE = '/tmp/rsyslog_backend.conf'
-
-CFG_TEMPLATE = """
-$ModLoad imuxsock
-$InputUnixListenSocketHostName sysimage
-$AddUnixListenSocket %(socket)s
-+sysimage
-*.* %(logfile)s;RSYSLOG_TraditionalFileFormat
-%(remote_syslog)s
-"""
-
-global_log = logging.getLogger("anaconda")
-class BackendSyslog:
- def __init__(self):
- pass
-
- def build_cfg(self, root, log):
- socket = "%s/dev/log" % (root, )
- remote_syslog = ''
- if anaconda_log.logger.remote_syslog:
- remote_syslog = "*.* @@%s" % (anaconda_log.logger.remote_syslog, )
-
- cfg = CFG_TEMPLATE % {
- 'socket' : socket,
- 'logfile' : log,
- 'remote_syslog' : remote_syslog
- }
- with open(SYSLOG_CFGFILE, 'w') as cfg_file:
- cfg_file.write(cfg)
-
- def start(self, root, log):
- """ Start an rsyslogd instance dedicated for the sysimage.
-
- Other possibility would be to change configuration and SIGHUP the
- existing instance, but it could lose some of its internal queues and
- give us problems with remote logging.
- """
- self.build_cfg(root, log)
- args = ['-c', '4',
- '-f', SYSLOG_CFGFILE,
- '-i', str(SYSLOG_PIDFILE)]
- status = iutil.execWithRedirect(SYSLOG_PATH, args)
- if status == 0:
- global_log.info("Backend logger started.")
- else:
- global_log.error("Unable to start backend logger")
-
- def stop(self):
- try:
- with open(SYSLOG_PIDFILE, 'r') as pidfile:
- pid = int(pidfile.read())
- os.kill(pid, signal.SIGKILL)
- except Exception:
- pass
- else:
- global_log.info("Backend logger stopped.")
-
- try:
- os.unlink(SYSLOG_CFGFILE)
- except OSError as e:
- global_log.error("Failed to unlink backend logger config file: %s"
- % e)
-
-log = BackendSyslog()
diff --git a/pyanaconda/bootloader.py b/pyanaconda/bootloader.py
index 991c8de80..ed8040ff5 100644
--- a/pyanaconda/bootloader.py
+++ b/pyanaconda/bootloader.py
@@ -28,12 +28,13 @@ import struct
from pyanaconda import iutil
from pyanaconda.storage.devicelibs import mdraid
-from pyanaconda.isys import sync
+from pyanaconda.isys import sync, getMacAddress
from pyanaconda.product import productName
from pyanaconda.flags import flags
from pyanaconda.constants import *
from pyanaconda.storage.errors import StorageError
from pyanaconda.storage.fcoe import fcoe
+import pyanaconda.network
import gettext
_ = lambda x: gettext.ldgettext("anaconda", x)
@@ -750,14 +751,11 @@ class BootLoader(object):
Keyword Arguments:
storage - a pyanaconda.storage.Storage instance
- network - a pyanaconda.network.Network instance (for network
- storage devices' boot arguments)
All other arguments are expected to have a dracutSetupArgs()
method.
"""
storage = kwargs.pop("storage", None)
- network = kwargs.pop("network", None)
#
# FIPS
@@ -811,15 +809,7 @@ class BootLoader(object):
# network storage
# XXX this is nothing to be proud of
if isinstance(dep, NetworkStorageDevice):
- if network is None:
- log.error("missing network instance for setup of boot "
- "command line for network storage device %s"
- % dep.name)
- raise BootLoaderError("missing network instance when "
- "setting boot args for network "
- "storage device")
-
- setup_args = network.dracutSetupArgs(dep)
+ setup_args = pyanaconda.network.dracutSetupArgs(dep)
self.boot_args.update(setup_args)
self.dracut_args.update(setup_args)
@@ -845,7 +835,7 @@ class BootLoader(object):
# Dracut needs the explicit ifname= because biosdevname
# fails to rename the iface (because of BFS booting from it).
for nic, dcb, auto_vlan in fcoe().nics:
- hwaddr = network.netdevices[nic].get("HWADDR")
+ hwaddr = getMacAddress(nic)
self.boot_args.add("ifname=%s:%s" % (nic, hwaddr.lower()))
#
@@ -1485,6 +1475,10 @@ class GRUB2(GRUB):
def write_config(self):
self.write_config_console(None)
+ # See if we have a password and if so update the boot args before we
+ # write out the defaults file.
+ if self.password or self.encrypted_password:
+ self.boot_args.add("rd.shell=0")
self.write_defaults()
# if we fail to setup password auth we should complete the
@@ -1522,13 +1516,13 @@ class GRUB2(GRUB):
# XXX will installing to multiple drives work as expected with GRUBv2?
for (stage1dev, stage2dev) in self.install_targets:
- args += ["--no-floppy", stage1dev.path]
+ grub_args = args + ["--no-floppy", stage1dev.path]
if stage1dev == stage2dev:
# This is hopefully a temporary hack. GRUB2 currently refuses
# to install to a partition's boot block without --force.
- args.insert(0, '--force')
+ grub_args.insert(0, '--force')
- rc = iutil.execWithRedirect("grub2-install", args,
+ rc = iutil.execWithRedirect("grub2-install", grub_args,
stdout="/dev/tty5", stderr="/dev/tty5",
root=ROOT_PATH,
env_prune=['MALLOC_PERTURB_'])
@@ -1668,6 +1662,8 @@ class YabootSILOBase(BootLoader):
continue
args = Arguments()
+ if self.password or self.encrypted_password:
+ args.add("rd.shell=0")
if image.initrd:
initrd_line = "\tinitrd=%s/%s\n" % (self.boot_prefix,
image.initrd)
@@ -1996,7 +1992,21 @@ class ZIPL(BootLoader):
# DWL FIXME: resolve the boot device to a StorageDevice from storage
buf = iutil.execWithCapture("zipl", [],
stderr="/dev/tty5",
- root=ROOT_PATH)
+ root=ROOT_PATH,
+ fatal=True)
+ for line in buf.splitlines():
+ if line.startswith("Preparing boot device: "):
+ # Output here may look like:
+ # Preparing boot device: dasdb (0200).
+ # Preparing boot device: dasdl.
+ # We want to extract the device name and pass that.
+ name = re.sub(".+?: ", "", line)
+ name = re.sub("(\s\(.+\))?\.$", "", name)
+ device = self.storage.devicetree.getDeviceByName(name)
+ if not device:
+ raise BootLoaderError("could not find IPL device")
+
+ self.stage1_device = device
class SILO(YabootSILOBase):
name = "SILO"
diff --git a/pyanaconda/errors.py b/pyanaconda/errors.py
index 5d823de23..37ee4d01a 100644
--- a/pyanaconda/errors.py
+++ b/pyanaconda/errors.py
@@ -241,7 +241,7 @@ class ErrorHandler(object):
rc = ERROR_RAISE
if not self.ui:
- raise exn
+ raise
_map = {KickstartError: self._kickstartErrorHandler,
StorageError.PartitioningError: self._partitionErrorHandler,
diff --git a/pyanaconda/exception.py b/pyanaconda/exception.py
index 47ccd1e4b..70deed5d4 100644
--- a/pyanaconda/exception.py
+++ b/pyanaconda/exception.py
@@ -31,22 +31,49 @@ from flags import flags
import kickstart
import storage.errors
from pyanaconda.constants import ROOT_PATH
+from gi.repository import GLib
import logging
log = logging.getLogger("anaconda")
+import gettext
+_ = lambda x: gettext.ldgettext("anaconda", x)
+
+
class AnacondaExceptionHandler(ExceptionHandler):
def handleException(self, (ty, value, tb), obj):
- import traceback
- # Save the exception to the filesystem first.
- self.exn = self.exnClass((ty, value, tb), self.conf)
- (fd, self.exnFile) = self.openFile()
- text = self.exn.write(obj, fd)
- fd.close()
-
- traceback.print_exception(ty, value, tb)
- os._exit(10)
+ def run_handleException_on_idle(args_tuple):
+ """
+ Helper function with one argument only so that it can be registered
+ with GLib.idle_add() to run on idle.
+
+ @param args_tuple: ((ty, value, tb), obj)
+
+ """
+
+ trace, obj = args_tuple
+ ty, value, tb = trace
+
+ super(AnacondaExceptionHandler, self).handleException((ty, value, tb),
+ obj)
+
+ if issubclass(ty, storage.errors.StorageError) and value.hardware_fault:
+ hw_error_msg = _("The installation was stopped due to what "
+ "seems to be a problem with your hardware. "
+ "The exact error message is:\n\n%s.\n\n "
+ "The installer will now terminate.") % str(value)
+ self.intf.showError(hw_error_msg)
+ sys.exit(0)
+ else:
+ if GLib.main_depth() > 0:
+ # main loop is running, don't crash it by running another one
+ # potentially from a different thread
+ GLib.idle_add(run_handleException_on_idle,
+ ((ty, value, tb), obj))
+ else:
+ super(AnacondaExceptionHandler, self).handleException(
+ (ty, value, tb), obj)
def postWriteHook(self, (ty, value, tb), anaconda):
# See if /mnt/sysimage is present and put exception there as well
@@ -72,8 +99,6 @@ class AnacondaExceptionHandler(ExceptionHandler):
except SystemError:
pass
- self.intf.__del__ ()
-
pidfl = "/tmp/vncshell.pid"
if os.path.exists(pidfl) and os.path.isfile(pidfl):
pf = open(pidfl, "r")
@@ -97,9 +122,14 @@ class AnacondaExceptionHandler(ExceptionHandler):
termios.tcsetattr(si, termios.TCSADRAIN, attr)
print("\nEntering debugger...")
+ print("Use 'continue' command to quit the debugger and get back to "\
+ "the main window")
import pdb
pdb.post_mortem (tb)
- os.kill(os.getpid(), signal.SIGKILL)
+ try:
+ isys.vtActivate(6)
+ except SystemError:
+ pass
def initExceptionHandling(anaconda):
fileList = [ "/tmp/anaconda.log",
diff --git a/pyanaconda/install.py b/pyanaconda/install.py
index be31e75b5..3ea3bd5ee 100644
--- a/pyanaconda/install.py
+++ b/pyanaconda/install.py
@@ -62,7 +62,7 @@ def doInstall(storage, payload, ksdata, instClass):
turnOnFilesystems(storage)
# Do packaging.
- payload.preInstall(packages=storage.packages)
+ payload.preInstall(packages=storage.packages, groups=payload.languageGroups(ksdata.lang.lang))
payload.install()
with progress_report(_("Performing post-install setup tasks")):
@@ -74,6 +74,7 @@ def doInstall(storage, payload, ksdata, instClass):
# Now run the execute methods of ksdata that require an installed system
# to be present first.
+ ksdata.authconfig.execute(storage, ksdata, instClass)
ksdata.firstboot.execute(storage, ksdata, instClass)
ksdata.services.execute(storage, ksdata, instClass)
ksdata.keyboard.execute(storage, ksdata, instClass)
diff --git a/pyanaconda/installclass.py b/pyanaconda/installclass.py
index 3f291059a..cdef54215 100644
--- a/pyanaconda/installclass.py
+++ b/pyanaconda/installclass.py
@@ -32,6 +32,7 @@ import types
from constants import *
from product import *
from storage.partspec import *
+from storage.devicelibs import swap
import gettext
_ = lambda x: gettext.ldgettext("anaconda", x)
@@ -116,9 +117,9 @@ class BaseInstallClass(object):
if bootreq:
autorequests.extend(bootreq)
- (minswap, maxswap) = iutil.swapSuggestion()
- autorequests.append(PartSpec(fstype="swap", size=minswap, maxSize=maxswap,
- grow=True, lv=True, encrypted=True))
+ swp = swap.swapSuggestion()
+ autorequests.append(PartSpec(fstype="swap", size=swp, grow=False,
+ lv=True, encrypted=True))
storage.autoPartitionRequests = autorequests
@@ -153,7 +154,7 @@ class BaseInstallClass(object):
return (all(result.values()), result)
- def setNetworkOnbootDefault(self, network):
+ def setNetworkOnbootDefault(self):
pass
def __init__(self):
diff --git a/pyanaconda/installclasses/fedora.py b/pyanaconda/installclasses/fedora.py
index bc575ea8d..e2c15433a 100644
--- a/pyanaconda/installclasses/fedora.py
+++ b/pyanaconda/installclasses/fedora.py
@@ -21,7 +21,7 @@ from pyanaconda.installclass import BaseInstallClass
from pyanaconda.constants import *
from pyanaconda.product import *
from pyanaconda import iutil
-from pyanaconda.network import hasActiveNetDev
+from pyanaconda import network
from pyanaconda import isys
import os, types
@@ -122,17 +122,20 @@ class InstallClass(BaseInstallClass):
# than two versions ago!
return newVer >= oldVer and newVer - oldVer <= 2
- def setNetworkOnbootDefault(self, network):
+ def setNetworkOnbootDefault(self):
# if something's already enabled, we can just leave the config alone
- for devName, dev in network.netdevices.items():
- if dev.get('ONBOOT') == 'yes':
+ for devName in network.getDevices():
+ if network.get_ifcfg_value(devName, "ONBOOT", ROOT_PATH) == "yes":
return
# the default otherwise: bring up the first wired netdev with link
- for devName, dev in network.netdevices.items():
+ for devName in network.getDevices():
if (not isys.isWirelessDevice(devName) and
isys.getLinkStatus(devName)):
+ dev = network.NetworkDevice(ROOT_PATH + network.netscriptsDir, devName)
+ dev.loadIfcfgFile()
dev.set(('ONBOOT', 'yes'))
+ dev.writeIfcfgFile()
break
def __init__(self):
diff --git a/pyanaconda/installclasses/rhel.py b/pyanaconda/installclasses/rhel.py
index 339b5b833..25edbae41 100644
--- a/pyanaconda/installclasses/rhel.py
+++ b/pyanaconda/installclasses/rhel.py
@@ -96,6 +96,9 @@ class InstallClass(BaseInstallClass):
return False
def versionMatches(self, oldver):
+ if oldver is None:
+ return False
+
oldMajor = oldver.split(".")[0]
newMajor = productVersion.split(".")[0]
diff --git a/pyanaconda/iutil.py b/pyanaconda/iutil.py
index 122894695..00fcb6ad7 100644
--- a/pyanaconda/iutil.py
+++ b/pyanaconda/iutil.py
@@ -200,8 +200,10 @@ def execWithRedirect(command, argv, stdin = None, stdout = None,
# @param stdin The file descriptor to read stdin from.
# @param stderr The file descriptor to redirect stderr to.
# @param root The directory to chroot to before running command.
+# @param fatal Boolean to determine if non-zero exit is fatal.
# @return The output of command from stdout.
-def execWithCapture(command, argv, stdin = None, stderr = None, root='/'):
+def execWithCapture(command, argv, stdin = None, stderr = None, root='/',
+ fatal = False):
if flags.testing:
log.info("not running command because we're testing: %s %s"
% (command, " ".join(argv)))
@@ -257,6 +259,10 @@ def execWithCapture(command, argv, stdin = None, stderr = None, root='/'):
if proc.returncode is not None:
break
+ # if we have anything other than a clean exit, and we get the fatal
+ # option, raise the OSError.
+ if proc.returncode and fatal:
+ raise OSError('Non-zero return code: %s' % proc.returncode)
except OSError as e:
log.error ("Error running " + command + ": " + e.strerror)
closefds()
@@ -459,34 +465,6 @@ def memInstalled():
return long(mem)
-## Suggest the size of the swap partition that will be created.
-# @param quiet Should size information be logged?
-# @return A tuple of the minimum and maximum swap size, in megabytes.
-def swapSuggestion(quiet=0):
- mem = memInstalled()/1024
- mem = ((mem/16)+1)*16
- if not quiet:
- log.info("Detected %sM of memory", mem)
-
- if mem <= 256:
- minswap = 256
- maxswap = 512
- else:
- if mem > 2048:
- minswap = 1024
- maxswap = 2048 + mem
- else:
- minswap = mem
- maxswap = 2*mem
-
- if isS390():
- minswap = 1
-
- if not quiet:
- log.info("Swap attempt of %sM to %sM", minswap, maxswap)
-
- return (minswap, maxswap)
-
## Create a directory path. Don't fail if the directory already exists.
# @param dir The directory path to create.
def mkdirChain(dir):
@@ -501,19 +479,6 @@ def mkdirChain(dir):
log.error("could not create directory %s: %s" % (dir, e.strerror))
-## Get the total amount of swap memory.
-# @return The total amount of swap memory in kilobytes, or 0 if unknown.
-def swapAmount():
- f = open("/proc/meminfo", "r")
- lines = f.readlines()
- f.close()
-
- for l in lines:
- if l.startswith("SwapTotal:"):
- fields = string.split(l)
- return int(fields[1])
- return 0
-
## Copy a device node.
# Copies a device node by looking at the device type, major and minor device
# numbers, and doing a mknod on the new device name.
@@ -1082,6 +1047,16 @@ def dracut_eject(device):
except Exception, e:
log.error("Error writing dracut shutdown eject hook for %s: %s" % (device, e))
+def get_option_value(opt_name, options):
+ """ Return the value of a named option in the specified options string. """
+ for opt in options.split(","):
+ if "=" not in opt:
+ continue
+
+ name, val = opt.split("=")
+ if name == opt_name:
+ return val.strip()
+
class ProxyStringError(Exception):
pass
diff --git a/pyanaconda/kickstart.py b/pyanaconda/kickstart.py
index 585911937..7c3baa2c1 100644
--- a/pyanaconda/kickstart.py
+++ b/pyanaconda/kickstart.py
@@ -23,7 +23,9 @@ from storage.deviceaction import *
from storage.devices import LUKSDevice
from storage.devicelibs.lvm import getPossiblePhysicalExtents
from storage.devicelibs.mpath import MultipathConfigWriter, MultipathTopology
+from storage.devicelibs import swap
from storage.formats import getFormat
+from storage.partitioning import doPartitioning
import storage.iscsi
import storage.fcoe
import storage.zfcp
@@ -37,6 +39,7 @@ import os.path
import tempfile
from flags import flags
from constants import *
+import shlex
import sys
import urlgrabber
import network
@@ -49,7 +52,9 @@ from pyanaconda import ntp
from pykickstart.base import KickstartCommand
from pykickstart.constants import *
from pykickstart.errors import formatErrorMsg, KickstartError, KickstartValueError
-from pykickstart.parser import Group, KickstartParser, Script
+from pykickstart.parser import KickstartParser
+from pykickstart.parser import Group as PackageGroup
+from pykickstart.parser import Script as KSScript
from pykickstart.sections import *
from pykickstart.version import returnClassForVersion
@@ -70,7 +75,7 @@ packagesSeen = False
# so it needs to know about them in some additional way: have the topology ready.
topology = None
-class AnacondaKSScript(Script):
+class AnacondaKSScript(KSScript):
def run(self, chroot, serial):
if self.inChroot:
scriptRoot = chroot
@@ -212,6 +217,22 @@ def removeExistingFormat(device, storage):
### SUBCLASSES OF PYKICKSTART COMMAND HANDLERS
###
+class Authconfig(commands.authconfig.FC3_Authconfig):
+ def execute(self, *args):
+ args = ["--update", "--nostart"] + shlex.split(self.authconfig)
+
+ if not flags.automatedInstall and \
+ (os.path.exists(ROOT_PATH + "/lib64/security/pam_fprintd.so") or \
+ os.path.exists(ROOT_PATH + "/lib/security/pam_fprintd.so")):
+ args += ["--enablefingerprint"]
+
+ try:
+ iutil.execWithRedirect("/usr/sbin/authconfig", args,
+ stdout="/dev/tty5", stderr="/dev/tty5",
+ root=ROOT_PATH)
+ except RuntimeError as msg:
+ log.error("Error running /usr/sbin/authconfig %s: %s", args, msg)
+
class AutoPart(commands.autopart.F17_AutoPart):
def execute(self, storage, ksdata, instClass):
from pyanaconda.platform import getPlatform
@@ -289,6 +310,11 @@ class Bootloader(commands.bootloader.F18_Bootloader):
if self.leavebootorder:
flags.leavebootorder = True
+class BTRFS(commands.btrfs.F17_BTRFS):
+ def execute(self, storage, ksdata, instClass):
+ for b in self.btrfsList:
+ b.execute(storage, ksdata, instClass)
+
class BTRFSData(commands.btrfs.F17_BTRFSData):
def execute(self, storage, ksdata, instClass):
devicetree = storage.devicetree
@@ -416,7 +442,7 @@ class Fcoe(commands.fcoe.F13_Fcoe):
class Firstboot(commands.firstboot.FC3_Firstboot):
def execute(self, *args):
- if not os.path.exists("/lib/systemd/system/firstboot-graphical.service"):
+ if not os.path.exists(ROOT_PATH + "/lib/systemd/system/firstboot-graphical.service"):
return
action = "enable"
@@ -507,6 +533,11 @@ class IscsiName(commands.iscsiname.FC6_IscsiName):
storage.iscsi.iscsi().initiator = self.iscsiname
return retval
+class LogVol(commands.logvol.F17_LogVol):
+ def execute(self, storage, ksdata, instClass):
+ for l in self.lvList:
+ l.execute(storage, ksdata, instClass)
+
class LogVolData(commands.logvol.F17_LogVolData):
def execute(self, storage, ksdata, instClass):
devicetree = storage.devicetree
@@ -516,9 +547,9 @@ class LogVolData(commands.logvol.F17_LogVolData):
if self.mountpoint == "swap":
type = "swap"
self.mountpoint = ""
- if self.recommended:
- (self.size, self.maxSizeMB) = iutil.swapSuggestion()
- self.grow = True
+ if self.recommended or self.hibernation:
+ self.size = swap.swapSuggestion(hibernation=self.hibernation)
+ self.grow = False
else:
if self.fstype != "":
type = self.fstype
@@ -621,7 +652,7 @@ class LogVolData(commands.logvol.F17_LogVolData):
request = storage.newLV(format=format,
name=self.name,
- vg=vg,
+ parents=[vg],
size=self.size,
grow=self.grow,
maxsize=self.maxSizeMB,
@@ -672,7 +703,7 @@ class NetworkData(commands.network.F16_NetworkData):
def execute(self):
if flags.imageInstall:
if self.hostname != "":
- self.anaconda.network.setHostname(self.hostname)
+ network.setHostname(self.hostname)
# Only set hostname
return
@@ -681,22 +712,22 @@ class NetworkData(commands.network.F16_NetworkData):
# only set hostname
if self.essid:
if self.hostname != "":
- self.anaconda.network.setHostname(self.hostname)
+ network.setHostname(self.hostname)
return
- devices = self.anaconda.network.netdevices
+ devices = network.getDevices()
if not self.device:
- if self.anaconda.network.ksdevice:
+ if "ksdevice" in flags.cmdline:
msg = "ksdevice boot parameter"
- device = self.anaconda.network.ksdevice
+ device = network.get_ksdevice_name(flags.cmdline["ksdevice"])
elif network.hasActiveNetDev():
# device activated in stage 1 by network kickstart command
msg = "first active device"
device = network.getActiveNetDevs()[0]
else:
msg = "first device found"
- device = min(devices.keys())
+ device = min(devices)
log.info("unspecified network --device in kickstart, using %s (%s)" %
(device, msg))
else:
@@ -722,18 +753,22 @@ class NetworkData(commands.network.F16_NetworkData):
# If we were given a network device name, grab the device object.
# If we were given a MAC address, resolve that to a device name
# and then grab the device object. Otherwise, errors.
- dev = None
- if devices.has_key(device):
- dev = devices[device]
- else:
- for (key, val) in devices.iteritems():
- if val.get("HWADDR").lower() == device.lower():
- dev = val
+ if device not in devices:
+ for d in devices:
+ if isys.getMacAddress(d).lower() == device.lower():
+ device = d
break
+ dev = network.NetworkDevice(ROOT_PATH, device)
+ try:
+ dev.loadIfcfgFile()
+ except IOError as e:
+ log.info("Can't load ifcfg file %s" % dev.path)
+ dev = None
+
if self.hostname != "":
- self.anaconda.network.setHostname(self.hostname)
+ network.setHostname(self.hostname)
if not dev:
# Only set hostname
return
@@ -784,14 +819,18 @@ class NetworkData(commands.network.F16_NetworkData):
dev.set(("ETHTOOL_OPTS", self.ethtool))
if self.nameserver != "":
- self.anaconda.network.setDNS(self.nameserver, dev.iface)
+ dev.setDNS(self.nameserver)
if self.gateway != "":
- self.anaconda.network.setGateway(self.gateway, dev.iface)
+ dev.setGateway(self.gateway)
if self.nodefroute:
dev.set (("DEFROUTE", "no"))
+ #TODO
+ # write ifcfg file, carefuly handle ONBOOT value,
+ # problems - might activate the device!!!
+
class MultiPath(commands.multipath.FC6_MultiPath):
def parse(self, args):
raise NotImplementedError("The multipath kickstart command is not currently supported")
@@ -800,6 +839,11 @@ class DmRaid(commands.dmraid.FC6_DmRaid):
def parse(self, args):
raise NotImplementedError("The dmraid kickstart command is not currently supported")
+class Partition(commands.partition.F17_Partition):
+ def execute(self, storage, ksdata, instClass):
+ for p in self.partitions:
+ p.execute(storage, ksdata, instClass)
+
class PartitionData(commands.partition.F17_PartData):
def execute(self, storage, ksdata, instClass):
devicetree = storage.devicetree
@@ -813,15 +857,15 @@ class PartitionData(commands.partition.F17_PartData):
self.disk = disk
break
- if self.disk == "":
+ if not self.disk:
raise KickstartValueError, formatErrorMsg(self.lineno, msg="Specified BIOS disk %s cannot be determined" % self.onbiosdisk)
if self.mountpoint == "swap":
type = "swap"
self.mountpoint = ""
- if self.recommended:
- (self.size, self.maxSizeMB) = iutil.swapSuggestion()
- self.grow = True
+ if self.recommended or self.hibernation:
+ self.size = swap.swapSuggestion(hibernation=self.hibernation)
+ self.grow = False
# if people want to specify no mountpoint for some reason, let them
# this is really needed for pSeries boot partitions :(
elif self.mountpoint == "None":
@@ -947,12 +991,12 @@ class PartitionData(commands.partition.F17_PartData):
should_clear = storage.shouldClear(disk)
if disk and (disk.partitioned or should_clear):
- kwargs["disks"] = [disk]
+ kwargs["parents"] = [disk]
break
elif disk:
raise KickstartValueError, formatErrorMsg(self.lineno, msg="Specified unpartitioned disk %s in partition command" % self.disk)
- if not kwargs["disks"]:
+ if not kwargs["parents"]:
raise KickstartValueError, formatErrorMsg(self.lineno, msg="Specified nonexistent disk %s in partition command" % self.disk)
kwargs["grow"] = self.grow
@@ -1021,6 +1065,11 @@ class PartitionData(commands.partition.F17_PartData):
parents=request)
storage.createDevice(luksdev)
+class Raid(commands.raid.F15_Raid):
+ def execute(self, storage, ksdata, instClass):
+ for r in self.raidList:
+ r.execute(storage, ksdata, instClass)
+
class RaidData(commands.raid.F15_RaidData):
def execute(self, storage, ksdata, instClass):
raidmems = []
@@ -1207,6 +1256,11 @@ class User(commands.user.F12_User):
if not users.createUser(usr.name, **kwargs):
log.error("User %s already exists, not creating." % usr.name)
+class VolGroup(commands.volgroup.FC16_VolGroup):
+ def execute(self, storage, ksdata, instClass):
+ for v in self.vgList:
+ v.execute(storage, ksdata, instClass)
+
class VolGroupData(commands.volgroup.FC16_VolGroupData):
def execute(self, storage, ksdata, instClass):
pvs = []
@@ -1247,7 +1301,7 @@ class VolGroupData(commands.volgroup.FC16_VolGroupData):
elif self.vgname in [vg.name for vg in storage.vgs]:
raise KickstartValueError(formatErrorMsg(self.lineno, msg="The volume group name \"%s\" is already in use." % self.vgname))
else:
- request = storage.newVG(pvs=pvs,
+ request = storage.newVG(parents=pvs,
name=self.vgname,
peSize=self.pesize/1024.0)
@@ -1287,7 +1341,10 @@ class Keyboard(commands.keyboard.F18_Keyboard):
# This is just the latest entry from pykickstart.handlers.control with all the
# classes we're overriding in place of the defaults.
commandMap = {
+ "auth": Authconfig,
+ "authconfig": Authconfig,
"autopart": AutoPart,
+ "btrfs": BTRFS,
"bootloader": Bootloader,
"clearpart": ClearPart,
"dmraid": DmRaid,
@@ -1299,11 +1356,16 @@ commandMap = {
"iscsiname": IscsiName,
"keyboard": Keyboard,
"logging": Logging,
+ "logvol": LogVol,
"multipath": MultiPath,
+ "part": Partition,
+ "partition": Partition,
+ "raid": Raid,
"rootpw": RootPw,
"services": Services,
"timezone": Timezone,
"user": User,
+ "volgroup": VolGroup,
"xconfig": XConfig,
"zfcp": ZFCP,
}
@@ -1468,15 +1530,15 @@ def selectPackages(ksdata, payload):
if errorHandler.cb(e) == ERROR_RAISE:
sys.exit(1)
- ksdata.packages.groupList.insert(0, Group("Core"))
+ ksdata.packages.groupList.insert(0, PackageGroup("Core"))
if ksdata.packages.addBase:
# Only add @base if it's not already in the group list. If the
# %packages section contains something like "@base --optional",
# addBase will take effect first and yum will think the group is
# already selected.
- if not Group("Base") in ksdata.packages.groupList:
- ksdata.packages.groupList.insert(1, Group("Base"))
+ if not PackageGroup("Base") in ksdata.packages.groupList:
+ ksdata.packages.groupList.insert(1, PackageGroup("Base"))
else:
log.warning("not adding Base group")
@@ -1506,3 +1568,17 @@ def selectPackages(ksdata, payload):
payload.deselectGroup(grp.name)
except NoSuchGroup:
continue
+
+def doKickstartStorage(storage, ksdata, instClass):
+ """ Setup storage state from the kickstart data """
+ ksdata.clearpart.execute(storage, ksdata, instClass)
+ ksdata.bootloader.execute(storage, ksdata, instClass)
+ ksdata.autopart.execute(storage, ksdata, instClass)
+ ksdata.partition.execute(storage, ksdata, instClass)
+ ksdata.raid.execute(storage, ksdata, instClass)
+ ksdata.volgroup.execute(storage, ksdata, instClass)
+ ksdata.logvol.execute(storage, ksdata, instClass)
+ ksdata.btrfs.execute(storage, ksdata, instClass)
+ storage.setUpBootLoader()
+ doPartitioning(storage)
+
diff --git a/pyanaconda/network.py b/pyanaconda/network.py
index 859c36818..22025ff51 100644
--- a/pyanaconda/network.py
+++ b/pyanaconda/network.py
@@ -39,6 +39,7 @@ from flags import flags
from simpleconfig import IfcfgFile
from pyanaconda.constants import ROOT_PATH
import urlgrabber.grabber
+from pyanaconda.storage.devices import FcoeDiskDevice, iScsiDiskDevice
import gettext
_ = lambda x: gettext.ldgettext("anaconda", x)
@@ -94,7 +95,7 @@ def sanityCheckHostname(hostname):
return None
# Try to determine what the hostname should be for this system
-def getDefaultHostname(anaconda):
+def getHostname():
resetResolver()
hn = None
@@ -114,14 +115,6 @@ def getDefaultHostname(anaconda):
hn = hinfo[0]
break
- if hn and hn not in ('(none)', 'localhost', 'localhost.localdomain'):
- return hn
-
- try:
- hn = anaconda.network.hostname
- except:
- hn = None
-
if not hn or hn in ('(none)', 'localhost', 'localhost.localdomain'):
hn = socket.gethostname()
@@ -213,7 +206,6 @@ class NetworkDevice(IfcfgFile):
def __init__(self, dir, iface):
IfcfgFile.__init__(self, dir, iface)
- self.description = ""
if iface.startswith('ctc'):
self.info["TYPE"] = "CTC"
self.wepkey = ""
@@ -340,27 +332,30 @@ class NetworkDevice(IfcfgFile):
f.close()
return content
- def usedByFCoE(self, anaconda):
- import storage
- for d in anaconda.storage.devices:
- if (isinstance(d, storage.devices.FcoeDiskDevice) and
- d.nic == self.iface):
- return True
- return False
+ def setGateway(self, gw):
+ if ':' in gw:
+ self.set(('IPV6_DEFAULTGW', gw))
+ else:
+ self.set(('GATEWAY', gw))
- def usedByRootOnISCSI(self, anaconda):
- import storage
- rootdev = anaconda.storage.rootDevice
- for d in anaconda.storage.devices:
- if (isinstance(d, storage.devices.iScsiDiskDevice) and
- rootdev.dependsOn(d)):
- if d.nic == "default":
- if self.iface == ifaceForHostIP(d.host_address):
- return True
- elif d.nic == self.iface:
- return True
+ def unsetDNS(self):
+ """Unset all DNS* ifcfg parameters."""
+ i = 1
+ while True:
+ if self.get("DNS%d" % i):
+ self.unset("DNS%d" %i)
+ else:
+ break
+ i += 1
- return False
+ def setDNS(self, ns):
+ dns = ns.split(',')
+ i = 1
+ for addr in dns:
+ addr = addr.strip()
+ dnslabel = "DNS%d" % (i,)
+ self.set((dnslabel, addr))
+ i += 1
class WirelessNetworkDevice(NetworkDevice):
@@ -374,7 +369,6 @@ class WirelessNetworkDevice(NetworkDevice):
self.info = dict()
self.iface = iface
self.dir = ""
- self.description = ""
def clear(self):
self.info = dict()
@@ -411,495 +405,153 @@ class Network:
def __init__(self):
- self.hostname = socket.gethostname()
-
- self.update()
-
- def update(self):
- ifcfglog.debug("Network.update() called")
-
- self.netdevices = {}
- self.ksdevice = None
+ ifcfglog.debug("Network object created called")
+ # TODO this may need to be handled in getDevices()
if flags.imageInstall:
return
+ # TODO this should go away (patch pending),
+ # default ifcfg files should be created in dracut
+
# populate self.netdevices
devhash = isys.getDeviceProperties(dev=None)
for iface in devhash.keys():
- if isys.isWirelessDevice(iface):
- device = WirelessNetworkDevice(iface)
- else:
+ if not isys.isWirelessDevice(iface):
device = NetworkDevice(netscriptsDir, iface)
- if os.access(device.path, os.R_OK):
- device.loadIfcfgFile()
- else:
+ if not os.access(device.path, os.R_OK):
device.setDefaultConfig()
- # TODORV - the last iface in loop wins, might be ok,
- # not worthy of special juggling
- if device.get('HOSTNAME'):
- self.hostname = device.get('HOSTNAME')
-
- device.description = isys.getNetDevDesc(iface)
-
- self.netdevices[iface] = device
-
-
- ksdevice = flags.cmdline.get('ksdevice', None)
- if ksdevice:
- bootif_mac = None
- if ksdevice == 'bootif' and "BOOTIF" in flags.cmdline:
- bootif_mac = flags.cmdline["BOOTIF"][3:].replace("-", ":").upper()
- # sort for ksdevice=link (to select the same device as in initrd))
- for dev in sorted(self.netdevices):
- mac = self.netdevices[dev].get('HWADDR').upper()
- if ksdevice == 'link' and isys.getLinkStatus(dev):
- self.ksdevice = dev
- break
- elif ksdevice == 'bootif':
- if bootif_mac == mac:
- self.ksdevice = dev
- break
- elif ksdevice == dev:
- self.ksdevice = dev
- break
- elif ':' in ksdevice:
- if ksdevice.upper() == mac:
- self.ksdevice = dev
- break
-
-
-
- def getDevice(self, device):
- return self.netdevices[device]
-
- def getKSDevice(self):
- if self.ksdevice is None:
- return None
-
- try:
- return self.netdevices[self.ksdevice]
- except:
- return None
-
- def setHostname(self, hn):
- self.hostname = hn
- if flags.imageInstall:
- log.info("image install -- not setting hostname")
- return
-
- log.info("setting installation environment hostname to %s" % hn)
- iutil.execWithRedirect("hostname", ["-v", hn ],
- stdout="/dev/tty5", stderr="/dev/tty5")
-
- def unsetDNS(self, devname):
- """Unset all DNS* ifcfg parameters."""
- i = 1
- dev = self.netdevices[devname]
- while True:
- if dev.get("DNS%d" % i):
- dev.unset("DNS%d" %i)
- else:
- break
- i += 1
-
- def setDNS(self, ns, device):
- dns = ns.split(',')
- i = 1
- for addr in dns:
- addr = addr.strip()
- dnslabel = "DNS%d" % (i,)
- self.netdevices[device].set((dnslabel, addr))
- i += 1
-
- def setGateway(self, gw, device):
- if ':' in gw:
- self.netdevices[device].set(('IPV6_DEFAULTGW', gw))
- else:
- self.netdevices[device].set(('GATEWAY', gw))
-
- @property
- def gateway(self):
- """GATEWAY - last device in list wins"""
- for dev in reversed(self.netdevices.values()):
- if (dev.get('GATEWAY') and
- dev.get('DEFROUTE') != "no"):
- return dev.get('GATEWAY')
- return ""
-
- @property
- def ipv6_defaultgw(self):
- """IPV6_DEFAULTGW - last device in list wins"""
- for dev in reversed(self.netdevices.values()):
- if (dev.get('IPV6_DEFAULTGW') and
- dev.get('DEFROUTE') != "no"):
- return dev.get('IPV6_DEFAULTGW')
- return ""
-
- def lookupHostname(self):
- # can't look things up if they don't exist!
- if not self.hostname or self.hostname == "localhost.localdomain":
- return None
-
- if not hasActiveNetDev():
- log.warning("no network devices were available to look up host name")
- return None
+def getDevices():
+ # TODO: filter with existence of ifcfg file?
+ return isys.getDeviceProperties().keys()
- try:
- (family, socktype, proto, canonname, sockaddr) = \
- socket.getaddrinfo(self.hostname, None, socket.AF_INET)[0]
- (ip, port) = sockaddr
- except:
- try:
- (family, socktype, proto, canonname, sockaddr) = \
- socket.getaddrinfo(self.hostname, None, socket.AF_INET6)[0]
- (ip, port, flowinfo, scopeid) = sockaddr
- except:
- return None
-
- return ip
-
- # Note that the file is written-out only if there is a value
- # that has changed.
- def writeIfcfgFiles(self):
- for device in self.netdevices.values():
- device.writeIfcfgFile()
-
- # devices == None => set for all
- def updateActiveDevices(self, devices=None):
- for devname, device in self.netdevices.items():
- if devices and devname not in devices:
- device.set(('ONBOOT', 'no'))
- else:
- device.set(('ONBOOT', 'yes'))
-
- def getOnbootControlledIfaces(self):
- ifaces = []
- for iface, device in self.netdevices.items():
- if (device.get('ONBOOT') == "yes" and
- device.get('NM_CONTROLLED') == "yes"):
- ifaces.append(iface)
- return ifaces
-
- def writeSSIDifcfgs(self, devssids):
- ssids = []
- for ssidlist in devssids.values():
- ssids.extend(ssidlist)
- for ssid in ssids:
- path = "{0}/ifcfg-{1}".format(netscriptsDir, ssid)
- ifcfgfile = open(path, "w")
- ifcfgfile.write("NAME={0}\n".format(ssid)+
- "TYPE=Wireless\n"+
- "ESSID={0}\n".format(ssid)+
- "NM_CONTROLLED=yes\n")
- ifcfgfile.close()
-
-
- def getSSIDs(self):
- return getSSIDs()
-
- def writeKS(self, f):
- devNames = self.netdevices.keys()
- devNames.sort()
-
- if len(devNames) == 0:
- return
-
- for devName in devNames:
- dev = self.netdevices[devName]
- line = "%s" % kickstartNetworkData(dev, self.hostname)
- f.write(line)
-
- def hasNameServers(self, hash):
- if hash.keys() == []:
- return False
-
- for key in hash.keys():
- if key.upper().startswith('DNS'):
- return True
+def waitForDevicesActivation(devices):
+ waited_devs_props = {}
- return False
+ bus = dbus.SystemBus()
+ nm = bus.get_object(isys.NM_SERVICE, isys.NM_MANAGER_PATH)
+ device_paths = nm.get_dbus_method("GetDevices")()
+ for device_path in device_paths:
+ device = bus.get_object(isys.NM_SERVICE, device_path)
+ device_props_iface = dbus.Interface(device, isys.DBUS_PROPS_IFACE)
+ iface = str(device_props_iface.Get(isys.NM_DEVICE_IFACE, "Interface"))
+ if iface in devices:
+ waited_devs_props[iface] = device_props_iface
+
+ i = 0
+ while True:
+ for dev, device_props_iface in waited_devs_props.items():
+ state = device_props_iface.Get(isys.NM_DEVICE_IFACE, "State")
+ if state == isys.NM_DEVICE_STATE_ACTIVATED:
+ waited_devs_props.pop(dev)
+ if len(waited_devs_props) == 0 or i >= CONNECTION_TIMEOUT:
+ break
+ i += 1
+ time.sleep(1)
+
+ return waited_devs_props.keys()
+
+# write out current configuration state and wait for NetworkManager
+# to bring the device up, watch NM state and return to the caller
+# once we have a state
+def waitForConnection():
+ bus = dbus.SystemBus()
+ nm = bus.get_object(isys.NM_SERVICE, isys.NM_MANAGER_PATH)
+ props = dbus.Interface(nm, isys.DBUS_PROPS_IFACE)
- def hasWirelessDev(self):
- for dev in self.netdevices:
- if isys.isWirelessDevice(dev):
- return True
- return False
+ i = 0
+ while i < CONNECTION_TIMEOUT:
+ state = props.Get(isys.NM_SERVICE, "State")
+ if nmIsConnected(state):
+ return True
+ i += 1
+ time.sleep(1)
- def _copyFileToPath(self, file, instPath='', overwrite=False):
- if not os.path.isfile(file):
- return False
- destfile = os.path.join(instPath, file.lstrip('/'))
- if (os.path.isfile(destfile) and not overwrite):
- return False
- if not os.path.isdir(os.path.dirname(destfile)):
- iutil.mkdirChain(os.path.dirname(destfile))
- shutil.copy(file, destfile)
+ state = props.Get(isys.NM_SERVICE, "State")
+ if nmIsConnected(state):
return True
- def _copyIfcfgFiles(self):
- files = os.listdir(netscriptsDir)
- for cfgFile in files:
- if cfgFile.startswith(("ifcfg-","keys-")):
- srcfile = os.path.join(netscriptsDir, cfgFile)
- self._copyFileToPath(srcfile, ROOT_PATH)
+ return False
- def copyConfigToPath(self):
- if flags.imageInstall:
- # for image installs we only want to write out
- # /etc/sysconfig/network
- destfile = os.path.normpath(ROOT_PATH + networkConfFile)
- if not os.path.isdir(os.path.dirname(destfile)):
- iutil.mkdirChain(os.path.dirname(destfile))
- shutil.move("/tmp/sysconfig-network", destfile)
- return
+# get a kernel cmdline string for dracut needed for access to storage host
+def dracutSetupArgs(networkStorageDevice):
- # /etc/sysconfig/network-scripts/ifcfg-*
- # /etc/sysconfig/network-scripts/keys-*
- # we can copy all of them
- self._copyIfcfgFiles()
+ if networkStorageDevice.nic == "default":
+ nic = ifaceForHostIP(networkStorageDevice.host_address)
+ if not nic:
+ return ""
+ else:
+ nic = networkStorageDevice.nic
- # /etc/dhcp/dhclient-DEVICE.conf
- # TODORV: do we really don't want overwrite on live cd?
- for devName, device in self.netdevices.items():
- dhclientfile = os.path.join("/etc/dhcp/dhclient-%s.conf" % devName)
- self._copyFileToPath(dhclientfile, ROOT_PATH)
+ if nic not in getDevices():
+ log.error('Unknown network interface: %s' % nic)
+ return ""
- # /etc/sysconfig/network
- self._copyFileToPath(networkConfFile, ROOT_PATH,
- overwrite=flags.livecdInstall)
-
- # /etc/resolv.conf
- self._copyFileToPath("/etc/resolv.conf", ROOT_PATH,
- overwrite=flags.livecdInstall)
-
- # /etc/udev/rules.d/70-persistent-net.rules
- self._copyFileToPath("/etc/udev/rules.d/70-persistent-net.rules",
- ROOT_PATH, overwrite=flags.livecdInstall)
-
- self._copyFileToPath(ipv6ConfFile, ROOT_PATH,
- overwrite=flags.livecdInstall)
-
- def disableNMForStorageDevices(self, anaconda):
- for devName, device in self.netdevices.items():
- if (device.usedByFCoE(anaconda) or
- device.usedByRootOnISCSI(anaconda)):
- dev = NetworkDevice(ROOT_PATH + netscriptsDir, devName)
- if os.access(dev.path, os.R_OK):
- dev.loadIfcfgFile()
- dev.set(('NM_CONTROLLED', 'no'))
- dev.writeIfcfgFile()
- log.info("network device %s used by storage will not be "
- "controlled by NM" % device.path)
- else:
- log.warning("disableNMForStorageDevices: %s file not found" %
- device.path)
-
- def autostartFCoEDevices(self, anaconda):
- for devName, device in self.netdevices.items():
- if device.usedByFCoE(anaconda):
- dev = NetworkDevice(ROOT_PATH + netscriptsDir, devName)
- if os.access(dev.path, os.R_OK):
- dev.loadIfcfgFile()
- dev.set(('ONBOOT', 'yes'))
- dev.writeIfcfgFile()
- log.debug("setting ONBOOT=yes for network device %s used by fcoe"
- % device.path)
+ ifcfg = NetworkDevice(netscriptsDir, nic)
+ ifcfg.loadIfcfgFile()
+ return dracutBootArguments(ifcfg,
+ networkStorageDevice.host_address,
+ getHostname())
+
+def dracutBootArguments(ifcfg, storage_ipaddr, hostname=None):
+
+ netargs = set()
+ devname = ifcfg.iface
+
+ if ifcfg.get('BOOTPROTO') == 'ibft':
+ netargs.add("ip=ibft")
+ elif storage_ipaddr:
+ if hostname is None:
+ hostname = ""
+ # if using ipv6
+ if ':' in storage_ipaddr:
+ if ifcfg.get('DHCPV6C') == "yes":
+ # XXX combination with autoconf not yet clear,
+ # support for dhcpv6 is not yet implemented in NM/ifcfg-rh
+ netargs.add("ip=%s:dhcp6" % devname)
+ elif ifcfg.get('IPV6_AUTOCONF') == "yes":
+ netargs.add("ip=%s:auto6" % devname)
+ elif ifcfg.get('IPV6ADDR'):
+ ipaddr = "[%s]" % ifcfg.get('IPV6ADDR')
+ if ifcfg.get('IPV6_DEFAULTGW'):
+ gateway = "[%s]" % ifcfg.get('IPV6_DEFAULTGW')
else:
- log.warning("autoconnectFCoEDevices: %s file not found" %
- device.path)
-
- def write(self):
- ifcfglog.debug("Network.write() called")
-
- # /etc/sysconfig/network
- if flags.imageInstall:
- # don't write files into host's /etc/sysconfig on image installs
- newnetwork = "/tmp/sysconfig-network"
- else:
- newnetwork = "%s.new" % (networkConfFile)
-
- f = open(newnetwork, "w")
- f.write("NETWORKING=yes\n")
- f.write("HOSTNAME=")
-
- # use instclass hostname if set(kickstart) to override
- if self.hostname:
- f.write(self.hostname + "\n")
- else:
- f.write("localhost.localdomain\n")
-
- if self.gateway:
- f.write("GATEWAY=%s\n" % self.gateway)
-
- if self.ipv6_defaultgw:
- f.write("IPV6_DEFAULTGW=%s\n" % self.ipv6_defaultgw)
-
- f.close()
- if flags.imageInstall:
- # for image installs, all we want to write out is the contents of
- # /etc/sysconfig/network
- ifcfglog.debug("not writing per-device configs for image install")
- return
+ gateway = ""
+ netargs.add("ip=%s::%s:%s:%s:%s:none" % (ipaddr, gateway,
+ ifcfg.get('PREFIX'), hostname, devname))
else:
- shutil.move(newnetwork, networkConfFile)
-
- devices = self.netdevices.values()
-
- # /etc/sysconfig/network-scripts/ifcfg-*
- # /etc/sysconfig/network-scripts/keys-*
- for dev in devices:
-
- dev.writeIfcfgFile()
-
- # /etc/resolv.conf is managed by NM
-
- # disable ipv6
- if ('noipv6' in flags.cmdline
- and not [dev for dev in devices
- if dev.get('IPV6INIT') == "yes"]):
- if os.path.exists(ipv6ConfFile):
- log.warning('Not disabling ipv6, %s exists' % ipv6ConfFile)
+ if ifcfg.get('bootproto').lower() == 'dhcp':
+ netargs.add("ip=%s:dhcp" % devname)
else:
- log.info('Disabling ipv6 on target system')
- f = open(ipv6ConfFile, "w")
- f.write("# Anaconda disabling ipv6\n")
- f.write("options ipv6 disable=1\n")
- f.close()
-
- def waitForDevicesActivation(self, devices):
- waited_devs_props = {}
-
- bus = dbus.SystemBus()
- nm = bus.get_object(isys.NM_SERVICE, isys.NM_MANAGER_PATH)
- device_paths = nm.get_dbus_method("GetDevices")()
- for device_path in device_paths:
- device = bus.get_object(isys.NM_SERVICE, device_path)
- device_props_iface = dbus.Interface(device, isys.DBUS_PROPS_IFACE)
- iface = str(device_props_iface.Get(isys.NM_DEVICE_IFACE, "Interface"))
- if iface in devices:
- waited_devs_props[iface] = device_props_iface
-
- i = 0
- while True:
- for dev, device_props_iface in waited_devs_props.items():
- state = device_props_iface.Get(isys.NM_DEVICE_IFACE, "State")
- if state == isys.NM_DEVICE_STATE_ACTIVATED:
- waited_devs_props.pop(dev)
- if len(waited_devs_props) == 0 or i >= CONNECTION_TIMEOUT:
- break
- i += 1
- time.sleep(1)
-
- return waited_devs_props.keys()
-
- # write out current configuration state and wait for NetworkManager
- # to bring the device up, watch NM state and return to the caller
- # once we have a state
- def waitForConnection(self):
- bus = dbus.SystemBus()
- nm = bus.get_object(isys.NM_SERVICE, isys.NM_MANAGER_PATH)
- props = dbus.Interface(nm, isys.DBUS_PROPS_IFACE)
-
- i = 0
- while i < CONNECTION_TIMEOUT:
- state = props.Get(isys.NM_SERVICE, "State")
- if nmIsConnected(state):
- return True
- i += 1
- time.sleep(1)
-
- state = props.Get(isys.NM_SERVICE, "State")
- if nmIsConnected(state):
- return True
-
- return False
-
- # write out current configuration state and wait for NetworkManager
- # to bring the device up, watch NM state and return to the caller
- # once we have a state
- def bringUp(self):
- self.write()
- if self.waitForConnection():
- resetResolver()
- return True
- else:
- return False
+ if ifcfg.get('GATEWAY'):
+ gateway = ifcfg.get('GATEWAY')
+ else:
+ gateway = ""
- # get a kernel cmdline string for dracut needed for access to host host
- def dracutSetupArgs(self, networkStorageDevice):
- netargs=set()
+ netmask = ifcfg.get('netmask')
+ prefix = ifcfg.get('prefix')
+ if not netmask and prefix:
+ netmask = isys.prefix2netmask(int(prefix))
- if networkStorageDevice.nic == "default":
- nic = ifaceForHostIP(networkStorageDevice.host_address)
- if not nic:
- return ""
- else:
- nic = networkStorageDevice.nic
+ netargs.add("ip=%s::%s:%s:%s:%s:none" % (ifcfg.get('ipaddr'),
+ gateway, netmask, hostname, devname))
- if nic not in self.netdevices.keys():
- log.error('Unknown network interface: %s' % nic)
- return ""
+ hwaddr = ifcfg.get("HWADDR")
+ if hwaddr:
+ netargs.add("ifname=%s:%s" % (devname, hwaddr.lower()))
- dev = self.netdevices[nic]
+ nettype = ifcfg.get("NETTYPE")
+ subchannels = ifcfg.get("SUBCHANNELS")
+ if iutil.isS390() and nettype and subchannels:
+ znet = "rd.znet=%s,%s" % (nettype, subchannels)
+ options = ifcfg.get("OPTIONS").strip("'\"")
+ if options:
+ options = filter(lambda x: x != '', options.split(' '))
+ znet += ",%s" % (','.join(options))
+ netargs.add(znet)
- if dev.get('BOOTPROTO') == 'ibft':
- netargs.add("ip=ibft")
- elif networkStorageDevice.host_address:
- if self.hostname:
- hostname = self.hostname
- else:
- hostname = ""
-
- # if using ipv6
- if ':' in networkStorageDevice.host_address:
- if dev.get('DHCPV6C') == "yes":
- # XXX combination with autoconf not yet clear,
- # support for dhcpv6 is not yet implemented in NM/ifcfg-rh
- netargs.add("ip=%s:dhcp6" % nic)
- elif dev.get('IPV6_AUTOCONF') == "yes":
- netargs.add("ip=%s:auto6" % nic)
- elif dev.get('IPV6ADDR'):
- ipaddr = "[%s]" % dev.get('IPV6ADDR')
- if dev.get('IPV6_DEFAULTGW'):
- gateway = "[%s]" % dev.get('IPV6_DEFAULTGW')
- else:
- gateway = ""
- netargs.add("ip=%s::%s:%s:%s:%s:none" % (ipaddr, gateway,
- dev.get('PREFIX'), hostname, nic))
- else:
- if dev.get('bootproto').lower() == 'dhcp':
- netargs.add("ip=%s:dhcp" % nic)
- else:
- if dev.get('GATEWAY'):
- gateway = dev.get('GATEWAY')
- else:
- gateway = ""
-
- netmask = dev.get('netmask')
- prefix = dev.get('prefix')
- if not netmask and prefix:
- netmask = isys.prefix2netmask(int(prefix))
-
- netargs.add("ip=%s::%s:%s:%s:%s:none" % (dev.get('ipaddr'),
- gateway, netmask, hostname, nic))
-
- hwaddr = dev.get("HWADDR")
- if hwaddr:
- netargs.add("ifname=%s:%s" % (nic, hwaddr.lower()))
-
- nettype = dev.get("NETTYPE")
- subchannels = dev.get("SUBCHANNELS")
- if iutil.isS390() and nettype and subchannels:
- znet = "rd.znet=%s,%s" % (nettype, subchannels)
- options = dev.get("OPTIONS").strip("'\"")
- if options:
- options = filter(lambda x: x != '', options.split(' '))
- znet += ",%s" % (','.join(options))
- netargs.add(znet)
-
- return netargs
+ return netargs
def kickstartNetworkData(ifcfg, hostname=None):
@@ -1037,3 +689,206 @@ def resetResolver():
isys.resetResolv()
urlgrabber.grabber.reset_curl_obj()
+def setHostname(hn):
+ if flags.imageInstall:
+ log.info("image install -- not setting hostname")
+ return
+
+ log.info("setting installation environment hostname to %s" % hn)
+ iutil.execWithRedirect("hostname", ["-v", hn ],
+ stdout="/dev/tty5", stderr="/dev/tty5")
+
+def _copyFileToPath(file, destPath='', overwrite=False):
+ if not os.path.isfile(file):
+ return False
+ destfile = os.path.join(destPath, file.lstrip('/'))
+ if (os.path.isfile(destfile) and not overwrite):
+ return False
+ if not os.path.isdir(os.path.dirname(destfile)):
+ iutil.mkdirChain(os.path.dirname(destfile))
+ shutil.copy(file, destfile)
+ return True
+
+def _copyIfcfgFiles(destPath):
+ files = os.listdir(netscriptsDir)
+ for cfgFile in files:
+ if cfgFile.startswith(("ifcfg-","keys-")):
+ srcfile = os.path.join(netscriptsDir, cfgFile)
+ _copyFileToPath(srcfile, destPath)
+
+def copyConfigToPath(destPath):
+ if flags.imageInstall:
+ # for image installs we only want to write out
+ # /etc/sysconfig/network
+ destfile = os.path.normpath(destPath + networkConfFile)
+ if not os.path.isdir(os.path.dirname(destfile)):
+ iutil.mkdirChain(os.path.dirname(destfile))
+ shutil.move("/tmp/sysconfig-network", destfile)
+ return
+
+ # /etc/sysconfig/network-scripts/ifcfg-*
+ # /etc/sysconfig/network-scripts/keys-*
+ # we can copy all of them
+ _copyIfcfgFiles(destPath)
+
+ # /etc/dhcp/dhclient-DEVICE.conf
+ # TODORV: do we really don't want overwrite on live cd?
+ for devName in getDevices():
+ dhclientfile = os.path.join("/etc/dhcp/dhclient-%s.conf" % devName)
+ _copyFileToPath(dhclientfile, destPath)
+
+ # /etc/sysconfig/network
+ _copyFileToPath(networkConfFile, destPath,
+ overwrite=flags.livecdInstall)
+
+ # /etc/resolv.conf
+ _copyFileToPath("/etc/resolv.conf", destPath,
+ overwrite=flags.livecdInstall)
+
+ # /etc/udev/rules.d/70-persistent-net.rules
+ _copyFileToPath("/etc/udev/rules.d/70-persistent-net.rules",
+ destPath, overwrite=flags.livecdInstall)
+
+ _copyFileToPath(ipv6ConfFile, destPath,
+ overwrite=flags.livecdInstall)
+
+def get_ksdevice_name(ksspec=""):
+
+ if not ksspec:
+ ksspec = flags.cmdline.get('ksdevice', "")
+ ksdevice = ksspec
+
+ bootif_mac = None
+ if ksdevice == 'bootif' and "BOOTIF" in flags.cmdline:
+ bootif_mac = flags.cmdline["BOOTIF"][3:].replace("-", ":").upper()
+ for dev in sorted(getDevices()):
+ # "eth0"
+ if ksdevice == dev:
+ break
+ # "link"
+ elif ksdevice == 'link' and isys.getLinkStatus(dev):
+ ksdevice = dev
+ break
+ # "XX:XX:XX:XX:XX:XX" (mac address)
+ elif ':' in ksdevice:
+ if ksdevice.upper() == isys.getMacAddress(dev):
+ ksdevice = dev
+ break
+ # "bootif" and BOOTIF==XX:XX:XX:XX:XX:XX
+ elif ksdevice == 'bootif':
+ if bootif_mac == isys.getMacAddress(dev):
+ ksdevice = dev
+ break
+
+ return ksdevice
+
+# note that NetworkDevice.get returns "" if key is not found
+def get_ifcfg_value(iface, key, root_path=""):
+ dev = NetworkDevice(os.path.normpath(root_path + netscriptsDir), iface)
+ dev.loadIfcfgFile()
+ return dev.get(key)
+
+def write_sysconfig_network():
+
+ if flags.imageInstall:
+ # don't write files into host's /etc/sysconfig on image installs
+ newnetwork = "/tmp/sysconfig-network"
+ else:
+ newnetwork = "%s.new" % (networkConfFile)
+
+ f = open(newnetwork, "w")
+ f.write("# Generated by anaconda")
+ f.write("NETWORKING=yes\n")
+ f.write("HOSTNAME=")
+
+ hostname = getHostname()
+ if hostname:
+ f.write(hostname + "\n")
+ else:
+ f.write("localhost.localdomain\n")
+
+ gateway = ipv6_defaultgw = None
+ for iface in reversed(getDevices()):
+ dev = NetworkDevice(netscriptsDir, iface)
+ dev.loadIfcfgFile()
+ if dev.get('DEFROUTE') != "no":
+ continue
+ if dev.get('GATEWAY'):
+ gateway = dev.get('GATEWAY')
+ if dev.get('IPV6_DEFAULTGW'):
+ ipv6_defaultgw = dev.get('IPV6_DEFAULTGW')
+ if gateway and ipv6_defaultgw:
+ break
+
+ if gateway:
+ f.write("GATEWAY=%s\n" % gateway)
+
+ if ipv6_defaultgw:
+ f.write("IPV6_DEFAULTGW=%s\n" % ipv6_defaultgw)
+ f.close()
+
+ if not flags.imageInstall:
+ shutil.move(newnetwork, networkConfFile)
+
+# TODO: do it right in sysroot (instead of copying the files later)?
+def disableIPV6():
+ if ('noipv6' in flags.cmdline
+ and not any(get_ifcfg_value(dev, 'IPV6INIT') == "yes"
+ for dev in getDevices())):
+ if os.path.exists(ipv6ConfFile):
+ log.warning('Not disabling ipv6, %s exists' % ipv6ConfFile)
+ else:
+ log.info('Disabling ipv6 on target system')
+ f = open(ipv6ConfFile, "w")
+ f.write("# Anaconda disabling ipv6\n")
+ f.write("options ipv6 disable=1\n")
+ f.close()
+
+def disableNMForStorageDevices(storage):
+ for devname in getDevices():
+ if (usedByFCoE(devname, storage) or
+ usedByRootOnISCSI(devname, storage)):
+ dev = NetworkDevice(ROOT_PATH + netscriptsDir, devname)
+ if os.access(dev.path, os.R_OK):
+ dev.loadIfcfgFile()
+ dev.set(('NM_CONTROLLED', 'no'))
+ dev.writeIfcfgFile()
+ log.info("network device %s used by storage will not be "
+ "controlled by NM" % devname)
+ else:
+ log.warning("disableNMForStorageDevices: ifcfg file for %s not found" %
+ devname)
+
+def autostartFCoEDevices(storage):
+ for devname in getDevices():
+ if usedByFCoE(devname, storage):
+ dev = NetworkDevice(ROOT_PATH + netscriptsDir, devname)
+ if os.access(dev.path, os.R_OK):
+ dev.loadIfcfgFile()
+ dev.set(('ONBOOT', 'yes'))
+ dev.writeIfcfgFile()
+ log.debug("setting ONBOOT=yes for network device %s used by fcoe"
+ % devname)
+ else:
+ log.warning("autoconnectFCoEDevices: ifcfg file for %s not found" %
+ devname)
+
+def usedByFCoE(iface, storage):
+ for d in storage.devices:
+ if (isinstance(d, FcoeDiskDevice) and
+ d.nic == iface):
+ return True
+ return False
+
+def usedByRootOnISCSI(iface, storage):
+ rootdev = storage.rootDevice
+ for d in storage.devices:
+ if (isinstance(d, iScsiDiskDevice) and
+ rootdev.dependsOn(d)):
+ if d.nic == "default":
+ if iface == ifaceForHostIP(d.host_address):
+ return True
+ elif d.nic == iface:
+ return True
+
+ return False
diff --git a/pyanaconda/packaging/__init__.py b/pyanaconda/packaging/__init__.py
index ca23f53a1..8c5a5606c 100644
--- a/pyanaconda/packaging/__init__.py
+++ b/pyanaconda/packaging/__init__.py
@@ -48,9 +48,7 @@ from pyanaconda.iutil import ProxyString, ProxyStringError
from pykickstart.parser import Group
import logging
-log = logging.getLogger("anaconda")
-
-from pyanaconda.backend_log import log as instlog
+log = logging.getLogger("packaging")
from pyanaconda.errors import *
#from pyanaconda.progress import progress
@@ -169,7 +167,9 @@ class Payload(object):
def _repoNeedsNetwork(self, repo):
""" Returns True if the ksdata repo requires networking. """
- urls = [repo.baseurl] + repo.mirrorlist
+ urls = [repo.baseurl]
+ if repo.mirrorlist:
+ urls.extend(repo.mirrorlist)
network_protocols = ["http:", "ftp:", "nfs:", "nfsiso:"]
for url in urls:
if any([url.startswith(p) for p in network_protocols]):
@@ -236,6 +236,9 @@ class Payload(object):
def groups(self):
raise NotImplementedError()
+ def languageGroups(self, lang):
+ raise NotImplementedError()
+
def description(self, groupid):
raise NotImplementedError()
@@ -466,34 +469,16 @@ class Payload(object):
###
### METHODS FOR INSTALLING THE PAYLOAD
###
- def preInstall(self, packages=None):
+ def preInstall(self, packages=None, groups=None):
""" Perform pre-installation tasks. """
iutil.mkdirChain(ROOT_PATH + "/root")
- if self.data.upgrade.upgrade:
- mode = "upgrade"
- else:
- mode = "install"
-
- log_file_name = "%s.log" % mode
- log_file_path = "%s/root/%s" % (ROOT_PATH, log_file_name)
- try:
- shutil.rmtree (log_file_path)
- except OSError:
- pass
-
- self.install_log = open(log_file_path, "w+")
-
- syslogname = "%s.syslog" % log_file_path
- try:
- shutil.rmtree (syslogname)
- except OSError:
- pass
- instlog.start(ROOT_PATH, syslogname)
-
- if packages is not None:
+ if packages:
map(self.selectPackage, packages)
+ if groups:
+ map(self.selectGroup, groups)
+
def install(self):
""" Install the payload. """
raise NotImplementedError()
@@ -593,10 +578,6 @@ class Payload(object):
self._copyDriverDiskFiles()
- # stop logger
- instlog.stop()
-
-
class ImagePayload(Payload):
""" An ImagePayload installs an OS image to the target system. """
def __init__(self, data):
diff --git a/pyanaconda/packaging/yumpayload.py b/pyanaconda/packaging/yumpayload.py
index 8aea2fb57..f6f940a44 100644
--- a/pyanaconda/packaging/yumpayload.py
+++ b/pyanaconda/packaging/yumpayload.py
@@ -42,9 +42,13 @@
import os
import shutil
import time
+import tempfile
from . import *
+import logging
+log = logging.getLogger("packaging")
+
try:
import rpm
except ImportError:
@@ -72,9 +76,6 @@ from pyanaconda.image import findFirstIsoImage
import gettext
_ = lambda x: gettext.ldgettext("anaconda", x)
-import logging
-log = logging.getLogger("anaconda")
-
from pyanaconda.errors import *
from pyanaconda.packaging import NoSuchGroup, NoSuchPackage
import pyanaconda.progress as progress
@@ -153,7 +154,7 @@ class YumPayload(PackagePayload):
# have group info ready.
self.gatherRepoMetadata()
- def _resetYum(self, root=None):
+ def _resetYum(self, root=None, keep_cache=False):
""" Delete and recreate the payload's YumBase instance. """
import shutil
if root is None:
@@ -161,10 +162,11 @@ class YumPayload(PackagePayload):
with _yum_lock:
if self._yum:
- for repo in self._yum.repos.listEnabled():
- if repo.name == BASE_REPO_NAME and \
- os.path.isdir(repo.cachedir):
- shutil.rmtree(repo.cachedir)
+ if not keep_cache:
+ for repo in self._yum.repos.listEnabled():
+ if repo.name == BASE_REPO_NAME and \
+ os.path.isdir(repo.cachedir):
+ shutil.rmtree(repo.cachedir)
del self._yum
@@ -287,7 +289,7 @@ reposdir=%s
releasever = self._yum.conf.yumvar['releasever']
self._writeYumConfig()
- self._resetYum(root=ROOT_PATH)
+ self._resetYum(root=ROOT_PATH, keep_cache=True)
log.debug("setting releasever to previous value of %s" % releasever)
self._yum.preconf.releasever = releasever
@@ -737,6 +739,16 @@ reposdir=%s
return groups
+ def languageGroups(self, lang):
+ groups = []
+ yum_groups = self._yumGroups
+
+ if yum_groups:
+ with _yum_lock:
+ groups = [g.groupid for g in yum_groups.get_groups() if g.langonly == lang]
+
+ return groups
+
def description(self, groupid):
""" Return name/description tuple for the group specified by id. """
groups = self._yumGroups
@@ -950,9 +962,9 @@ reposdir=%s
if not selected:
log.error("failed to select a kernel from %s" % kernels)
- def preInstall(self, packages=None):
+ def preInstall(self, packages=None, groups=None):
""" Perform pre-installation tasks. """
- super(YumPayload, self).preInstall(packages=packages)
+ super(YumPayload, self).preInstall(packages=packages, groups=groups)
progress.send_message(_("Starting package installation process"))
if self.install_device:
@@ -1001,12 +1013,13 @@ reposdir=%s
self._yum.ts.order()
self._yum.ts.clean()
- # set up rpm logging to go to our log
- self._yum.ts.ts.scriptFd = self.install_log.fileno()
- rpm.setLogFile(self.install_log)
+ # Write scriptlet output to a file to be logged later
+ script_log = tempfile.NamedTemporaryFile(delete=False)
+ self._yum.ts.ts.scriptFd = script_log.fileno()
+ rpm.setLogFile(script_log)
# create the install callback
- rpmcb = RPMCallback(self._yum, self.install_log,
+ rpmcb = RPMCallback(self._yum, script_log,
upgrade=self.data.upgrade.upgrade)
if flags.testing:
@@ -1037,12 +1050,19 @@ reposdir=%s
raise exn
else:
log.info("transaction complete")
- self.install_log.write("*** FINISHED INSTALLING PACKAGES ***")
progress.send_step()
finally:
- self.install_log.close()
self._yum.ts.close()
iutil.resetRpmDb()
+ script_log.close()
+
+ # log the contents of the scriptlet logfile
+ log.info("==== start rpm scriptlet logs ====")
+ with open(script_log.name) as f:
+ for l in f:
+ log.info(l)
+ log.info("==== end rpm scriptlet logs ====")
+ os.unlink(script_log.name)
def postInstall(self):
""" Perform post-installation tasks. """
@@ -1070,7 +1090,7 @@ reposdir=%s
class RPMCallback(object):
def __init__(self, yb, log, upgrade=False):
self._yum = yb # yum.YumBase
- self.install_log = log # file instance
+ self.install_log = log # logfile for yum script logs
self.upgrade = upgrade # boolean
self.package_file = None # file instance (package file management)
@@ -1132,9 +1152,10 @@ class RPMCallback(object):
log_msg = msg_format % (mode, txmbr.po,
self.completed_actions,
self.total_actions)
- self.install_log.write("%s %s\n" % (time.strftime("%H:%M:%S"),
- log_msg))
+ log.info(log_msg)
+ self.install_log.write(log_msg+"\n")
self.install_log.flush()
+
progress.send_message(progress_msg)
self.package_file = None
diff --git a/pyanaconda/rescue.py b/pyanaconda/rescue.py
index 5854e25a1..be84c1a2e 100644
--- a/pyanaconda/rescue.py
+++ b/pyanaconda/rescue.py
@@ -23,7 +23,6 @@
from snack import *
from constants import *
from textw.constants_text import *
-from textw.add_drive_text import addDriveDialog
from text import WaitWindow, OkCancelWindow, ProgressWindow, PassphraseEntryWindow, stepToClasses
from flags import flags
import sys
@@ -92,11 +91,11 @@ class RescueInterface(InstallInterfaceBase):
else:
return OkCancelWindow(self.screen, title, text)
- def enableNetwork(self, anaconda):
- if len(anaconda.network.netdevices) == 0:
+ def enableNetwork(self):
+ if len(network.getDevices()) == 0:
return False
from textw.netconfig_text import NetworkConfiguratorText
- w = NetworkConfiguratorText(self.screen, anaconda)
+ w = NetworkConfiguratorText(self.screen, self)
ret = w.run()
return ret != INSTALL_BACK
@@ -115,9 +114,6 @@ class RescueInterface(InstallInterfaceBase):
def resume(self):
pass
- def run(self, anaconda):
- self.anaconda = anaconda
-
def __init__(self):
InstallInterfaceBase.__init__(self)
self.screen = SnackScreen()
@@ -171,18 +167,6 @@ def makeResolvConf(instPath):
f.write(buf)
f.close()
-#
-# Write out something useful for networking and start interfaces
-#
-def startNetworking(network, intf):
- # do lo first
- if os.system("/usr/sbin/ifconfig lo 127.0.0.1"):
- log.error("Error trying to start lo in rescue.py::startNetworking()")
-
- # start up dhcp interfaces first
- if not network.bringUp():
- log.error("Error bringing up network interfaces")
-
def runShell(screen = None, msg=""):
if screen:
screen.suspend()
@@ -204,7 +188,7 @@ def runShell(screen = None, msg=""):
if os.path.exists("/usr/bin/firstaidkit-qs"):
proc = subprocess.Popen(["/usr/bin/firstaidkit-qs"])
proc.wait()
-
+
if proc is None or proc.returncode!=0:
if os.path.exists("/bin/bash"):
iutil.execConsole()
@@ -215,7 +199,9 @@ def runShell(screen = None, msg=""):
if screen:
screen.finish()
-def doRescue(anaconda):
+def doRescue(rescue_mount, ksdata, platform):
+ import storage
+
for file in [ "services", "protocols", "group", "joe", "man.config",
"nsswitch.conf", "selinux", "mke2fs.conf" ]:
try:
@@ -223,107 +209,82 @@ def doRescue(anaconda):
except OSError:
pass
+ intf = RescueInterface()
+
# see if they would like networking enabled
if not network.hasActiveNetDev():
+ rc = ButtonChoiceWindow(intf.screen, _("Setup Networking"),
+ _("Do you want to start the network interfaces on "
+ "this system?"), [_("Yes"), _("No")])
- while True:
- rc = ButtonChoiceWindow(anaconda.intf.screen, _("Setup Networking"),
- _("Do you want to start the network interfaces on "
- "this system?"), [_("Yes"), _("No")])
-
- if rc != _("No").lower():
- if not anaconda.intf.enableNetwork(anaconda):
- anaconda.intf.messageWindow(_("No Network Available"),
- _("Unable to activate a networking device. Networking "
- "will not be available in rescue mode."))
- break
-
- startNetworking(anaconda.network, anaconda.intf)
- break
- else:
- break
-
- # shutdown the interface now
- anaconda.intf.shutdown()
- anaconda.intf = None
+ if rc != _("No").lower():
+ if not intf.enableNetwork():
+ intf.messageWindow(_("No Network Available"),
+ _("Unable to activate a networking device. Networking "
+ "will not be available in rescue mode."))
# Early shell access with no disk access attempts
- if not anaconda.rescue_mount:
+ if not rescue_mount:
# the %post should be responsible for mounting all needed file systems
# NOTE: 1st script must be bash or simple python as nothing else might be available in the rescue image
- if anaconda.ksdata and anaconda.ksdata.scripts:
+ if flags.automatedInstall and ksdata.scripts:
from kickstart import runPostScripts
- runPostScripts(anaconda.ksdata.scripts)
+ runPostScripts(ksdata.scripts)
else:
runShell()
sys.exit(0)
- anaconda.intf = RescueInterface()
-
- if anaconda.ksdata:
- if anaconda.ksdata.rescue and anaconda.ksdata.rescue.romount:
- readOnly = 1
- else:
- readOnly = 0
+ if flags.automatedInstall:
+ readOnly = ksdata.rescue.romount
else:
# prompt to see if we should try and find root filesystem and mount
# everything in /etc/fstab on that root
while True:
- rc = ButtonChoiceWindow(anaconda.intf.screen, _("Rescue"),
+ rc = ButtonChoiceWindow(intf.screen, _("Rescue"),
_("The rescue environment will now attempt to find your "
"Linux installation and mount it under the directory "
"%s. You can then make any changes required to your "
"system. If you want to proceed with this step choose "
"'Continue'. You can also choose to mount your file systems "
"read-only instead of read-write by choosing 'Read-Only'. "
- "If you need to activate SAN devices choose 'Advanced'."
"\n\n"
"If for some reason this process fails you can choose 'Skip' "
"and this step will be skipped and you will go directly to a "
"command shell.\n\n") % (ROOT_PATH,),
- [_("Continue"), _("Read-Only"), _("Skip"), _("Advanced")] )
+ [_("Continue"), _("Read-Only"), _("Skip")] )
if rc == _("Skip").lower():
- runShell(anaconda.intf.screen)
+ runShell(intf.screen)
sys.exit(0)
- elif rc == _("Advanced").lower():
- addDialog = addDriveDialog(anaconda)
- addDialog.addDriveDialog(anaconda.intf.screen)
- continue
- elif rc == _("Read-Only").lower():
- readOnly = 1
else:
- readOnly = 0
- break
+ readOnly = rc == _("Read-Only").lower()
- import storage
- storage.storageInitialize(anaconda)
+ break
- (disks, notUpgradable) = storage.findExistingRootDevices(anaconda, upgradeany=True)
+ sto = storage.Storage(ksdata, platform)
+ storage.storageInitialize(sto, ksdata, [])
+ roots = storage.findExistingInstallations(sto.devicetree)
- if not disks:
+ if not roots:
root = None
- elif (len(disks) == 1) or anaconda.ksdata:
- root = disks[0]
+ elif len(roots) == 1 or ksdata.upgrade.upgrade:
+ root = roots[0]
else:
- height = min (len (disks), 12)
+ height = min (len (roots), 12)
if height == 12:
scroll = 1
else:
scroll = 0
- devList = []
- for (device, relstr) in disks:
- if getattr(device.format, "label", None):
- devList.append("%s (%s) - %s" % (device.name, device.format.label, relstr))
- else:
- devList.append("%s - %s" % (device.name, relstr))
+ lst = []
+ for root in roots:
+ lst.append("%s" % root.name)
(button, choice) = \
- ListboxChoiceWindow(anaconda.intf.screen, _("System to Rescue"),
+ ListboxChoiceWindow(intf.screen, _("System to Rescue"),
_("Which device holds the root partition "
- "of your installation?"), devList,
+ "of your installation?"), lst,
[ _("OK"), _("Exit") ], width = 30,
scroll = scroll, height = height,
help = "multipleroot")
@@ -331,15 +292,15 @@ def doRescue(anaconda):
if button == _("Exit").lower():
root = None
else:
- root = disks[choice]
+ root = roots[choice]
- rootmounted = 0
+ rootmounted = False
if root:
try:
# TODO: add a callback to warn about dirty filesystems
- rc = mountExistingSystem(anaconda.storage.fsset, root,
- allowDirty = 1,
+ rc = mountExistingSystem(sto.fsset, root.device,
+ allowDirty = True,
readOnly = readOnly)
if not flags.imageInstall:
@@ -350,20 +311,20 @@ def doRescue(anaconda):
"when you are finished.") % ANACONDA_CLEANUP
if rc == -1:
- if anaconda.ksdata:
+ if flags.automatedInstall:
log.error("System had dirty file systems which you chose not to mount")
else:
- ButtonChoiceWindow(anaconda.intf.screen, _("Rescue"),
+ ButtonChoiceWindow(intf.screen, _("Rescue"),
_("Your system had dirty file systems which you chose not "
"to mount. Press return to get a shell from which "
"you can fsck and mount your partitions. %s") % msg,
[_("OK")], width = 50)
- rootmounted = 0
+ rootmounted = False
else:
- if anaconda.ksdata:
+ if flags.automatedInstall:
log.info("System has been mounted under: %s" % ROOT_PATH)
else:
- ButtonChoiceWindow(anaconda.intf.screen, _("Rescue"),
+ ButtonChoiceWindow(intf.screen, _("Rescue"),
_("Your system has been mounted under %(rootPath)s.\n\n"
"Press <return> to get a shell. If you would like to "
"make your system the root environment, run the command:\n\n"
@@ -371,12 +332,12 @@ def doRescue(anaconda):
{'rootPath': ROOT_PATH,
'msg': msg},
[_("OK")] )
- rootmounted = 1
+ rootmounted = True
# now turn on swap
if not readOnly:
try:
- anaconda.storage.turnOnSwap()
+ sto.turnOnSwap()
except StorageError:
log.error("Error enabling swap")
@@ -424,7 +385,7 @@ def doRescue(anaconda):
raise
except Exception as e:
log.error("doRescue caught exception: %s" % e)
- if anaconda.ksdata:
+ if flags.automatedInstall:
log.error("An error occurred trying to mount some or all of your system")
else:
if not flags.imageInstall:
@@ -434,16 +395,15 @@ def doRescue(anaconda):
msg = _("Run %s to unmount the system "
"when you are finished.") % ANACONDA_CLEANUP
- ButtonChoiceWindow(anaconda.intf.screen, _("Rescue"),
+ ButtonChoiceWindow(intf.screen, _("Rescue"),
_("An error occurred trying to mount some or all of your "
"system. Some of it may be mounted under %s.\n\n"
"Press <return> to get a shell.") % ROOT_PATH + msg,
[_("OK")] )
else:
- if anaconda.ksdata and \
- anaconda.ksdata.reboot.action in [KS_REBOOT, KS_SHUTDOWN]:
+ if flags.automatedInstall and ksdata.reboot.action in [KS_REBOOT, KS_SHUTDOWN]:
log.info("No Linux partitions found")
- anaconda.intf.screen.finish()
+ intf.screen.finish()
print(_("You don't have any Linux partitions. Rebooting.\n"))
sys.exit(0)
else:
@@ -452,7 +412,7 @@ def doRescue(anaconda):
"from the shell.")
else:
msg = ""
- ButtonChoiceWindow(anaconda.intf.screen, _("Rescue Mode"),
+ ButtonChoiceWindow(intf.screen, _("Rescue Mode"),
_("You don't have any Linux partitions. Press "
"return to get a shell.%s") % msg,
[ _("OK") ], width = 50)
@@ -460,28 +420,27 @@ def doRescue(anaconda):
msgStr = ""
if rootmounted and not readOnly:
- anaconda.storage.makeMtab()
+ sto.makeMtab()
try:
makeResolvConf(ROOT_PATH)
except (OSError, IOError) as e:
log.error("error making a resolv.conf: %s" %(e,))
msgStr = _("Your system is mounted under the %s directory.") % (ROOT_PATH,)
- ButtonChoiceWindow(anaconda.intf.screen, _("Rescue"), msgStr, [_("OK")] )
+ ButtonChoiceWindow(intf.screen, _("Rescue"), msgStr, [_("OK")] )
# we do not need ncurses anymore, shut them down
- anaconda.intf.shutdown()
+ intf.shutdown()
#create /etc/fstab in ramdisk, so it is easier to work with RO mounted filesystems
makeFStab()
# run %post if we've mounted everything
- if rootmounted and not readOnly and anaconda.ksdata:
+ if rootmounted and not readOnly and flags.automatedInstall:
from kickstart import runPostScripts
- runPostScripts(anaconda.ksdata.scripts)
+ runPostScripts(ksdata.scripts)
# start shell if reboot wasn't requested
- if not anaconda.ksdata or \
- not anaconda.ksdata.reboot.action in [KS_REBOOT, KS_SHUTDOWN]:
+ if not flags.automatedInstall or not ksdata.reboot.action in [KS_REBOOT, KS_SHUTDOWN]:
runShell(msg=msgStr)
sys.exit(0)
diff --git a/pyanaconda/security.py b/pyanaconda/security.py
index 50d92e298..2e9532373 100644
--- a/pyanaconda/security.py
+++ b/pyanaconda/security.py
@@ -19,7 +19,7 @@
# Author(s): Jeremy Katz <katzj@redhat.com>
#
-import iutil, shlex
+import iutil
from flags import flags
from pyanaconda.constants import ROOT_PATH
from pykickstart.constants import *
@@ -33,8 +33,6 @@ selinux_states = { SELINUX_DISABLED: "disabled",
class Security:
def __init__(self):
- self.auth = "--enableshadow --passalgo=sha512"
-
if flags.selinux == 1:
self.selinux = SELINUX_ENFORCING
else:
@@ -50,14 +48,6 @@ class Security:
def getSELinux(self):
return self.selinux
- def _addFingerprint(self):
- import rpm
-
- iutil.resetRpmDb()
- ts = rpm.TransactionSet(ROOT_PATH)
- # pylint: disable-msg=E1101
- return ts.dbMatch('provides', 'fprintd-pam').count()
-
def write(self):
args = []
@@ -65,22 +55,9 @@ class Security:
log.error("unknown selinux state: %s" %(self.selinux,))
return
- args = args + [ "--selinux=%s" %(selinux_states[self.selinux],) ]
-
try:
iutil.execWithRedirect("/usr/sbin/lokkit", args,
root=ROOT_PATH, stdout="/dev/null",
stderr="/dev/null")
except (RuntimeError, OSError) as msg:
log.error ("lokkit run failed: %s" %(msg,))
-
- args = ["--update", "--nostart"] + shlex.split(self.auth)
- if self._addFingerprint():
- args += ["--enablefingerprint"]
-
- try:
- iutil.execWithRedirect("/usr/sbin/authconfig", args,
- stdout = "/dev/tty5", stderr = "/dev/tty5",
- root=ROOT_PATH)
- except RuntimeError as msg:
- log.error("Error running %s: %s", args, msg)
diff --git a/pyanaconda/storage/__init__.py b/pyanaconda/storage/__init__.py
index 88038a17a..914096234 100644
--- a/pyanaconda/storage/__init__.py
+++ b/pyanaconda/storage/__init__.py
@@ -97,20 +97,15 @@ def storageInitialize(storage, ksdata, protected):
if not storage.disks:
raise NoDisksError
+ # kickstart uses all the disks
+ if flags.automatedInstall:
+ if not ksdata.ignoredisk.onlyuse:
+ ksdata.ignoredisk.onlyuse = [d.name for d in storage.disks \
+ if d.name not in ksdata.ignoredisk.ignoredisk]
+ log.debug("onlyuse is now: %s" % (",".join(ksdata.ignoredisk.onlyuse)))
+
# dispatch.py helper function
def storageComplete(anaconda):
- if anaconda.dir == DISPATCH_BACK:
- rc = anaconda.intf.messageWindow(_("Installation cannot continue."),
- _("The storage configuration you have "
- "chosen has already been activated. You "
- "can no longer return to the disk editing "
- "screen. Would you like to continue with "
- "the installation process?"),
- type = "yesno")
- if rc == 0:
- sys.exit(0)
- return DISPATCH_FORWARD
-
devs = anaconda.storage.devicetree.getDevicesByType("luks/dm-crypt")
existing_luks = False
new_luks = False
@@ -157,32 +152,6 @@ def storageComplete(anaconda):
if anaconda.ksdata:
return
- # Prevent users from installing on s390x with (a) no /boot volume, (b) the
- # root volume on LVM, and (c) the root volume not restricted to a single
- # PV
- # NOTE: There is not really a way for users to create a / volume
- # restricted to a single PV. The backend support is there, but there are
- # no UI hook-ups to drive that functionality, but I do not personally
- # care. --dcantrell
- if iutil.isS390() and \
- not anaconda.storage.mountpoints.has_key('/boot') and \
- anaconda.storage.mountpoints['/'].type == 'lvmlv' and \
- not anaconda.storage.mountpoints['/'].singlePV:
- rc = anaconda.intf.messageWindow(_("Missing /boot Volume"),
- _("This platform requires /boot on "
- "a dedicated partition or logical "
- "volume. If you do not want a "
- "/boot volume, you must place / "
- "on a dedicated non-LVM "
- "partition."),
- type="custom", custom_icon="error",
- custom_buttons=[_("Go _back"),
- _("_Exit installer")],
- default=0)
- if rc == 0:
- return DISPATCH_BACK
- sys.exit(1)
-
rc = anaconda.intf.messageWindow(_("Confirm"),
_("The partitioning options you have selected "
"will now be written to disk. Any "
@@ -241,8 +210,6 @@ def turnOnFilesystems(storage):
storage.write()
writeEscrowPackets(storage)
else:
- from pyanaconda.upgrade import bindMountDevDirectory
-
if upgrade_migrate:
# we should write out a new fstab with the migrated fstype
shutil.copyfile("%s/etc/fstab" % ROOT_PATH,
@@ -250,7 +217,10 @@ def turnOnFilesystems(storage):
storage.fsset.write()
# and make sure /dev is mounted so we can read the bootloader
- bindMountDevDirectory(ROOT_PATH)
+ getFormat("bind",
+ device="/dev",
+ mountpoint="/dev",
+ exists=True).mount(chroot=ROOT_PATH)
def writeEscrowPackets(storage):
escrowDevices = filter(lambda d: d.format.type == "luks" and \
@@ -534,6 +504,10 @@ class Storage(object):
for device in root.mounts.values() + root.swaps:
used_devices.extend(device.ancestors)
+ if getattr(device, "isLogical", False):
+ extended = device.disk.format.extendedPartition.path
+ used_devices.append(self.devicetree.getDeviceByPath(extended))
+
for new in [d for d in self.devicetree.leaves if not d.exists]:
if new in self.swaps or getattr(new.format, "mountpoint", None):
used_devices.extend(new.ancestors)
@@ -1111,13 +1085,6 @@ class Storage(object):
None),
**kwargs.pop("fmt_args", {}))
- if kwargs.has_key("disks"):
- parents = kwargs.pop("disks")
- if isinstance(parents, Device):
- kwargs["parents"] = [parents]
- else:
- kwargs["parents"] = parents
-
if kwargs.has_key("name"):
name = kwargs.pop("name")
else:
@@ -1146,7 +1113,7 @@ class Storage(object):
def newVG(self, *args, **kwargs):
""" Return a new LVMVolumeGroupDevice instance. """
- pvs = kwargs.pop("pvs", [])
+ pvs = kwargs.pop("parents", [])
for pv in pvs:
if pv not in self.devices:
raise ValueError("pv is not in the device tree")
@@ -1170,9 +1137,7 @@ class Storage(object):
def newLV(self, *args, **kwargs):
""" Return a new LVMLogicalVolumeDevice instance. """
- if kwargs.has_key("vg"):
- vg = kwargs.pop("vg")
-
+ vg = kwargs.get("parents", [None])[0]
mountpoint = kwargs.pop("mountpoint", None)
if kwargs.has_key("fmt_type"):
kwargs["format"] = getFormat(kwargs.pop("fmt_type"),
@@ -1193,7 +1158,7 @@ class Storage(object):
if name in self.names:
raise ValueError("name already in use")
- return LVMLogicalVolumeDevice(name, vg, *args, **kwargs)
+ return LVMLogicalVolumeDevice(name, *args, **kwargs)
def newBTRFS(self, *args, **kwargs):
""" Return a new BTRFSVolumeDevice or BRFSSubVolumeDevice. """
@@ -1470,6 +1435,21 @@ class Storage(object):
"megabytes which is usually too small to "
"install %s.") % (productName,))
+ # Prevent users from installing on s390x with (a) no /boot volume, (b) the
+ # root volume on LVM, and (c) the root volume not restricted to a single
+ # PV
+ # NOTE: There is not really a way for users to create a / volume
+ # restricted to a single PV. The backend support is there, but there are
+ # no UI hook-ups to drive that functionality, but I do not personally
+ # care. --dcantrell
+ if iutil.isS390() and \
+ not self.mountpoints.has_key('/boot') and \
+ root.type == 'lvmlv' and not root.singlePV:
+ errors.append(_("This platform requires /boot on a dedicated "
+ "partition or logical volume. If you do not "
+ "want a /boot volume, you must place / on a "
+ "dedicated non-LVM partition."))
+
# FIXME: put a check here for enough space on the filesystems. maybe?
# livecds have to have the rootfs type match up
@@ -1867,11 +1847,10 @@ class Storage(object):
return 0
-def mountExistingSystem(fsset, rootEnt,
+def mountExistingSystem(fsset, rootDevice,
allowDirty=None, dirtyCB=None,
readOnly=None):
""" Mount filesystems specified in rootDevice's /etc/fstab file. """
- rootDevice = rootEnt[0]
rootPath = ROOT_PATH
if dirtyCB is None:
dirtyCB = lambda l: False
@@ -2699,8 +2678,9 @@ def findExistingInstallations(devicetree):
log.warning("setup of %s failed: %s" % (device.name, e))
continue
+ options = device.format.options + ",ro"
try:
- device.format.mount(options="ro", mountpoint=ROOT_PATH)
+ device.format.mount(options=options, mountpoint=ROOT_PATH)
except Exception as e:
log.warning("mount of %s as %s failed: %s" % (device.name,
device.format.type,
@@ -2720,8 +2700,11 @@ def findExistingInstallations(devicetree):
name = "%s Linux %s for %s" % (product, version, arch)
(mounts, swaps) = parseFSTab(devicetree, chroot=ROOT_PATH)
- roots.append(Root(mounts=mounts, swaps=swaps, name=name))
device.teardown()
+ if not mounts and not swaps:
+ # empty /etc/fstab. weird, but I've seen it happen.
+ continue
+ roots.append(Root(mounts=mounts, swaps=swaps, name=name))
return roots
@@ -2782,17 +2765,18 @@ def parseFSTab(devicetree, chroot=None):
for line in f.readlines():
# strip off comments
(line, pound, comment) = line.partition("#")
- fields = line.split(None, 3)
+ fields = line.split(None, 4)
- if len(fields) < 4:
+ if len(fields) < 5:
continue
- (devspec, mountpoint, fstype, rest) = fields
+ (devspec, mountpoint, fstype, options, rest) = fields
# find device in the tree
device = devicetree.resolveDevice(devspec,
cryptTab=cryptTab,
- blkidTab=blkidTab)
+ blkidTab=blkidTab,
+ options=options)
if device is None:
continue
@@ -2804,8 +2788,3 @@ def parseFSTab(devicetree, chroot=None):
return (mounts, swaps)
-def doKickstartStorage(storage, ksdata, instclass, checker):
- ksdata.clearpart.execute(storage, ksdata, instclass)
- ksdata.bootloader.execute(storage, ksdata, instclass)
- ksdata.autopart.execute(storage, ksdata, instclass)
- checker.run()
diff --git a/pyanaconda/storage/deviceaction.py b/pyanaconda/storage/deviceaction.py
index b16573ad4..617d8b299 100644
--- a/pyanaconda/storage/deviceaction.py
+++ b/pyanaconda/storage/deviceaction.py
@@ -288,7 +288,10 @@ class ActionDestroyDevice(DeviceAction):
# Make sure libparted does not keep cached info for this device
# and returns it when we create a new device with the same name
if self.device.partedDevice:
- self.device.partedDevice.removeFromCache()
+ try:
+ self.device.partedDevice.removeFromCache()
+ except Exception:
+ pass
def requires(self, action):
""" Return True if self requires action.
diff --git a/pyanaconda/storage/devicelibs/crypto.py b/pyanaconda/storage/devicelibs/crypto.py
index ee573229d..35c813f84 100644
--- a/pyanaconda/storage/devicelibs/crypto.py
+++ b/pyanaconda/storage/devicelibs/crypto.py
@@ -29,6 +29,8 @@ from ..errors import *
import gettext
_ = lambda x: gettext.ldgettext("anaconda", x)
+LUKS_METADATA_SIZE = 2.0 # MB
+
# Keep the character set size a power of two to make sure all characters are
# equally likely
GENERATED_PASSPHRASE_CHARSET = ("0123456789"
diff --git a/pyanaconda/storage/devicelibs/swap.py b/pyanaconda/storage/devicelibs/swap.py
index 274b4d03a..5113787c3 100644
--- a/pyanaconda/storage/devicelibs/swap.py
+++ b/pyanaconda/storage/devicelibs/swap.py
@@ -31,6 +31,8 @@ from . import dm
import gettext
_ = lambda x: gettext.ldgettext("anaconda", x)
+import logging
+log = logging.getLogger("anaconda")
def mkswap(device, label=''):
# We use -f to force since mkswap tends to refuse creation on lvs with
@@ -122,3 +124,42 @@ def swapstatus(device):
return status
+def swapSuggestion(quiet=False, hibernation=False):
+ """
+ Suggest the size of the swap partition that will be created.
+
+ @param quiet: log size information
+ @param hibernation: calculate swap size big enough for hibernation
+ @return: calculated swap size
+
+ """
+
+ mem = iutil.memInstalled()/1024
+ mem = ((mem/16)+1)*16
+ if not quiet:
+ log.info("Detected %sM of memory", mem)
+
+ #chart suggested in the discussion with other teams
+ if mem < 2048:
+ swap = 2 * mem
+
+ elif 2048 <= mem < 8192:
+ swap = mem
+
+ elif 8192 <= mem < 65536:
+ swap = mem / 2
+
+ else:
+ swap = 4096
+
+ if hibernation:
+ if mem <= 65536:
+ swap = mem + swap
+ else:
+ log.info("Ignoring --hibernation option on systems with 64 GB of RAM or more")
+
+ if not quiet:
+ log.info("Swap attempt of %sM", swap)
+
+ return swap
+
diff --git a/pyanaconda/storage/devices.py b/pyanaconda/storage/devices.py
index 6b979e850..8fef3d168 100644
--- a/pyanaconda/storage/devices.py
+++ b/pyanaconda/storage/devices.py
@@ -105,6 +105,7 @@ from devicelibs import lvm
from devicelibs import dm
from devicelibs import loop
from devicelibs import btrfs
+from devicelibs import crypto
import parted
import _ped
import block
@@ -1934,8 +1935,7 @@ class LUKSDevice(DMCryptDevice):
@property
def size(self):
if not self.exists or not self.partedDevice:
- # the LUKS metadata area is 2MB
- size = float(self.slave.size) - 2.0
+ size = float(self.slave.size) - crypto.LUKS_METADATA_SIZE
else:
size = self.partedDevice.getSize()
return size
@@ -1964,7 +1964,7 @@ class LVMVolumeGroupDevice(DMDevice):
_type = "lvmvg"
_packages = ["lvm2"]
- def __init__(self, name, parents, size=None, free=None,
+ def __init__(self, name, parents=None, size=None, free=None,
peSize=None, peCount=None, peFree=None, pvCount=None,
uuid=None, exists=False, sysfsPath=''):
""" Create a LVMVolumeGroupDevice instance.
@@ -2387,7 +2387,7 @@ class LVMLogicalVolumeDevice(DMDevice):
_resizable = True
_packages = ["lvm2"]
- def __init__(self, name, vgdev, size=None, uuid=None,
+ def __init__(self, name, parents=None, size=None, uuid=None,
stripes=1, logSize=0, snapshotSpace=0,
format=None, exists=False, sysfsPath='',
grow=None, maxsize=None, percent=None,
@@ -2418,15 +2418,15 @@ class LVMLogicalVolumeDevice(DMDevice):
percent -- percent of VG space to take
"""
- if isinstance(vgdev, list):
- if len(vgdev) != 1:
+ if isinstance(parents, list):
+ if len(parents) != 1:
raise ValueError("constructor requires a single LVMVolumeGroupDevice instance")
- elif not isinstance(vgdev[0], LVMVolumeGroupDevice):
+ elif not isinstance(parents[0], LVMVolumeGroupDevice):
raise ValueError("constructor requires a LVMVolumeGroupDevice instance")
- elif not isinstance(vgdev, LVMVolumeGroupDevice):
+ elif not isinstance(parents, LVMVolumeGroupDevice):
raise ValueError("constructor requires a LVMVolumeGroupDevice instance")
DMDevice.__init__(self, name, size=size, format=format,
- sysfsPath=sysfsPath, parents=vgdev,
+ sysfsPath=sysfsPath, parents=parents,
exists=exists)
self.singlePVerr = ("%(mountpoint)s is restricted to a single "
@@ -3642,19 +3642,36 @@ class iScsiDiskDevice(DiskDevice, NetworkStorageDevice):
self.ibft = kwargs.pop("ibft")
self.nic = kwargs.pop("nic")
self.initiator = kwargs.pop("initiator")
- DiskDevice.__init__(self, device, **kwargs)
- NetworkStorageDevice.__init__(self, host_address=self.node.address,
- nic=self.nic)
- log.debug("created new iscsi disk %s %s:%d via %s:%s" % (self.node.name,
- self.node.address,
- self.node.port,
- self.node.iface,
- self.nic))
+
+ if self.node is None:
+ # qla4xxx partial offload
+ name = kwargs.pop("fw_name")
+ address = kwargs.pop("fw_address")
+ port = kwargs.pop("fw_port")
+ DiskDevice.__init__(self, device, **kwargs)
+ NetworkStorageDevice.__init__(self,
+ host_address=address,
+ nic=self.nic)
+ log.debug("created new iscsi disk %s %s:%s using fw initiator %s"
+ % (name, address, port, self.initiator))
+ else:
+ DiskDevice.__init__(self, device, **kwargs)
+ NetworkStorageDevice.__init__(self, host_address=self.node.address,
+ nic=self.nic)
+ log.debug("created new iscsi disk %s %s:%d via %s:%s" % (self.node.name,
+ self.node.address,
+ self.node.port,
+ self.node.iface,
+ self.nic))
def dracutSetupArgs(self):
if self.ibft:
return set(["iscsi_firmware"])
+ # qla4xxx partial offload
+ if self.node is None:
+ return set()
+
address = self.node.address
# surround ipv6 addresses with []
if ":" in address:
@@ -3943,19 +3960,31 @@ class BTRFSDevice(StorageDevice):
def _temp_dir_prefix(self):
return "btrfs-tmp.%s" % self.id
- def _do_temp_mount(self):
+ def _do_temp_mount(self, orig=False):
if self.format.status or not self.exists:
return
tmpdir = tempfile.mkdtemp(prefix=self._temp_dir_prefix)
- self.format.mount(mountpoint=tmpdir)
+ if orig:
+ fmt = self.originalFormat
+ else:
+ fmt = self.format
+
+ fmt.mount(mountpoint=tmpdir)
def _undo_temp_mount(self):
- if self.format.status:
- mountpoint = self.format._mountpoint
- if os.path.basename(mountpoint).startswith(self._temp_dir_prefix):
- self.format.unmount()
- os.rmdir(mountpoint)
+ if getattr(self.format, "_mountpoint", None):
+ fmt = self.format
+ elif getattr(self.originalFormat, "_mountpoint", None):
+ fmt = self.originalFormat
+ else:
+ return
+
+ mountpoint = fmt._mountpoint
+
+ if os.path.basename(mountpoint).startswith(self._temp_dir_prefix):
+ fmt.unmount()
+ os.rmdir(mountpoint)
@property
def path(self):
@@ -3990,6 +4019,7 @@ class BTRFSVolumeDevice(BTRFSDevice):
label=label,
volUUID=self.uuid,
device=self.path)
+ self.originalFormat = self.format
label = getattr(self.format, "label", None)
if label:
@@ -4058,7 +4088,7 @@ class BTRFSVolumeDevice(BTRFSDevice):
subvols = []
self.setup(orig=True)
try:
- self._do_temp_mount()
+ self._do_temp_mount(orig=True)
except FSError as e:
log.debug("btrfs temp mount failed: %s" % e)
return subvols
@@ -4127,10 +4157,10 @@ class BTRFSSubVolumeDevice(BTRFSDevice):
def _destroy(self):
log_method_call(self, self.name, status=self.status)
- self.volume._do_temp_mount()
- mountpoint = self.volume.format._mountpoint
+ self.volume._do_temp_mount(orig=True)
+ mountpoint = self.volume.originalFormat._mountpoint
if not mountpoint:
raise RuntimeError("btrfs subvol destroy requires mounted volume")
btrfs.delete_subvolume(mountpoint, self.name)
- self.volume._removeSubVolume()
+ self.volume._removeSubVolume(self.name)
self.volume._undo_temp_mount()
diff --git a/pyanaconda/storage/devicetree.py b/pyanaconda/storage/devicetree.py
index ae69be2b8..df0d15f81 100644
--- a/pyanaconda/storage/devicetree.py
+++ b/pyanaconda/storage/devicetree.py
@@ -354,6 +354,7 @@ class DeviceTree(object):
# don't include "req%d" partition names
if ((newdev.type != "partition" or
not newdev.name.startswith("req")) and
+ newdev.type != "btrfs volume" and
newdev.name not in self.names):
self.names.append(newdev.name)
log.info("added %s %s (id %d) to device tree" % (newdev.type,
@@ -598,6 +599,20 @@ class DeviceTree(object):
self.addIgnoredDisk(name)
return True
+ # Ignore any readonly disks
+ if (udev_device_is_disk(info) and not
+ (udev_device_is_cdrom(info) or
+ udev_device_is_partition(info) or
+ udev_device_is_dm_partition(info) or
+ udev_device_is_dm_lvm(info) or
+ udev_device_is_dm_crypt(info) or
+ (udev_device_is_md(info) and not
+ udev_device_get_md_container(info)))):
+ if iutil.get_sysfs_attr(info["sysfs_path"], 'ro') == '1':
+ log.debug("Ignoring read only device %s" % name)
+ self.addIgnoredDisk(name)
+ return True
+
# FIXME: check for virtual devices whose slaves are on the ignore list
def addUdevLVDevice(self, info):
@@ -845,16 +860,26 @@ class DeviceTree(object):
kwargs = { "serial": serial, "vendor": vendor, "bus": bus }
if udev_device_is_iscsi(info):
diskType = iScsiDiskDevice
- node = self.iscsi.getNode(
- udev_device_get_iscsi_name(info),
- udev_device_get_iscsi_address(info),
- udev_device_get_iscsi_port(info),
- udev_device_get_iscsi_nic(info))
- kwargs["node"] = node
- kwargs["nic"] = self.iscsi.ifaces.get(node.iface, node.iface)
- kwargs["ibft"] = node in self.iscsi.ibftNodes
- kwargs["initiator"] = self.iscsi.initiator
- log.info("%s is an iscsi disk" % name)
+ initiator = udev_device_get_iscsi_initiator(info)
+ target = udev_device_get_iscsi_name(info)
+ address = udev_device_get_iscsi_address(info)
+ port = udev_device_get_iscsi_port(info)
+ nic = udev_device_get_iscsi_nic(info)
+ kwargs["initiator"] = initiator
+ if initiator == self.iscsi.initiator:
+ node = self.iscsi.getNode(target, address, port, nic)
+ kwargs["node"] = node
+ kwargs["ibft"] = node in self.iscsi.ibftNodes
+ kwargs["nic"] = self.iscsi.ifaces.get(node.iface, node.iface)
+ log.info("%s is an iscsi disk" % name)
+ else:
+ # qla4xxx partial offload
+ kwargs["node"] = None
+ kwargs["ibft"] = False
+ kwargs["nic"] = "offload:not_accessible_via_iscsiadm"
+ kwargs["fw_address"] = address
+ kwargs["fw_port"] = port
+ kwargs["fw_name"] = name
elif udev_device_is_fcoe(info):
diskType = FcoeDiskDevice
kwargs["nic"] = udev_device_get_fcoe_nic(info)
@@ -1529,11 +1554,12 @@ class DeviceTree(object):
if vol_path in [sv.name for sv in btrfs_dev.subvolumes]:
continue
fmt = getFormat("btrfs", device=btrfs_dev.path, exists=True,
- mountopts="subvol=%d" % vol_id)
+ mountopts="subvol=%s" % vol_path)
subvol = BTRFSSubVolumeDevice(vol_path,
vol_id=vol_id,
format=fmt,
- parents=[btrfs_dev])
+ parents=[btrfs_dev],
+ exists=True)
self._addDevice(subvol)
def handleUdevDeviceFormat(self, info, device):
@@ -2148,7 +2174,7 @@ class DeviceTree(object):
""" Return a list of a device's children. """
return [c for c in self._devices if device in c.parents]
- def resolveDevice(self, devspec, blkidTab=None, cryptTab=None):
+ def resolveDevice(self, devspec, blkidTab=None, cryptTab=None, options=None):
# find device in the tree
device = None
if devspec.startswith("UUID="):
@@ -2232,6 +2258,22 @@ class DeviceTree(object):
lv = "%s-%s" % (vg_name, lv_name)
device = self.getDeviceByName(lv)
+ # check mount options for btrfs volumes in case it's a subvol
+ if device and device.type == "btrfs volume" and options:
+ attr = None
+ if "subvol=" in options:
+ attr = "name"
+ val = iutil.get_option_value("subvol", options)
+ elif "subvolid=" in options:
+ attr = "vol_id"
+ val = iutil.get_option_value("subvolid", options)
+
+ if attr and val:
+ for subvol in device.subvolumes:
+ if getattr(subvol, attr, None) == val:
+ device = subvol
+ break
+
if device:
log.debug("resolved '%s' to '%s' (%s)" % (devspec, device.name, device.type))
else:
diff --git a/pyanaconda/storage/fcoe.py b/pyanaconda/storage/fcoe.py
index d263dcf80..fc2ad4017 100644
--- a/pyanaconda/storage/fcoe.py
+++ b/pyanaconda/storage/fcoe.py
@@ -122,14 +122,16 @@ class fcoe(object):
iutil.execWithRedirect("dcbtool", [ "sc", nic, "app:fcoe",
"e:1", "a:1", "w:1" ],
stdout = "/dev/tty5", stderr="/dev/tty5")
- iutil.execWithRedirect("fipvlan", [ nic, "-c", "-s" ],
+ iutil.execWithRedirect("fipvlan", [ "-c", "-s", "-f",
+ "'-fcoe'", nic],
stdout = "/dev/tty5", stderr="/dev/tty5")
else:
if auto_vlan:
# certain network configrations require the VLAN layer module:
iutil.execWithRedirect("modprobe", ["8021q"],
stdout = "/dev/tty5", stderr="/dev/tty5")
- iutil.execWithRedirect("fipvlan", ['-c', '-s', nic],
+ iutil.execWithRedirect("fipvlan", ['-c', '-s', '-f',
+ "'-fcoe'", nic],
stdout = "/dev/tty5", stderr="/dev/tty5")
else:
f = open("/sys/module/libfcoe/parameters/create", "w")
diff --git a/pyanaconda/storage/formats/fs.py b/pyanaconda/storage/formats/fs.py
index 248dd9c3f..eaf2405d3 100644
--- a/pyanaconda/storage/formats/fs.py
+++ b/pyanaconda/storage/formats/fs.py
@@ -408,6 +408,7 @@ class FS(DeviceFormat):
# the other option is to actually replace this instance with an
# instance of the new filesystem type.
self._type = self.migrationTarget
+ self._mountType = self.migrationTarget
@property
def resizeArgs(self):
@@ -1123,6 +1124,10 @@ class BTRFS(FS):
# filesystem creation is done in storage.devicelibs.btrfs.create_volume
pass
+ def destroy(self, *args, **kwargs):
+ # filesystem creation is done in storage.devicelibs.btrfs.delete_volume
+ pass
+
def setup(self, *args, **kwargs):
log_method_call(self, type=self.mountType, device=self.device,
mountpoint=self.mountpoint)
diff --git a/pyanaconda/storage/formats/swap.py b/pyanaconda/storage/formats/swap.py
index 42458d595..e961afe49 100644
--- a/pyanaconda/storage/formats/swap.py
+++ b/pyanaconda/storage/formats/swap.py
@@ -45,6 +45,9 @@ class SwapSpace(DeviceFormat):
_supported = True # is supported
_linuxNative = True # for clearpart
+ #see rhbz#744129 for details
+ _maxSize = 128 * 1024
+
def __init__(self, *args, **kwargs):
""" Create a SwapSpace instance.
diff --git a/pyanaconda/storage/partitioning.py b/pyanaconda/storage/partitioning.py
index 74eb68537..e9c06f6d0 100644
--- a/pyanaconda/storage/partitioning.py
+++ b/pyanaconda/storage/partitioning.py
@@ -75,7 +75,8 @@ def _scheduleImplicitPartitions(storage, disks):
for disk in disks:
if storage.encryptedAutoPart:
fmt_type = "luks"
- fmt_args = {"escrow_cert": storage.autoPartEscrowCert,
+ fmt_args = {"passphrase": storage.encryptionPassphrase,
+ "escrow_cert": storage.autoPartEscrowCert,
"add_backup_passphrase": storage.autoPartAddBackupPassphrase}
else:
if storage.autoPartType == AUTOPART_TYPE_LVM:
@@ -86,7 +87,7 @@ def _scheduleImplicitPartitions(storage, disks):
part = storage.newPartition(fmt_type=fmt_type,
fmt_args=fmt_args,
grow=True,
- disks=[disk])
+ parents=[disk])
storage.createDevice(part)
devs.append(part)
@@ -156,16 +157,21 @@ def _schedulePartitions(storage, disks):
request.fstype = storage.liveImage.format.type
if request.encrypted and storage.encryptedAutoPart:
- fstype = "luks"
+ fmt_type = "luks"
+ fmt_args = {"passphrase": storage.encryptionPassphrase,
+ "escrow_cert": storage.autoPartEscrowCert,
+ "add_backup_passphrase": storage.autoPartAddBackupPassphrase}
else:
- fstype = request.fstype
+ fmt_type = request.fstype
+ fmt_args = {}
- dev = storage.newPartition(fmt_type=fstype,
+ dev = storage.newPartition(fmt_type=fmt_type,
+ fmt_args=fmt_args,
size=request.size,
grow=request.grow,
maxsize=request.maxSize,
mountpoint=request.mountpoint,
- disks=disks,
+ parents=disks,
weight=request.weight)
# schedule the device for creation
@@ -193,12 +199,10 @@ def _scheduleVolumes(storage, devs):
new_container = storage.newVG
new_volume = storage.newLV
format_name = "lvmpv"
- parent_kw = "pvs"
else:
new_container = storage.newBTRFS
new_volume = storage.newBTRFS
format_name = "btrfs"
- parent_kw = "parents"
if storage.encryptedAutoPart:
pvs = []
@@ -213,7 +217,7 @@ def _scheduleVolumes(storage, devs):
pvs = devs
# create a vg containing all of the autopart pvs
- container = new_container(**{parent_kw: pvs})
+ container = new_container(parents=pvs)
storage.createDevice(container)
#
@@ -252,7 +256,7 @@ def _scheduleVolumes(storage, devs):
kwargs = {"mountpoint": request.mountpoint,
"fmt_type": request.fstype}
if lv:
- kwargs.update({"vg": container,
+ kwargs.update({"parents": [container],
"grow": request.grow,
"maxsize": request.maxSize,
"size": request.size,
@@ -1265,7 +1269,7 @@ class Chunk(object):
def sortRequests(self):
pass
- def growRequests(self):
+ def growRequests(self, uniform=False):
""" Calculate growth amounts for requests in this chunk. """
log.debug("Chunk.growRequests: %r" % self)
@@ -1281,17 +1285,22 @@ class Chunk(object):
while not self.done and self.pool and last_pool != self.pool:
last_pool = self.pool # to keep from getting stuck
self.base = new_base
+ if uniform:
+ growth = last_pool / self.remaining
+
log.debug("%d requests and %d (%dMB) left in chunk" %
(self.remaining, self.pool, self.lengthToSize(self.pool)))
for p in self.requests:
if p.done:
continue
- # Each request is allocated free units from the pool
- # based on the relative _base_ sizes of the remaining
- # growable requests.
- share = p.base / float(self.base)
- growth = int(share * last_pool) # truncate, don't round
+ if not uniform:
+ # Each request is allocated free units from the pool
+ # based on the relative _base_ sizes of the remaining
+ # growable requests.
+ share = p.base / float(self.base)
+ growth = int(share * last_pool) # truncate, don't round
+
p.growth += growth
self.pool -= growth
log.debug("adding %d (%dMB) to %d (%s)" %
diff --git a/pyanaconda/storage/udev.py b/pyanaconda/storage/udev.py
index 09e9c25dd..855ee70a3 100644
--- a/pyanaconda/storage/udev.py
+++ b/pyanaconda/storage/udev.py
@@ -556,19 +556,48 @@ def udev_device_get_iscsi_port(info):
# IPV6 contains : within the address, the part after the last : is the port
return path_components[address_field].split(":")[-1]
-def udev_device_get_iscsi_nic(info):
+def udev_device_get_iscsi_session(info):
# '/devices/pci0000:00/0000:00:02.0/0000:09:00.0/0000:0a:01.0/0000:0e:00.2/host3/session1/target3:0:0/3:0:0:0/block/sda'
# The position of sessionX part depends on device
# (e.g. offload vs. sw; also varies for different offload devs)
+ session = None
match = re.match('/.*/(session\d+)', info["sysfs_path"])
if match:
session = match.groups()[0]
+ else:
+ log.error("udev_device_get_iscsi_session: session not found in %s" % info)
+ return session
+
+
+def udev_device_get_iscsi_nic(info):
+ iface = None
+ session = udev_device_get_iscsi_session(info)
+ if session:
iface = open("/sys/class/iscsi_session/%s/ifacename" %
session).read().strip()
- else:
- iface = None
return iface
+def udev_device_get_iscsi_initiator(info):
+ initiator = None
+ if udev_device_is_partoff_iscsi(info):
+ host = re.match('.*/(host\d+)', info["sysfs_path"]).groups()[0]
+ if host:
+ initiator_file = "/sys/class/iscsi_host/%s/initiatorname" % host
+ if os.access(initiator_file, os.R_OK):
+ initiator = open(initiator_file).read().strip()
+ log.debug("found offload iscsi initiatorname %s in file %s" %
+ (initiator, initiator_file))
+ if initiator.lstrip("(").rstrip(")").lower() == "null":
+ initiator = None
+ if initiator is None:
+ session = udev_device_get_iscsi_session(info)
+ if session:
+ initiator = open("/sys/class/iscsi_session/%s/initiatorname" %
+ session).read().strip()
+ log.debug("found iscsi initiatorname %s" % initiator)
+ return initiator
+
+
# fcoe disks have ID_PATH in the form of:
# For FCoE directly over the NIC (so no VLAN and thus no DCB):
# pci-eth#-fc-${id}
diff --git a/pyanaconda/text.py b/pyanaconda/text.py
index 1b201c1a2..c924ae338 100644
--- a/pyanaconda/text.py
+++ b/pyanaconda/text.py
@@ -36,7 +36,7 @@ from localeinfo import expandLangs
from flags import flags
from textw.constants_text import *
from constants import *
-from network import hasActiveNetDev
+from network import hasActiveNetDev, getDevices
from installinterfacebase import InstallInterfaceBase
import imp
import textw
@@ -241,7 +241,7 @@ class PassphraseEntryWindow:
res = buttons.buttonPressed(rc)
passphrase = None
- if res == TEXT_OK_CHECK:
+ if res == TEXT_OK_CHECK or rc == "F12":
passphrase = passphraseentry.value().strip()
self.rc = passphrase
@@ -389,7 +389,7 @@ class InstallInterface(InstallInterfaceBase):
return passphrase
def enableNetwork(self):
- if len(self.anaconda.network.netdevices) == 0:
+ if len(getDevices) == 0:
return False
from textw.netconfig_text import NetworkConfiguratorText
w = NetworkConfiguratorText(self.screen, self.anaconda)
diff --git a/pyanaconda/textw/add_drive_text.py b/pyanaconda/textw/add_drive_text.py
index b28af4fa1..768681437 100644
--- a/pyanaconda/textw/add_drive_text.py
+++ b/pyanaconda/textw/add_drive_text.py
@@ -24,6 +24,7 @@ from snack import *
from constants_text import *
from pyanaconda.constants import *
import pyanaconda.partIntfHelpers as pih
+from pyanaconda import isys
import gettext
_ = lambda x: gettext.ldgettext("anaconda", x)
@@ -172,7 +173,7 @@ class iSCSITextWizard(pih.iSCSIWizard):
result = grid.run()
button = grid.buttons.buttonPressed(result)
self.screen.popWindow()
- return True if button == TEXT_OK_CHECK else False
+ return bool(button == TEXT_OK_CHECK or result == "F12")
def destroy_dialogs(self):
pass
@@ -363,8 +364,7 @@ class addDriveDialog(object):
return INSTALL_OK
def addFcoeDriveDialog(self, screen):
- netdevs = self.anaconda.network.netdevices
- devs = netdevs.keys()
+ devs = network.getDevices()
devs.sort()
if not devs:
@@ -381,7 +381,7 @@ class addDriveDialog(object):
interfaceList = Listbox(height=len(devs), scroll=1)
for dev in devs:
- hwaddr = netdevs[dev].get("HWADDR")
+ hwaddr = isys.getMacAddress(dev)
if hwaddr:
desc = "%s - %.50s" % (dev, hwaddr)
else:
diff --git a/pyanaconda/textw/netconfig_text.py b/pyanaconda/textw/netconfig_text.py
index aabd7d580..47db65253 100644
--- a/pyanaconda/textw/netconfig_text.py
+++ b/pyanaconda/textw/netconfig_text.py
@@ -32,20 +32,19 @@ _ = lambda x: gettext.ldgettext("anaconda", x)
class NetworkConfiguratorText:
def _handleIPError(self, field, errmsg):
- self.anaconda.intf.messageWindow(_("Error With Data"),
+ self.intf.messageWindow(_("Error With Data"),
_("An error occurred converting the "
"value entered for "
"\"%(field)s\":\n%(errmsg)s") \
% {'field': field, 'errmsg': errmsg})
def _handleIPMissing(self, field):
- self.anaconda.intf.messageWindow(_("Error With Data"),
+ self.intf.messageWindow(_("Error With Data"),
_("A value is required for the field %s") % field)
- def __init__(self, screen, anaconda):
+ def __init__(self, screen, intf):
self.screen = screen
- self.anaconda = anaconda
- self.netdevs = self.anaconda.network.netdevices
+ self.netdevs = network.getDevices()
self._initValues()
@@ -68,16 +67,13 @@ class NetworkConfiguratorText:
dev_list = []
selected_devname = None
- devnames = self.netdevs.keys()
- devnames.sort()
+ devnames = self.netdevs.sort()
# Preselect device set in kickstart
- ksdevice = self.anaconda.network.getKSDevice()
- if ksdevice:
- ksdevice = ksdevice.iface
+ ksdevice = network.get_ksdevice_name()
for devname in devnames:
- hwaddr = self.netdevs[devname].get("HWADDR")
+ hwaddr = isys.getMacAddress(devname)
if hwaddr:
desc = "%s - %.50s" % (devname, hwaddr)
@@ -267,7 +263,7 @@ class NetworkConfiguratorText:
def _checkValues(self):
if not self.ipv4Selected and not self.ipv6Selected:
- self.anaconda.intf.messageWindow(_("Missing protocol"),
+ self.intf.messageWindow(_("Missing protocol"),
_("You must select at least one protocol version"))
return False
@@ -350,7 +346,9 @@ class NetworkConfiguratorText:
Returns True in case of success, False if failed.
"""
- dev = self.netdevs[devname]
+ dev = network.NetworkDevice(ROOT_PATH, devname)
+ dev.loadIfcfgFile()
+
nameservers = ''
if self.ipv4Selected:
@@ -390,22 +388,25 @@ class NetworkConfiguratorText:
else:
dev.set(("IPV6INIT", "no"))
- self.anaconda.network.unsetDNS(devname)
+ self.netdevs[devname].unsetDNS()
if nameservers:
- self.anaconda.network.setDNS(nameservers, devname)
+ self.netdevs[devname].setDNS(nameservers)
dev.set(('ONBOOT', 'yes'))
- w = self.anaconda.intf.waitWindow(_("Configuring Network Interfaces"), _("Waiting for NetworkManager"))
- result = self.anaconda.network.bringUp()
+ w = self.intf.waitWindow(_("Configuring Network Interfaces"), _("Waiting for NetworkManager"))
+ dev.writeIfcfgFile()
+ result = network.waitForConnection()
w.pop()
if not result:
- self.anaconda.intf.messageWindow(_("Network Error"),
+ self.intf.messageWindow(_("Network Error"),
_("There was an error configuring "
"network device %s") % dev.iface)
dev.set(("ONBOOT", "no"))
+ dev.writeIfcfgFile()
return False
+ network.resetResolver()
return True
def _ipv4MethodToggled(self, *args):
diff --git a/pyanaconda/textw/network_text.py b/pyanaconda/textw/network_text.py
index 58eb81e73..a33d7f544 100644
--- a/pyanaconda/textw/network_text.py
+++ b/pyanaconda/textw/network_text.py
@@ -26,8 +26,7 @@ from pyanaconda import network
class HostnameWindow:
def __call__(self, screen, anaconda):
- hname = network.getDefaultHostname(anaconda)
- anaconda.network.hostname = hname
+ hname = network.getHostname()
return INSTALL_OK
# vim:tw=78:ts=4:et:sw=4
diff --git a/pyanaconda/ui/__init__.py b/pyanaconda/ui/__init__.py
index 91252c1b5..7e9e31b27 100644
--- a/pyanaconda/ui/__init__.py
+++ b/pyanaconda/ui/__init__.py
@@ -76,9 +76,9 @@ class UserInterface(object):
### MESSAGE HANDLING METHODS
###
def showError(self, message):
- """Display an error dialog with the given message. After this dialog
- is displayed, anaconda will quit. There is no return value. This
- method must be implemented by all UserInterface subclasses.
+ """Display an error dialog with the given message. There is no return
+ value. This method must be implemented by all UserInterface
+ subclasses.
In the code, this method should be used sparingly and only for
critical errors that anaconda cannot figure out how to recover from.
@@ -111,3 +111,16 @@ class UserInterface(object):
key=lambda obj: obj.priority))
return actionClasses
+
+ def mainExceptionWindow(self, text, exn_file):
+ """Return window with the exception and buttons for debugging, bug
+ reporting and exitting the installer.
+
+ This method will be called only when unhandled exception appears.
+ """
+ raise NotImplementedError
+
+ def saveExceptionWindow(self, account_manager, signature):
+ """Show a window that provides a way to report a bug."""
+ raise NotImplementedError
+
diff --git a/pyanaconda/ui/common.py b/pyanaconda/ui/common.py
index b8944c162..0b8489c3e 100644
--- a/pyanaconda/ui/common.py
+++ b/pyanaconda/ui/common.py
@@ -146,6 +146,7 @@ class Spoke(UIObject):
self.storage = storage
self.payload = payload
self.instclass = instclass
+ self.applyOnSkip = False
def apply(self):
"""Apply the selections made on this Spoke to the object's preset
diff --git a/pyanaconda/ui/gui/Makefile.am b/pyanaconda/ui/gui/Makefile.am
index 7a3958cc3..51d43a8da 100644
--- a/pyanaconda/ui/gui/Makefile.am
+++ b/pyanaconda/ui/gui/Makefile.am
@@ -24,4 +24,4 @@ guidir = $(pkgpyexecdir)/ui/gui
gui_PYTHON = *.py
uidir = $(datadir)/$(PACKAGE_NAME)/ui/
-dist_ui_DATA = *.ui
+dist_ui_DATA = *.glade
diff --git a/pyanaconda/ui/gui/TODO b/pyanaconda/ui/gui/TODO
index 1eccc6b07..f4170bf24 100644
--- a/pyanaconda/ui/gui/TODO
+++ b/pyanaconda/ui/gui/TODO
@@ -20,14 +20,14 @@ Fedora 18
s-c-ks into an anaconda wrapper first, though.
- Wall of anaconda needs to be taken into account.
- Why does the first hub jump left a little bit the first time you use the keyboard to navigate?
-- We need a way for users to look at the list of problems resulting from the
- software dependency check and the storage sanity check
- In custom storage, it'd be nice to be able to say something like "Use this
previous installation as the starting storage configuration for the system
I'm installing now"
- In custom storage, it'd be really nice to be able to drag entries from old
roots into the "New Fedora" root as a way of saying "Use this device with
the same mountpoint in the new system."
+- We're probably going to need to update the auto-generated names of container
+ devices any time the user updates the hostname.
Beyond
======
diff --git a/pyanaconda/ui/gui/__init__.py b/pyanaconda/ui/gui/__init__.py
index dbd0a28b6..5ebb53d15 100644
--- a/pyanaconda/ui/gui/__init__.py
+++ b/pyanaconda/ui/gui/__init__.py
@@ -19,6 +19,7 @@
# Red Hat Author(s): Chris Lumens <clumens@redhat.com>
#
import importlib, inspect, os, sys
+import meh.ui.gui
from pyanaconda.ui import UserInterface, common, collect
from pyanaconda.ui.gui.utils import enlightbox
@@ -124,13 +125,23 @@ class GraphicalUserInterface(UserInterface):
return bool(rc)
+ def mainExceptionWindow(self, text, exn_file, *args, **kwargs):
+ meh_intf = meh.ui.gui.GraphicalIntf()
+
+ return meh_intf.mainExceptionWindow(text, exn_file)
+
+
+ def saveExceptionWindow(self, account_manager, signature, *args, **kwargs):
+ meh_intf = meh.ui.gui.GraphicalIntf()
+ meh_intf.saveExceptionWindow(account_manager, signature)
+
###
### SIGNAL HANDLING METHODS
###
def _on_continue_clicked(self):
- # If we're on the last screen, clicking Continue is the same as clicking Quit.
+ # If we're on the last screen, clicking Continue quits.
if len(self._actions) == 1:
- self._on_quit_clicked()
+ sys.exit(0)
return
# If the current action wants us to jump to an arbitrary point ahead,
@@ -246,6 +257,7 @@ class GUIObject(common.UIObject):
self._origStrings = {}
self.skipTo = None
+ self.applyOnSkip = False
from gi.repository import Gtk
@@ -341,7 +353,7 @@ class GUIObject(common.UIObject):
class QuitDialog(GUIObject):
builderObjects = ["quitDialog"]
mainWidgetName = "quitDialog"
- uiFile = "main.ui"
+ uiFile = "main.glade"
def run(self):
rc = self.window.run()
diff --git a/pyanaconda/ui/gui/hubs/Makefile.am b/pyanaconda/ui/gui/hubs/Makefile.am
index d1dad0a50..ae520a6e3 100644
--- a/pyanaconda/ui/gui/hubs/Makefile.am
+++ b/pyanaconda/ui/gui/hubs/Makefile.am
@@ -22,4 +22,4 @@ hubsdir = $(pkgpyexecdir)/ui/gui/hubs
hubs_PYTHON = *.py
uidir = $(datadir)/$(PACKAGE_NAME)/ui/hubs
-dist_ui_DATA = *.ui
+dist_ui_DATA = *.glade
diff --git a/pyanaconda/ui/gui/hubs/__init__.py b/pyanaconda/ui/gui/hubs/__init__.py
index 8b8ee099a..f5e211f3c 100644
--- a/pyanaconda/ui/gui/hubs/__init__.py
+++ b/pyanaconda/ui/gui/hubs/__init__.py
@@ -101,8 +101,10 @@ class Hub(GUIObject, common.Hub):
# prevent the user from switching away. It's up to the spoke's back
# button handler to kill its own layer of main loop.
Gtk.main()
- action.apply()
- action.execute()
+
+ if not action.skipTo or (action.skipTo and action.applyOnSkip):
+ action.apply()
+ action.execute()
def _createBox(self):
from gi.repository import Gtk, AnacondaWidgets
diff --git a/pyanaconda/ui/gui/hubs/progress.ui b/pyanaconda/ui/gui/hubs/progress.glade
index 1eb32c97e..1eb32c97e 100644
--- a/pyanaconda/ui/gui/hubs/progress.ui
+++ b/pyanaconda/ui/gui/hubs/progress.glade
diff --git a/pyanaconda/ui/gui/hubs/progress.py b/pyanaconda/ui/gui/hubs/progress.py
index 2eb1b75de..b1c1e9314 100644
--- a/pyanaconda/ui/gui/hubs/progress.py
+++ b/pyanaconda/ui/gui/hubs/progress.py
@@ -31,6 +31,8 @@ import os
from pyanaconda.localeinfo import expandLangs
from pyanaconda.product import productName
+from pyanaconda.flags import flags
+from pykickstart.constants import KS_WAIT, KS_SHUTDOWN, KS_REBOOT
from pyanaconda.ui.gui.hubs import Hub
from pyanaconda.ui.gui.utils import gdk_threaded
@@ -40,7 +42,7 @@ __all__ = ["ProgressHub"]
class ProgressHub(Hub):
builderObjects = ["progressWindow"]
mainWidgetName = "progressWindow"
- uiFile = "hubs/progress.ui"
+ uiFile = "hubs/progress.glade"
def __init__(self, data, storage, payload, instclass):
Hub.__init__(self, data, storage, payload, instclass)
@@ -81,6 +83,11 @@ class ProgressHub(Hub):
GLib.source_remove(self._rnotes_id)
self._progressNotebook.next_page()
+
+ # kickstart install, continue automatically if reboot or shutdown selected
+ if flags.automatedInstall and self.data.reboot.action in [KS_REBOOT, KS_SHUTDOWN]:
+ self.continueButton.emit("clicked")
+
return False
q.task_done()
@@ -145,7 +152,7 @@ class ProgressHub(Hub):
args=(self.storage, self.payload, self.data, self.instclass)))
@property
- def quitButton(self):
+ def continueButton(self):
return self.builder.get_object("rebootButton")
def _init_progress_bar(self, steps):
diff --git a/pyanaconda/ui/gui/hubs/summary.ui b/pyanaconda/ui/gui/hubs/summary.glade
index 25aa16564..25aa16564 100644
--- a/pyanaconda/ui/gui/hubs/summary.ui
+++ b/pyanaconda/ui/gui/hubs/summary.glade
diff --git a/pyanaconda/ui/gui/hubs/summary.py b/pyanaconda/ui/gui/hubs/summary.py
index 4973ebe87..c867e496a 100644
--- a/pyanaconda/ui/gui/hubs/summary.py
+++ b/pyanaconda/ui/gui/hubs/summary.py
@@ -26,7 +26,7 @@ __all__ = ["SummaryHub"]
class SummaryHub(Hub):
builderObjects = ["summaryWindow"]
mainWidgetName = "summaryWindow"
- uiFile = "hubs/summary.ui"
+ uiFile = "hubs/summary.glade"
# FIXME: I really hate this.
diff --git a/pyanaconda/ui/gui/main.ui b/pyanaconda/ui/gui/main.glade
index 2f773a48f..2f773a48f 100644
--- a/pyanaconda/ui/gui/main.ui
+++ b/pyanaconda/ui/gui/main.glade
diff --git a/pyanaconda/ui/gui/spokes/Makefile.am b/pyanaconda/ui/gui/spokes/Makefile.am
index 4968a897d..352f4e4fb 100644
--- a/pyanaconda/ui/gui/spokes/Makefile.am
+++ b/pyanaconda/ui/gui/spokes/Makefile.am
@@ -24,4 +24,4 @@ spokesdir = $(pkgpyexecdir)/ui/gui/spokes
spokes_PYTHON = *.py
uidir = $(datadir)/$(PACKAGE_NAME)/ui/spokes
-dist_ui_DATA = *.ui
+dist_ui_DATA = *.glade
diff --git a/pyanaconda/ui/gui/spokes/__init__.py b/pyanaconda/ui/gui/spokes/__init__.py
index 192022ffa..61aea5cad 100644
--- a/pyanaconda/ui/gui/spokes/__init__.py
+++ b/pyanaconda/ui/gui/spokes/__init__.py
@@ -31,6 +31,33 @@ class Spoke(GUIObject, common.Spoke):
GUIObject.__init__(self, data)
common.Spoke.__init__(self, data, storage, payload, instclass)
+ def apply(self):
+ """Apply the selections made on this Spoke to the object's preset
+ data object. This method must be provided by every subclass.
+ """
+ raise NotImplementedError
+
+ @property
+ def completed(self):
+ """Has this spoke been visited and completed? If not, a special warning
+ icon will be shown on the Hub beside the spoke, and a highlighted
+ message will be shown at the bottom of the Hub. Installation will not
+ be allowed to proceed until all spokes are complete.
+ """
+ return False
+
+ def execute(self):
+ """Cause the data object to take effect on the target system. This will
+ usually be as simple as calling one or more of the execute methods on
+ the data object. This method does not need to be provided by all
+ subclasses.
+
+ This method will be called in two different places: (1) Immediately
+ after initialize on kickstart installs. (2) Immediately after apply
+ in all cases.
+ """
+ pass
+
def initialize(self):
GUIObject.initialize(self)
diff --git a/pyanaconda/ui/gui/spokes/custom.ui b/pyanaconda/ui/gui/spokes/custom.glade
index 5f97efad1..5f97efad1 100644
--- a/pyanaconda/ui/gui/spokes/custom.ui
+++ b/pyanaconda/ui/gui/spokes/custom.glade
diff --git a/pyanaconda/ui/gui/spokes/custom.py b/pyanaconda/ui/gui/spokes/custom.py
index 5a44d4ae7..c76146a72 100644
--- a/pyanaconda/ui/gui/spokes/custom.py
+++ b/pyanaconda/ui/gui/spokes/custom.py
@@ -58,7 +58,7 @@ new_install_name = _("New %s %s Installation") % (productName, productVersion)
class AddDialog(GUIObject):
builderObjects = ["addDialog"]
mainWidgetName = "addDialog"
- uiFile = "spokes/custom.ui"
+ uiFile = "spokes/custom.glade"
def __init__(self, *args, **kwargs):
GUIObject.__init__(self, *args, **kwargs)
@@ -88,7 +88,7 @@ class AddDialog(GUIObject):
class ConfirmDeleteDialog(GUIObject):
builderObjects = ["confirmDeleteDialog"]
mainWidgetName = "confirmDeleteDialog"
- uiFile = "spokes/custom.ui"
+ uiFile = "spokes/custom.glade"
def on_delete_cancel_clicked(self, button, *args):
self.window.destroy()
@@ -115,7 +115,7 @@ class CustomPartitioningSpoke(NormalSpoke, StorageChecker):
"partitionStore",
"addImage", "removeImage", "settingsImage"]
mainWidgetName = "customStorageWindow"
- uiFile = "spokes/custom.ui"
+ uiFile = "spokes/custom.glade"
category = StorageCategory
title = N_("MANUAL PARTITIONING")
diff --git a/pyanaconda/ui/gui/spokes/datetime_spoke.ui b/pyanaconda/ui/gui/spokes/datetime_spoke.glade
index cdf1cf5b5..cdf1cf5b5 100644
--- a/pyanaconda/ui/gui/spokes/datetime_spoke.ui
+++ b/pyanaconda/ui/gui/spokes/datetime_spoke.glade
diff --git a/pyanaconda/ui/gui/spokes/datetime_spoke.py b/pyanaconda/ui/gui/spokes/datetime_spoke.py
index 944cdfc4b..0e2ca77a6 100644
--- a/pyanaconda/ui/gui/spokes/datetime_spoke.py
+++ b/pyanaconda/ui/gui/spokes/datetime_spoke.py
@@ -46,7 +46,7 @@ POOL_SERVERS_NOTE = _("Note: pool servers may not be available all the time")
class NTPconfigDialog(GUIObject):
builderObjects = ["ntpConfigDialog", "addImage", "serversStore"]
mainWidgetName = "ntpConfigDialog"
- uiFile = "spokes/datetime_spoke.ui"
+ uiFile = "spokes/datetime_spoke.glade"
def __init__(self, *args):
GUIObject.__init__(self, *args)
@@ -244,7 +244,7 @@ class DatetimeSpoke(NormalSpoke):
]
mainWidgetName = "datetimeWindow"
- uiFile = "spokes/datetime_spoke.ui"
+ uiFile = "spokes/datetime_spoke.glade"
category = LocalizationCategory
diff --git a/pyanaconda/ui/gui/spokes/keyboard.ui b/pyanaconda/ui/gui/spokes/keyboard.glade
index 1243e22fb..1243e22fb 100644
--- a/pyanaconda/ui/gui/spokes/keyboard.ui
+++ b/pyanaconda/ui/gui/spokes/keyboard.glade
diff --git a/pyanaconda/ui/gui/spokes/keyboard.py b/pyanaconda/ui/gui/spokes/keyboard.py
index f0084b398..cbf340b91 100644
--- a/pyanaconda/ui/gui/spokes/keyboard.py
+++ b/pyanaconda/ui/gui/spokes/keyboard.py
@@ -42,7 +42,7 @@ class AddLayoutDialog(GUIObject):
builderObjects = ["addLayoutDialog", "newLayoutStore",
"newLayoutStoreFilter", "newLayoutStoreSort"]
mainWidgetName = "addLayoutDialog"
- uiFile = "spokes/keyboard.ui"
+ uiFile = "spokes/keyboard.glade"
def __init__(self, *args):
GUIObject.__init__(self, *args)
@@ -140,7 +140,7 @@ class KeyboardSpoke(NormalSpoke):
builderObjects = ["addedLayoutStore", "keyboardWindow",
"addImage", "removeImage", "upImage", "downImage", "previewImage"]
mainWidgetName = "keyboardWindow"
- uiFile = "spokes/keyboard.ui"
+ uiFile = "spokes/keyboard.glade"
category = LocalizationCategory
diff --git a/pyanaconda/ui/gui/spokes/lib/Makefile.am b/pyanaconda/ui/gui/spokes/lib/Makefile.am
index edf1be594..ecd597cbc 100644
--- a/pyanaconda/ui/gui/spokes/lib/Makefile.am
+++ b/pyanaconda/ui/gui/spokes/lib/Makefile.am
@@ -22,4 +22,4 @@ spokesdir = $(pkgpyexecdir)/ui/gui/spokes/lib
spokes_PYTHON = *.py
uidir = $(datadir)/$(PACKAGE_NAME)/ui/spokes/lib
-dist_ui_DATA = *.ui
+dist_ui_DATA = *.glade
diff --git a/pyanaconda/ui/gui/spokes/lib/cart.ui b/pyanaconda/ui/gui/spokes/lib/cart.glade
index 92fdfe53a..92fdfe53a 100644
--- a/pyanaconda/ui/gui/spokes/lib/cart.ui
+++ b/pyanaconda/ui/gui/spokes/lib/cart.glade
diff --git a/pyanaconda/ui/gui/spokes/lib/cart.py b/pyanaconda/ui/gui/spokes/lib/cart.py
index dbbfc1d04..3e77a36f0 100644
--- a/pyanaconda/ui/gui/spokes/lib/cart.py
+++ b/pyanaconda/ui/gui/spokes/lib/cart.py
@@ -42,7 +42,7 @@ def size_str(mb):
class SelectedDisksDialog(GUIObject):
builderObjects = ["selected_disks_dialog", "disk_store"]
mainWidgetName = "selected_disks_dialog"
- uiFile = "spokes/lib/cart.ui"
+ uiFile = "spokes/lib/cart.glade"
def initialize(self, disks, free, showRemove=True):
for disk in disks:
diff --git a/pyanaconda/ui/gui/spokes/lib/detailederror.glade b/pyanaconda/ui/gui/spokes/lib/detailederror.glade
new file mode 100644
index 000000000..db9daf262
--- /dev/null
+++ b/pyanaconda/ui/gui/spokes/lib/detailederror.glade
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <object class="GtkTextBuffer" id="detailedTextBuffer"/>
+ <object class="GtkDialog" id="detailedErrorDialog">
+ <property name="can_focus">False</property>
+ <property name="border_width">5</property>
+ <property name="modal">True</property>
+ <property name="window_position">center</property>
+ <property name="type_hint">dialog</property>
+ <property name="decorated">False</property>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="dialog-vbox2">
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_bottom">18</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">The following software marked for installation has errors. This is likely caused by an error with
+your installation source. You can attempt to remove these packages from your installation,
+change your installation source, or quit the installer.</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTextView" id="detailedTextView">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">False</property>
+ <property name="cursor_visible">False</property>
+ <property name="buffer">detailedTextBuffer</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="dialog-action_area2">
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="detailedCancelButton">
+ <property name="label">gtk-cancel</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="halign">start</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ <property name="secondary">True</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="0">detailedCancelButton</action-widget>
+ </action-widgets>
+ </object>
+</interface>
diff --git a/pyanaconda/ui/gui/spokes/lib/detailederror.py b/pyanaconda/ui/gui/spokes/lib/detailederror.py
new file mode 100644
index 000000000..997d58502
--- /dev/null
+++ b/pyanaconda/ui/gui/spokes/lib/detailederror.py
@@ -0,0 +1,58 @@
+# Detailed error dialog class
+#
+# Copyright (C) 2011-2012 Red Hat, Inc.
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions of
+# the GNU General Public License v.2, or (at your option) any later version.
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY expressed or implied, including the implied warranties 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. Any Red Hat trademarks that are incorporated in the
+# source code or documentation are not subject to the GNU General Public
+# License and may only be used or replicated with the express permission of
+# Red Hat, Inc.
+#
+# Red Hat Author(s): Chris Lumens <clumens@redhat.com>
+#
+
+from gi.repository import Gtk
+
+from pyanaconda.ui.gui import UIObject
+
+__all__ = ["DetailedErrorDialog"]
+
+class DetailedErrorDialog(UIObject):
+ """This class provides a lightboxable dialog to display a very detailed
+ set of error messages, like might be required to display the results
+ of package dependency solving or storage sanity checking.
+
+ By default, this dialog has only a single button - cancel, displayed
+ on the far left hand side of the dialog, with a response ID of 0.
+ For all other buttons, provide a kwarg named "buttons" as a list of
+ translated labels. Each will have an incrementing response ID
+ starting with 1. It is up to the caller of the "run" method to do
+ something with the returned response ID.
+ """
+ builderObjects = ["detailedErrorDialog", "detailedTextBuffer"]
+ mainWidgetName = "detailedErrorDialog"
+ uiFile = "spokes/lib/detailederror.glade"
+
+ def __init__(self, *args, **kwargs):
+ buttons = kwargs.pop("buttons", [])
+ UIObject.__init__(self, *args, **kwargs)
+
+ i = 1
+ for button in buttons:
+ self.window.add_button(button, i)
+ i += 1
+
+ def refresh(self, msg):
+ buf = self.builder.get_object("detailedTextBuffer")
+ buf.set_text(msg, -1)
+
+ def run(self):
+ return self.window.run()
diff --git a/pyanaconda/ui/gui/spokes/network.ui b/pyanaconda/ui/gui/spokes/network.glade
index 49c75c289..49c75c289 100644
--- a/pyanaconda/ui/gui/spokes/network.ui
+++ b/pyanaconda/ui/gui/spokes/network.glade
diff --git a/pyanaconda/ui/gui/spokes/network.py b/pyanaconda/ui/gui/spokes/network.py
index fb68c3fc3..9142ad0e1 100644
--- a/pyanaconda/ui/gui/spokes/network.py
+++ b/pyanaconda/ui/gui/spokes/network.py
@@ -902,7 +902,7 @@ class NetworkControlBox():
class NetworkSpoke(NormalSpoke):
builderObjects = ["networkWindow", "liststore_wireless_network", "liststore_devices"]
mainWidgetName = "networkWindow"
- uiFile = "spokes/network.ui"
+ uiFile = "spokes/network.glade"
title = N_("NETWORK CONFIGURATION")
icon = "network-transmit-receive-symbolic"
@@ -962,7 +962,7 @@ class NetworkSpoke(NormalSpoke):
class NetworkStandaloneSpoke(StandaloneSpoke):
builderObjects = ["networkStandaloneWindow", "networkControlBox_vbox", "liststore_wireless_network", "liststore_devices"]
mainWidgetName = "networkStandaloneWindow"
- uiFile = "spokes/network.ui"
+ uiFile = "spokes/network.glade"
preForHub = SummaryHub
priority = 10
@@ -1040,7 +1040,7 @@ if __name__ == "__main__":
builder = Gtk.Builder()
import os
- ui_file_path = os.environ.get('UIPATH')+'spokes/network.ui'
+ ui_file_path = os.environ.get('UIPATH')+'spokes/network.glade'
builder.add_from_file(ui_file_path)
n = NetworkControlBox(builder)
diff --git a/pyanaconda/ui/gui/spokes/software.ui b/pyanaconda/ui/gui/spokes/software.glade
index 20bbaa32e..d0d91325e 100644
--- a/pyanaconda/ui/gui/spokes/software.ui
+++ b/pyanaconda/ui/gui/spokes/software.glade
@@ -28,6 +28,7 @@
<property name="startup_id">filler</property>
<property name="window_name">SOFTWARE SELECTION</property>
<signal name="back-clicked" handler="on_back_clicked" swapped="no"/>
+ <signal name="info-bar-clicked" handler="on_info_bar_clicked" swapped="no"/>
<child internal-child="main_box">
<object class="GtkBox" id="AnacondaSpokeWindow-main_box1">
<property name="can_focus">False</property>
@@ -181,6 +182,9 @@
<property name="headers_visible">False</property>
<property name="headers_clickable">False</property>
<property name="search_column">0</property>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="treeview-selection2"/>
+ </child>
<child>
<object class="GtkTreeViewColumn" id="addonSelectedCol">
<property name="title" translatable="yes">column</property>
diff --git a/pyanaconda/ui/gui/spokes/software.py b/pyanaconda/ui/gui/spokes/software.py
index 9e56a4bab..cf047ab2d 100644
--- a/pyanaconda/ui/gui/spokes/software.py
+++ b/pyanaconda/ui/gui/spokes/software.py
@@ -25,19 +25,21 @@ N_ = lambda x: x
from pyanaconda.flags import flags
-from pyanaconda.ui.gui import communication
+from pyanaconda.ui.gui import UIObject, communication
from pyanaconda.ui.gui.spokes import NormalSpoke
-from pyanaconda.ui.gui.utils import gdk_threaded
+from pyanaconda.ui.gui.spokes.lib.detailederror import DetailedErrorDialog
+from pyanaconda.ui.gui.utils import enlightbox, gdk_threaded
from pyanaconda.ui.gui.categories.software import SoftwareCategory
-from pyanaconda.ui.gui.utils import enlightbox
from .source import AdditionalReposDialog
+import sys
+
__all__ = ["SoftwareSelectionSpoke"]
class SoftwareSelectionSpoke(NormalSpoke):
builderObjects = ["addonStore", "desktopStore", "softwareWindow"]
mainWidgetName = "softwareWindow"
- uiFile = "spokes/software.ui"
+ uiFile = "spokes/software.glade"
category = SoftwareCategory
@@ -46,7 +48,7 @@ class SoftwareSelectionSpoke(NormalSpoke):
def __init__(self, *args, **kwargs):
NormalSpoke.__init__(self, *args, **kwargs)
- self._error = False
+ self._errorMsgs = None
self._tx_id = None
self.selectedGroups = []
@@ -89,12 +91,12 @@ class SoftwareSelectionSpoke(NormalSpoke):
try:
self.payload.checkSoftwareSelection()
except DependencyError as e:
- self._error = True
+ self._errorMsgs = "\n".join(sorted(e.message))
communication.send_message(self.__class__.__name__,
_("Error checking software dependencies"))
self._tx_id = None
else:
- self._error = False
+ self._errorMsgs = None
self._tx_id = self.payload.txID
finally:
communication.send_ready(self.__class__.__name__)
@@ -105,7 +107,7 @@ class SoftwareSelectionSpoke(NormalSpoke):
from pyanaconda.kickstart import packagesSeen
processingDone = not threadMgr.get("AnaCheckSoftwareThread") and \
- not self._error and \
+ not self._errorMsgs and \
self._tx_id == self.payload.txID
if flags.automatedInstall:
@@ -130,7 +132,7 @@ class SoftwareSelectionSpoke(NormalSpoke):
from pyanaconda.kickstart import packagesSeen
from pyanaconda.threads import threadMgr
- if self._error:
+ if self._errorMsgs:
return _("Error checking software selection")
if threadMgr.get("AnaPayloadMDThread") or self.payload.baseRepo is None:
@@ -187,6 +189,8 @@ class SoftwareSelectionSpoke(NormalSpoke):
self.apply()
def refresh(self):
+ from gi.repository import Gtk
+
from pyanaconda.threads import threadMgr
NormalSpoke.refresh(self)
@@ -229,6 +233,9 @@ class SoftwareSelectionSpoke(NormalSpoke):
self.excludedGroups = [g.name
for g in self.data.packages.excludedGroupList]
+ if self._errorMsgs:
+ self.window.set_info(Gtk.MessageType.WARNING, _("Error checking software dependencies. Click for details."))
+
# Returns the row in the store corresponding to what's selected on the
# left hand panel, or None if nothing's selected.
def _get_selected_desktop(self):
@@ -258,3 +265,28 @@ class SoftwareSelectionSpoke(NormalSpoke):
with enlightbox(self.window, self._addRepoDialog.window):
response = self._addRepoDialog.run()
+ def on_info_bar_clicked(self, *args):
+ if not self._errorMsgs:
+ return
+
+ dialog = DetailedErrorDialog(self.data, buttons=[_("_Quit"), _("_Remove Packages"),
+ _("_Modify Software Source")])
+ with enlightbox(self.window, dialog.window):
+ dialog.refresh(self._errorMsgs)
+ rc = dialog.run()
+
+ dialog.window.destroy()
+
+ if rc == 0:
+ # Close the dialog so the user can change selections.
+ pass
+ elif rc == 1:
+ # Quit.
+ sys.exit(0)
+ elif rc == 2:
+ # TODO: Attempt to remove the affected packages.
+ pass
+ elif rc == 3:
+ # Send the user to the installation source spoke.
+ self.skipTo = "SourceSpoke"
+ self.window.emit("back-clicked")
diff --git a/pyanaconda/ui/gui/spokes/source.ui b/pyanaconda/ui/gui/spokes/source.glade
index 5259431bc..5259431bc 100644
--- a/pyanaconda/ui/gui/spokes/source.ui
+++ b/pyanaconda/ui/gui/spokes/source.glade
diff --git a/pyanaconda/ui/gui/spokes/source.py b/pyanaconda/ui/gui/spokes/source.py
index c8c708dc9..fd40b5cb3 100644
--- a/pyanaconda/ui/gui/spokes/source.py
+++ b/pyanaconda/ui/gui/spokes/source.py
@@ -48,7 +48,7 @@ METADATA_ERROR_MESSAGE = _("Error downloading package metadata...")
class ProxyDialog(GUIObject):
builderObjects = ["proxyDialog"]
mainWidgetName = "proxyDialog"
- uiFile = "spokes/source.ui"
+ uiFile = "spokes/source.glade"
def on_proxy_cancel_clicked(self, *args):
self.window.destroy()
@@ -129,7 +129,7 @@ class ProxyDialog(GUIObject):
class MediaCheckDialog(GUIObject):
builderObjects = ["mediaCheckDialog"]
mainWidgetName = "mediaCheckDialog"
- uiFile = "spokes/source.ui"
+ uiFile = "spokes/source.glade"
def _checkisoEndsCB(self, pid, status):
doneButton = self.builder.get_object("doneButton")
@@ -196,7 +196,7 @@ class MediaCheckDialog(GUIObject):
class IsoChooser(GUIObject):
builderObjects = ["isoChooserDialog", "isoFilter"]
mainWidgetName = "isoChooserDialog"
- uiFile = "spokes/source.ui"
+ uiFile = "spokes/source.glade"
def refresh(self, currentFile=""):
GUIObject.refresh(self)
@@ -238,7 +238,7 @@ class IsoChooser(GUIObject):
class AdditionalReposDialog(GUIObject):
builderObjects = ["additionalReposDialog", "peopleRepositories", "peopleRepositoriesFilter"]
mainWidgetName = "additionalReposDialog"
- uiFile = "spokes/source.ui"
+ uiFile = "spokes/source.glade"
typingTimeout = 1
@@ -409,7 +409,7 @@ class AdditionalReposDialog(GUIObject):
class SourceSpoke(NormalSpoke):
builderObjects = ["isoChooser", "isoFilter", "partitionStore", "sourceWindow", "dirImage"]
mainWidgetName = "sourceWindow"
- uiFile = "spokes/source.ui"
+ uiFile = "spokes/source.glade"
category = SoftwareCategory
diff --git a/pyanaconda/ui/gui/spokes/storage.ui b/pyanaconda/ui/gui/spokes/storage.glade
index 16fa40271..16fa40271 100644
--- a/pyanaconda/ui/gui/spokes/storage.ui
+++ b/pyanaconda/ui/gui/spokes/storage.glade
diff --git a/pyanaconda/ui/gui/spokes/storage.py b/pyanaconda/ui/gui/spokes/storage.py
index ec26f7615..d8cccd8c0 100644
--- a/pyanaconda/ui/gui/spokes/storage.py
+++ b/pyanaconda/ui/gui/spokes/storage.py
@@ -47,7 +47,7 @@ from pyanaconda.ui.gui.spokes.lib.cart import SelectedDisksDialog
from pyanaconda.ui.gui.categories.storage import StorageCategory
from pyanaconda.ui.gui.utils import enlightbox, gdk_threaded
-from pyanaconda.storage import doKickstartStorage
+from pyanaconda.kickstart import doKickstartStorage
from pyanaconda.storage.size import Size
from pyanaconda.product import productName
from pyanaconda.flags import flags
@@ -60,6 +60,9 @@ _ = lambda x: gettext.ldgettext("anaconda", x)
N_ = lambda x: x
P_ = lambda x, y, z: gettext.ldngettext("anaconda", x, y, z)
+import logging
+log = logging.getLogger("anaconda")
+
__all__ = ["StorageSpoke"]
class FakeDiskLabel(object):
@@ -110,7 +113,7 @@ def size_str(mb):
class InstallOptions1Dialog(GUIObject):
builderObjects = ["options1_dialog"]
mainWidgetName = "options1_dialog"
- uiFile = "spokes/storage.ui"
+ uiFile = "spokes/storage.glade"
RESPONSE_CANCEL = 0
RESPONSE_CONTINUE = 1
@@ -246,11 +249,15 @@ class StorageChecker(object):
(StorageChecker.errors,
StorageChecker.warnings) = self.storage.sanityCheck()
communication.send_ready(self._mainSpokeClass, justUpdate=True)
+ for e in StorageChecker.errors:
+ log.error(e)
+ for w in StorageChecker.warnings:
+ log.warn(w)
class StorageSpoke(NormalSpoke, StorageChecker):
builderObjects = ["storageWindow"]
mainWidgetName = "storageWindow"
- uiFile = "spokes/storage.ui"
+ uiFile = "spokes/storage.glade"
category = StorageCategory
@@ -260,6 +267,8 @@ class StorageSpoke(NormalSpoke, StorageChecker):
def __init__(self, *args, **kwargs):
NormalSpoke.__init__(self, *args, **kwargs)
+ self.applyOnSkip = True
+
self._ready = False
self.selected_disks = self.data.ignoredisk.onlyuse[:]
@@ -310,14 +319,9 @@ class StorageSpoke(NormalSpoke, StorageChecker):
# user may have set up before now.
self.storage.config.clearNonExistent = self.data.autopart.autopart
- # Pick the first disk to be the destination device for the bootloader.
- # This appears to be the minimum amount of configuration required to
- # make autopart happy with the bootloader settings.
- if not self.data.bootloader.bootDrive:
- self.data.bootloader.bootDrive = self.storage.bootloader.disks[0].name
-
def execute(self):
- doKickstartStorage(self.storage, self.data, self.instclass, self)
+ doKickstartStorage(self.storage, self.data, self.instclass)
+ self.run()
@property
def completed(self):
diff --git a/pyanaconda/ui/gui/spokes/welcome.ui b/pyanaconda/ui/gui/spokes/welcome.glade
index e5bcc0f7d..e5bcc0f7d 100644
--- a/pyanaconda/ui/gui/spokes/welcome.ui
+++ b/pyanaconda/ui/gui/spokes/welcome.glade
diff --git a/pyanaconda/ui/gui/spokes/welcome.py b/pyanaconda/ui/gui/spokes/welcome.py
index 9c899eb4a..dc4c733ce 100644
--- a/pyanaconda/ui/gui/spokes/welcome.py
+++ b/pyanaconda/ui/gui/spokes/welcome.py
@@ -190,7 +190,7 @@ class LanguageMixIn(object):
class WelcomeLanguageSpoke(LanguageMixIn, StandaloneSpoke):
mainWidgetName = "welcomeWindow"
- uiFile = "spokes/welcome.ui"
+ uiFile = "spokes/welcome.glade"
builderObjects = LanguageMixIn.builderObjects + [mainWidgetName, "betaWarnDialog"]
preForHub = SummaryHub
@@ -234,7 +234,7 @@ class WelcomeLanguageSpoke(LanguageMixIn, StandaloneSpoke):
class LanguageSpoke(LanguageMixIn, NormalSpoke):
mainWidgetName = "languageSpokeWindow"
- uiFile = "spokes/welcome.ui"
+ uiFile = "spokes/welcome.glade"
builderObjects = LanguageMixIn.builderObjects + [mainWidgetName, WelcomeLanguageSpoke.mainWidgetName]
category = LocalizationCategory
diff --git a/pyanaconda/ui/gui/tools/run-spoke.py b/pyanaconda/ui/gui/tools/run-spoke.py
index afb6b0193..afddbd1ff 100755
--- a/pyanaconda/ui/gui/tools/run-spoke.py
+++ b/pyanaconda/ui/gui/tools/run-spoke.py
@@ -97,7 +97,6 @@ instclass = DefaultInstall()
payload = YumPayload(ksdata)
payload.setup(storage)
-payload.install_log = sys.stdout
spoke = spokeClass(ksdata, storage, payload, instclass)
if hasattr(spoke, "register_event_cb"):
diff --git a/pyanaconda/upgrade.py b/pyanaconda/upgrade.py
deleted file mode 100644
index 6b128559b..000000000
--- a/pyanaconda/upgrade.py
+++ /dev/null
@@ -1,341 +0,0 @@
-#
-# upgrade.py - Existing install probe and upgrade procedure
-#
-# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Red Hat, Inc.
-# All rights reserved.
-#
-# 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, see <http://www.gnu.org/licenses/>.
-#
-# Author(s): Matt Wilson <msw@redhat.com>
-#
-
-import isys
-import os
-import iutil
-import time
-import sys
-import os.path
-import shutil
-import string
-import selinux
-from flags import flags
-from constants import *
-from product import productName
-from storage import findExistingRootDevices
-from storage import mountExistingSystem
-from storage.formats import getFormat
-
-import gettext
-_ = lambda x: gettext.ldgettext("anaconda", x)
-
-import rpm
-
-import logging
-log = logging.getLogger("anaconda")
-
-def queryUpgradeContinue(anaconda):
- if anaconda.dir == DISPATCH_FORWARD:
- return
-
- rc = anaconda.intf.messageWindow(_("Proceed with upgrade?"),
- _("The file systems of the Linux installation "
- "you have chosen to upgrade have already been "
- "mounted. You cannot go back past this point. "
- "\n\n") +
- _("Would you like to continue with the upgrade?"),
- type="custom", custom_icon=["error","error"],
- custom_buttons=[_("_Exit installer"), _("_Continue")])
- if rc == 0:
- sys.exit(0)
- return DISPATCH_FORWARD
-
-def setUpgradeRoot(anaconda):
- anaconda.upgradeRoot = []
- root_device = None
- # kickstart can pass device as device name or uuid. No quotes allowed.
- if anaconda.ksdata and anaconda.ksdata.upgrade.root_device is not None:
- root_device = anaconda.ksdata.upgrade.root_device
- for (dev, label) in anaconda.rootParts:
- if ((root_device is not None) and
- (root_device == dev.name or root_device == "UUID=%s" % dev.format.uuid)):
- anaconda.upgradeRoot.insert(0, (dev,label))
- else:
- anaconda.upgradeRoot.append((dev,label))
-
-def findRootParts(anaconda):
- if anaconda.dir == DISPATCH_BACK:
- return
- if anaconda.rootParts is None:
- (anaconda.rootParts, notUpgradable) = findExistingRootDevices(anaconda,
- upgradeany=flags.cmdline.has_key("upgradeany"))
-
- if notUpgradable and not anaconda.rootParts:
- oldInstalls = ""
- for product, version, arch, name, tests in notUpgradable:
- if None in (product, version):
- oldInstalls = _("Unknown release on %s -") % (name)
- else:
- oldInstalls = "%s %s %s on %s -" % (product, version, arch, name)
-
- if not tests["product"]:
- oldInstalls += _(" Product mismatch.")
- if not tests["version"]:
- oldInstalls += _(" Version mismatch.")
- if not tests["arch"]:
- oldInstalls += _(" Architecture mismatch.")
- oldInstalls += "\n"
- rc = anaconda.intf.messageWindow(_("Cannot Upgrade"),
- _("Your current installation cannot be upgraded. This "
- "is likely due to it being too old. Only the previous two "
- "releases may be upgraded. To upgrade older releases "
- "you must first upgrade through all intermediate releases.\n\n"
- "%s") % oldInstalls,
- type="custom", custom_icon=["error","error"],
- custom_buttons=[_("_Exit installer"), _("_Continue")])
- if rc == 0:
- sys.exit(0)
-
- setUpgradeRoot(anaconda)
-
- if anaconda.rootParts is not None and len(anaconda.rootParts) > 0:
- anaconda.dispatch.request_steps_gently("findinstall")
- else:
- anaconda.dispatch.skip_steps("findinstall")
-
-def bindMountDevDirectory(instPath):
- getFormat("bind",
- device="/dev",
- mountpoint="/dev",
- exists=True).mount(chroot=instPath)
-
-# returns None if no filesystem exist to migrate
-def upgradeMigrateFind(anaconda):
- migents = anaconda.storage.migratableDevices
- if not migents or len(migents) < 1:
- anaconda.dispatch.skip_steps("upgrademigratefs")
- else:
- anaconda.dispatch.request_steps("upgrademigratefs")
-
-def copyFromSysimage(filename):
- """Mirrors filename from the sysimage on the ramdisk."""
- sysfile = os.path.normpath("%s/%s" % (ROOT_PATH, filename))
- if os.access(sysfile, os.R_OK):
- try:
- # remove our copy if we have one (think liveinstall)
- os.remove(filename)
- except OSError:
- pass
- try:
- shutil.copyfile(sysfile, filename)
- except OSError as e:
- log.error("Error copying %s to sysimage: %s" %(sysfile, e.strerror))
- return False
- else:
- log.error("Error copying %s to sysimage, file not accessible." % sysfile)
- return False
- return True
-
-def restoreTime(anaconda):
- """Load time setup for upgrade install.
-
- We need to find out the timezone and the UTC parameter of the old system and
- set the system time accordingly, so timestamps are set correctly for the
- files the upgrade procedure will create.
-
- This is pretty much what packages.setupTimezone() does in reverse.
- """
- if anaconda.dir == DISPATCH_BACK:
- return
- if os.environ.has_key("TZ"):
- del os.environ["TZ"]
- copyFromSysimage('/etc/localtime')
- copyFromSysimage('/etc/adjtime')
- if iutil.isS390():
- return
- args = [ "--hctosys" ]
- try:
- iutil.execWithRedirect("/sbin/hwclock", args,stdout = "/dev/tty5",
- stderr = "/dev/tty5")
- except RuntimeError:
- log.error("Failed to set the clock.")
-
-# XXX handle going backwards
-def upgradeMountFilesystems(anaconda):
- # mount everything and turn on swap
-
- try:
- mountExistingSystem(anaconda.storage.fsset, anaconda.upgradeRoot[0], allowDirty = 0)
- except ValueError as e:
- log.error("Error mounting filesystem: %s" % e)
- anaconda.intf.messageWindow(_("Mount failed"),
- _("The following error occurred when mounting the file "
- "systems listed in /etc/fstab. Please fix this problem "
- "and try to upgrade again.\n%s" % e))
- sys.exit(0)
- except IndexError as e:
- # The upgrade root is search earlier but we give the message here.
- log.debug("No upgrade root was found.")
- if anaconda.ksdata and anaconda.ksdata.upgrade.upgrade:
- anaconda.intf.messageWindow(_("Upgrade root not found"),
- _("The root for the previously installed system was not "
- "found."), type="custom",
- custom_icon="info",
- custom_buttons=[_("Exit installer")])
- sys.exit(0)
- else:
- rc = anaconda.intf.messageWindow(_("Upgrade root not found"),
- _("The root for the previously installed system was not "
- "found. You can exit installer or backtrack to choose "
- "installation instead of upgrade."),
- type="custom",
- custom_buttons = [ _("_Back"),
- _("_Exit installer") ],
- custom_icon="question")
- if rc == 0:
- return DISPATCH_BACK
- elif rc == 1:
- sys.exit(0)
-
- checkLinks = ( '/etc', '/var', '/var/lib', '/var/lib/rpm',
- '/boot', '/tmp', '/var/tmp', '/root',
- '/bin/sh', '/usr/tmp')
- badLinks = []
- for n in checkLinks:
- if not os.path.islink(ROOT_PATH + n): continue
- l = os.readlink(ROOT_PATH + n)
- if l[0] == '/':
- badLinks.append(n)
-
- if badLinks:
- message = _("The following files are absolute symbolic "
- "links, which we do not support during an "
- "upgrade. Please change them to relative "
- "symbolic links and restart the upgrade.\n\n")
- for n in badLinks:
- message = message + '\t' + n + '\n'
- anaconda.intf.messageWindow(_("Absolute Symlinks"), message)
- sys.exit(0)
-
- # fix for 80446
- badLinks = []
- mustBeLinks = ( '/usr/tmp', )
- for n in mustBeLinks:
- if not os.path.islink(ROOT_PATH + n):
- badLinks.append(n)
-
- if badLinks:
- message = _("The following are directories which should instead "
- "be symbolic links, which will cause problems with the "
- "upgrade. Please return them to their original state "
- "as symbolic links and restart the upgrade.\n\n")
- for n in badLinks:
- message = message + '\t' + n + '\n'
- anaconda.intf.messageWindow(_("Invalid Directories"), message)
- sys.exit(0)
-
- anaconda.storage.turnOnSwap(upgrading=True)
- anaconda.storage.mkDevRoot()
-
- # Move /etc/rpm/platform out of the way.
- if os.path.exists(ROOT_PATH + "/etc/rpm/platform"):
- shutil.move(ROOT_PATH + "/etc/rpm/platform",
- ROOT_PATH + "/etc/rpm/platform.rpmsave")
-
- # if they've been booting with selinux disabled, then we should
- # disable it during the install as well (#242510)
- try:
- if os.path.exists(ROOT_PATH + "/.autorelabel"):
- ctx = selinux.getfilecon(ROOT_PATH + "/.autorelabel")[1]
- if not ctx or ctx == "unlabeled":
- flags.selinux = False
- log.info("Disabled SELinux for upgrade based on /.autorelabel")
- except Exception as e:
- log.warning("error checking selinux state: %s" %(e,))
-
-def upgradeUsr(anaconda):
- """
- Handle the upgrade of /bin, /sbin, /lib, /lib64 to symlinks into /usr/
- This uses dracut's convertfs module
- """
- dirs = ["/bin", "/sbin", "/lib", "/lib64"]
- dirs = [ROOT_PATH+d for d in dirs]
- if all(map(os.path.islink, dirs)):
- log.info("upgradeusr dirs are already symlinks")
- return
-
- if anaconda.intf is not None:
- w = anaconda.intf.waitWindow(_("Upgrade /usr symlinks"),
- _("Running /usr merge script"))
-
- if iutil.execWithRedirect("/usr/lib/dracut/modules.d/30convertfs/convertfs.sh",
- [ROOT_PATH],
- stdout="/dev/tty5", stderr="/dev/tty5"):
- log.error("convertfs failed")
-
- if anaconda.intf is not None:
- w.pop()
- rc = anaconda.intf.messageWindow(_("/usr merge failed"),
- _("The /usr merge script failed. This is required"
- " for Fedora 17 to work. The upgrade cannot continue."
- "\n\n"))
- sys.exit(0)
- log.info("convertfs was successful")
-
- if anaconda.intf is not None:
- w.pop()
-
-def setSteps(anaconda):
- dispatch = anaconda.dispatch
- dispatch.reset_scheduling() # scrap what is scheduled
- # in case we are scheduling steps from the examine GUI, some of them are
- # already done:
- dispatch.schedule_steps_gently(
- "language",
- "keyboard",
- "filtertype",
- "filter",
- "storageinit",
- "findrootparts",
- "findinstall"
- )
- # schedule the rest:
- dispatch.schedule_steps(
- "upgrademount",
- "restoretime",
- "upgrademigfind",
- "upgrademigratefs",
- "enablefilesystems",
- "upgradecontinue",
- "upgradeusr",
- "reposetup",
- "upgbootloader",
- "postselection",
- "reipl",
- "install",
- "preinstallconfig",
- "installpackages",
- "postinstallconfig",
- "instbootloader",
- "dopostaction",
- "methodcomplete",
- "complete"
- )
-
- if not iutil.isX86() and not iutil.isS390():
- dispatch.skip_steps("bootloader")
-
- if not iutil.isX86():
- dispatch.skip_steps("upgbootloader")
-
- dispatch.skip_steps("cleardiskssel")
diff --git a/pyanaconda/vnc.py b/pyanaconda/vnc.py
index a7ccc7643..b06ac8743 100644
--- a/pyanaconda/vnc.py
+++ b/pyanaconda/vnc.py
@@ -80,12 +80,11 @@ class VncServer:
# see if we can sniff out network info
netinfo = network.Network()
- devices = netinfo.netdevices
active_devs = network.getActiveNetDevs()
self.ip = None
if active_devs != []:
- devname = devices[active_devs[0]].iface
+ devname = active_devs[0]
try:
ips = (isys.getIPAddresses(devname, version=4) +
isys.getIPAddresses(devname, version=6))
@@ -105,7 +104,7 @@ class VncServer:
except Exception as e:
log.debug("Exception caught trying to get host name of %s: %s" %
(ipstr, e))
- self.name = network.getDefaultHostname(self.anaconda)
+ self.name = network.getHostname()
else:
if len(hinfo) == 3:
self.name = hinfo[0]
@@ -187,7 +186,11 @@ class VncServer:
self.log.info(_("Starting VNC..."))
# Lets call it from here for now.
- self.initialize()
+ try:
+ self.initialize()
+ except Exception, e:
+ stdoutLog.critical("Could not initialize the VNC server: %s" % e)
+ sys.exit(1)
if self.password and len(self.password) < 6:
self.changeVNCPasswdWindow()
diff --git a/pyanaconda/yuminstall.py b/pyanaconda/yuminstall.py
index 0a3f29229..bb98b860c 100644
--- a/pyanaconda/yuminstall.py
+++ b/pyanaconda/yuminstall.py
@@ -1623,10 +1623,11 @@ reposdir=/etc/anaconda.repos.d,/tmp/updates/anaconda.repos.d,/tmp/product/anacon
if os.access("/etc/modprobe.d/anaconda.conf", os.R_OK):
shutil.copyfile("/etc/modprobe.d/anaconda.conf",
ROOT_PATH + "/etc/modprobe.d/anaconda.conf")
+ network.write_sysconfig_network()
+ network.disableIPV6()
+ network.copyConfigToPath(ROOT_PATH)
if not anaconda.ksdata:
- anaconda.instClass.setNetworkOnbootDefault(anaconda.network)
- anaconda.network.write()
- anaconda.network.copyConfigToPath()
+ anaconda.instClass.setNetworkOnbootDefault()
anaconda.storage.write()
else:
# ensure that /etc/mtab is a symlink to /proc/self/mounts
diff --git a/scripts/makeupdates b/scripts/makeupdates
index 398005917..a8ee467a8 100755
--- a/scripts/makeupdates
+++ b/scripts/makeupdates
@@ -133,9 +133,9 @@ def copyUpdatedFiles(tag, updates, cwd):
file.endswith('.sh') or file == 'configure.ac':
continue
- if file.endswith('.ui'):
+ if file.endswith('.glade'):
# Some UI files should go under ui/<dir> where dir is the
- # directory above the file.ui
+ # directory above the file.glade
uidir = os.path.dirname(file).split(os.path.sep)[-1]
if uidir in ["hubs", "spokes"]:
install_to_dir(file, os.path.join(tmpupdates, "ui", uidir))
@@ -164,7 +164,7 @@ def copyUpdatedFiles(tag, updates, cwd):
fields = file.split('/')
subdir = fields[0]
if subdir in ['po', 'scripts','command-stubs', 'tests',
- 'bootdisk', 'docs', 'fonts', 'utils', 'gptsync',
+ 'bootdisk', 'docs', 'fonts', 'utils',
'liveinst', 'dracut', 'data']:
continue
else:
@@ -174,8 +174,8 @@ def copyUpdatedFiles(tag, updates, cwd):
sys.stdout.write("Including %s\n" % (file,))
install_to_dir(file, tmpupdates)
-def isysChanged(tag):
- lines = doGitDiff(tag, ['isys'])
+def _compilableChanged(tag, compilable):
+ lines = doGitDiff(tag, [compilable])
for line in lines:
fields = line.split()
@@ -195,6 +195,12 @@ def isysChanged(tag):
return False
+def isysChanged(tag):
+ return _compilableChanged(tag, 'isys')
+
+def widgetsChanged(tag):
+ return _compilableChanged(tag, 'widgets')
+
def copyUpdatedIsys(updates, cwd):
os.chdir(cwd)
@@ -209,6 +215,39 @@ def copyUpdatedIsys(updates, cwd):
if os.path.isfile(isysmodule):
shutil.copy2(isysmodule, updates)
+def copyUpdatedWidgets(updates, cwd):
+ os.chdir(cwd)
+
+ if os.path.isdir("/lib64"):
+ libdir = "/lib64/"
+ else:
+ libdir = "/lib/"
+
+ if not os.path.isdir(updates + libdir):
+ os.makedirs(updates + libdir)
+
+ if not os.path.isdir(updates + libdir + "girepository-1.0"):
+ os.makedirs(updates + libdir + "girepository-1.0")
+
+ if not os.path.isfile('Makefile'):
+ if not os.path.isfile('configure'):
+ os.system('./autogen.sh')
+ of.system('./configure --enable-gtk-doc --enable-introspection')
+
+ os.system('make')
+
+ files = ["libAnacondaWidgets.so", "libAnacondaWidgets.so.0", "libAnacondaWidgets.so.0.0.0"]
+ for f in files:
+ path = os.path.normpath(cwd + "/widgets/src/.libs/" + f)
+ if os.path.islink(path):
+ os.symlink(os.readlink(path), updates + libdir + os.path.basename(path))
+ elif os.path.isfile(path):
+ shutil.copy2(path, updates + libdir)
+
+ typelib = os.path.realpath(cwd + "/widgets/src/AnacondaWidgets-1.0.typelib")
+ if os.path.isfile(typelib):
+ shutil.copy2(typelib, updates + libdir + "girepository-1.0")
+
def addRpms(updates, add_rpms):
for rpm in add_rpms:
cmd = "cd %s && rpm2cpio %s | cpio -dium" % (updates, rpm)
@@ -293,6 +332,9 @@ def main(argv):
if isysChanged(tag):
copyUpdatedIsys(updates, cwd)
+ if widgetsChanged(tag):
+ copyUpdatedWidgets(updates, cwd)
+
if add_rpms:
addRpms(updates, add_rpms)
diff --git a/tests/pyanaconda_test/network_test.py b/tests/pyanaconda_test/network_test.py
index 561ddab6f..734878cd1 100644
--- a/tests/pyanaconda_test/network_test.py
+++ b/tests/pyanaconda_test/network_test.py
@@ -262,6 +262,28 @@ class NetworkTest(mock.TestCase):
self.assertEqual(nd.info, {'KEY': 'other_value'})
self.assertTrue(nd._dirty)
+ def networkdevice_set_gateway_test(self):
+ import pyanaconda.network
+ nd = pyanaconda.network.NetworkDevice(self.NETSCRIPTSDIR, self.DEVICE)
+ nd.setGateway('10.0.0.1')
+ self.assertEqual(nd.info, {'GATEWAY': '10.0.0.1'})
+ self.assertTrue(nd._dirty)
+
+ def networkdevice_set_gateway_ipv6_test(self):
+ import pyanaconda.network
+ nd = pyanaconda.network.NetworkDevice(self.NETSCRIPTSDIR, self.DEVICE)
+ nd.setGateway('fe80::5675:d0ff:feac:4d3f')
+ self.assertEqual(nd.info, {'IPV6_DEFAULTGW': 'fe80::5675:d0ff:feac:4d3f'})
+ self.assertTrue(nd._dirty)
+
+ def networkdevice_set_dns_test(self):
+ import pyanaconda.network
+ nd = pyanaconda.network.NetworkDevice(self.NETSCRIPTSDIR, self.DEVICE)
+ nd.setDNS('10.0.0.1, 10.0.0.2')
+ self.assertEqual(nd.info, {'DNS1': '10.0.0.1'})
+ self.assertEqual(nd.info, {'DNS2': '10.0.0.2'})
+ self.assertTrue(nd._dirty)
+
def networkdevice_keyfile_path_test(self):
import pyanaconda.network
nd = pyanaconda.network.NetworkDevice(self.NETSCRIPTSDIR, self.DEVICE)
@@ -294,94 +316,6 @@ class NetworkTest(mock.TestCase):
self.assertEqual(pyanaconda.network.shutil.move.call_args[0],
(TMP_FILE, '%s/keys-%s' % (TMP_DIR, self.DEVICE)))
- def network_get_device_test(self):
- import pyanaconda.network
-
- nw = pyanaconda.network.Network()
- nw.netdevices['dev'] = 'device'
- ret = nw.getDevice('dev')
- self.assertEqual(ret, 'device')
-
- def network_get_ks_device_1_test(self):
- import pyanaconda.network
- nw = pyanaconda.network.Network()
- nw.ksdevice = None
- ret = nw.getKSDevice()
- self.assertEqual(ret, None)
-
- def network_get_ks_device_2_test(self):
- import pyanaconda.network
- nw = pyanaconda.network.Network()
- nw.ksdevice = 'ksdev'
- ret = nw.getKSDevice()
- self.assertEqual(ret, None)
-
- def network_get_ks_device_3_test(self):
- import pyanaconda.network
- nw = pyanaconda.network.Network()
- nw.netdevices['ksdev'] = 'device'
- nw.ksdevice = 'ksdev'
- ret = nw.getKSDevice()
- self.assertEqual(ret, 'device')
-
- def network_set_hostname_test(self):
- import pyanaconda.network
- pyanaconda.network.iutil.execWithRedirect = mock.Mock()
- nw = pyanaconda.network.Network()
- nw.setHostname('DESKTOP')
- self.assertEqual(nw.hostname, 'DESKTOP')
-
- def network_set_dns_test(self):
- import pyanaconda.network
- nw = pyanaconda.network.Network()
- nw.netdevices['dev'] = mock.Mock()
- nw.setDNS('10.0.0.1, 10.0.0.2', 'dev')
- self.assertEqual(nw.netdevices['dev'].method_calls,
- [('set', (('DNS1', '10.0.0.1'),), {}),
- ('set', (('DNS2', '10.0.0.2'),), {})]
- )
-
- def network_set_gateway_test(self):
- import pyanaconda.network
- nw = pyanaconda.network.Network()
- nw.netdevices['eth0'] = mock.Mock()
- nw.setGateway('10.0.0.1', 'eth0')
- self.assertEqual(pyanaconda.network.Network.netdevices['eth0'].method_calls,
- [('set', (('GATEWAY', '10.0.0.1'),), {})])
-
- def network_lookup_hostname_1_test(self):
- import pyanaconda.network
- nw = pyanaconda.network.Network()
- nw.hostname = None
- ret = nw.lookupHostname()
- self.assertEqual(ret, None)
-
- def network_lookup_hostname_2_test(self):
- import pyanaconda.network
- nw = pyanaconda.network.Network()
- nw.hostname = 'desktop'
- pyanaconda.network.hasActiveNetDev = mock.Mock(return_value=False)
- ret = nw.lookupHostname()
- self.assertEqual(ret, None)
-
- def network_lookup_hostname_3_test(self):
- import pyanaconda.network
- pyanaconda.network.socket.getaddrinfo.return_value = \
- [(0, 0, 0, 0, ('10.1.1.1', 0))]
-
- nw = pyanaconda.network.Network()
- nw.hostname = 'desktop'
- pyanaconda.network.hasActiveNetDev = mock.Mock(return_value=True)
- ret = nw.lookupHostname()
- self.assertEqual(ret, '10.1.1.1')
-
- def network_write_ifcfg_files_test(self):
- import pyanaconda.network
- nw = pyanaconda.network.Network()
- nw.netdevices = {'dev': mock.Mock()}
- nw.writeIfcfgFiles()
- self.assertTrue(nw.netdevices['dev'].writeIfcfgFile.called)
-
def network_nm_controlled_devices_1_test(self):
import pyanaconda.network
nw = pyanaconda.network.Network()
@@ -400,49 +334,6 @@ class NetworkTest(mock.TestCase):
self.assertEqual(nw.netdevices['dev'].method_calls,
[('set', (('NM_CONTROLLED', 'no'),), {})])
- def network_update_active_devices_1_test(self):
- import pyanaconda.network
- nw = pyanaconda.network.Network()
- nw.netdevices = {'dev': mock.Mock()}
- nw.updateActiveDevices()
- self.assertEqual(nw.netdevices['dev'].method_calls,
- [('set', (('ONBOOT', 'yes'),), {})])
-
- def network_update_active_devices_2_test(self):
- import pyanaconda.network
- nw = pyanaconda.network.Network()
- nw.netdevices = {'dev': mock.Mock()}
- nw.updateActiveDevices([''])
- self.assertEqual(nw.netdevices['dev'].method_calls,
- [('set', (('ONBOOT', 'no'),), {})])
-
- def network_get_on_boot_controlled_ifaces_1_test(self):
- import pyanaconda.network
- nw = pyanaconda.network.Network()
- nw.netdevices = {'dev': mock.Mock()}
- ret = nw.getOnbootControlledIfaces()
- self.assertEqual(ret, [])
-
- def network_get_on_boot_controlled_ifaces_2_test(self):
- import pyanaconda.network
- nw = pyanaconda.network.Network()
- a = mock.Mock()
- a.get.return_value = "yes"
- nw.netdevices = {'dev': a}
- ret = nw.getOnbootControlledIfaces()
- self.assertEqual(ret, ['dev'])
-
- def network_writeSSIDifcfgs_test(self):
- import pyanaconda.network
- nw = pyanaconda.network.Network()
- nw.netdevices = {'dev': mock.Mock()}
- ret = nw.writeSSIDifcfgs({'dev': ['net_essid']})
- self.assertEqual(self.fs['/tmp/etc/sysconfig/network-scripts/ifcfg-net_essid'],
- "NAME=net_essid\n"
- "TYPE=Wireless\n"
- "ESSID=net_essid\n"
- "NM_CONTROLLED=yes\n")
-
def network_write_ks_test(self):
import pyanaconda.network
TMPFILE = '/tmp/networkKS'
@@ -458,106 +349,13 @@ class NetworkTest(mock.TestCase):
self.assertEqual(self.fs[TMPFILE],
'network --device eth0 --bootproto dhcp --noipv6\n')
- def network_has_name_server_1_test(self):
- import pyanaconda.network
- hash = {'foo':'', 'bar':''}
-
- nw = pyanaconda.network.Network()
- ret = nw.hasNameServers(hash)
- self.assertFalse(ret)
-
- def network_has_name_server_2_test(self):
- import pyanaconda.network
- hash = {'foo':'', 'bar':'', 'dnsserver':''}
-
- nw = pyanaconda.network.Network()
- ret = nw.hasNameServers(hash)
- self.assertTrue(ret)
-
- def network_has_wireless_dev_1_test(self):
- import pyanaconda.network
- pyanaconda.network.isys = mock.Mock()
- pyanaconda.network.isys.isWirelessDevice.return_value = True
-
- nw = pyanaconda.network.Network()
- nw.netdevices = {'dev': ''}
- ret = nw.hasWirelessDev()
- self.assertTrue(ret)
-
- def network_has_wireless_dev_2_test(self):
- import pyanaconda.network
- pyanaconda.network.isys = mock.Mock()
- pyanaconda.network.isys.isWirelessDevice.return_value = False
-
- nw = pyanaconda.network.Network()
- nw.netdevices = {'dev': ''}
- ret = nw.hasWirelessDev()
- self.assertFalse(ret)
-
- def network_copy_config_to_path_test(self):
- import pyanaconda.network
- pyanaconda.network.Network._copyFileToPath = mock.Mock()
- pyanaconda.network.Network._copyIfcfgFiles = mock.Mock()
-
-
- nw = pyanaconda.network.Network()
- nw.netdevices['dev'] = mock.Mock()
- nw.netdevices['dev'].path = self.DEV_FILE
- nw.netdevices['dev'].keyfilePath = self.DEV_KEY_FILE
- ret = nw.copyConfigToPath()
- self.assertEqual(pyanaconda.network.Network._copyFileToPath.call_args_list,
- [(('/etc/dhcp/dhclient-dev.conf', '/mnt/sysimage'), {}),
- (('/tmp/etc/sysconfig/network', '/mnt/sysimage'), {'overwrite': 0}),
- (('/etc/resolv.conf', '/mnt/sysimage'), {'overwrite': 0}),
- (('/etc/udev/rules.d/70-persistent-net.rules', '/mnt/sysimage'), {'overwrite': 0})]
- )
-
- def network_disable_nm_for_storage_devices_test(self):
- import pyanaconda.network
- pyanaconda.network.NetworkDevice = mock.Mock()
- pyanaconda.network.os = mock.Mock()
- pyanaconda.network.os.access.return_value = True
-
- nw = pyanaconda.network.Network()
- nw.netdevices['dev'] = mock.Mock()
- anaconda= mock.Mock()
-
- nw.disableNMForStorageDevices(anaconda)
- self.assertEqual(pyanaconda.network.NetworkDevice.call_args_list,
- [(('/mnt/sysimage/tmp/etc/sysconfig/network-scripts', 'dev'), {})])
- self.assertEqual(pyanaconda.network.NetworkDevice().method_calls,
- [('loadIfcfgFile', (), {}),
- ('set', (('NM_CONTROLLED', 'no'),), {}),
- ('writeIfcfgFile', (), {})]
- )
-
- def network_write_test(self):
- import pyanaconda.network
- pyanaconda.network.shutil = mock.Mock()
- pyanaconda.network.os = mock.Mock()
- pyanaconda.network.os.path.isfile.return_value = True
- self.fs.open(self.NETWORKCONFFILE, 'w')
-
- device = pyanaconda.network.NetworkDevice(
- self.NETSCRIPTSDIR, self.DEVICE)
- device.loadIfcfgFile()
-
- nw = pyanaconda.network.Network()
- nw.domains = ['localdomain']
- nw.netdevices[self.DEVICE] = device
- nw.write()
-
- self.assertEqual(self.fs['%s.new' % self.NETWORKCONFFILE],
- 'NETWORKING=yes\nHOSTNAME=localhost.localdomain\n')
-
def network_wait_for_connection_1_test(self):
import pyanaconda.network
pyanaconda.network.dbus = mock.Mock()
pyanaconda.network.dbus.Interface().Get.return_value = \
pyanaconda.network.isys.NM_STATE_CONNECTED_GLOBAL
- nw = pyanaconda.network.Network()
- ret = nw.waitForConnection()
+ ret = pyanaconda.network.waitForConnection()
self.assertTrue(ret)
def network_wait_for_connection_2_test(self):
@@ -568,19 +366,18 @@ class NetworkTest(mock.TestCase):
pyanaconda.network.isys.NM_STATE_CONNECTED = self.OK
pyanaconda.network.time.sleep = mock.Mock()
- nw = pyanaconda.network.Network()
- ret = nw.waitForConnection()
+ ret = pyanaconda.network.waitForConnection()
self.assertFalse(ret)
def network_bring_up_test(self):
import pyanaconda.network
pyanaconda.network.Network.write = mock.Mock()
- pyanaconda.network.Network.waitForConnection = mock.Mock()
+ pyanaconda.network.waitForConnection = mock.Mock()
nw = pyanaconda.network.Network()
nw.bringUp()
self.assertTrue(pyanaconda.network.Network.write.called)
- self.assertTrue(pyanaconda.network.Network.waitForConnection.called)
+ self.assertTrue(pyanaconda.network.waitForConnection.called)
def iface_for_host_ip_test(self):
import pyanaconda.network
diff --git a/tests/pyanaconda_test/upgrade_test.py b/tests/pyanaconda_test/upgrade_test.py
deleted file mode 100644
index 8f346e9ea..000000000
--- a/tests/pyanaconda_test/upgrade_test.py
+++ /dev/null
@@ -1,241 +0,0 @@
-#!/usr/bin/python
-
-import mock
-
-class UpgradeTest(mock.TestCase):
-
- def setUp(self):
- self.setupModules(['_isys', 'block', 'parted', 'storage',
- 'pyanaconda.storage.formats', 'logging',
- 'ConfigParser'])
-
- self.fs = mock.DiskIO()
-
- import pyanaconda
- pyanaconda.anaconda_log = mock.Mock()
-
- import pyanaconda.upgrade
-
- def tearDown(self):
- self.tearDownModules()
-
- def query_upgrade_continue_1_test(self):
- import pyanaconda.upgrade
- DIR = 1
- pyanaconda.upgrade.DISPATCH_FORWARD
- anaconda = mock.Mock()
- anaconda.dir = DIR
-
- ret = pyanaconda.upgrade.queryUpgradeContinue(anaconda)
- self.assertEqual(None, ret)
-
- def query_upgrade_continue_2_test(self):
- import pyanaconda.upgrade
- DIR = 1
- pyanaconda.upgrade.DISPATCH_FORWARD
- anaconda = mock.Mock()
- anaconda.dir = DIR - 5
- anaconda.intf.messageWindow.return_value = 1
-
- ret = pyanaconda.upgrade.queryUpgradeContinue(anaconda)
- self.assertEqual(DIR, ret)
-
- def set_upgrade_root_1_test(self):
- import pyanaconda.upgrade
- DEV_NAME = 'device'
- DEV = mock.Mock()
- anaconda = mock.Mock()
- anaconda.ksdata.upgrade.root_device = None
- anaconda.rootParts = [(DEV, DEV_NAME)]
- pyanaconda.upgrade.setUpgradeRoot(anaconda)
- self.assertEqual(1, len(anaconda.upgradeRoot))
-
- def set_upgrade_root_2_test(self):
- import pyanaconda.upgrade
- DEV_NAME = 'device'
- DEV = mock.Mock()
-
- DEV2_NAME = 'device2'
- DEV2 = mock.Mock()
- DEV2.name = DEV2_NAME
-
- anaconda = mock.Mock()
- anaconda.ksdata.upgrade.root_device = DEV2_NAME
- anaconda.rootParts = [(DEV, DEV_NAME), (DEV2, DEV2_NAME)]
- pyanaconda.upgrade.setUpgradeRoot(anaconda)
- self.assertEqual(anaconda.upgradeRoot[0][1], DEV2_NAME)
-
- def find_root_parts_1_test(self):
- import pyanaconda.upgrade
- pyanaconda.upgrade.flags = mock.Mock()
- pyanaconda.upgrade.findExistingRootDevices = mock.Mock(
- return_value=(None, [("info1", "info2", "info3")]))
- pyanaconda.upgrade.setUpgradeRoot = mock.Mock()
-
- anaconda = mock.Mock()
- anaconda.dir = pyanaconda.upgrade.DISPATCH_DEFAULT
- anaconda.rootParts = None
- anaconda.intf.messageWindow.return_value = 1
-
- pyanaconda.upgrade.findRootParts(anaconda)
- self.assertTrue(anaconda.intf.messageWindow.called)
- self.assertEqual(anaconda.dispatch.skip_steps.call_args[0],
- ('findinstall',))
-
- def find_root_parts_2_test(self):
- import pyanaconda.upgrade
- pyanaconda.upgrade.setUpgradeRoot = mock.Mock()
-
- anaconda = mock.Mock()
- anaconda.dir = pyanaconda.upgrade.DISPATCH_DEFAULT
- anaconda.rootParts = ['rootpart']
- anaconda.intf.messageWindow.return_value = 1
-
- pyanaconda.upgrade.findRootParts(anaconda)
- self.assertFalse(anaconda.intf.messageWindow.called)
- self.assertEqual(anaconda.dispatch.request_steps_gently.call_args[0],
- ('findinstall',))
-
- def bind_mount_dev_directory_test(self):
- import pyanaconda.upgrade
- pyanaconda.upgrade.getFormat = mock.Mock()
- INST_PATH = "/tmp"
- pyanaconda.upgrade.bindMountDevDirectory(INST_PATH)
- self.assertEqual(pyanaconda.upgrade.getFormat().mount.call_args,
- ((), {'chroot': INST_PATH}))
-
- def upgrade_migrate_find_1_test(self):
- import pyanaconda.upgrade
- anaconda = mock.Mock()
- anaconda.storage.migratableDevices = []
- pyanaconda.upgrade.upgradeMigrateFind(anaconda)
- self.assertEqual(anaconda.dispatch.skip_steps.call_args,
- (('upgrademigratefs',), {}))
-
- def upgrade_migrate_find_2_test(self):
- import pyanaconda.upgrade
- anaconda = mock.Mock()
- anaconda.storage.migratableDevices = ['']
- pyanaconda.upgrade.upgradeMigrateFind(anaconda)
- self.assertEqual(anaconda.dispatch.request_steps.call_args[0],
- ('upgrademigratefs',))
-
- def copy_from_sysimage_1_test(self):
- import pyanaconda.upgrade
- pyanaconda.upgrade.os = mock.Mock()
- pyanaconda.upgrade.os.access.return_value = False
- FILE = "file"
- ret = pyanaconda.upgrade.copyFromSysimage(FILE)
- self.assertFalse(ret)
-
- def copy_from_sysimage_2_test(self):
- import pyanaconda.upgrade
- pyanaconda.upgrade.os = mock.Mock()
- pyanaconda.upgrade.os.access.return_value = True
- pyanaconda.upgrade.shutil = mock.Mock()
- pyanaconda.upgrade.shutil.copyfile.side_effect = OSError
- FILE = "file"
- ret = pyanaconda.upgrade.copyFromSysimage(FILE)
- self.assertTrue(pyanaconda.upgrade.os.remove.called)
- self.assertTrue(pyanaconda.upgrade.shutil.copyfile.called)
- self.assertFalse(ret)
-
- def copy_from_sysimage_3_test(self):
- import pyanaconda.upgrade
- pyanaconda.upgrade.os = mock.Mock()
- pyanaconda.upgrade.os.access.return_value = True
- pyanaconda.upgrade.shutil = mock.Mock()
- FILE = "file"
- ret = pyanaconda.upgrade.copyFromSysimage(FILE)
- self.assertTrue(pyanaconda.upgrade.os.remove.called)
- self.assertTrue(pyanaconda.upgrade.shutil.copyfile.called)
- self.assertTrue(ret)
-
- def restore_time_1_test(self):
- import pyanaconda.upgrade
- pyanaconda.upgrade.os = mock.Mock()
- pyanaconda.upgrade.os.environ = {'TZ': 'foo'}
- anaconda = mock.Mock()
- anaconda.dir = pyanaconda.upgrade.DISPATCH_BACK
- pyanaconda.upgrade.restoreTime(anaconda)
- self.assertTrue(pyanaconda.upgrade.os.environ.has_key('TZ'))
-
- def restore_time_2_test(self):
- import pyanaconda.upgrade
- pyanaconda.upgrade.copyFromSysimage = mock.Mock()
- pyanaconda.upgrade.os = mock.Mock()
- pyanaconda.upgrade.os.environ = {'TZ': 'foo'}
- pyanaconda.upgrade.iutil = mock.Mock()
- pyanaconda.upgrade.iutil.isS390.return_value = True
-
- anaconda = mock.Mock()
- anaconda.dir = pyanaconda.upgrade.DISPATCH_BACK + 1
- pyanaconda.upgrade.restoreTime(anaconda)
- self.assertFalse(pyanaconda.upgrade.os.environ.has_key('TZ'))
- self.assertTrue(pyanaconda.upgrade.copyFromSysimage.called)
- self.assertFalse(pyanaconda.upgrade.iutil.execWithRedirect.called)
-
- def restore_time_3_test(self):
- import pyanaconda.upgrade
- pyanaconda.upgrade.copyFromSysimage = mock.Mock()
- pyanaconda.upgrade.os = mock.Mock()
- pyanaconda.upgrade.os.environ = {'TZ': 'foo'}
- pyanaconda.upgrade.iutil = mock.Mock()
- pyanaconda.upgrade.iutil.isS390.return_value = False
-
- anaconda = mock.Mock()
- anaconda.dir = pyanaconda.upgrade.DISPATCH_BACK + 1
- pyanaconda.upgrade.restoreTime(anaconda)
- self.assertFalse(pyanaconda.upgrade.os.environ.has_key('TZ'))
- self.assertTrue(pyanaconda.upgrade.copyFromSysimage.called)
- self.assertTrue(pyanaconda.upgrade.iutil.execWithRedirect.called)
-
- def upgrade_mount_filesystems_1_test(self):
- import pyanaconda.upgrade
- pyanaconda.upgrade.mountExistingSystem = mock.Mock()
- pyanaconda.upgrade.os = mock.Mock()
- pyanaconda.upgrade.os.islink.return_value = True
- pyanaconda.upgrade.os.readlink.return_value = 'a'
- pyanaconda.upgrade.os.path.exists.return_value = False
-
- anaconda = mock.Mock()
- anaconda.upgradeRoot = ['']
- pyanaconda.upgrade.upgradeMountFilesystems(anaconda)
- self.assertTrue(anaconda.storage.turnOnSwap.called)
- self.assertTrue(anaconda.storage.mkDevRoot.called)
-
- def upgrade_mount_filesystems_2_test(self):
- # This test include parts:
- # moving /etc/rpm/platform out of the way
- # disabling selinux
- import pyanaconda.upgrade
- from pyanaconda.constants import ROOT_PATH
- pyanaconda.upgrade.mountExistingSystem = mock.Mock()
- pyanaconda.upgrade.os = mock.Mock()
- pyanaconda.upgrade.os.islink.return_value = True
- pyanaconda.upgrade.os.readlink.return_value = 'a'
- pyanaconda.upgrade.os.path.exists.return_value = True
- pyanaconda.upgrade.shutil = mock.Mock()
- pyanaconda.upgrade.selinux = mock.Mock()
- pyanaconda.upgrade.flags = mock.Mock()
-
- anaconda = mock.Mock()
- anaconda.upgradeRoot = ['']
- pyanaconda.upgrade.upgradeMountFilesystems(anaconda)
- self.assertTrue(anaconda.storage.turnOnSwap.called)
- self.assertTrue(anaconda.storage.mkDevRoot.called)
- self.assertEqual(pyanaconda.upgrade.shutil.move.call_args,
- ((ROOT_PATH + "/etc/rpm/platform",
- ROOT_PATH + "/etc/rpm/platform.rpmsave"), {}))
- self.assertTrue(pyanaconda.upgrade.selinux.getfilecon.called)
-
- def set_steps_test(self):
- import pyanaconda.upgrade
- pyanaconda.upgrade.iutil = mock.Mock()
- pyanaconda.upgrade.iutil.isX86.return_value = False
- pyanaconda.upgrade.iutil.isS390.return_value = False
-
- anaconda = mock.Mock()
- pyanaconda.upgrade.setSteps(anaconda)
- self.assertEqual(zip(*anaconda.dispatch.skip_steps.call_args_list)[0],
- (('bootloader',), ('upgbootloader',), ('cleardiskssel',)))
diff --git a/utils/handle-sshpw b/utils/handle-sshpw
index dee5259b2..4b14208fc 100755
--- a/utils/handle-sshpw
+++ b/utils/handle-sshpw
@@ -28,7 +28,7 @@ from pykickstart.parser import *
from pykickstart.version import makeVersion
import pyanaconda.users as users
-ksfile = '/ks.cfg.done'
+ksfile = '/run/install/ks.cfg'
# see if we have a file to work with
if not os.path.exists(ksfile):
@@ -37,9 +37,9 @@ if not os.path.exists(ksfile):
ksparser = KickstartParser(makeVersion())
ksparser.readKickstart(ksfile)
-# we need to have a libuser.conf that points to the installer root for
-# sshpw, but after that we start sshd, we need one that points to the
-# install target.
+# we need to have a libuser.conf that points to the installer root for
+# sshpw, but after that we start sshd, we need one that points to the
+# install target.
luserConf = users.createLuserConf(instPath="")
# Pass a fake anaconda object in because it won't be needed
u = users.Users(None)
diff --git a/widgets/src/BaseWindow.c b/widgets/src/BaseWindow.c
index 452a2d376..24464a4a7 100644
--- a/widgets/src/BaseWindow.c
+++ b/widgets/src/BaseWindow.c
@@ -69,6 +69,13 @@
*/
enum {
+ SIGNAL_INFO_BAR_CLICKED,
+ LAST_SIGNAL
+};
+
+static guint window_signals[LAST_SIGNAL] = { 0 };
+
+enum {
PROP_DISTRIBUTION = 1,
PROP_WINDOW_NAME
};
@@ -79,7 +86,7 @@ enum {
struct _AnacondaBaseWindowPrivate {
gboolean is_beta, info_shown;
- GtkWidget *main_box, *info_bar;
+ GtkWidget *main_box, *event_box, *info_bar;
GtkWidget *alignment;
GtkWidget *nav_area, *action_area;
GtkWidget *name_label, *distro_label, *beta_label;
@@ -92,6 +99,8 @@ static void anaconda_base_window_get_property(GObject *object, guint prop_id, GV
static void anaconda_base_window_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
static void anaconda_base_window_buildable_init(GtkBuildableIface *iface);
+static gboolean anaconda_base_window_info_bar_clicked(GtkWidget *widget, GdkEvent *event, AnacondaBaseWindow *win);
+
G_DEFINE_TYPE_WITH_CODE(AnacondaBaseWindow, anaconda_base_window, GTK_TYPE_WINDOW,
G_IMPLEMENT_INTERFACE(GTK_TYPE_BUILDABLE, anaconda_base_window_buildable_init))
@@ -133,6 +142,25 @@ static void anaconda_base_window_class_init(AnacondaBaseWindowClass *klass) {
DEFAULT_WINDOW_NAME,
G_PARAM_READWRITE));
+ klass->info_bar_clicked = NULL;
+
+ /**
+ * AnacondaBaseWindow::info-bar-clicked:
+ * @window: the window that received the signal
+ *
+ * Emitted when a visible info bar at the bottom of the window has been clicked
+ * (pressed and released).
+ *
+ * Since: 1.0
+ */
+ window_signals[SIGNAL_INFO_BAR_CLICKED] = g_signal_new("info-bar-clicked",
+ G_TYPE_FROM_CLASS(object_class),
+ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET(AnacondaBaseWindowClass, info_bar_clicked),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
g_type_class_add_private(object_class, sizeof(AnacondaBaseWindowPrivate));
}
@@ -395,7 +423,20 @@ void anaconda_base_window_set_info(AnacondaBaseWindow *win, GtkMessageType ty, c
win->priv->info_bar = gtk_info_bar_new();
gtk_widget_set_no_show_all(win->priv->info_bar, TRUE);
- gtk_box_pack_end(GTK_BOX(win->priv->main_box), win->priv->info_bar, FALSE, FALSE, 0);
+
+ /* Wrap the info bar in an event box so clicking on it will do something. */
+ win->priv->event_box = gtk_event_box_new();
+ gtk_container_add(GTK_CONTAINER(win->priv->event_box), win->priv->info_bar);
+
+ gtk_box_pack_end(GTK_BOX(win->priv->main_box), win->priv->event_box, FALSE, FALSE, 0);
+
+ /* Hook up the signal handler for the info bar. It will just raise our own
+ * custom signal for the whole window. It will be disconnected when the info
+ * bar is hidden.
+ */
+ gtk_widget_add_events(GTK_WIDGET(win->priv->event_box), GDK_BUTTON_RELEASE_MASK);
+ g_signal_connect(win->priv->event_box, "button-release-event",
+ G_CALLBACK(anaconda_base_window_info_bar_clicked), win);
content_area = gtk_info_bar_get_content_area(GTK_INFO_BAR(win->priv->info_bar));
@@ -410,6 +451,11 @@ void anaconda_base_window_set_info(AnacondaBaseWindow *win, GtkMessageType ty, c
win->priv->info_shown = TRUE;
}
+static gboolean anaconda_base_window_info_bar_clicked(GtkWidget *wiget, GdkEvent *event, AnacondaBaseWindow *win) {
+ g_signal_emit(win, window_signals[SIGNAL_INFO_BAR_CLICKED], 0);
+ return FALSE;
+}
+
/**
* anaconda_base_window_clear_info:
* @win: a #AnacondaBaseWindow
@@ -424,8 +470,11 @@ void anaconda_base_window_clear_info(AnacondaBaseWindow *win) {
if (!win->priv->info_shown)
return;
+ g_object_disconnect(win->priv->info_bar, "button-release-event", NULL);
+
gtk_widget_hide(win->priv->info_bar);
gtk_widget_destroy(win->priv->info_bar);
+ gtk_widget_destroy(win->priv->event_box);
win->priv->info_shown = FALSE;
}
diff --git a/widgets/src/BaseWindow.h b/widgets/src/BaseWindow.h
index b033ddfea..d82d1a35a 100644
--- a/widgets/src/BaseWindow.h
+++ b/widgets/src/BaseWindow.h
@@ -54,9 +54,13 @@ struct _AnacondaBaseWindow {
* the widget class structure in order for the class mechanism
* to work correctly. This allows a AnacondaBaseWindowClass
* pointer to be cast to a #GtkWindow pointer.
+ * @info_bar_clicked : Function pointer called when the #AnacondaBaseWindow::info-bar-clicked
+ * signal is emitted.
*/
struct _AnacondaBaseWindowClass {
GtkWindowClass parent_class;
+
+ void (* info_bar_clicked) (AnacondaBaseWindow *window);
};
GType anaconda_base_window_get_type (void);