summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Katz <katzj@redhat.com>2006-10-18 20:19:30 +0000
committerJeremy Katz <katzj@redhat.com>2006-10-18 20:19:30 +0000
commitea439c9db5ca078fb86287968cf7d7eb0b2407f9 (patch)
tree51d543a748a689f5774707fdf0be00d997543a3c
parentf8a2dd3f3a72a4cbb0b7a9fbf837130e5e3da48c (diff)
downloadanaconda-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--ChangeLog16
-rw-r--r--anaconda.spec2
-rw-r--r--hdrlist.py4
-rw-r--r--isys/devnodes.c8
-rw-r--r--isys/lang.c2
-rw-r--r--loader2/hardware.c2
-rw-r--r--loader2/init.c26
-rw-r--r--loader2/module-info8
-rw-r--r--packages.py7
-rwxr-xr-xscripts/mk-images30
-rw-r--r--scripts/mk-images.i38630
-rw-r--r--scripts/mk-images.x86_6411
-rw-r--r--text.py5
13 files changed, 98 insertions, 53 deletions
diff --git a/ChangeLog b/ChangeLog
index 55529bee0..1a0925447 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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() {
diff --git a/text.py b/text.py
index a32bc0cf9..73a68e976 100644
--- a/text.py
+++ b/text.py
@@ -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