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 Hat09 Linux 7.1!07 + SGI XFS 1.0.2 for 0cRed Hat09 Linux 7.1!07 - - To install or upgrade 0cRed Hat07 Linux in graphical mode, - press the 0f07 key. + - To install or upgrade XFS for 0cRed Hat07 Linux in + graphical mode, press the 0f07 key. - - To install or upgrade 0cRed Hat07 Linux in text mode, type: 0ftext 07. + - To install or upgrade in text mode, type: 0ftext 07. - To enable low resolution mode, type: 0flowres 07. Press 0507 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.

Do you want to use the XFS Filesystem? +

SGI's XFS Filesystem is a high-performance, scalable, + journaling filesystem. +

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.

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.

For more information concerning the differences among workstation-, @@ -131,4 +132,4 @@ > \ 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

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 +

This installation process is outlined in detail in the Red Hat Linux Installation Guide \ 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 @@ Welcome to Red Hat Linux - 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 + + + This installation process is outlined in detail in the &RHLIG; available from &RHI;. Please read through the entire manual before you begin this installation process. @@ -396,9 +403,13 @@ automatic partitioning. + Are you sure? + + By selecting automatic partitioning, you will not have to use the Disk Druid or fdisk partitioning tools to assign mount points or allocate space for your installation. + Are you sure? 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. + + + Do you want to use the XFS Filesystem? + + + SGI's XFS Filesystem is a high-performance, scalable, + journaling filesystem. 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 @@ Welcome to &RHL; + 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 &RHLRGS; available from &RHI; on the Documentation CD. Please read through the guide before you being the installation process. @@ -805,6 +812,10 @@ 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 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)