diff -urN anaconda-7.1/bootdisk/i386/boot.msg anaconda-7.1-xfs/bootdisk/i386/boot.msg
--- anaconda-7.1/bootdisk/i386/boot.msg	Sun Apr  8 22:58:08 2001
+++ anaconda-7.1-xfs/bootdisk/i386/boot.msg	Mon Dec  3 16:25:42 2001
@@ -1,10 +1,10 @@
  
-                09Welcome to 0cRed Hat09 Linux 7.1!07
+        SGI XFS 1.0.2 for 0cRed Hat09 Linux 7.1!07
 
- -  To install or upgrade 0cRed Hat07 Linux in graphical mode, 
-    press the 0f<ENTER>07 key.
+ -  To install or upgrade XFS for 0cRed Hat07 Linux in 
+    graphical mode, press the 0f<ENTER>07 key.
 
- -  To install or upgrade 0cRed Hat07 Linux in text mode, type: 0ftext <ENTER>07.
+ -  To install or upgrade in text mode, type: 0ftext <ENTER>07.
 
  -  To enable low resolution mode, type: 0flowres <ENTER>07.  
     Press 05<F2>07 for more information about low resolution mode.
diff -urN anaconda-7.1/bootdisk/i386/syslinux.cfg anaconda-7.1-xfs/bootdisk/i386/syslinux.cfg
--- anaconda-7.1/bootdisk/i386/syslinux.cfg	Thu Feb  8 21:47:56 2001
+++ anaconda-7.1-xfs/bootdisk/i386/syslinux.cfg	Mon Dec  3 16:25:42 2001
@@ -9,19 +9,19 @@
 F5 rescue.msg
 label linux
   kernel vmlinuz
-  append initrd=initrd.img devfs=nomount vga=788
+  append initrd=initrd.img devfs=nomount vga=788 ramdisk_size=8192
 label text
   kernel vmlinuz
-  append initrd=initrd.img text devfs=nomount
+  append initrd=initrd.img text devfs=nomount ramdisk_size=8192
 label expert
   kernel vmlinuz
-  append expert initrd=initrd.img devfs=nomount
+  append expert initrd=initrd.img devfs=nomount ramdisk_size=8192
 label ks
   kernel vmlinuz
-  append ks initrd=initrd.img devfs=nomount
+  append ks initrd=initrd.img devfs=nomount ramdisk_size=8192
 label nofb
   kernel vmlinuz
-  append initrd=initrd.img devfs=nomount nofb
+  append initrd=initrd.img devfs=nomount nofb ramdisk_size=8192
 label lowres
   kernel vmlinuz
-  append initrd=initrd.img lowres devfs=nomount
+  append initrd=initrd.img lowres devfs=nomount ramdisk_size=8192
diff -urN anaconda-7.1/fstab.py anaconda-7.1-xfs/fstab.py
--- anaconda-7.1/fstab.py	Wed May 23 15:52:03 2001
+++ anaconda-7.1-xfs/fstab.py	Mon Dec  3 17:28:21 2001
@@ -46,6 +46,26 @@
 
     return 0
 
+def isValidXFS(device):
+    file = '/tmp/' + device
+    isys.makeDevInode(device, file)
+    try:
+	fd = os.open(file, os.O_RDONLY)
+    except:
+	return 0
+
+    buf = os.read(fd, 4)
+    os.close(fd)
+
+    if len(buf) != 4:
+	return 0
+
+    if buf == "XFSB":
+	return 1
+
+    return 0
+
+
 class Fstab:
 
     # return 1 if we should stay on the same screen
@@ -54,9 +74,24 @@
 
 	(drives, raid) = self.partitionList()
         for (drive, part, type, start, cyl, size, preexisting) in drives:
-	    if preexisting and isValidExt2(drive):
+	    if preexisting and (isValidExt2(drive) or isValidXFS(drive)):
 		alreadyExists[part] = 1
 
+        if iutil.getArch() == "alpha":
+            bootPart = self.getBootDevice()
+
+            if self.getBootFS() == "xfs":
+                messageWindow(_("Error"),
+                              _("\n\nThe /boot directory containing the "
+                                "Linux kernel must reside on an ext2 "
+                                "filesystem in order for the boot loader "
+                                "to successfully start the operating system.\n\n"
+                                "You must either create a small ext2 partition "
+                                "for /boot, or - if you have /boot on the root "
+                                "partition - use the ext2 filesystem there."
+                                "\n\n"))
+                return 1
+
 	badList = []
 	for (part, drive, fsystem, format, size) in \
 		self.formattablePartitions():
@@ -111,7 +146,7 @@
 	for (mntpoint, sizespec, locspec, typespec, fsopts) in partitions:
             (device, part, primOnly) = locspec
             (size, maxsize, grow) = sizespec
-            (type, active) = typespec
+            (type, fs, active) = typespec
 
             if (part == 0):
                 part = -1
@@ -143,20 +178,27 @@
 
         if success == 1:
             # configure kickstart requested ext2 filesystem options
-            for (mntpoint, sizespce, locspec, typespec, fsopts) in partitions:
+            for (mntpoint, sizespec, locspec, typespec, fsopts) in partitions:
+                (dev, part, priority) = locspec
+                (type, fs, active) = typespec
+                # Fill up the fsCache with pre-config'd fs types
+                for (partition, mount, fsystem, size) in ddruid.getFstab():
+                    if mount == mntpoint:
+                        self.fsCache[(partition, mount)] = (0, fs)
+
                 if fsopts != None:
                     self.setfsOptions (mntpoint, fsopts)
 
             # sanity check
             for (partition, mount, fsystem, size) in ddruid.getFstab():
-                if mount == '/' and fsystem != 'ext2':
-                    raise ValueError, "--onpart specified for mount point / on non-ext2 partition"
+                if mount == '/' and fsystem != 'ext2' and fsystem != 'xfs':
+                    raise ValueError, "--onpart specified for mount point / on non-ext2 or non-xfs partition"
 
-                # if mount point other than '/' is on non-ext2, better have
+                # if mount point other than '/' is on non-ext2 or non-xfs, better have
                 # specified --noformat 
                 for (mntpoint, (dev, fstype, reformat)) in prefstab:
                     if mntpoint == mount and reformat != 0 and fsystem != fstype:
-                        raise ValueError, "--onpart specified for mount point %s on non-ext2 partition without --noformat option" % mntpoint
+                        raise ValueError, "--onpart specified for mount point %s on non-ext2 or non-xfs partition without --noformat option" % mntpoint
 
             return ddruid
         else:
@@ -234,6 +276,20 @@
     def getMbrDevice(self):
 	return self.driveList()[0]
 
+    def getBootFS(self):
+        bootFS = None
+        rootFS = None
+	for (mntpoint, partition, fsystem, doFormat, size) in self.mountList():
+	    if mntpoint == '/':
+                rootFS = fsystem
+	    elif mntpoint == '/boot':
+                bootFS = fsystem
+
+	if not bootFS:
+            bootFS = rootFS;
+
+	return bootFS
+
     def getBootDevice(self):
 	bootDevice = None
 	rootDevice = None
@@ -280,7 +336,7 @@
 
     def setDruid(self, druid, raid):
 	self.ddruid = druid
-	self.fsCache = {}
+#	self.fsCache = {}
 	for (mntPoint, raidDev, level, devices) in raid:
 	    if mntPoint == "swap":
 		fsystem = "swap"
@@ -294,7 +350,7 @@
 
         fstab = []
 	for (mntpoint, dev, fstype, reformat, size) in self.cachedFstab:
-            fstab.append ((dev, mntpoint))
+            fstab.append ((dev, mntpoint, fstype))
 
 	self.ddruid = self.fsedit(0, self.driveList(), fstab, self.zeroMbr,
 				  self.readOnly, self.upgrade,
@@ -344,11 +400,19 @@
     def setFormatFilesystem(self, device, format):
 	for (mntpoint, partition, fsystem, doFormat, size) in self.mountList():
 	    if partition == device:
-		self.fsCache[(partition, mntpoint)] = (format,)
+		self.fsCache[(partition, mntpoint)] = (format, fsystem)
 		return
 
 	raise TypeError, "unknown partition to format %s" % (device,)
 
+    def setFsType(self, device, fstype):
+        for (mntpoint, partition, fsystem, doFormat, size) in self.mountList():
+            if partition == device:
+                log ("Got type %s for %s" % (fstype, device))
+                self.fsCache[(partition, mntpoint)] = (doFormat, fstype)
+                return
+
+
     # sorted largest to smallest
     def spaceSort(self, a, b):
     	(m1, s1) = a
@@ -364,7 +428,7 @@
     def filesystemSpace(self, topMount):
 	space = []
 	for (mntpoint, partition, fsystem, doFormat, size) in self.mountList():
-	    if fsystem == 'ext2':
+	    if fsystem == 'ext2' or fsystem == 'xfs':
                 try:
                     space.append((mntpoint, isys.fsSpaceAvailable(topMount + '/' + mntpoint)))
                 except SystemError:
@@ -380,13 +444,24 @@
 
     def formatAllFilesystems(self):
 	for (partition, mount, fsystem, size) in self.ddruid.getFstab():
-	    if mount[0] == '/' and fsystem == "ext2":
-		self.fsCache[(partition, mount)] = (1,)
+
+            # This is a bit kludgey, but we just want to make sure we format the
+            # fs - DON'T change the filesystem type to what we got from ddruid!
+            # (ddruid thinks all type 83 partitions are ext2 :/ )
+            # So, get orig_fsystem out of the fsCache
+
+	    if mount[0] == '/' and ( fsystem == "ext2" or fsystem == "xfs"):
+                (format, orig_fsystem) = self.fsCache[(partition, mount)]
+		log("got fs %s for mount %s from getFstab\n", orig_fsystem, mount)
+		self.fsCache[(partition, mount)] = (1, orig_fsystem)
+
         (devices, raid) = self.ddruid.partitionList()
 	for (mount, partition, fsystem, level, i, j, deviceList) in \
 	    self.raidList()[1]:
-	    if mount[0] == '/' and fsystem == "ext2":
-		self.fsCache[(partition, mount)] = (1,)
+	    if mount[0] == '/' and (fsystem == "ext2" or fsystem == "xfs"):
+		(format, orig_fsystem) = self.fsCache[(partition, mount)]
+		log("got fs %s for mount %s from raidList\n", orig_fsystem, mount)
+		self.fsCache[(partition, mount)] = (1, orig_fsystem)
 
 #   FSOptions is a list of options to be passed when creating fs for mount
     def setfsOptions (self, mount, fsopts):
@@ -431,7 +506,7 @@
                 if n == dev:
                     continue
                 
-            if fstype == "ext2" or (fstype == "vfat" and mount == "/boot/efi"):
+            if fstype == "ext2" or fstype == "xfs" or (fstype == "vfat" and mount == "/boot/efi"):
 		l.append(item)
 
 	return l
@@ -512,7 +587,7 @@
 			iutil.execWithRedirect ("/usr/sbin/mkswap", 
 				      [ "mkswap", '-v1', file ],
 					 stdout = None, stderr = None)
-                        os.chmod(file, 0600)
+
 			formatThisSwap = 1
 		    else:
 			log("swap file %s is in the fstab, but does not exist",
@@ -756,7 +831,23 @@
                     continue
 
 	    isys.makeDevInode(device, '/tmp/' + device)
-            if fsystem == "ext2":
+
+            if fsystem == "xfs":
+                log ("Making XFS filesystem for %s" % (device))
+                args = [ 'mkfs.xfs','-f','-l','internal', '/tmp/' + device ]
+
+		fsopts = self.getfsOptions(mntpoint)
+		if fsopts:
+		    args.extend(fsopts)
+
+		w = self.waitWindow(_("Formatting"),
+			      _("Formatting %s filesystem...") % (mntpoint,))
+
+                iutil.execWithRedirect ("/usr/sbin/mkfs.xfs",
+                                        args, stdout = messageFile, 
+					stderr = messageFile, searchPath = 1)
+		w.pop()
+	    elif fsystem == "ext2":
 		label = createLabel(labels, mntpoint)
                 args = [ "/usr/sbin/mke2fs", '/tmp/' + device, '-L', label ]
                 # FORCE the partition that MILO has to read
@@ -776,8 +867,8 @@
                     elif rtype == 0:
                         args = args + [ '-R', 'stride=%d' % (rdisks * 16) ]
                         
-                if self.badBlockCheck:
-                    args.append ("-c")
+                if (self.badBlockCheck):
+                     args.append ("-c")
 
                 fsopts = self.getfsOptions(mntpoint)
                 if fsopts:
@@ -844,9 +935,16 @@
 		    isys.losetup("/tmp/loop1", "/mnt/loophost/redhat.img",
 				 readOnly = readOnly)
 		    isys.mount("loop1", instPath, readOnly = readOnly)
-	    elif fsystem == "ext2" or fsystem == "ext3" or \
+	    elif fsystem == "ext2" or fsystem == "ext3" or fsystem == "xfs" or \
 			(fsystem == "vfat" and mntpoint == "/boot/efi"):
 		try:
+                    # Sanity check fs type before we try to mount
+                    if not doFormat:
+                        if isValidXFS(device):
+                            fsystem = "xfs"
+                        elif isValidExt2(device):
+                            fsystem = "ext2"
+
 		    iutil.mkdirChain(instPath + mntpoint)
 		    isys.mount(device, instPath + mntpoint, fstype = fsystem, 
 			       readOnly = readOnly)
@@ -889,7 +987,7 @@
 	    if mntpoint == '/':
 		f.write (format % ( devName, mntpoint, fs, 'defaults', 1, 1))
 	    else:
-                if fs == "ext2":
+                if fs == "ext2" or fs == "xfs":
                     f.write (format % ( devName, mntpoint, fs, 'defaults', 1, 2))
                 elif fs == "iso9660":
                     f.write (format % ( devName, mntpoint, fs, 'noauto,owner,ro', 0, 0))
@@ -962,11 +1060,16 @@
                 continue
 
 	    if not self.fsCache.has_key((partition, mount)):
-		if mount == '/home' and isValidExt2(partition):
-		    self.fsCache[(partition, mount)] = (0, )
+		if mount == '/home' and ( isValidExt2(partition) or isValidXFS(partition) ):
+		    self.fsCache[(partition, mount)] = (0, fsystem)
 		else:
-		    self.fsCache[(partition, mount)] = (1, )
-	    (doFormat,) = self.fsCache[(partition, mount)]
+		    self.fsCache[(partition, mount)] = (1, fsystem)
+
+#           # So now, we don't want to overwrite the fsystem type,
+#           # with what getFstab gets from partitions types
+#           # Get it from the cache (I hope!) and append THAT
+
+	    (doFormat, fsystem) = self.fsCache[(partition, mount)]
 	    fstab.append((mount, partition, fsystem, doFormat, size ))
 
 	for (raidDevice, mntPoint, fsType, deviceList) in self.existingRaid:
@@ -976,13 +1079,14 @@
 
 	# Add raid mounts to mount list
         (devices, raid) = self.raidList()
-	for (mntpoint, device, fsType, raidType, start, size, makeup) in raid:
-	    if fsType == "swap": continue
+	for (mntpoint, device, fsystem, raidType, start, size, makeup) in raid:
+	    if fsystem == "swap": continue
 
 	    if not self.fsCache.has_key((device, mntpoint)):
-		self.fsCache[(device, mntpoint)] = (1, )
-	    (doFormat,) = self.fsCache[(device, mntpoint)]
-	    fstab.append((mntpoint, device, fsType, doFormat, size ))
+		self.fsCache[(device, mntpoint)] = (1, fsystem)
+
+	    (doFormat, fsystem) = self.fsCache[(device, mntpoint)]
+	    fstab.append((mntpoint, device, fsystem, doFormat, size ))
 
 	if not skipExtra:
 	    for n in self.extraFilesystems:
@@ -1184,7 +1288,7 @@
 	# all valid fstab entries have 6 fields
 	if len (fields) < 4 or len (fields) > 6: continue
 
-	if fields[2] != "ext2" and fields[2] != "ext3" and fields[2] != "swap" and fields[3] != "vfat":
+	if fields[2] != "ext2" and fields[2] != "ext3" and fields[2] != "swap" and fields[2] != "xfs" and fields[3] != "vfat":
 	    continue
 	if string.find(fields[3], "noauto") != -1: continue
 
diff -urN anaconda-7.1/gui.py anaconda-7.1-xfs/gui.py
--- anaconda-7.1/gui.py	Thu Apr  5 11:30:32 2001
+++ anaconda-7.1-xfs/gui.py	Mon Dec  3 16:25:42 2001
@@ -346,10 +346,11 @@
     def run (self, todo, test = 0):
         # This is the same as the file
         if todo.reconfigOnly:
+            commonSteps = [ ( SGIWelcomeWindow, "sgi" ) ]
             if not todo.serial:
-                commonSteps = [ ( ReconfigWelcomeWindow, "reconfig"),
-                                ( KeyboardWindow, "keyboard" ),
-                                ]
+                commonSteps = commonSteps + [ ( ReconfigWelcomeWindow, "reconfig"),
+					      ( KeyboardWindow, "keyboard" ),
+					   ]
 
             commonSteps = commonSteps + [
 		     ( NetworkWindow, "network" ),
@@ -363,15 +364,15 @@
 
         else:
             if todo.serial:
-                commonSteps = [ ( LanguageWindow, "language" ),
-                                ( WelcomeWindow, "welcome" ),
+                commonSteps = [ ( SGIWelcomeWindow, "sgi" ),
+				( LanguageWindow, "language" ),
                                 ( InstallPathWindow, "installtype" ),
                                 ]
             else:
-                commonSteps = [ ( LanguageWindow, "language" ), 
+                commonSteps = [ ( SGIWelcomeWindow, "sgi" ),
+				( LanguageWindow, "language" ), 
                                 ( KeyboardWindow, "keyboard" ),
                                 ( MouseWindow, "mouse" ),
-                                ( WelcomeWindow, "welcome" ),
                                 ( InstallPathWindow, "installtype" ),
                                 ]
 
diff -urN anaconda-7.1/harddrive.py anaconda-7.1-xfs/harddrive.py
--- anaconda-7.1/harddrive.py	Thu Mar  8 20:59:04 2001
+++ anaconda-7.1-xfs/harddrive.py	Mon Dec  3 16:25:42 2001
@@ -149,7 +149,7 @@
 	    self.isoDirIsMounted = 0
 	
     def readComps(self, hdlist):
-	self.mountMedia(1)
+	self.mountMedia(3)
 	cs = ComponentSet(self.tree + '/RedHat/base/comps', hdlist)
 	self.umountMedia()
 	return cs
@@ -162,7 +162,7 @@
 	return self.tree + "/RedHat/RPMS/" + h[1000000]
 
     def readHeaders(self):
-	self.mountMedia(1)
+	self.mountMedia(3)
 	hl = HeaderListFromFile(self.tree + "/RedHat/base/hdlist")
 	self.umountMedia()
 
@@ -178,12 +178,12 @@
 	return hl
 
     def mergeFullHeaders(self, hdlist):
-	self.mountMedia(1)
+	self.mountMedia(3)
 	hdlist.mergeFullHeaders(self.tree + "/RedHat/base/hdlist2")
 	self.umountMedia()
 
     def systemMounted(self, fstab, mntPoint, selected):
-	self.mountMedia(1)
+	self.mountMedia(3)
 	    
     def filesDone(self):
 	self.umountMedia()
diff -urN anaconda-7.1/help/C/s1-help-screens-format.html anaconda-7.1-xfs/help/C/s1-help-screens-format.html
--- anaconda-7.1/help/C/s1-help-screens-format.html	Tue Mar 13 12:27:36 2001
+++ anaconda-7.1-xfs/help/C/s1-help-screens-format.html	Mon Dec  3 16:25:42 2001
@@ -42,6 +42,13 @@
 	blocks on a drive and making a list of them to prevent data from being
 	written to them in the future.
       </P
+><P
+>        Do you want to use the XFS Filesystem?
+      </P
+><P
+>	SGI's XFS Filesystem is a high-performance, scalable,
+	journaling filesystem.
+      </P
 ></DIV
 ></BODY
 ></HTML
diff -urN anaconda-7.1/help/C/s1-help-screens-instpath.html anaconda-7.1-xfs/help/C/s1-help-screens-instpath.html
--- anaconda-7.1/help/C/s1-help-screens-instpath.html	Tue Mar 13 12:27:36 2001
+++ anaconda-7.1-xfs/help/C/s1-help-screens-instpath.html	Mon Dec  3 16:25:42 2001
@@ -45,7 +45,7 @@
 ><P
 >	If you want to perform a full installation, you must choose the class
 	(or type) of the installation. Your options are: Workstation, Server,
-	Laptop, or Custom.
+	Laptop, or Custom.  All but "Custom" default to XFS filesystems.
       </P
 ><P
 >	If you don't know which installation class you want, read the following
@@ -121,7 +121,8 @@
 	complete control over the packages that will be installed on your
 	system.  You can also determine whether you'll use LILO to boot your
 	system. Unless you have prior Linux experience, you should not select
-	the custom-class installation method.
+	the custom-class installation method.  custom-class installs
+	will also give you a choice between XFS and ext2 for each partition.
       </P
 ><P
 >	For more information concerning the differences among workstation-,
@@ -131,4 +132,4 @@
 ></DIV
 ></BODY
 ></HTML
->
\ No newline at end of file
+>
diff -urN anaconda-7.1/help/C/s1-help-screens-wel.html anaconda-7.1-xfs/help/C/s1-help-screens-wel.html
--- anaconda-7.1/help/C/s1-help-screens-wel.html	Tue Mar 13 12:27:36 2001
+++ anaconda-7.1-xfs/help/C/s1-help-screens-wel.html	Mon Dec  3 16:25:42 2001
@@ -32,7 +32,14 @@
 >Welcome to Red Hat Linux</A
 ></H1
 ><P
->	Welcome! This installation process is outlined in detail in the
+>	Welcome!  This is a MODIFIED version of the Red Hat
+	installer which includes support for the XFS filesystem
+	from SGI.  Please do not direct questions about XFS
+	to Red Hat Inc. - informatin about XFS can be found
+	at http://oss.sgi.com/projects/xfs
+      </P
+><P
+>	This installation process is outlined in detail in the
 	<I
 CLASS="CITETITLE"
 >Red Hat Linux Installation Guide</I
@@ -141,4 +148,4 @@
 ></DIV
 ></BODY
 ></HTML
->
\ No newline at end of file
+>
diff -urN anaconda-7.1/help/help-screens-C.sgml anaconda-7.1-xfs/help/help-screens-C.sgml
--- anaconda-7.1/help/help-screens-C.sgml	Tue Mar 13 15:18:47 2001
+++ anaconda-7.1-xfs/help/help-screens-C.sgml	Mon Dec  3 16:25:42 2001
@@ -114,7 +114,14 @@
     <sect1 id="s1-help-screens-wel">
       <title>Welcome to Red Hat Linux</title>
       <para>
-	Welcome! This installation process is outlined in detail in the
+	Welcome!  This is a MODIFIED version of the Red Hat
+	installer which includes support for the XFS filesystem
+	from SGI.  Please do not direct questions about XFS
+	to Red Hat Inc. - informatin about XFS can be found
+	at http://oss.sgi.com/projects/xfs
+      </para>
+      <para>
+	This installation process is outlined in detail in the
 	<citetitle>&RHLIG;</citetitle> available from &RHI;. Please read through
 	the entire manual before you begin this installation process.
       </para>
@@ -396,9 +403,13 @@
 	automatic partitioning.
       </para>
       <para>
+	Are you sure?
+      </para>
+      <para>
 	By selecting automatic partitioning, you will not have to use the
 	<application>Disk Druid</application> or <application>fdisk</application>
 	partitioning tools to assign mount points or allocate space for your installation.
+	Are you sure?
       </para>
       <para>
 	Automatic partitioning will create and assign partitions for you. 
@@ -688,6 +699,13 @@
 	Checking for bad blocks can help prevent data loss by finding the bad
 	blocks on a drive and making a list of them to prevent data from being
 	written to them in the future.
+      </para>
+      <para>
+        Do you want to use the XFS Filesystem?
+      </para>
+      <para>
+	SGI's XFS Filesystem is a high-performance, scalable,
+	journaling filesystem.
       </para>
     </sect1>
       
diff -urN anaconda-7.1/image.py anaconda-7.1-xfs/image.py
--- anaconda-7.1/image.py	Fri Feb  9 19:45:02 2001
+++ anaconda-7.1-xfs/image.py	Mon Dec  3 16:25:42 2001
@@ -115,8 +115,12 @@
 		isys.ejectCdrom(self.device)
 
 	    while not done:
-		self.messageWindow(_("Change CDROM"), 
-		    _("Please insert disc %d to continue.") % self.currentDisc)
+	    	if self.currentDisc == 3:
+		    self.messageWindow(_("Change CDROM"),
+		    "Please insert the SGI disc to continue.")
+		else:
+		    self.messageWindow(_("Change CDROM"), 
+		    _("Please insert Red Hat disc %d to continue.") % self.currentDisc)
 
 		try:
 		    if isys.mount(self.device, "/mnt/source", 
@@ -134,7 +138,7 @@
 
 		    if not done:
 			self.messageWindow(_("Wrong CDROM"),
-				_("That's not the correct Red Hat CDROM."))
+				_("That's not the correct CDROM."))
 			isys.umount("/mnt/source")
 			isys.ejectCdrom(self.device)
 		except:
@@ -166,7 +170,7 @@
 	(self.device, tree) = string.split(url, "/", 1)
 	self.messageWindow = messageWindow
 	self.progressWindow = progressWindow
-	self.currentDisc = 1
+	self.currentDisc = 3
         self.loopbackFile = None
 	ImageInstallMethod.__init__(self, "/" + tree)
 
diff -urN anaconda-7.1/installclass.py anaconda-7.1-xfs/installclass.py
--- anaconda-7.1/installclass.py	Fri Mar 16 20:05:19 2001
+++ anaconda-7.1-xfs/installclass.py	Mon Dec  3 16:25:42 2001
@@ -86,6 +86,7 @@
 
     def addNewPartition(self, mntPoint, sizespec, locspec, typespec, fsopts=None):
         (device, part, primOnly) = locspec
+        (type, fs, active) = typespec
         
 	if not device:
             device = ""
@@ -103,7 +104,7 @@
     def mergeFstabEntries(self, todo):
         pass
     
-    def addToFstab(self, mntpoint, dev, fstype = "ext2" , reformat = 1):
+    def addToFstab(self, mntpoint, dev, fstype = "xfs" , reformat = 1):
 	self.fstab.append((mntpoint, (dev, fstype, reformat)))
 
     def setTimezoneInfo(self, timezone, asUtc = 0, asArc = 0):
@@ -121,7 +122,7 @@
 	[ "lilo", "mouse", "network", "firewall", "authentication", "complete", "complete",
 	  "package-selection", "bootdisk", "partition", "format", "timezone",
 	  "accounts", "dependencies", "language", "keyboard", "xconfig",
-	  "welcome", "custom-upgrade", "installtype", "mouse", 
+	  "sgiwelcome", "welcome", "custom-upgrade", "installtype", "mouse", 
 	  "confirm-install", "confirm-upgrade", "languagesupport",
           "languagedefault", "lba32warning", "indivpackage" ].index(type)
 	self.skipSteps[type] = 1
diff -urN anaconda-7.1/installclasses/custom.py anaconda-7.1-xfs/installclasses/custom.py
--- anaconda-7.1/installclasses/custom.py	Tue May 22 14:54:17 2001
+++ anaconda-7.1-xfs/installclasses/custom.py	Mon Dec  3 16:25:42 2001
@@ -7,7 +7,7 @@
 # custom installs are easy :-)
 class InstallClass(BaseInstallClass):
 
-    name = N_("Custom System")
+    name = ("Custom System on XFS")
     pixmap = "custom.png"
     
     sortPriority = 10000
diff -urN anaconda-7.1/installclasses/laptop.py anaconda-7.1-xfs/installclasses/laptop.py
--- anaconda-7.1/installclasses/laptop.py	Tue Feb 27 16:06:30 2001
+++ anaconda-7.1-xfs/installclasses/laptop.py	Mon Dec  3 16:25:42 2001
@@ -4,7 +4,7 @@
 import pcmcia
 
 class InstallClass(workstation.InstallClass):
-    name = N_("Laptop")
+    name = ("Laptop on XFS")
     pixmap = "laptop-support.png"
 
     sortPriority = 5000
diff -urN anaconda-7.1/installclasses/server.py anaconda-7.1-xfs/installclasses/server.py
--- anaconda-7.1/installclasses/server.py	Tue May 22 14:54:17 2001
+++ anaconda-7.1-xfs/installclasses/server.py	Mon Dec  3 16:25:42 2001
@@ -6,7 +6,7 @@
 
 class InstallClass(BaseInstallClass):
 
-    name = N_("Server System")
+    name = ("Server System on XFS")
     pixmap = "server.png"
     sortPriority = 10
 
@@ -46,4 +46,4 @@
         # 2.4 kernel requires more swap, so base amount we try to get
         # on amount of memory
         (minswap, maxswap) = iutil.swapSuggestion()
-	self.addNewPartition('swap', (minswap, maxswap, 1), (None, -1, 0), (0,0))
+	self.addNewPartition('swap', (minswap, maxswap, 1), (None, -1, 0), (0,None,0))
diff -urN anaconda-7.1/installclasses/workstation.py anaconda-7.1-xfs/installclasses/workstation.py
--- anaconda-7.1/installclasses/workstation.py	Tue May 22 14:54:17 2001
+++ anaconda-7.1-xfs/installclasses/workstation.py	Mon Dec  3 16:25:42 2001
@@ -5,7 +5,7 @@
 import iutil
 
 class InstallClass(BaseInstallClass):
-    name = N_("Workstation")
+    name = ("Workstation on XFS")
     pixmap = "workstation.png"
 
     sortPriority = 1
diff -urN anaconda-7.1/iw/format_gui.py anaconda-7.1-xfs/iw/format_gui.py
--- anaconda-7.1/iw/format_gui.py	Fri Jan 12 17:30:49 2001
+++ anaconda-7.1-xfs/iw/format_gui.py	Mon Dec  3 16:25:42 2001
@@ -5,6 +5,8 @@
 from translate import _
 from rootpartition_gui import AutoPartitionWindow
 import gui
+import fstab
+import iutil
 
 class FormatWindow (InstallWindow):
     def __init__ (self, ics):
@@ -26,39 +28,86 @@
 
     # FormatWindow tag="format"
     def getScreen (self):
-        def toggled (widget, (todo, dev)):
+        def fmt_toggled (widget, (todo, dev, xfsCheckButton)):
             if widget.get_active ():
 		todo.fstab.setFormatFilesystem(dev, 1)
+		xfsCheckButton.set_sensitive(1)
+		xfsCheckButton.set_active(1)
             else:
 		todo.fstab.setFormatFilesystem(dev, 0)
+		xfsCheckButton.set_sensitive(0)
+		xfsCheckButton.set_active(fstab.isValidXFS(dev))
+
+	def xfs_toggled (widget, (todo, dev)):
+	    if widget.get_active():
+                todo.fstab.setFsType(dev, "xfs")
+	    else:
+                todo.fstab.setFsType(dev, "ext2")
 
         def check (widget, todo):
             todo.fstab.setBadBlockCheck(widget.get_active ())
 
-        box = GtkVBox (FALSE, 10)
-
         mounts = self.todo.fstab.formattablePartitions()
 
 	gotOne = 0
         sw = GtkScrolledWindow ()
         sw.set_policy (POLICY_AUTOMATIC, POLICY_AUTOMATIC)
+
+	hbox = GtkHBox (FALSE, 10)
+
+#	## Partitions to format
+	vbox1 = GtkVBox (FALSE, 10)
+	vbox2 = GtkVBox (FALSE, 10)
+
 	for (mount, dev, fstype, format, size) in mounts:
-	    gotOne = 1
-	    checkButton = GtkCheckButton ("/dev/%s   %s" % (dev, mount))
-	    checkButton.set_active (format)
-	    checkButton.connect ("toggled", toggled, (self.todo, dev))
-	    box.pack_start (checkButton, FALSE, FALSE)
+            gotOne = 1
 
-	if not gotOne: return None
+            # Might be overkill, but...
+            if not format:
+                if fstab.isValidXFS(dev):
+                    self.todo.fstab.setFsType(dev, "xfs")
+                    fstype = "xfs"
+                elif fstab.isValidExt2(dev):
+                    self.todo.fstab.setFsType(dev, "ext2")
+                    fstype = "ext2"
+
+            xfsCheckButton = GtkCheckButton ("Use XFS filesystem")
+            
+            # Pass fs type widget into callback as well - if we don't
+            # format this partition, set it to current FS
+            fmtCheckButton = GtkCheckButton ("/dev/%s   %s" % (dev, mount))
+            fmtCheckButton.set_active (format)
+            fmtCheckButton.connect ("toggled", fmt_toggled, (self.todo, dev, xfsCheckButton))
+            vbox1.pack_start (fmtCheckButton, FALSE, FALSE)
+            
+            # Force /boot to be ext2 on Alpha -- mkp
+            if mount == "/boot" and iutil.getArch() == "alpha":
+                self.todo.fstab.setFsType(dev, "ext2")
+                fstype = "ext2"
+                xfsCheckButton.set_sensitive (FALSE)
+            else:
+                xfsCheckButton.set_sensitive (format)
+                xfsCheckButton.connect ("toggled", xfs_toggled, (self.todo, dev))
+                
+            xfsCheckButton.set_active (fstype == "xfs")
+            vbox2.pack_start (xfsCheckButton, FALSE, FALSE)
+ 
+        if not gotOne: return None
+ 
+#       ## Put partition list in box
+        hbox.pack_start (vbox1, TRUE, TRUE)
+ 
+#      ## Put fs type selector in box
+        hbox.pack_start (vbox2, TRUE, TRUE)
 
-        sw.add_with_viewport (box)
+        sw.add_with_viewport (hbox)
         viewport = sw.children()[0]
         viewport.set_shadow_type (SHADOW_ETCHED_IN)
         
         vbox = GtkVBox (FALSE, 10)
         vbox.pack_start (sw, TRUE, TRUE)
 
-        self.check = GtkCheckButton (_("Check for bad blocks while formatting"))
+        self.check = GtkCheckButton (_("Check ext2 partitions for bad blocks while formatting"))
         self.check.set_active (self.todo.fstab.getBadBlockCheck())
         self.check.connect ("toggled", check, self.todo)
         vbox.pack_start (self.check, FALSE)
diff -urN anaconda-7.1/iw/lilo_gui.py anaconda-7.1-xfs/iw/lilo_gui.py
--- anaconda-7.1/iw/lilo_gui.py	Fri Mar 16 20:05:20 2001
+++ anaconda-7.1-xfs/iw/lilo_gui.py	Mon Dec  3 16:25:42 2001
@@ -283,9 +283,23 @@
         self.mbr = GtkRadioButton(None, 
             ("/dev/%s %s" % (boothd, _("Master Boot Record (MBR)"))))
         self.radioBox.attach(self.mbr, 1, 2, 2, 3)
-        self.part = GtkRadioButton(self.mbr, 
-            ("/dev/%s %s" % (bootpart, 
-                _("First sector of boot partition"))))
+
+        for (mntpoint, partition, fsystem, doFormat, size) in \
+	    self.todo.fstab.mountList():
+		if partition == bootpart:
+			bootFs = fsystem
+
+	if bootFs != "xfs":
+		self.part = GtkRadioButton(self.mbr, 
+			("/dev/%s %s" % (bootpart, 
+        	        _("First sector of boot partition"))))
+	else:
+		self.part = GtkRadioButton(self.mbr, 
+			("/dev/%s %s" % (bootpart, 
+        	        "(Can't install LILO on first sector of XFS boot partition)")))
+		self.part.set_sensitive(0)
+		self.part.set_active(0)
+
         self.radioBox.attach(self.part, 1, 2, 3, 4)
 
         self.linearCheck = GtkCheckButton(
diff -urN anaconda-7.1/iw/progress_gui.py anaconda-7.1-xfs/iw/progress_gui.py
--- anaconda-7.1/iw/progress_gui.py	Mon Apr  2 11:20:36 2001
+++ anaconda-7.1-xfs/iw/progress_gui.py	Mon Dec  3 16:25:42 2001
@@ -183,8 +183,8 @@
                 shortlang = ''
                 
 
-	    pixmaps1 = glob.glob("/usr/share/anaconda/pixmaps/rnotes/%s/*.png" % shortlang)
-	    pixmaps2 = glob.glob("pixmaps/rnotes/%s/*.png" % shortlang)
+	    pixmaps1 = glob.glob("/usr/share/anaconda/pixmaps/sginotes/*.png")
+	    pixmaps2 = glob.glob("pixmaps/sginotes/*.png")
 
             if len(pixmaps1) > 0 or len(pixmaps2) > 0:
                 if len(pixmaps1) < len(pixmaps2):
@@ -201,7 +201,7 @@
         pixmaps = []
         for pixmap in files:
             if string.find (pixmap, "progress_first.png") < 0:
-                pixmaps.append(pixmap[string.find(pixmap, "rnotes/"):])
+                pixmaps.append(pixmap[string.find(pixmap, "sginotes/"):])
 
         self.pixmaps = pixmaps
         
diff -urN anaconda-7.1/iw/welcome_gui.py anaconda-7.1-xfs/iw/welcome_gui.py
--- anaconda-7.1/iw/welcome_gui.py	Wed Jan 17 16:01:19 2001
+++ anaconda-7.1-xfs/iw/welcome_gui.py	Mon Dec  3 16:25:42 2001
@@ -3,6 +3,91 @@
 from iw_gui import *
 from translate import _
 
+class SGIWelcomeWindow (InstallWindow):
+
+    def __init__ (self, ics):
+        InstallWindow.__init__ (self, ics)
+
+        ics.setTitle (_("Welcome"))
+        ics.setNextEnabled (1)
+#        ics.readHTML ("sgi")
+        ics.setGrabNext (1)
+        self.beingDisplayed = 0
+        self.ics = ics
+
+    def getNext (self):
+        if not self.beingDisplayed: return
+
+        if self.cancelChoice.get_active():
+            import sys
+
+            print "Exiting"
+            sys.exit(0)
+        else:
+            self.beingDisplay = 0
+            return None
+
+    def getScreen (self):
+
+
+        frame = GtkFrame ()
+        frame.set_shadow_type (SHADOW_IN)
+
+        box = GtkVBox (FALSE)
+        box.set_border_width (5)
+        frame.add (box)
+
+        text = GtkLabel ("Unofficial SGI Installer with XFS version 1.0.2!\n\n"
+			 "For information on the XFS filesystem "
+                         "please see http://oss.sgi.com/projects/xfs\n\n"
+                         "Official Red Hat 7.1 CDs are needed "
+                         "to complete this installation\n\n"
+                         "This installer is not a product of Red Hat\n"
+                         "Please DO NOT report problems with this installer "
+                         "to Red Hat\n\n"
+                         "Red HatŪ is a registered trademark of Red Hat, Inc. ")
+        text.set_line_wrap(TRUE)
+        text.set_alignment(0.0, 0.0)
+        text.set_usize(400,-1)
+
+        box.pack_start (text, FALSE)
+
+        im = self.ics.readPixmap ("sgi.png")
+
+        if im:
+            im.render ()
+            ebox = GtkEventBox ()
+            pix = im.make_pixmap ()
+            style = ebox.get_style ().copy ()
+#            style.bg[STATE_NORMAL] = style.white
+            ebox.set_style (style)
+            ebox.add (pix)
+            box.pack_start (ebox, FALSE)
+
+        label = GtkLabel("Would you like to continue?")
+        label.set_line_wrap(TRUE)
+        label.set_alignment(0.0, 0.0)
+        label.set_usize(400, -1)
+
+        box.pack_start(label)
+
+        radioBox = GtkVBox (FALSE)
+        self.continueChoice = GtkRadioButton (None, _("Yes"))
+        radioBox.pack_start(self.continueChoice, FALSE)
+        self.cancelChoice = GtkRadioButton(
+                self.continueChoice, _("No"))
+        radioBox.pack_start(self.cancelChoice, FALSE)
+
+        align = GtkAlignment()
+        align.add(radioBox)
+        align.set(0.5, 0.5, 0.0, 0.0)
+
+        box.pack_start(align, TRUE, TRUE)
+        box.set_border_width (5)
+        self.beingDisplayed = 1
+
+        return frame
+
 class WelcomeWindow (InstallWindow):		
 
     def __init__ (self, ics):
diff -urN anaconda-7.1/kickstart.py anaconda-7.1-xfs/kickstart.py
--- anaconda-7.1/kickstart.py	Thu Mar 22 11:54:02 2001
+++ anaconda-7.1-xfs/kickstart.py	Mon Dec  3 16:25:42 2001
@@ -587,12 +587,13 @@
         primOnly = 0
         active = 0
         format = 1
+	fs = "xfs"
         
 	(args, extra) = isys.getopt(args, '', [ 'size=', 'maxsize=', 
 					'grow', 'onpart=', 'ondisk=',
                                         'bytes-per-inode=', 'usepart=',
                                         'onprimary=', 'active', 'type=',
-                                        'asprimary', 'noformat'])
+                                        'asprimary', 'noformat', 'fs='])
 
 	for n in args:
 	    (str, arg) = n
@@ -618,6 +619,8 @@
                 primOnly = 1
             elif str == "--noformat":
                 format = 0
+            elif str == "--fs":
+                fs = arg
 
 	if len(extra) != 1:
 	    raise ValueError, "partition command requires one anonymous argument"
@@ -630,14 +633,18 @@
                if format == 0:
                    self.addToFstab(extra[0], onPart, reformat = 0)
                else:
-                   self.addToFstab(extra[0], onPart, 'ext2', 1)
+                   if fs == 'ext2':
+                       self.addToFstab(extra[0], onPart, 'ext2', 1)
+                   else:
+                       self.addToFstab(extra[0], onPart, 'xfs', 1)
 	else:
-	    self.addNewPartition(extra[0], (size, maxSize, grow), (device, partNum, primOnly), (type, active), fsopts)
+	    self.addNewPartition(extra[0], (size, maxSize, grow), (device, partNum, primOnly), (type, fs, active), fsopts)
 
     def __init__(self, file, serial):
 	BaseInstallClass.__init__(self)
 	self.addToSkipList("bootdisk")
-        self.addToSkipList("welcome")
+	self.addToSkipList("sgiwelcome")
+#        self.addToSkipList("welcome")
         self.addToSkipList("package-selection")
         self.addToSkipList("confirm-install")
         self.addToSkipList("confirm-upgrade")
diff -urN anaconda-7.1/libfdisk/pyfsedit.c anaconda-7.1-xfs/libfdisk/pyfsedit.c
--- anaconda-7.1/libfdisk/pyfsedit.c	Fri Jun  1 14:52:46 2001
+++ anaconda-7.1-xfs/libfdisk/pyfsedit.c	Mon Dec  3 16:25:42 2001
@@ -317,7 +317,7 @@
 	    if (o->context->raid[i].parttype == LINUX_SWAP_PARTITION)
 		raidType = "swap";
 	    else
-		raidType = "ext2";
+		raidType = "xfs";
 
 	    PyList_Append(raidList, Py_BuildValue("(sssiiiO)",
 		    o->context->raid[i].mntpt, o->context->raid[i].device,
@@ -351,7 +351,7 @@
     for (i = 0; i < o->context->fstab.numEntries; i++) {
 	switch (o->context->fstab.entries[i].type) {
 	case PART_EXT2:
-	    fsystem = "ext2";
+	    fsystem = "xfs";
 	    break;
 	case PART_SWAP:
 	    fsystem = "swap";
diff -urN anaconda-7.1/lilo.py anaconda-7.1-xfs/lilo.py
--- anaconda-7.1/lilo.py	Thu Mar 29 17:28:08 2001
+++ anaconda-7.1-xfs/lilo.py	Mon Dec  3 16:25:42 2001
@@ -252,7 +252,7 @@
                                     "-f",
                                     initrd,
                                     kernelTag[1:] ],
-                                  stdout = None, stderr = None, searchPath = 1,
+                                  stdout = '/dev/tty5', stderr = '/dev/tty5', searchPath = 1,
                                   root = instRoot)
 	    self.initrdsMade[kernelTag] = 1
 	return initrd
@@ -406,6 +406,7 @@
 	    sl.addEntry("label", label)
 	    if os.access (instRoot + initrd, os.R_OK):
 		sl.addEntry("initrd", initrd)
+		self.liloAppend = 'ramdisk_size=2500'
 
 	    sl.addEntry("read-only")
 	    sl.addEntry("root", '/dev/' + rootDev)
diff -urN anaconda-7.1/loader/loader.c anaconda-7.1-xfs/loader/loader.c
--- anaconda-7.1/loader/loader.c	Tue May  1 17:56:14 2001
+++ anaconda-7.1-xfs/loader/loader.c	Mon Dec  3 16:25:42 2001
@@ -2783,6 +2783,7 @@
     mlLoadModule("msdos", NULL, modLoaded, modDeps, NULL, modInfo, flags);
     mlLoadModule("vfat", NULL, modLoaded, modDeps, NULL, modInfo, flags);
     mlLoadModule("ext3", NULL, modLoaded, modDeps, NULL, modInfo, flags);
+    mlLoadModule("xfs", NULL, modLoaded, modDeps, NULL, modInfo, flags);
 
     usbInitializeMouse(modLoaded, modDeps, modInfo, flags);
 
diff -urN anaconda-7.1/pixmaps/Makefile anaconda-7.1-xfs/pixmaps/Makefile
--- anaconda-7.1/pixmaps/Makefile	Tue May  1 13:51:37 2001
+++ anaconda-7.1-xfs/pixmaps/Makefile	Mon Dec  3 16:25:42 2001
@@ -8,6 +8,9 @@
 install: 
 	mkdir -p $(DESTDIR)/$(ANACONDADATADIR)/pixmaps
 	install *.png $(DESTDIR)/$(ANACONDADATADIR)/pixmaps
+	
+	mkdir -p $(DESTDIR)/$(ANACONDADATADIR)/pixmaps/sginotes
+	install sginotes/*.png $(DESTDIR)/$(ANACONDADATADIR)/pixmaps/sginotes
 
 	for i in $(RNOTES_LANGS); do \
 	  mkdir -p $(DESTDIR)/$(ANACONDADATADIR)/pixmaps/rnotes/$$i; \
diff -urN anaconda-7.1/scripts/buildinstall anaconda-7.1-xfs/scripts/buildinstall
--- anaconda-7.1/scripts/buildinstall	Fri Dec  8 16:44:23 2000
+++ anaconda-7.1-xfs/scripts/buildinstall	Mon Dec  3 16:25:42 2001
@@ -88,4 +88,4 @@
 fi
 
 rm -rf $BUILDINSTDIR
-rm -rf $p/image-template $p/RedHat/instimage
+rm -rf $p/image-template
diff -urN anaconda-7.1/scripts/mk-images anaconda-7.1-xfs/scripts/mk-images
--- anaconda-7.1/scripts/mk-images	Fri Apr 20 19:48:13 2001
+++ anaconda-7.1-xfs/scripts/mk-images	Mon Dec  3 16:25:42 2001
@@ -675,8 +675,9 @@
         echo y | mke2fs $mmi_tmpimage > /dev/null 
         mount -o loop $mmi_tmpimage $mmi_mntpoint
 
-        (cd $IMGPATH; find . | fgrep -v "./usr/lib/anaconda-runtime" |
-	        cpio -H crc -o) | (cd $mmi_mntpoint; cpio -iumd)
+#        (cd $IMGPATH; find . | fgrep -v "./usr/lib/anaconda-runtime" |
+#	        cpio -H crc -o) | (cd $mmi_mntpoint; cpio -iumd)
+		rsync --exclude anaconda-runtime -a $IMGPATH/ $mmi_mntpoint/
         umount $mmi_mntpoint
         rmdir $mmi_mntpoint
     elif [ $type = "cramfs" ]; then
@@ -774,10 +775,11 @@
     version=$(rpm --qf '%{VERSION}-%{RELEASE}' -qp $kpackage)${vertag}
 
     rpm2cpio $kpackage | (cd $KERNELROOT; cpio --quiet -iumd)
+    find  $KERNELROOT/lib/modules -name \*.o -print | xargs strip --strip-unneeded
     if [ ! -z $ppackage ]; then 
 	rpm2cpio $ppackage | (cd $KERNELROOT; cpio --quiet -iumd etc/pcmcia/* ./etc/pcmcia/*)
     fi
-
+   
     if [ ! -d "$KERNELROOT/lib/modules/$version" ]; then
 	echo "$1 is not a valid modules directory" 2>&1
 	usage
diff -urN anaconda-7.1/scripts/mk-images.i386 anaconda-7.1-xfs/scripts/mk-images.i386
--- anaconda-7.1/scripts/mk-images.i386	Fri Mar 23 15:04:23 2001
+++ anaconda-7.1-xfs/scripts/mk-images.i386	Mon Dec  3 16:25:42 2001
@@ -47,9 +47,10 @@
 USBMODS="usb-ohci usb-uhci hid keybdev"
 LATEUSBMODS="mousedev"
 IDEMODS="ide-cd"
+#IDEMODS=""
 SCSIMODS="sd_mod sr_mod"
 
-SECSTAGE="msdos vfat raid0 raid1 raid5 $IDEMODS $SCSIMODS $LATEUSBMODS"
+SECSTAGE="xfs msdos vfat raid0 raid1 raid5 $IDEMODS $SCSIMODS $LATEUSBMODS"
 
 COMMONMODULES="vfat $USBMODS agpgart"
 LOCALMODULES="$COMMONMODULES BusLogic aic7xxx megaraid ncr53c8xx 
@@ -188,6 +189,7 @@
 
 makemainmodules "=scsi =net $SECSTAGE"
 
-makeinstimage --size1 3300 --size2 4608 "netstg" "=scsi $SECSTAGE"
-makeinstimage --size1 3300 --size2 4608 "hdstg" "=net $SECSTAGE"
+makeinstimage --size1 5000 --size2 8192 "netstg" "=scsi $SECSTAGE"
+makeinstimage --size1 5000 --size2 8192 "hdstg" "=net $SECSTAGE"
 makemainimage "stage2" "ext2"
+
diff -urN anaconda-7.1/scripts/upd-instroot anaconda-7.1-xfs/scripts/upd-instroot
--- anaconda-7.1/scripts/upd-instroot	Wed May 30 14:15:36 2001
+++ anaconda-7.1-xfs/scripts/upd-instroot	Mon Dec  3 16:25:42 2001
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/bash 
 
 ORIGDIR=`pwd`
 
@@ -58,14 +58,15 @@
     RPMS=$1
     PKGDEST=$2
     KEEPFILES=$3
-
+    
     for n in $RPMS; do 
-	echo -ne "\rExpanding packages..." $(basename $n)
+#	echo -e "\rExpanding packages..." $(basename $n)
+	echo  "Expanding packages..." $(basename $n)
 	if [ $(rpm -qp --qf '%{NAME}' $n) = "glibc-common" ] ; then
 	    GLIBC=$n
 	fi 
 	rpm2cpio $n | (cd $PKGDEST; cpio -E $KEEPFILES --quiet -iumd)
-	echo -ne "\rExpanding packages..." "$(basename $n | sed 's/./ /g')"
+	#echo -e "\rExpanding packages..." "$(basename $n | sed 's/./ /g')"
     done
 }
 
@@ -88,7 +89,7 @@
 PACKAGES="glibc glibc-common setup openssl python newt libtermcap zlib
 	 ash kon2 e2fsprogs util-linux raidtools popt mount procps rpm
 	 XFree86 Xconfigurator anaconda anaconda-runtime kudzu-devel
-	 kudzu db3 rpm-python bzip2 dosfstools pciutils reiserfs-utils"
+	 kudzu db3 rpm-python bzip2 dosfstools pciutils xfsprogs reiserfs-utils "
 
 if [ $ARCH = i386 ]; then
     PACKAGES="$PACKAGES kernel-pcmcia-cs"
@@ -114,7 +115,7 @@
            XFree86-cyrillic-fonts XFree86 Xconfigurator pygnome pygtk
            pygtk-libglade pygnome-libglade pygnome-applet
            pygnome-capplet gdk-pixbuf XFree86-KOI8-R
-           XFree86-KOI8-R-75dpi-fonts pciutils pam reiserfs-utils"
+           XFree86-KOI8-R-75dpi-fonts pciutils pam xfsprogs reiserfs-utils "
 
 if [ -z "$NEEDGR" ]; then
     PACKAGESGR="bash"
@@ -187,6 +188,7 @@
 sbin/hwclock
 sbin/ldconfig
 sbin/mkdosfs
+sbin/mkfs.xfs
 sbin/mke2fs
 sbin/mkfs.ext2
 sbin/mkfs.msdos
@@ -277,6 +279,9 @@
 sbin/fsck
 sbin/fsck.ext2
 sbin/fsck.ext3
+sbin/xfs_repair
+usr/sbin/xfs_db
+usr/sbin/xfs_check
 sbin/ifconfig
 sbin/insmod
 sbin/lsmod
@@ -471,7 +476,7 @@
    mv -f $file- $file
 done
 
-echo -n "Expanding packages..."
+#echo -n "Expanding packages..."
 expandPackageSet "$RPMS" $DEST $KEEPFILE
 
 (cd $DEST; tar cSpf - .) | (cd $DESTGR; tar xSpf -)
diff -urN anaconda-7.1/scripts/upd-modules anaconda-7.1-xfs/scripts/upd-modules
--- anaconda-7.1/scripts/upd-modules	Sun Nov 26 19:51:00 2000
+++ anaconda-7.1-xfs/scripts/upd-modules	Mon Dec  3 16:25:42 2001
@@ -86,7 +86,9 @@
 version=$(rpm --qf '%{VERSION}-%{RELEASE}' -qp $kpackage)BOOT
 
 rpm2cpio $kpackage | (cd $KERNELROOT; cpio --quiet -iumd)
+find  $KERNELROOT/lib/modules -name \*.o -print | xargs strip --strip-unneeded
 rpm2cpio $ppackage | (cd $KERNELROOT; cpio --quiet -iumd etc/pcmcia/* ./etc/pcmcia/*)
+
 
 if [ ! -d "$KERNELROOT/lib/modules/$version/scsi" ]; then
     echo "$1 is not a valid modules directory" 2>&1
diff -urN anaconda-7.1/text-help/C/s1-help-screens-formatwhat.txt anaconda-7.1-xfs/text-help/C/s1-help-screens-formatwhat.txt
--- anaconda-7.1/text-help/C/s1-help-screens-formatwhat.txt	Tue Mar 20 11:01:54 2001
+++ anaconda-7.1-xfs/text-help/C/s1-help-screens-formatwhat.txt	Mon Dec  3 16:25:42 2001
@@ -7,6 +7,9 @@
    Partitions such as /home or /usr/local must not be
    formatted if they contain data you wish to keep.
 
+   Select Use XFS Filesystem to use SGI's XFS
+   filesystem for these partitions.
+
    Select Check for bad blocks during format to help
    prevent data loss by finding the bad blocks on a
    drive. The installation program will make a list
diff -urN anaconda-7.1/text-help/C/s1-help-screens-installpath.txt anaconda-7.1-xfs/text-help/C/s1-help-screens-installpath.txt
--- anaconda-7.1/text-help/C/s1-help-screens-installpath.txt	Tue Mar 20 11:01:54 2001
+++ anaconda-7.1-xfs/text-help/C/s1-help-screens-installpath.txt	Mon Dec  3 16:25:42 2001
@@ -4,4 +4,6 @@
    Using the Up and Down arrow keys, select the type
    installation you will use. For instance, if you
    are installing a typical, desktop system, choose
-   Workstation.
+   Workstation.  All types default to XFS filesystems,
+   except for "Custom."
+
diff -urN anaconda-7.1/text-help/C/s1-help-screens-welcome.txt anaconda-7.1-xfs/text-help/C/s1-help-screens-welcome.txt
--- anaconda-7.1/text-help/C/s1-help-screens-welcome.txt	Tue Mar 20 11:01:54 2001
+++ anaconda-7.1-xfs/text-help/C/s1-help-screens-welcome.txt	Mon Dec  3 16:25:42 2001
@@ -1,6 +1,13 @@
 
 Welcome to Red Hat Linux
 
+   This is a MODIFIED version of the Red Hat
+   installer which includes support for the XFS
+   filesystem from SGI. Please do not direct
+   questions about XFS to Red Hat Inc. - informatino
+   about XFS can be found at
+   http://oss.sgi.com/projects/xfs
+
    Welcome! This installation process is outlined in
    detail in the Red Hat Linux Reference Guide
    available from Red Hat, Inc. on the Documentation
diff -urN anaconda-7.1/text-help/text-help-C.sgml anaconda-7.1-xfs/text-help/text-help-C.sgml
--- anaconda-7.1/text-help/text-help-C.sgml	Tue Mar 20 10:38:18 2001
+++ anaconda-7.1-xfs/text-help/text-help-C.sgml	Mon Dec  3 16:25:42 2001
@@ -140,6 +140,13 @@
  <sect1 id="s1-help-screens-welcome">
       <title>Welcome to &RHL;</title>
       <para>
+	This is a MODIFIED version of the Red Hat
+	installer which includes support for the XFS filesystem
+	from SGI.  Please do not direct questions about XFS
+	to Red Hat Inc. - informatino about XFS can be found
+	at http://oss.sgi.com/projects/xfs
+</para>
+      <para>
 Welcome! This installation process is outlined in detail in the
 <citetitle>&RHLRGS;</citetitle> available from &RHI; on the Documentation
 CD. Please read through the guide before you being the installation process.
@@ -805,6 +812,10 @@
       <para>
 Partitions such as <filename>/home</filename> or <filename>/usr/local</filename>
 must not be formatted if they contain data you wish to keep.
+</para>
+      <para>
+Select <guilabel>Use XFS Filesystem</guilabel> to use SGI's XFS filesystem for
+these partitions.
 </para>
       <para>
 Select <guilabel>Check for bad blocks during format</guilabel> to help prevent
diff -urN anaconda-7.1/text.py anaconda-7.1-xfs/text.py
--- anaconda-7.1/text.py	Mon Apr  2 18:50:28 2001
+++ anaconda-7.1-xfs/text.py	Mon Dec  3 16:25:42 2001
@@ -46,6 +46,27 @@
 
 import installclass
 
+class SGIWelcomeWindow:
+    def __call__(self, screen):
+        rc = ButtonChoiceWindow(screen, ("SGI XFS"),
+		("Unofficial SGI Installer with XFS version 1.0.2!\n\n"
+		"For information on the XFS filesystem "
+		"please see http://oss.sgi.com/projects/xfs\n\n"
+		"Official Red Hat 7.1 CDs are needed "
+		"to complete this installation.\n\n"
+		"This installer is not a product of Red Hat\n"
+		"Please DO NOT report problems with this installer "
+		"to Red Hat.\n\n"
+		"Red HatŪ is a registered trademark of Red Hat, Inc. "),
+
+        buttons = [_("OK"), _("Cancel")], width = 50)
+
+        if rc == string.lower(_("Cancel")):
+            screen.finish()
+            os._exit(0)
+
+        return INSTALL_OK
+
 class LanguageWindow:
     def __call__(self, screen, todo, textInterface):
         languages = todo.instTimeLanguage.available ()
@@ -945,6 +966,8 @@
 
         if todo.reconfigOnly:
             self.commonSteps = [
+                [("XFS Filesystem from SGI"), SGIWelcomeWindow,
+                 (self.screen,), "sgiwelcome"],
                 [N_("Welcome"), ReconfigWelcomeWindow, 
                  (self.screen,), "reconfig" ],
                 [N_("Keyboard Selection"), KeyboardWindow, 
@@ -970,11 +993,13 @@
                 ]
         else:
             self.commonSteps = [
+                [("XFS Filesystem from SGI"), SGIWelcomeWindow,
+                 (self.screen,), "sgiwelcome"],
                 [N_("Language Selection"), LanguageWindow, 
                  (self.screen, todo, self), "language" ],
                 [N_("Keyboard Selection"), KeyboardWindow, 
                  (self.screen, todo), "keyboard" ],
-                [N_("Welcome"), WelcomeWindow, (self.screen,), "welcome" ],
+#                [N_("Welcome"), WelcomeWindow, (self.screen,), "welcome" ],
                 [N_("Installation Type"), InstallPathWindow, 
                  (self.screen, todo, self), "installtype" ],
                 ]
diff -urN anaconda-7.1/textw/lilo_text.py anaconda-7.1-xfs/textw/lilo_text.py
--- anaconda-7.1/textw/lilo_text.py	Mon Apr  2 18:52:11 2001
+++ anaconda-7.1-xfs/textw/lilo_text.py	Mon Dec  3 16:25:42 2001
@@ -98,11 +98,20 @@
 	    default = 1
 	else:
 	    default = 0
-            
+
+        for (mntpoint, partition, fsystem, doFormat, size) in \
+            todo.fstab.mountList():
+                if partition == bootpart:
+                        bootFs = fsystem
+ 
         format = "/dev/%-11s %s" 
         locations = []
         locations.append (format % (boothd, _("Master Boot Record (MBR)")))
-        locations.append (format % (bootpart, _("First sector of boot partition")))
+
+	if bootFs != "xfs":
+	        locations.append (format % (bootpart, _("First sector of boot partition")))
+	else:
+		locations.append (format % (bootpart, "(Can't install LILO on first sector of XFS boot partition)"))
 
         (rc, sel) = ListboxChoiceWindow (screen, _("LILO Configuration"),
                                          _("Where do you want to install the bootloader?"),
@@ -110,7 +119,7 @@
                                          buttons = [ _("OK"), _("Back") ],
 					 help = "lilolocation")
 
-        if sel == 0:
+        if sel == 0 or bootFs == "xfs":
             todo.lilo.setDevice("mbr")
         else:
             todo.lilo.setDevice("partition")
diff -urN anaconda-7.1/textw/partitioning_text.py anaconda-7.1-xfs/textw/partitioning_text.py
--- anaconda-7.1/textw/partitioning_text.py	Fri Mar 30 12:30:24 2001
+++ anaconda-7.1-xfs/textw/partitioning_text.py	Mon Dec  3 16:25:42 2001
@@ -243,8 +243,9 @@
                                 "previous install."))
 
 	mounts = todo.fstab.formattablePartitions()
-        height = min (screen.height - 12, len (mounts))
-        
+        height = min (screen.height - 13, len (mounts))
+       
+#      ## Hm, these 2 checkboxtrees really should scroll together... 
         ct = CheckboxTree(height = height, scroll = 1)
 
 	gotOne = 0
@@ -254,15 +255,25 @@
 
 	if not gotOne: return INSTALL_NOOP
 
-        cb = Checkbox (_("Check for bad blocks during format"),
+        ct2 = CheckboxTree(height = height, scroll = 1)
+
+        for (mount, dev, fstype, format, size) in mounts:
+            ct2.append("Use XFS Filesystem", dev, (fstype == "xfs"))
+
+        cb = Checkbox (_("Check ext2 partitions for bad blocks during format"),
 			todo.fstab.getBadBlockCheck())
 
         bb = ButtonBar (screen, ((_("OK"), "ok"), (_("Back"), "back")))
 
         g = GridFormHelp (screen, _("Choose Partitions to Format"), 
 			 "formatwhat", 1, 4)
+
+        g2 = Grid (2, 1)
+        g2.setField (ct,  0, 0, anchorLeft = 1)
+        g2.setField (ct2, 1, 0, anchorLeft = 1)
+
         g.add (tb, 0, 0, (0, 0, 0, 1))
-        g.add (ct, 0, 1)
+        g.add (g2, 0, 1)
         g.add (cb, 0, 2, (0, 1, 0, 1))
         g.add (bb, 0, 3, growx = 1)
 
@@ -281,8 +292,14 @@
 	    for dev in ct.getSelection():
 		todo.fstab.setFormatFilesystem(dev, 1)
 
-	    todo.fstab.setBadBlockCheck(cb.selected ())
+            for (mount, dev, fstype, format, size) in mounts:
+		todo.fstab.setFsType(dev, "ext2")
+			
+            for dev in ct2.getSelection():
+	   	todo.fstab.setFsType(dev, "xfs")
 
+	    todo.fstab.setBadBlockCheck(cb.selected ())
+		
 	    rc = todo.fstab.checkFormatting(todo.intf.messageWindow)
 
 	    if not rc:
@@ -291,6 +308,7 @@
 	screen.popWindow()
 
         return INSTALL_OK
+
 
 class LoopSizeWindow:
 
diff -urN anaconda-7.1/todo.py anaconda-7.1-xfs/todo.py
--- anaconda-7.1/todo.py	Wed May 30 12:36:58 2001
+++ anaconda-7.1-xfs/todo.py	Mon Dec  3 16:25:42 2001
@@ -1114,8 +1114,9 @@
 
 		    if conflicts:
 			log ("%s-%s-%s conflicts with to-be-installed "
-                             "package %s-%s, removing from set",
-                             name, version, release, reqname, reqversion)
+                             "package %s-%s, removing %s from set",
+                             name, version, release, reqname, reqversion,
+			     reqname)
 			if self.hdList.packages.has_key (reqname):
 			    self.hdList.packages[reqname].selected = 0
 			    log ("... removed")
diff -urN anaconda-7.1/upgrade.py anaconda-7.1-xfs/upgrade.py
--- anaconda-7.1/upgrade.py	Tue May  1 17:56:13 2001
+++ anaconda-7.1-xfs/upgrade.py	Mon Dec  3 16:33:18 2001
@@ -19,7 +19,7 @@
     for dev in mdList:
 	if fstab.isValidExt2 (dev):
 	    try:
-		isys.mount(dev, '/mnt/sysimage', readOnly = 1)
+		isys.mount(dev, '/mnt/sysimage', fstype="ext2", readOnly = 1)
 	    except SystemError, (errno, msg):
 		intf.messageWindow(_("Error"),
 					_("Error mounting ext2 filesystem on %s: %s") % (dev, msg))
@@ -28,6 +28,17 @@
 		rootparts.append ((dev, "ext2"))
 	    isys.umount('/mnt/sysimage')
 
+	elif fstab.isValidXFS (dev):
+	    try:
+		isys.mount(dev, '/mnt/sysimage', fstype="xfs", readOnly = 1)
+	    except SystemError, (errno, msg):
+		intf.messageWindow(_("Error"),
+					_("Error mounting XFS filesystem on %s: %s") % (dev, msg))
+		continue
+	    if os.access ('/mnt/sysimage/etc/fstab', os.R_OK):
+		rootparts.append ((dev, "xfs"))
+	    isys.umount('/mnt/sysimage')
+
     raid.stopAllRaid(mdList)
     
     for drive in drives:
@@ -46,14 +57,23 @@
 			dev = drive + 'p' + str (i + 1)
 		    else:
 			dev = drive + str (i + 1)
+ 			
+ 		    # Figure out what FS we really have...
+ 		    if fstab.isValidExt2 (dev):
+ 		        fsystem = "ext2"
+ 			log ("fsystem is %s" % fsystem)
+ 		    elif fstab.isValidXFS (dev):
+ 		        fsystem = "xfs"
+ 			log ("fsystem is %s" % fsystem) 			
 		    try:
-			isys.mount(dev, '/mnt/sysimage')
+ 			isys.mount(dev, '/mnt/sysimage', fstype = fsystem)
+
 		    except SystemError, (errno, msg):
 			#intf.messageWindow(_("Error"),
 			#			_("Error mounting ext2 filesystem on %s: %s") % (dev, msg))
 			continue
 		    if os.access ('/mnt/sysimage/etc/fstab', os.R_OK):
-			rootparts.append ((dev, "ext2"))
+ 			rootparts.append ((dev, fsystem))
 		    isys.umount('/mnt/sysimage')
 		elif size and type == _balkan.DOS:
 		    dev = drive + str (i + 1)
@@ -83,7 +103,7 @@
     if rootFs == "vfat":
 	fstab.mountLoopbackRoot(root)
     else:
-	isys.mount(root, '/mnt/sysimage')
+	isys.mount(root, '/mnt/sysimage', fstype=rootFs)
 
     fstab.readFstab(instPath + '/etc/fstab', theFstab)
 
@@ -136,7 +156,7 @@
     else:
 	for info in fstab.mountList():
 	    (mntpoint, partition, fsystem) = info[0:3]
-	    if fsystem == "ext2":
+	    if fsystem == "ext2" or fsystem == "xfs":
 		space = isys.pathSpaceAvailable(instPath + mntpoint)
 		info = (mntpoint, partition, space)
 		fsList.append(info)
