[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: How to run shell script from anaconda



On Thu, 7 Nov 2002, Alisha Nigam wrote:

> hi 
> 
>      During installation of RedHat-7.2 before disk
> partioning  i want to incorporate a program that 
> will ask user to insert a floppy & the will copy 
> some user given files to the floppy.

I wrote some code which would do something really similar to this.  What I 
ended up doing was creating a new window class which prompts for a floppy 
disk.  Call this something like "floppycopy_[text|gui].py" (I've only done 
this with text mode, but I'm certain doing it for the gui would be really 
similar).

.......

import os
import sys
import string
import isys

from snack import *
from constants_text import *
from translate import _
import iutil
import network


class FloppyDiskWindow:
    def __call__ (self, screen, intf, id):

        device = id.floppyDevice
        file = "/tmp/floppy"

        isys.makeDevInode(device, file)

        while 1:

            rc = ButtonChoiceWindow(screen, _("Floppy Disk Copy"),
                                _("Please insert a blank floppy diskette "
                                  "into the floppy disk drive."),
                                buttons = [TEXT_OK_BUTTON], width = 50,
                                help = "welcome")

            try:
                fd = os.open(file, os.O_RDONLY)
            except:
                intf.messageWindow( _("Error"),
                    _("An error occured while creating the floppy disk. "
		      "Please make sure that there is a formatted floppy "
		      "in the first floppy drive."))
                continue

            os.close(fd)

            args = [ 'mkdosfs', '/tmp/floppy' ]
            cmd = "/usr/sbin/mkdosfs"

            if os.access("/sbin/mkdosfs", os.X_OK):
                cmd = "/sbin/mkdosfs"

            iutil.execWithRedirect (cmd, args, stdout = '/dev/tty5',
                                stderr = '/dev/tty5')

            isys.mount(device, "/tmp/crash", fstype = "vfat")

            try:
                iutil.copyFile("/tmp/filetocopy",
                    "/tmp/crash/filetocopy")
            except:
                pass

            isys.umount("/tmp/crash")

            return INSTALL_OK


......

Next you need to need to 'register' the class by making an entry in the 
stepToClasses{} (which is in text.py for doing this in text mode).  It  
should be something similar to:

stepToClasses = {
    "floppycopy" : ("floppycopy_text", "FloppyDiskWindow"),
    ...
}

The 'floppycopy' key is going to point at your new class 
"FloppyDiskWindow" inside the file 'floppycopy_text.py'.

Now you need to edit dispatch.py and set up which arguments are going to 
be sent to your new class.  Add another entry to installSteps[] with 
something like:

installSteps = [
    ("floppycopy", ("intf", "id")),
    ...
]

If you look back at the FloppyDiskWindow class, we're expecting to get 
"intf" and "id" passed as arguments.

The only thing left is we need to put our new step "floppycopy" into the 
StepList in the install class.  Edit the file 'installclass.py', and add 
the entry "floppycopy" into the setStepList() class in setSteps.  This 
should look something like:

    def setSteps(self, dispatch):
        dispatch.setStepList(
                 "language",
                 "keyboard",
                 "mouse",
                 "welcome",
                 "installtype",
		 "floppycopy",
		 ...


That's all there is to it.  You might want to change the window screen to 
allow you to skip writing the floppy ever time though, as well as adding a 
"Back" button to it.  Hope it helps..

--Patrick.








[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]