diff --git a/Makefile b/Makefile index 13982cf..1c48190 100644 --- a/Makefile +++ b/Makefile @@ -24,6 +24,7 @@ RPMBUILD_DEFINES := --define "_rpmdir rpm/" --define "_sourcedir $(TOP)/rpm/SOUR spec_version = $(shell sed -n '/^Version:/s/.*:[ \t]\+//p' $(1)) package = $(shell \ + mkdir -p rpm/SOURCES; \ cd rpm/SOURCES; \ rm -f $(1)-$(2)*; \ ln -s ../../$(1) $(1)-$(2); \ @@ -98,7 +99,8 @@ iso: cp rpm_verify /usr/local/bin/ ln -sf `pwd` /tmp/qubes-installer revisor --cli --config=conf/qubes-install.conf --model=qubes-x86_64 --install-dvd - rpm_verify build/work/revisor-install/R1-*/qubes-x86_64/x86_64/os/Packages/*.rpm + isohybrid build/ISO/qubes-x86_64/iso/*.iso + rpm_verify build/work/revisor-install/R?-*/qubes-x86_64/x86_64/os/Packages/*.rpm clean: rm -fr rpm/SOURCES/*.bz2 diff --git a/anaconda/anaconda b/anaconda/anaconda index 0f54d65..bb5bed5 100755 --- a/anaconda/anaconda +++ b/anaconda/anaconda @@ -1113,10 +1113,13 @@ if __name__ == "__main__": doStartupX11Actions(opts.runres) xserver_pid = proc.pid except (OSError, RuntimeError): - stdoutLog.warning(" X startup failed, falling back to text mode") - anaconda.displayMode = 't' - graphical_failed = 1 + stdoutLog.warning(" X startup failed, aborting installation") time.sleep(2) + sys.exit(1) + #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) diff --git a/anaconda/anaconda.spec b/anaconda/anaconda.spec index ae21020..0720769 100644 --- a/anaconda/anaconda.spec +++ b/anaconda/anaconda.spec @@ -4,7 +4,7 @@ Summary: Graphical system installer Name: anaconda Version: 13.42 -Release: 2%{?dist} +Release: 4%{?dist} Epoch: 1000 License: GPLv2+ Group: Applications/System diff --git a/anaconda/backend.py b/anaconda/backend.py index 2ec2109..713278b 100644 --- a/anaconda/backend.py +++ b/anaconda/backend.py @@ -188,7 +188,7 @@ class AnacondaBackend: return 1 isys.lochangefd("/dev/loop0", self._loopbackFile) - if os.path.ismount("/mnt/stage2"): + if os.path.ismount("/mnt/stage2") and not anaconda.methodstr.find("/mnt/stage2") >= 0: isys.umount("/mnt/stage2") def removeInstallImage(self): diff --git a/anaconda/loader/loader.c b/anaconda/loader/loader.c index a601f0f..d22d51e 100644 --- a/anaconda/loader/loader.c +++ b/anaconda/loader/loader.c @@ -1232,9 +1232,75 @@ static char *doLoaderMain(struct loaderData_s *loaderData, * That will also then bypass any method selection UI in loader. */ if (!FL_ASKMETHOD(flags)) { - url = findAnacondaCD("/mnt/stage2"); + int stage2ok = 0; + // marmarek hack for USB install + if (loaderData->method == METHOD_HD) { + char *location = "/mnt/stage2"; + char *device = ((struct hdInstallData *)loaderData->stage2Data)->partition; + char *stage2loc = "/mnt/stage2/images/install.img"; + char *stage2img; + int stage2inram; + + if (!(rc=doPwMount(device, location, "auto", "ro", NULL))) { + if (!access(stage2loc, R_OK)) { + char *updpath; + + //TODO? queryCDMediaCheck(device, location); + + /* if in rescue mode lets copy stage 2 into RAM so we can */ + /* free up the CD drive and user can have it avaiable to */ + /* aid system recovery. */ + if (FL_RESCUE(flags) && !FL_TEXT(flags) && + totalMemory() > MIN_GUI_RAM ) { + rc = copyFile(stage2loc, "/tmp/install.img"); + stage2img = strdup("/tmp/install.img"); + stage2inram = 1; + } else { + stage2img = strdup(stage2loc); + stage2inram = 0; + } + + rc = mountStage2(stage2img); + free(stage2img); + + if (!rc) { + checked_asprintf(&updpath, "%s/images/updates.img", location); + + logMessage(INFO, "Looking for updates in %s", updpath); + copyUpdatesImg(updpath); + free(updpath); + + checked_asprintf(&updpath, "%s/images/product.img", location); + + logMessage(INFO, "Looking for product in %s", updpath); + copyProductImg(updpath); + free(updpath); + + /* if in rescue mode and we copied stage2 to RAM */ + /* we can now unmount the CD */ + if (FL_RESCUE(flags) && stage2inram) { + umount(location); + } + stage2ok = 1; + checked_asprintf(&url, "file://%s", location); + } else { + logMessage(INFO, "mounting stage2 failed"); + umount(location); + } + } else { + /* this wasnt the CD we were looking for, clean up and */ + /* try the next CD drive */ + umount(location); + } + } else { + logMessage(WARNING, "Mount failed for %s at %s", device, location); + } + } + if (!url) + url = findAnacondaCD("/mnt/stage2"); if (url) { - setStage2LocFromCmdline(url, loaderData); + if (!stage2ok) + setStage2LocFromCmdline(url, loaderData); skipMethodDialog = 1; logMessage(INFO, "Detected stage 2 image on CD (url: %s)", url); diff --git a/anaconda/scripts/mk-images.x86 b/anaconda/scripts/mk-images.x86 index 09fc9ae..228da60 100644 --- a/anaconda/scripts/mk-images.x86 +++ b/anaconda/scripts/mk-images.x86 @@ -18,7 +18,7 @@ # SYSLINUX=$IMGPATH/usr/share/syslinux/syslinux-nomtools -CDLABEL=$PRODUCT +CDLABEL="$PRODUCT $VERSION x86_64 DVD" if [ ! -f $SYSLINUX ]; then echo "Warning: nomtools syslinux doesn't exist" @@ -100,7 +100,7 @@ makeBootImages() { # insert XEN boot options sed -i 's/kernel vmlinuz/kernel mboot.c32/' $MBD_BOOTTREE/isolinux.cfg - sed -i "s/append initrd=[^ ]*\(.*\)/append $xenimage --- $kernelimage stage2=hd:LABEL=\"$CDLABEL\"\1 --- $initrd/" $MBD_BOOTTREE/isolinux.cfg + sed -i "s/append initrd=[^ ]*\(.*\)/append $xenimage --- $kernelimage stage2=hd:LABEL=\"$CDLABEL\":\/images\/install.img repo=file:\/mnt\/stage2\1 --- $initrd/" $MBD_BOOTTREE/isolinux.cfg # copy in memtest if present if [ -f $IMGPATH/usr/lib/anaconda-runtime/boot/memtest* ]; then diff --git a/anaconda/scripts/upd-instroot b/anaconda/scripts/upd-instroot index 7ba06df..d274db4 100755 --- a/anaconda/scripts/upd-instroot +++ b/anaconda/scripts/upd-instroot @@ -366,6 +366,8 @@ etc/hosts etc/im_palette.pal etc/imrc etc/iscsid.conf +etc/ld.so.conf +etc/ld.so.conf.d/* etc/man.config etc/mke2fs.conf etc/netconfig @@ -390,6 +392,7 @@ etc/shells etc/sysconfig/network-scripts/network-functions* etc/udev etc/wpa_supplicant/wpa_supplicant.conf +etc/X11/fontpath.d etc/yum.repos.d/* etc/yum/pluginconf.d/blacklist.conf etc/yum/pluginconf.d/fedorakmod.conf @@ -629,11 +632,13 @@ usr/share/fonts/*/lklug.ttf usr/share/fonts/lohit*/* usr/share/fonts/*/lklug.ttf usr/share/fonts/cjkuni*/uming*.ttc +usr/share/fonts/default usr/share/fonts/dejavu/DejaVuSans-Bold.ttf usr/share/fonts/dejavu/DejaVuSans.ttf usr/share/fonts/dejavu/DejaVuSansMono.ttf usr/share/fonts/kacst/KacstFarsi.ttf usr/share/fonts/kacst/KacstQura.ttf +usr/share/fonts/liberation usr/share/fonts/madan/Madan.ttf usr/share/fonts/un-core/UnDotum.ttf usr/share/fonts/*/VL-Gothic-Regular.ttf diff --git a/anaconda/yuminstall.py b/anaconda/yuminstall.py index ff9c7a3..478bbae 100644 --- a/anaconda/yuminstall.py +++ b/anaconda/yuminstall.py @@ -492,6 +492,10 @@ class AnacondaYum(YumSorter): self._switchCD(1) self.mediagrabber = self.mediaHandler self._baseRepoURL = "file://%s" % self.tree + elif m.startswith("file:"): + self.tree = m[5:] + self._baseRepoURL = "file://%s" % self.tree + else: # No methodstr was given. In order to find an installation source, # we should first check to see if there's a CD/DVD with packages diff --git a/conf/comps-qubes.xml b/conf/comps-qubes.xml index 765f0fe..f7ba76a 100644 --- a/conf/comps-qubes.xml +++ b/conf/comps-qubes.xml @@ -83,7 +83,7 @@ kdeaccessibility kdm mesa-libEGL - oxygen-icons-theme + oxygen-icon-theme qubes-kde-dom0 redhat-menus xsettings-kde diff --git a/conf/qubes-install.conf b/conf/qubes-install.conf index 0635d13..86f2860 100644 --- a/conf/qubes-install.conf +++ b/conf/qubes-install.conf @@ -38,7 +38,7 @@ revisor_comps = 1 comps = /tmp/qubes-installer/conf/comps-qubes.xml destination_directory = /tmp/qubes-installer/build/ISO -working_directory = /tmp/qubes-installer/build/work +working_directory = /tmp/qubes-installer/build/work/ ## Models diff --git a/qubes-release/qubes-release.spec b/qubes-release/qubes-release.spec index 12c0f4a..977aa39 100644 --- a/qubes-release/qubes-release.spec +++ b/qubes-release/qubes-release.spec @@ -75,7 +75,9 @@ EOF # On Mar 31, 2012, the Qubes signing key has changed # The new key is brought by this RPM, but we also # need to explicitly import it to RPM DB -rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-qubes-1-primary +if [ $1 -gt 1 ]; then + rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-qubes-1-primary +fi %clean diff --git a/revisor/revisor-2.2-volume-label.patch b/revisor/revisor-2.2-volume-label.patch new file mode 100644 index 0000000..9669597 --- /dev/null +++ b/revisor/revisor-2.2-volume-label.patch @@ -0,0 +1,12 @@ +diff -ru revisor-2.2.orig/revisor/pungi.py revisor-2.2/revisor/pungi.py +--- revisor-2.2.orig/revisor/pungi.py 2010-06-04 15:36:04.000000000 +0200 ++++ revisor-2.2/revisor/pungi.py 2012-04-28 02:32:04.675002111 +0200 +@@ -584,7 +584,7 @@ + if mt["discs"] > 1: + volume = "%s%d" % (volume, disc) + +- extraargs.extend(['"%s"' % volume]) ++ extraargs.extend(['%s' % volume]) + extraargs.extend(['-o', isofile]) + + if not self.cfg.include_bootiso: diff --git a/revisor/revisor.spec b/revisor/revisor.spec index 7009174..7faff3b 100644 --- a/revisor/revisor.spec +++ b/revisor/revisor.spec @@ -19,7 +19,7 @@ Summary: Fedora "Spin" Graphical User Interface Name: revisor Version: 2.2 -Release: 4%{?dist} +Release: 5%{?dist} License: GPLv2 Group: Applications/System URL: http://fedorahosted.org/revisor @@ -132,6 +132,7 @@ Provides: revisor-wui = %{version}-%{release} Source100: F13-buildinstall Patch100: revisor-2.2-comps.patch Patch101: revisor-2.2-release.patch +Patch102: revisor-2.2-volume-label.patch %description cli Revisor provides a set of graphical tools for building customized, updated @@ -354,6 +355,7 @@ This is the Revisor Web User Interface package %setup -q %patch100 -p1 %patch101 -p1 +%patch102 -p1 %build %configure