diff options
author | Jeremy Katz <katzj@redhat.com> | 2006-10-18 20:19:30 +0000 |
---|---|---|
committer | Jeremy Katz <katzj@redhat.com> | 2006-10-18 20:19:30 +0000 |
commit | ea439c9db5ca078fb86287968cf7d7eb0b2407f9 (patch) | |
tree | 51d543a748a689f5774707fdf0be00d997543a3c | |
parent | f8a2dd3f3a72a4cbb0b7a9fbf837130e5e3da48c (diff) | |
download | anaconda-ea439c9db5ca078fb86287968cf7d7eb0b2407f9.tar.gz anaconda-ea439c9db5ca078fb86287968cf7d7eb0b2407f9.tar.xz anaconda-ea439c9db5ca078fb86287968cf7d7eb0b2407f9.zip |
2006-10-18 Jeremy Katz <katzj@redhat.com>
First pass at changes to support Xen guests
* anaconda.spec (BuildPreReq): require new enough kudzu for xen bits
* scripts/mk-images: Put xvc0 in the initrd, build xen images
* scripts/mk-images.i386: Do something with the xen kernel
* scripts/mk-images.x86_64: Likewise.
* loader2/module-info: Add xenblk and xennet
* loader2/init.c: Support Xen xvc console as a serial console
* loader2/hardware.c (detectHardware): Probe on BUS_XEN
* isys/lang.c: Xen consoles can't load keymaps
* isys/devnodes.c: Support for xen xvd devices
* text.py: Xen guests should use the text mode fallbacks
* packages.py (doPreInstall): Select kernel-xenU on xen guests
* hdrlist.py (GroupSet.kernelVersionList): Support for kernel-xenU
-rw-r--r-- | ChangeLog | 16 | ||||
-rw-r--r-- | anaconda.spec | 2 | ||||
-rw-r--r-- | hdrlist.py | 4 | ||||
-rw-r--r-- | isys/devnodes.c | 8 | ||||
-rw-r--r-- | isys/lang.c | 2 | ||||
-rw-r--r-- | loader2/hardware.c | 2 | ||||
-rw-r--r-- | loader2/init.c | 26 | ||||
-rw-r--r-- | loader2/module-info | 8 | ||||
-rw-r--r-- | packages.py | 7 | ||||
-rwxr-xr-x | scripts/mk-images | 30 | ||||
-rw-r--r-- | scripts/mk-images.i386 | 30 | ||||
-rw-r--r-- | scripts/mk-images.x86_64 | 11 | ||||
-rw-r--r-- | text.py | 5 |
13 files changed, 98 insertions, 53 deletions
@@ -1,3 +1,19 @@ +2006-10-18 Jeremy Katz <katzj@redhat.com> + + First pass at changes to support Xen guests + * anaconda.spec (BuildPreReq): require new enough kudzu for xen bits + * scripts/mk-images: Put xvc0 in the initrd, build xen images + * scripts/mk-images.i386: Do something with the xen kernel + * scripts/mk-images.x86_64: Likewise. + * loader2/module-info: Add xenblk and xennet + * loader2/init.c: Support Xen xvc console as a serial console + * loader2/hardware.c (detectHardware): Probe on BUS_XEN + * isys/lang.c: Xen consoles can't load keymaps + * isys/devnodes.c: Support for xen xvd devices + * text.py: Xen guests should use the text mode fallbacks + * packages.py (doPreInstall): Select kernel-xenU on xen guests + * hdrlist.py (GroupSet.kernelVersionList): Support for kernel-xenU + 2006-10-04 David Cantrell <dcantrell@redhat.com> * anaconda.spec: Bump version. diff --git a/anaconda.spec b/anaconda.spec index 561ce2ffe..eb5f95a9c 100644 --- a/anaconda.spec +++ b/anaconda.spec @@ -6,7 +6,7 @@ License: GPL Summary: Graphical system installer Group: Applications/System Source: anaconda-%{PACKAGE_VERSION}.tar.bz2 -BuildPreReq: pump-devel >= 0.8.20, kudzu-devel >= 1.1.52, pciutils-devel, bzip2-devel, e2fsprogs-devel, python-devel gtk2-devel rpm-python >= 4.2-0.61, newt-devel, rpm-devel, gettext >= 0.11, rhpl, booty, libxml2-python, zlib-devel, bogl-devel >= 0:0.1.9-17, bogl-bterm >= 0:0.1.9-17, elfutils-devel, beecrypt-devel, libselinux-devel >= 1.6, xorg-x11-devel +BuildPreReq: pump-devel >= 0.8.20, kudzu-devel >= 1.1.95.16, pciutils-devel, bzip2-devel, e2fsprogs-devel, python-devel gtk2-devel rpm-python >= 4.2-0.61, newt-devel, rpm-devel, gettext >= 0.11, rhpl, booty, libxml2-python, zlib-devel, bogl-devel >= 0:0.1.9-17, bogl-bterm >= 0:0.1.9-17, elfutils-devel, beecrypt-devel, libselinux-devel >= 1.6, xorg-x11-devel %ifarch i386 BuildRequires: dietlibc %endif diff --git a/hdrlist.py b/hdrlist.py index 4ca74278f..358155372 100644 --- a/hdrlist.py +++ b/hdrlist.py @@ -56,7 +56,8 @@ EverythingExclude = {'kernel' : None, 'kernel-BOOT' : None, 'kernel-bigmem-unsupported': None, 'kernel-hugemem': None, 'kernel-hugemem-unsupported': None, - 'kernel-largesmp': None } + 'kernel-largesmp': None, + 'kernel-xenU': None, } def showMem(): f = open("/proc/self/status", "r") @@ -888,6 +889,7 @@ class GroupSet: ('kernel-hugemem', 'hugemem'), ('kernel-smp', 'smp'), ('kernel-largesmp', 'largesmp'), + ('kernel-xenU', 'xenU'), ('kernel-tape', 'tape'), ('kernel-pseries', ''), ('kernel-iseries', '') ]: diff --git a/isys/devnodes.c b/isys/devnodes.c index 14179df6a..8fffffcec 100644 --- a/isys/devnodes.c +++ b/isys/devnodes.c @@ -117,6 +117,14 @@ int devMakeInode(char * devName, char * path) { type = S_IFBLK; major = 9; minor = atoi(devName + 2); + } else if (devName[0] == 'x' && devName[1] == 'v' && devName[2] == 'd') { + /* xen xvd devices */ + type = S_IFBLK; + major = 202; + minor = ( devName[3] - 'a' ) * 16; + if (devName[4] && isdigit(devName[4])) { + minor += devName[4] - '0'; + } } else if (devName[0] == 's' && devName[1] == 'g') { type = S_IFBLK; major = 21; diff --git a/isys/lang.c b/isys/lang.c index 71b284b36..55eae69dd 100644 --- a/isys/lang.c +++ b/isys/lang.c @@ -89,6 +89,8 @@ int loadKeymap(gzFile stream) { #endif if (isVioConsole()) return 0; + if (!access("/proc/xen", R_OK)) /* xen can't load keymaps */ + return 0; /* assume that if we're already on a pty loading a keymap is silly */ fstat(0, &sb); diff --git a/loader2/hardware.c b/loader2/hardware.c index df3c441ed..9bada3538 100644 --- a/loader2/hardware.c +++ b/loader2/hardware.c @@ -69,7 +69,7 @@ static int detectHardware(moduleInfoSet modInfo, logMessage("probing buses"); devices = probeDevices(CLASS_UNSPEC, - BUS_PCI | BUS_SBUS | BUS_VIO | + BUS_PCI | BUS_SBUS | BUS_VIO | BUS_XEN | ((has_pcmcia() >= 0) ? BUS_PCMCIA : 0), PROBE_ALL); diff --git a/loader2/init.c b/loader2/init.c index f02f8d809..26766f67d 100644 --- a/loader2/init.c +++ b/loader2/init.c @@ -523,14 +523,6 @@ int main(int argc, char **argv) { noKill = getNoKill(); #if !defined(__s390__) && !defined(__s390x__) - - /* handle weird consoles */ -#if defined(__powerpc__) - char * consoles[] = { "/dev/hvc0", /* hvc for JS20 */ - - "/dev/hvsi0", "/dev/hvsi1", - "/dev/hvsi2", /* hvsi for POWER5 */ - NULL }; static struct termios orig_cmode; struct termios cmode, mode; int cfd; @@ -546,17 +538,23 @@ int main(int argc, char **argv) { tcsetattr(cfd,TCSANOW,&cmode); close(cfd); + /* handle weird consoles */ +#if defined(__powerpc__) + char * consoles[] = { "/dev/hvc0", /* hvc for JS20 */ + + "/dev/hvsi0", "/dev/hvsi1", + "/dev/hvsi2", /* hvsi for POWER5 */ + NULL }; + #elif defined (__ia64__) - char * consoles[] = { "/dev/ttySG0", NULL }; + char * consoles[] = { "/dev/ttySG0", "/dev/xvc0", NULL }; +#elif defined (__i386__) || defined (__x86_64__) + char * consoles[] = { "/dev/xvc0", NULL }; #else char * consoles[] = { NULL }; #endif for (i = 0; consoles[i] != NULL; i++) { -#if defined(__powerpc__) if ((fd = open(consoles[i], O_RDWR)) >= 0 && !tcgetattr(fd, &mode) && !termcmp(&cmode, &mode)) { -#else - if ((fd = open(consoles[i], O_RDWR)) >= 0) { -#endif printf("anaconda installer init version %s using %s as console\n", VERSION, consoles[i]); isSerial = 3; @@ -565,11 +563,9 @@ int main(int argc, char **argv) { } } -#if defined(__powerpc__) cfd = open("/dev/console", O_WRONLY); tcsetattr(cfd,TCSANOW,&orig_cmode); close(cfd); -#endif if ((fd < 0) && (ioctl (0, TIOCLINUX, &twelve) < 0)) { isSerial = 2; diff --git a/loader2/module-info b/loader2/module-info index 62285fc86..86f26ab18 100644 --- a/loader2/module-info +++ b/loader2/module-info @@ -1049,3 +1049,11 @@ wavelan_cs wl3501_cs eth "Planet wl3501 PCMCIA wirelesss ethernet" + +xenblk + scsi_hostadapter + "Xen block frontend device" + +xennet + eth + "Xen network frontend device" diff --git a/packages.py b/packages.py index dfe6b0995..c740af4c4 100644 --- a/packages.py +++ b/packages.py @@ -645,6 +645,13 @@ def doPreInstall(method, id, intf, instPath, dir): if not upgrade: foundkernel = 0 + + if os.path.exists("/proc/xen") and \ + select(id.grpset.hdrlist, "kernel-xenU"): + foundKernel = 1 + if selected(id.grpset.hdrlist, "gcc"): + select(id.grpset.hdrlist, "kernel-xenU-devel") + nthreads = isys.acpicpus() if nthreads == 0: diff --git a/scripts/mk-images b/scripts/mk-images index 434eb6fe6..758bf049c 100755 --- a/scripts/mk-images +++ b/scripts/mk-images @@ -783,6 +783,13 @@ EOF chmod 644 $MBD_DIR/dev/ttySG0 fi + # weird xen console + if [ "$BUILDARCH" = "i386" -o "$BUILDARCH" = "x86_64" -o "$BUILDARCH" = "ia64" ]; then + mknod $MBD_DIR/dev/xvc0 c 250 187 + chown root:root $MBD_DIR/dev/xvc0 + chmod 644 $MBD_DIR/dev/xvc0 + fi + dd if=/dev/zero of=$MBD_DIR/etc/ramfs.img.big bs=1k count=20000 2>/dev/null mke2fs -F -q $MBD_DIR/etc/ramfs.img.big tune2fs -c0 -i0 $MBD_DIR/etc/ramfs.img.big >/dev/null @@ -1086,24 +1093,20 @@ else fi # Find the kernel, unpack it, and verify it -vertag="BOOT" +kerneltags="kernel" +arches="$BUILDARCH" if [ "$BUILDARCH" = "ppc" -o "$BUILDARCH" = "ppc64" ]; then arches="ppc64pseries ppc64 ppc64iseries ppc" elif [ "$BUILDARCH" = "i386" ]; then arches="i586" -else - arches="$BUILDARCH" + kerneltags="kernel kernel-xenU" +elif [ "$BUILDARCH" = "x86_64" ]; then + kerneltags="kernel kernel-xenU" fi foundakernel="" for KERNELARCH in $arches; do - for kernelvers in $vertag; do - kpackage=$($LATEST $KERNELPATH kernel-$kernelvers) - if [ ! -f "$kpackage" ]; then - echo "kernel-$kernelvers does not exist for $KERNELARCH -- using kernel package" - kpackage=$($LATEST $KERNELPATH kernel) - kernelvers="" - fi - + for kernelvers in $kerneltags; do + kpackage=$($LATEST $KERNELPATH $kernelvers) if [ "$KERNELARCH" = "i586" -a ! -f "$kpackage" ]; then echo "No i586 kernel, trying i686..." KERNELARCH="i686" @@ -1111,7 +1114,7 @@ for KERNELARCH in $arches; do fi if [ ! -f "$kpackage" ]; then - echo "kernel doesn't exist for $KERNELARCH. skipping arch" + echo "kernel ($kernelvers) does not exist for $KERNELARCH. skipping" continue fi @@ -1119,13 +1122,14 @@ for KERNELARCH in $arches; do mkdir -p $KERNELROOT/lib/modules/misc foundakernel="yes" + if [ "${kernelvers}" = "kernel-xenU" ]; then kerneltag="xen" ; fi ppackage=$($LATEST $KERNELPATH hwdata) if [ ! -f "$ppackage" ]; then ppackage="" fi - version=$(rpm --nodigest --nosignature --qf '%{VERSION}-%{RELEASE}' -qp $kpackage)${kernelvers} + version=$(rpm --nodigest --nosignature --qf '%{VERSION}-%{RELEASE}' -qp $kpackage)${kerneltag} arch=$(rpm --nodigest --nosignature --qf '%{ARCH}\n' -qp $kpackage) echo "unpacking $kpackage.$arch" diff --git a/scripts/mk-images.i386 b/scripts/mk-images.i386 index 24c58e6ee..e194225e8 100644 --- a/scripts/mk-images.i386 +++ b/scripts/mk-images.i386 @@ -114,29 +114,10 @@ BOOTPCMCIAMODULES=`echo $PCMCIAMODULES | eval "$PCMCIAMODULES_EXCLUDED_SED"` BOOTPCMCIAMODULES="$BOOTPCMCIAMODULES yenta_socket i82365 tcic pcmcia_core ds" makeBootImages() { - if [ "$KERNELARCH" = "i386" ]; then - echo "Building $KERNELARCH $TOPDESTPATH/images/pxeboot/initrd.img" - makeinitrd --initrdto $TOPDESTPATH/images/pxeboot/initrd.img \ - --pcmcia --nobogl \ - --initrdsize 4750 \ - --loaderbin loader \ - --modules "$COMMONMODULES" - - echo "Building $KERNELARCH bootdisk.img" - makebootdisk --kernelto $TOPDESTPATH/images/pxeboot/vmlinuz \ - --bootdisksize 1440 \ - --imagename $BOOTDIR/bootdisk.img \ - --initrd $TOPDESTPATH/images/pxeboot/initrd.img - [ $? = 0 ] || exit 1 - - rm -f $TOPDESTPATH/images/pxeboot/initrd.img - - fi - # FIXME: this is so that we can switch back and forth. if we want both # on the CD, then more needs to be done, esp for things like isolinux.cfg # Right now, last one wins - if [ "$KERNELARCH" = "i686" -o "$KERNELARCH" = "i586" -o "$KERNELARCH" = "athlon" ]; then + if [ "$kerneltag" != "xen" ]; then echo "Building $KERNELARCH initrd-everything.img" makeinitrd --initrdto $TOPDESTPATH/images/pxeboot/initrd-everything.img \ --pcmcia \ @@ -210,6 +191,15 @@ vmlinuz - the BOOT kernel used for the installer initrd.img - an initrd with support for all install methods and drivers supported for installation of $PRODUCT EOF + else # set up the boot stuff for the xen guest kernel + echo "Building $KERNELARCH guest initrd.img" + mkdir -p $TOPDESTPATH/images/xen + makeinitrd --initrdto $TOPDESTPATH/images/xen/initrd.img \ + --initrdsize 8192 \ + --loaderbin loader \ + --modules "$INITRDMODS" + [ $? = 0 ] || exit 1 + cp $KERNELROOT/boot/vmlinuz-*xen* $TOPDESTPATH/images/xen/vmlinuz fi } diff --git a/scripts/mk-images.x86_64 b/scripts/mk-images.x86_64 index d27dfba89..b2f7ab802 100644 --- a/scripts/mk-images.x86_64 +++ b/scripts/mk-images.x86_64 @@ -94,6 +94,7 @@ PCMCIAMODULES=`echo $PCMCIAMODULES | eval "$PCMCIAMODULES_EXCLUDED_SED"` mkdir -p $TOPDESTPATH/images/pxeboot makeBootImages() { + if [ "$kerneltag" != "xen" ]; then echo "Building initrd-everything.img" makeinitrd --initrdto $TOPDESTPATH/images/pxeboot/initrd.img \ --pcmcia \ @@ -152,6 +153,16 @@ vmlinuz - the kernel used for the installer initrd.img - an initrd with support for all install methods and drivers supported for installation of $PRODUCT EOF + else # set up the boot stuff for the xen guest kernel + echo "Building $KERNELARCH guest initrd.img" + mkdir -p $TOPDESTPATH/images/xen + makeinitrd --initrdto $TOPDESTPATH/images/xen/initrd.img \ + --initrdsize 8192 \ + --loaderbin loader \ + --modules "$INITRDMODS" + [ $? = 0 ] || exit 1 + cp $KERNELROOT/boot/vmlinuz-*xen* $TOPDESTPATH/images/xen/vmlinuz + fi } makeSecondStage() { @@ -391,7 +391,8 @@ class InstallInterface: if (flags.setupFilesystems and (id.instLanguage.getFontFile(id.instLanguage.getCurrent()) == "bterm") and not flags.serial and not flags.virtpconsole - and not isys.isPsudoTTY(0) and not isys.isVioConsole()): + and not isys.isPsudoTTY(0) and not isys.isVioConsole() and + not os.path.exists("/proc/xen")): log("starting bterm") rc = 1 try: @@ -424,7 +425,7 @@ class InstallInterface: if DEBUG or flags.test: self.screen.suspendCallback(debugSelf, self.screen) - if flags.serial or flags.virtpconsole or isys.isPsudoTTY(0) or isys.isVioConsole(): + if flags.serial or flags.virtpconsole or isys.isPsudoTTY(0) or isys.isVioConsole() or os.path.exists("/proc/xen"): self.screen.suspendCallback(spawnShell, self.screen) # clear out the old root text by writing spaces in the blank |