diff options
author | David Lehman <dlehman@redhat.com> | 2009-03-04 20:45:57 -0600 |
---|---|---|
committer | David Lehman <dlehman@redhat.com> | 2009-03-04 20:45:57 -0600 |
commit | db77fac58a1ab609a73bd7dd6d71ee51bcf0e1f3 (patch) | |
tree | 0279b0573115d6d79f5b4c1892fdd55cb5f7f41b | |
parent | 78b1415591a1db738d0c09b9de50e501e2048c28 (diff) | |
parent | 270003cd1f0c09a77608c4b0a07687c822f56274 (diff) | |
download | anaconda-db77fac58a1ab609a73bd7dd6d71ee51bcf0e1f3.tar.gz anaconda-db77fac58a1ab609a73bd7dd6d71ee51bcf0e1f3.tar.xz anaconda-db77fac58a1ab609a73bd7dd6d71ee51bcf0e1f3.zip |
Merge branch 'master' into storage
Conflicts:
anaconda
fsset.py
iutil.py
iw/partition_gui.py
partedUtils.py
-rw-r--r-- | Makefile | 7 | ||||
-rwxr-xr-x | anaconda | 10 | ||||
-rw-r--r-- | anaconda.spec | 5 | ||||
-rw-r--r-- | dispatch.py | 3 | ||||
-rwxr-xr-x | gui.py | 1 | ||||
-rw-r--r-- | installclass.py | 2 | ||||
-rw-r--r-- | iutil.py | 180 | ||||
-rw-r--r-- | iw/congrats_gui.py | 33 | ||||
-rw-r--r-- | iw/network_gui.py | 1 | ||||
-rw-r--r-- | loader/linuxrc.s390 | 32 | ||||
-rw-r--r-- | loader/loader.c | 55 | ||||
-rw-r--r-- | packages.py | 23 | ||||
-rw-r--r-- | po/pt_BR.po | 6 | ||||
-rwxr-xr-x | scripts/buildinstall | 8 | ||||
-rwxr-xr-x | scripts/mk-images | 12 | ||||
-rw-r--r-- | scripts/mk-images.efi | 11 | ||||
-rw-r--r-- | scripts/mk-images.x86 | 14 | ||||
-rwxr-xr-x | scripts/upd-instroot | 6 | ||||
-rw-r--r-- | textw/complete_text.py | 32 | ||||
-rw-r--r-- | upgrade.py | 1 |
20 files changed, 348 insertions, 94 deletions
@@ -108,11 +108,13 @@ tag: ChangeLog: (GIT_DIR=.git git log > .changelog.tmp && mv .changelog.tmp ChangeLog; rm -f .changelog.tmp) || (touch ChangeLog; echo 'git directory not found: installing possibly empty changelog.' >&2) +ARCHIVE_TAG := anaconda-$(VERSION)-$(RELEASE) + archive-no-tag: @rm -f ChangeLog docs/kickstart-docs.txt docs/command-line.txt @make ChangeLog @make -C docs kickstart-docs.txt command-line.txt - @git archive --format=tar --prefix=anaconda-$(VERSION)/ anaconda-$(VERSION)-$(RELEASE) > anaconda-$(VERSION).tar + @git archive --format=tar --prefix=anaconda-$(VERSION)/ $(ARCHIVE_TAG) > anaconda-$(VERSION).tar @mkdir -p anaconda-$(VERSION)/docs/ @cp docs/kickstart-docs.txt docs/command-line.txt anaconda-$(VERSION)/docs/ @cp ChangeLog anaconda-$(VERSION)/ @@ -120,6 +122,9 @@ archive-no-tag: @bzip2 -f anaconda-$(VERSION).tar @rm -rf anaconda-$(VERSION) +scratch: + $(MAKE) ARCHIVE_TAG=master archive-no-tag + archive: @make tag @make archive-no-tag @@ -497,6 +497,8 @@ class Anaconda: self.updateSrc = None self.mediaDevice = None self.platform = None + self.canReIPL = False + self.reIPLMessage = None # *sigh* we still need to be able to write this out self.xdriver = None @@ -1024,3 +1026,11 @@ if __name__ == "__main__": isys.ejectCdrom(drive) del anaconda.intf + + if iutil.isS390(): + if anaconda.canReIPL: + log.info(_("reipl configuration successful => reboot")) + os.kill(os.getppid(), signal.SIGUSR2) + else: + log.info(_("reipl configuration failed => halt")) + os.kill(os.getppid(), signal.SIGUSR1) diff --git a/anaconda.spec b/anaconda.spec index 21a2071bf..2657076e6 100644 --- a/anaconda.spec +++ b/anaconda.spec @@ -20,6 +20,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) # match the requires versions of things). %define dmver 1.02.17-6 %define gettextver 0.11 +%define genisoimagever 1.1.9-4 %define intltoolver 0.31.2-3 %define libnlver 1.0 %define libselinuxver 1.6 @@ -124,9 +125,9 @@ Requires: zenity %endif Requires: createrepo >= %{createrepover} Requires: squashfs-tools -Requires: mkisofs +Requires: genisoimage >= %{genisoimagever} %ifarch %{ix86} x86_64 -Requires: syslinux +Requires: syslinux >= 3.73 Requires: makebootfat Requires: device-mapper %endif diff --git a/dispatch.py b/dispatch.py index 262adc1ad..d6fbcce2a 100644 --- a/dispatch.py +++ b/dispatch.py @@ -47,6 +47,8 @@ from backend import doPostSelection, doBackendSetup, doBasePackageSelect from backend import doPreInstall, doPostInstall, doInstall from backend import writeConfiguration +from packages import doReIPL + import logging log = logging.getLogger("anaconda") @@ -97,6 +99,7 @@ installSteps = [ ("basepkgsel", doBasePackageSelect, ), ("group-selection", ), ("postselection", doPostSelection, ), + ("reipl", doReIPL, ), ("install", ), ("preinstallconfig", doPreInstall, ), ("installpackages", doInstall, ), @@ -34,7 +34,6 @@ import time import isys import iutil import sys -import parted import shutil import gtk import gtk.glade diff --git a/installclass.py b/installclass.py index 47ea1c62b..8e43df193 100644 --- a/installclass.py +++ b/installclass.py @@ -40,7 +40,6 @@ import logging log = logging.getLogger("anaconda") from flags import flags -from constants import * class BaseInstallClass(object): # default to not being hidden @@ -113,6 +112,7 @@ class BaseInstallClass(object): "tasksel", "postselection", "confirminstall", + "reipl", "install", "enablefilesystems", "setuptime", @@ -21,6 +21,7 @@ # import os, string, stat, sys +import signal import os.path from errno import * import inspect @@ -28,6 +29,9 @@ import rhpl import warnings import subprocess from flags import flags +from constants import * +from rhpl.translate import _ +import re import logging log = logging.getLogger("anaconda") @@ -726,4 +730,180 @@ def numeric_type(num): return num +def writeReiplMethod(reipl_path, reipl_type): + filename = "%s/reipl_type" % (reipl_path,) + + try: + f = open(filename, "w") + except Exception, e: + message = _("Error: On open, cannot set reIPL method to %s (%s: %s)" % (reipl_type,filename,e,)) + log.warning(message) + raise Exception (message) + + try: + f.write(reipl_type) + f.flush() + except Exception, e: + message = _("Error: On write, cannot set reIPL method to %s (%s: %s)" % (reipl_type,filename,e,)) + log.warning(message) + raise Exception (message) + + try: + f.close() + except Exception, e: + message = _("Error: On close, cannot set reIPL method to %s (%s: %s)" % (reipl_type,filename,e,)) + log.warning(message) + raise Exception (message) + +def reIPLonCCW(iplsubdev, reipl_path): + device = "<unknown>" + + try: + iplbits = re.split ('([0-9]+)', iplsubdev) + if len (iplbits) != 3: + message = _("Error: %s splits into %s but not like we expect" % (iplsubdev,iplbits,)) + log.warning(message) + raise Exception (message) + + device = os.readlink("/sys/block/" + iplbits[0] + "/device").split('/')[-1] + + writeReiplMethod(reipl_path, 'ccw') + + try: + f = open("%s/ccw/device" % (reipl_path,), "w") + f.write(device) + f.close() + except Exception, e: + message = _("Error: Could not set %s as reIPL device (%s)" % (device,e,)) + log.warning(message) + raise Exception (message) + + try: + f = open("%s/ccw/loadparm" % (reipl_path,), "w") + f.write("\n") + f.close() + except Exception, e: + message = _("Error: Could not reset loadparm (%s)" % (e,)) + log.warning(message) + raise Exception (message) + + try: + f = open("%s/ccw/parm" % (reipl_path,), "w") + f.write("\n") + f.close() + except Exception, e: + message = _("Warning: Could not reset parm (%s)" % (e,)) + log.warning(message) + # do NOT raise an exception since this might not exist or not be writable + + except Exception, e: + try: + message = e.args[0] + except: + message = e.__str__ () + return (message, + (_("After shutdown, please perform a manual IPL from DASD device %s to continue " + "installation") % (device,))) + + return None + +def reIPLonFCP(iplsubdev, reipl_path): + fcpvalue = { "device": "<unknown>", "wwpn": "<unknown>", "lun": "<unknown>" } + + try: + iplbits = re.split ('([0-9]+)', iplsubdev) + if len (iplbits) != 3: + message = _("Error: %s splits into %s but not like we expect" % (iplsubdev,iplbits,)) + log.warning(message) + raise Exception (message) + + syspath = "/sys/block/" + iplbits[0] + "/device" + + fcpprops = [ ("hba_id", "device"), ("wwpn", "wwpn"), ("fcp_lun", "lun") ] + + # Read in values to change. + # This way, if we can't set FCP mode, we can tell the user what to manually reboot to. + for (syspath_property, reipl_property) in fcpprops: + try: + f = open(syspath + "/" + syspath_property, "r") + value = f.read().strip() + fcpvalue[reipl_property] = value + f.close() + except Exception, e: + message = _("Error: reading FCP property %s for reIPL (%s)" % (syspath_property,e,)) + log.warning(message) + raise Exception (message) + + writeReiplMethod(reipl_path, 'fcp') + + # Write out necessary parameters. + for (syspath_property, reipl_property) in fcpprops: + try: + f = open("%s/fcp/%s" % (reipl_path, reipl_property,), "w") + f.write(fcpvalue[reipl_property]) + f.close() + except Exception, e: + message = _("Error: writing FCP property %s for reIPL (%s)" % (reipl_property,e,)) + log.warning(message) + raise Exception (message) + + defaultprops = [ ("bootprog", "0"), ("br_lba", "0") ] + + # Write out default parameters. + for (reipl_property, default_value) in defaultprops: + try: + f = open("%s/fcp/%s" % (reipl_path, reipl_property,), "w") + f.write (default_value) + f.close() + except Exception, e: + message = _("Error: writing default FCP property %s for reIPL (%s)" % (reipl_property,e,)) + log.warning(message) + raise Exception (message) + + except Exception, e: + try: + message = e.args[0] + except: + message = e.__str__ () + return (message, + (_("After shutdown, please perform a manual IPL from FCP %(device)s with WWPN %(wwpn)s " + "and LUN %(lun)s to continue installation") % (fcpvalue))) + + return None + + +def reIPL(anaconda, loader_pid): + instruction = _("After shutdown, please perform a manual IPL from the device " + "now containing /boot to continue installation") + + reipl_path = "/sys/firmware/reipl" + + iplfs = anaconda.id.fsset.getEntryByMountPoint("/boot") + if iplfs is None: + iplfs = anaconda.id.fsset.getEntryByMountPoint("/") + + if iplfs is None: + message = _("Could not get information for mount point /boot or /") + log.warning(message) + return (message, instruction) + + try: + ipldev = iplfs.device.device + except: + ipldev = None + + if ipldev is None: + message = _("Error determining mount point type") + log.warning(message) + return (message, instruction) + + message = (_("The mount point /boot or / is on a disk that we are not familiar with"), instruction) + if ipldev.startswith("dasd"): + message = reIPLonCCW(ipldev, reipl_path) + elif ipldev.startswith("sd"): + message = reIPLonFCP(ipldev, reipl_path) + + # the final return is either None if reipl configuration worked (=> reboot), + # or a two-item list with errorMessage and rebootInstr (=> shutdown) + return message diff --git a/iw/congrats_gui.py b/iw/congrats_gui.py index 18667dc99..b5f0101cf 100644 --- a/iw/congrats_gui.py +++ b/iw/congrats_gui.py @@ -20,7 +20,6 @@ import gtk import gui -import iutil from iw_gui import * from constants import * import os @@ -40,6 +39,8 @@ class CongratulationWindow (InstallWindow): # force buttonbar on in case release notes viewer is running ics.cw.mainxml.get_widget("buttonBar").set_sensitive(True) + self.rebootButton = ics.cw.mainxml.get_widget("rebootButton") + # this mucks around a bit, but it's the weird case and it's # better than adding a lot of complication to the normal ics.cw.mainxml.get_widget("nextButton").hide() @@ -47,6 +48,8 @@ class CongratulationWindow (InstallWindow): ics.cw.mainxml.get_widget("closeButton").show() ics.cw.mainxml.get_widget("closeButton").grab_focus() else: + self.rebootButton.show() + self.rebootButton.grab_focus() ics.cw.mainxml.get_widget("rebootButton").show() ics.cw.mainxml.get_widget("rebootButton").grab_focus() @@ -66,11 +69,29 @@ class CongratulationWindow (InstallWindow): a.set_size_request(200, -1) hbox.pack_start (a, False, False, 36) - txt = _("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.") %(productName,) + if iutil.isS390(): + txt = _("Congratulations, your %s installation is complete.\n\n") % (productName,) + + if not anaconda.canReIPL: + self.rebootButton.set_label(_("Shutdown")) + + txt = txt + _("Please shutdown to use the installed system.\n") + else: + txt = txt + _("Please reboot to use the installed system.\n") + + if not anaconda.reIPLMessage is None: + txt = txt + "\n" + anaconda.reIPLMessage + "\n\n" + + txt = txt + _("Note that updates may be available to ensure the proper " + "functioning of your system and installation of these " + "updates is recommended after the reboot.") + else: + txt = _("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.") %(productName,) + label = gui.WrappingLabel(txt) label.set_size_request(250, -1) diff --git a/iw/network_gui.py b/iw/network_gui.py index 90ee1237b..365333ac3 100644 --- a/iw/network_gui.py +++ b/iw/network_gui.py @@ -25,7 +25,6 @@ import string from iw_gui import * import gui import network -import socket from constants import * import gettext diff --git a/loader/linuxrc.s390 b/loader/linuxrc.s390 index 9acab9b97..af2d43956 100644 --- a/loader/linuxrc.s390 +++ b/loader/linuxrc.s390 @@ -61,35 +61,13 @@ checkipv4() doshutdown() { - exec /sbin/shutdown - exit 0 + echo $"about to exec shutdown" + exec /sbin/shutdown + exit 0 } doreboot() { - # find out the location of /boot and use it to re-ipl - boot="$(cat /proc/mounts | grep " /mnt/sysimage/boot " | awk -F" " '{print $1}')" - if [ -z $boot ]; then - # use root if /boot not used - boot="$(cat /proc/mounts | grep " /mnt/sysimage " | awk -F" " '{print $1}')" - fi - - # lookup dasd disk - echo $boot | grep "dasd" > /dev/null - if [ $? -eq 0 ]; then - type="ccw" - boot="$(basename $boot)" - # strip partition number from dasd device - boot="$(echo ${boot%[0-9]})" - id="$(basename $(readlink /sys/block/$boot/device))" - echo $type > /sys/firmware/reipl/reipl_type - echo $id > /sys/firmware/reipl/$type/device - else - # scsi re-ipl only supported on newer machines - doshutdown - exit 0 - fi - echo $"about to exec shutdown -r" exec /sbin/shutdown -r exit 0 @@ -670,7 +648,9 @@ if [ -n "$RUNKS" ]; then /sbin/loader fi -doreboot +# A shutdown needs to be performed here to avoid a loop booting back into the installer +echo $"Finishing up with doshutdown" +doshutdown # ;;; Local Variables: *** # ;;; mode: sh *** diff --git a/loader/loader.c b/loader/loader.c index 10ac30756..98ea24cba 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -121,6 +121,8 @@ uint64_t flags = LOADER_FLAGS_SELINUX; int num_link_checks = 5; int post_link_sleep = 0; +static pid_t init_pid = 1; + static struct installMethod installMethods[] = { { N_("Local CD/DVD"), 0, DEVICE_CDROM, mountCdromImage }, { N_("Hard drive"), 0, DEVICE_DISK, mountHardDrive }, @@ -1716,6 +1718,11 @@ void loaderSegvHandler(int signum) { exit(1); } +void loaderUsrXHandler(int signum) { + logMessage(INFO, "Sending signal %d to process %d\n", signum, init_pid); + kill(init_pid, signum); +} + static int anaconda_trace_init(void) { #ifdef USE_MTRACE setenv("MALLOC_TRACE","/malloc",1); @@ -1798,6 +1805,26 @@ int main(int argc, char ** argv) { { 0, 0, 0, 0, 0, 0, 0 } }; + /* get init PID if we have it */ + if ((f = fopen("/var/run/init.pid", "r")) != NULL) { + char linebuf[256]; + memset(linebuf, '\0', sizeof(linebuf)); + + while (fgets(linebuf, sizeof(linebuf) - 1, f) != NULL) { + errno = 0; + init_pid = strtol((const char *) &linebuf, NULL, 10); + if (errno == EINVAL || errno == ERANGE) { + logMessage(ERROR, "%s (%d): %m", __func__, __LINE__); + init_pid = 1; + } + } + + fclose(f); + } + + signal(SIGUSR1, loaderUsrXHandler); + signal(SIGUSR2, loaderUsrXHandler); + /* Make sure sort order is right. */ setenv ("LC_COLLATE", "C", 1); @@ -2228,34 +2255,6 @@ int main(int argc, char ** argv) { waitpid(pid, &status, 0); } -#if defined(__s390__) || defined(__s390x__) - /* FIXME: we have to send a signal to linuxrc on s390 so that shutdown - * can happen. this is ugly */ - FILE * f; - f = fopen("/var/run/init.pid", "r"); - if (!f) { - logMessage(WARNING, "can't find init.pid, guessing that init is pid 1"); - pid = 1; - } else { - char * buf = malloc(256); - char *ret; - - ret = fgets(buf, 256, f); - errno = 0; - pid = strtol(buf, NULL, 10); - - if ((errno == ERANGE && (pid == LONG_MIN || pid == LONG_MAX)) || - (errno != 0 && pid == 0)) { - logMessage(ERROR, "%s: %d: %m", __func__, __LINE__); - abort(); - } - - free(buf); - fclose(f); - } - - kill(pid, SIGUSR2); -#endif stop_fw_loader(&loaderData); return rc; } diff --git a/packages.py b/packages.py index 1de32a7a9..2bac9d331 100644 --- a/packages.py +++ b/packages.py @@ -443,3 +443,26 @@ def betaNagScreen(anaconda): sys.exit(0) else: break + +def doReIPL(anaconda): +# # This is here as an example to fix the screen during the TUI debugging path +# anaconda.intf.screen.suspend () +# import pdb +# pdb.set_trace () + + if not iutil.isS390(): + return DISPATCH_NOOP + + messageInfo = iutil.reIPL(anaconda, os.getppid()) + + if messageInfo is None: + anaconda.canReIPL = True + else: + anaconda.canReIPL = False + + (errorMessage, rebootInstr) = messageInfo + + # errorMessage intentionally not shown in UI + anaconda.reIPLMessage = rebootInstr + + return DISPATCH_FORWARD diff --git a/po/pt_BR.po b/po/pt_BR.po index a0ee0325f..1886c87ab 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -20,7 +20,7 @@ msgstr "" "Project-Id-Version: Anaconda\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-10-13 10:57-0400\n" -"PO-Revision-Date: 2008-10-14 16:07-0300\n" +"PO-Revision-Date: 2009-02-26 15:52-0300\n" "Last-Translator: Igor Pires Soares <igor@projetofedora.org>\n" "Language-Team: Brazilian Portuguese <fedora-trans-pt_br@redhat.com>\n" "MIME-Version: 1.0\n" @@ -6589,8 +6589,8 @@ msgid "Marathi" msgstr "Marati" #. generated from lang-table -msgid "Norwegian(BokmÃ¥l)" -msgstr "Norueguês (BokmÃ¥l)" +msgid "Norwegian(Bokmål)" +msgstr "Norueguês (Bokmål)" #. generated from lang-table msgid "Northern Sotho" diff --git a/scripts/buildinstall b/scripts/buildinstall index 3c59a3157..ab8d2df49 100755 --- a/scripts/buildinstall +++ b/scripts/buildinstall @@ -179,6 +179,9 @@ echo "Running buildinstall..." pushd $BUILDINSTDIR BUILDARCH=`repoquery -c $yumconf --qf "%{ARCH}\n" anaconda` +# This is a crappy implementation but x86 is the only place we currently see +# BUILDARCH != BASEARCH (e.g. i586 != i386) so it'll suffice. +BASEARCH=`echo $BUILDARCH | sed -e 's/i.86/i386/'` yumdownloader -c $yumconf anaconda || exit 1 rpm2cpio anaconda*rpm | cpio --quiet -iumd './usr*' rm -f anaconda*rpm @@ -212,11 +215,12 @@ echo "Building images..." $UPD_INSTROOT $DEBUGSTR $NOGRSTR --arch $BUILDARCH $UPDATES --imgdir $TREEDIR/install $yumconf || die "upd-instroot failed" echo "Writing .treeinfo file..." -$MK_TREEINFO --family="$PRODUCTSTR" ${VARIANT:+--variant="$VARIANT"} --version=$VERSION --arch=$BUILDARCH --outfile=$OUTPUT/.treeinfo +# NOTE --arch must match MK_IMAGES or the resulting treeinfo will be invalid +$MK_TREEINFO --family="$PRODUCTSTR" ${VARIANT:+--variant="$VARIANT"} --version=$VERSION --arch=$BASEARCH --outfile=$OUTPUT/.treeinfo # FIXME: need to update mk-images to take the yumconf echo "Making images..." -$MK_IMAGES $DEBUGSTR $NOGRSTR --imgdir $TREEDIR/install --arch $BUILDARCH --product "$PRODUCTSTR" --version $VERSION --bugurl "$BUGURL" --output $OUTPUT $yumconf || die "image creation failed" +$MK_IMAGES $DEBUGSTR $NOGRSTR --imgdir $TREEDIR/install --arch $BASEARCH --product "$PRODUCTSTR" --version $VERSION --bugurl "$BUGURL" --output $OUTPUT $yumconf || die "image creation failed" echo "Writing .discinfo file" $MK_STAMP --releasestr="$RELEASESTR" --arch=$BUILDARCH --discNum="ALL" --outfile=$OUTPUT/.discinfo diff --git a/scripts/mk-images b/scripts/mk-images index d86da0a77..d4cac465f 100755 --- a/scripts/mk-images +++ b/scripts/mk-images @@ -30,7 +30,7 @@ usage () { } DEBUG="" -BUILDARCH=`uname -m | sed -e 's/i.86/i386/'` +BUILDARCH=`uname -m` BOOTISO="boot.iso" while [ $# -gt 0 ]; do @@ -44,7 +44,7 @@ while [ $# -gt 0 ]; do shift ;; --arch) - BUILDARCH=`echo $2 | sed -e 's/i.86/i386/'` + BUILDARCH=$2 shift; shift ;; --imgdir) @@ -96,7 +96,7 @@ TOPDIR=$(cd $TOPDIR; pwd) # modules that are needed. this is the generic "needed for every arch" stuff COMMONMODS="fat vfat nfs sunrpc lockd floppy cramfs loop edd pcspkr squashfs ipv6 virtio_pci" -USBMODS="ohci-hcd uhci-hcd ehci-hcd hid mousedev usb-storage sd_mod sr_mod ub appletouch" +USBMODS="ohci-hcd uhci-hcd ehci-hcd usbhid mousedev usb-storage sd_mod sr_mod ub appletouch" FIREWIREMODS="ohci1394 sbp2 fw-ohci fw-sbp2 firewire-sbp2 firewire-ohci" SDMODS="mmc-block sdhci sdhci-pci" IDEMODS="ide-cd ide-cd_mod" @@ -810,8 +810,8 @@ makemainimage () { ERROR=$(du -sk $IMGPATH/usr/lib/anaconda-runtime | awk '{ print $1 }') SIZE=$(expr $SIZE - $ERROR) fi - if [ -d $IMGPATH/usr/lib/syslinux ]; then - ERROR=$(du -sk $IMGPATH/usr/lib/syslinux | awk '{ print $1 }') + if [ -d $IMGPATH/usr/share/syslinux ]; then + ERROR=$(du -sk $IMGPATH/usr/share/syslinux | awk '{ print $1 }') SIZE=$(expr $SIZE - $ERROR) fi dd if=/dev/zero bs=1k count=${SIZE} of=$mmi_tmpimage 2>/dev/null @@ -821,7 +821,7 @@ makemainimage () { (cd $IMGPATH; find . | fgrep -v "./usr/lib/anaconda-runtime" | - fgrep -v "./usr/lib/syslinux" + fgrep -v "./usr/share/syslinux" cpio -H crc -o) | (cd $mmi_mntpoint; cpio -iumd) makeproductfile $mmi_mntpoint umount $mmi_mntpoint diff --git a/scripts/mk-images.efi b/scripts/mk-images.efi index 9bd202431..687d76c01 100644 --- a/scripts/mk-images.efi +++ b/scripts/mk-images.efi @@ -157,8 +157,13 @@ prepareEfiTree() { mv $MBD_BOOTTREE_TMP/EFI/boot/grub.efi $MBD_BOOTTREE_TMP/EFI/boot/boot${efiarch}.efi mv $MBD_BOOTTREE_TMP/EFI/boot/grub.conf $MBD_BOOTTREE_TMP/EFI/boot/boot${efiarch}.conf - yumdownloader -c $yumconf ${brandpkgname}-logos - rpm2cpio $artpkg.rpm | (cd $KERNELROOT; cpio --quiet -iumd) + artpkg=$(repoquery --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}" --whatprovides ${brandpkgname}-logos | grep -v generic-logos | head -1) + if [ -z "$artpkg" ]; then + argpkg="generic-logos" + fi + + yumdownloader -c ${yumconf} ${artpkg} + rpm2cpio ${artpkg}.rpm | (cd $KERNELROOT; cpio --quiet -iumd) cp $KERNELROOT/boot/grub/splash.xpm.gz $MBD_BOOTTREE_TMP/EFI/boot/splash.xpm.gz } @@ -167,7 +172,7 @@ makeEfiImages() { if [ "$kernelvers" != "$kernelxen" ]; then local grubarch=${efiarch} case ${efiarch} in - ia32) grubarch=i386 ;; + ia32) grubarch=i?86 ;; x64) grubarch=x86_64 ;; esac diff --git a/scripts/mk-images.x86 b/scripts/mk-images.x86 index 3e227395f..813d94185 100644 --- a/scripts/mk-images.x86 +++ b/scripts/mk-images.x86 @@ -17,7 +17,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # -SYSLINUX=$IMGPATH/usr/lib/syslinux/syslinux-nomtools +SYSLINUX=$IMGPATH/usr/share/syslinux/syslinux-nomtools if [ ! -f $SYSLINUX ]; then echo "Warning: nomtools syslinux doesn't exist" @@ -38,7 +38,7 @@ prepareBootTree() { if [ -f $IMGPATH/usr/lib/anaconda-runtime/syslinux-vesa-splash.jpg ]; then cp $IMGPATH/usr/lib/anaconda-runtime/syslinux-vesa-splash.jpg $MBD_BOOTTREE/splash.jpg - cp $IMGPATH/usr/lib/syslinux/vesamenu.c32 $MBD_BOOTTREE/vesamenu.c32 + cp $IMGPATH/usr/share/syslinux/vesamenu.c32 $MBD_BOOTTREE/vesamenu.c32 sed -i s'/default linux/default vesamenu.c32/g' $MBD_BOOTTREE/syslinux.cfg sed -i 's/prompt 1/#prompt 1/g' $MBD_BOOTTREE/syslinux.cfg elif [ -x $IMGPATH/usr/lib/anaconda-runtime/splashtolss.sh ]; then @@ -102,12 +102,12 @@ makeBootImages() { [ $? = 0 ] || exit 1 if [ "$kernelvers" != "$kernelxen" ] ; then - if [ -f $IMGPATH/usr/lib/syslinux/isolinux.bin ]; then + if [ -f $IMGPATH/usr/share/syslinux/isolinux.bin ]; then echo "Building isolinux directory" MBD_BOOTTREE=$TOPDESTPATH/isolinux MBD_FSIMAGE=$TOPDESTPATH/images/pxeboot/initrd.img mkdir $MBD_BOOTTREE - cp $IMGPATH/usr/lib/syslinux/isolinux.bin $MBD_BOOTTREE/isolinux.bin + cp $IMGPATH/usr/share/syslinux/isolinux.bin $MBD_BOOTTREE/isolinux.bin prepareBootTree @@ -157,7 +157,11 @@ __EOT__ doPostImages() { if [ -n "$BOOTISO" ]; then - mkisofs -quiet -o $TOPDESTPATH/images/$BOOTISO -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -V "$PRODUCT" -T -graft-points isolinux=$TOPDESTPATH/isolinux images/install.img=$TOPDESTPATH/images/install.img + EFIARGS="" + if [ -f isolinux/efiboot.img ]; then + EFIARGS="-eltorito-alt-boot -e isolinux/efiboot.img -no-emul-boot" + fi + mkisofs -o $TOPDESTPATH/images/$BOOTISO -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table $EFIARGS -R -J -V "$PRODUCT" -T -graft-points isolinux=$TOPDESTPATH/isolinux images/install.img=$TOPDESTPATH/images/install.img implantisomd5 $TOPDESTPATH/images/$BOOTISO fi diff --git a/scripts/upd-instroot b/scripts/upd-instroot index b7dfca23f..1da86f508 100755 --- a/scripts/upd-instroot +++ b/scripts/upd-instroot @@ -183,8 +183,8 @@ PACKAGES="GConf2 NetworkManager ORBit2 PolicyKit acl anaconda reiserfs-utils rhpl rpm rpm-libs rpm-python sed selinux-policy-targeted setup slang smc-fonts-meera specspo sqlite synaptics system-config-date system-config-keyboard ${brandpkgname}-logos ${brandpkgname}-release taipeifonts tcp_wrappers - tzdata udev un-core-fonts-dotum urw-fonts util-linux-ng tightvnc-server - tightvnc-server-module vlgothic-fonts + tzdata udev un-core-fonts-dotum urw-fonts util-linux-ng tigervnc-server + tigervnc-server-module vlgothic-fonts wpa_supplicant xkeyboard-config xfsdump xfsprogs xorg-x11 xorg-x11-auth xorg-x11-base xorg-x11-drivers xorg-x11-font-utils xorg-x11-fonts-ethiopic xorg-x11-fonts-misc xorg-x11-libs xorg-x11-libs-data xorg-x11-server-utils @@ -512,7 +512,7 @@ usr/lib/python?.?/site-packages/yum usr/lib/rpm/macros usr/lib/rpm/rpmpopt usr/lib/rpm/rpmrc -usr/lib/syslinux +usr/share/syslinux usr/lib/yaboot usr/lib/yum-plugins/blacklist.py* usr/lib/yum-plugins/fedorakmod.py* diff --git a/textw/complete_text.py b/textw/complete_text.py index df735547f..1793cab10 100644 --- a/textw/complete_text.py +++ b/textw/complete_text.py @@ -28,17 +28,37 @@ class FinishedWindow: def __call__ (self, screen, anaconda): bootstr = "" + buttonstr = _("Reboot") bottomstr = _("<Enter> to exit") screen.pushHelpLine (string.center(bottomstr, screen.width)) - txt = _("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.") %(productName,) + if iutil.isS390(): + txt = _("Congratulations, your %s installation is complete.\n\n") % (productName,) + + if not anaconda.canReIPL: + buttonstr = _("Shutdown") + + txt = txt + _("Please shutdown to use the installed system.\n") + else: + txt = txt + _("Please reboot to use the installed system.\n") + + if not anaconda.reIPLMessage is None: + txt = txt + "\n" + anaconda.reIPLMessage + "\n\n" + + txt = txt + _("Note that updates may be available to ensure the proper " + "functioning of your system and installation of these " + "updates is recommended after the reboot.") + else: + txt = _("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.") %(productName,) + + rc = ButtonChoiceWindow (screen, _("Complete"), txt, - [ _("Reboot") ], help = "finished", width=60) + [ buttonstr ], help = "finished", width=60) return INSTALL_OK diff --git a/upgrade.py b/upgrade.py index e89742a40..fc025a5d6 100644 --- a/upgrade.py +++ b/upgrade.py @@ -325,6 +325,7 @@ def setSteps(anaconda): "dependencies", "confirmupgrade", "postselection", + "reipl", "install", "preinstallconfig", "installpackages", |