Here are the scripts to copy/install 3003 distribution.

Steve Roseman lusgr at vax1.cc.lehigh.edu
Sat Mar 9 01:36:06 AEST 1991


> 
> Is there any interest in my posting scripts and a program to: copy AIX update
> tapes (and floppys) to disk and back (to make backups), and to read the
> Table-Of-Contents file from an update tape and 1) make a script to rename the
> above disk files to real names, and 2) produce a instupdt script to install
> the products?
> 

I guess 5 requests before 10 AM imply interest.  Here's the program and
scripts.  Corrections, comments, and improvements welcome.  Please no
complaints about coding style, I'm a transplanted VMS and fortran programmer
who hasn't learn all of the fancy C and shell script stuff yet...

Steve

-------------------------------------------------------------------------
Steve Roseman 
Lehigh University Computing Center 
LUSGR at VAX1.CC.Lehigh.EDU
 

# This is a shell archive.  Remove anything before this line,
# then unpack it by saving it in a file and typing "sh file".
#
# Wrapped by lusgr on Fri Mar 08 10:02:27 EST 1991
# Contents:  README.movef movef.c t2d d2t f2d d2f
 
echo x - README.movef
sed 's/^@//' > "README.movef" <<'@//E*O*F README.movef//'

How to use:

	1) find a directory with lots of free space (currently ~150MB)
	2) copy the first distribution tape with the command 
		t2d somename_
	   (that's 1 underline character)
	   and the second tape with
	        t2d somename__
	   (that's 2 underline characters)
	3) back up the files to 2 new tapes using the commands
	  	d2t somename_       and       d2t somename__

	(the above can be used to backup up any distribution tapes, the 
	following is for AIX updates.)

	4) run this program
		movef somename
	   it will read somename_3 and build 2 files, MOVEF.sh and 
	   MOVEF_INST.sh.  Executing the first will cause the somename_ and
	   somename__ files to be renamed to more meaningful names, like
	   bos.obj, etc.
	5) MOVEF_INST.sh contains commands to update the system with everything
	   available.  Edit out whatever you don't want.  For 3003 and the
	   files on a local disk, I just removed the first 2 (info) updates.
	6) Point, via symbolic link or nfs mount, /usr/lpp.install to the
	   directory containing the files, and run MOVEF_INST.sh (of course
	   after doing all of the other stuff in the installation notes!!!)

	   Note:  I haven't yet done an install across a network.  I suppose
	   you can copy the bosnet updates to a local /usr/lpp.install, install
	   everything except bosnet with nfs up, shut down nfs, and install
	   bosnet. Caveat installer!


	Good luck, and suggestions welcome.

	Steve Roseman
	Lehigh University Computing Center
        lusgr at chili.cc.lehigh.edu
	03/08/91
@//E*O*F README.movef//
chmod u=rw,g=r,o=r README.movef
 
echo x - movef.c
sed 's/^@//' > "movef.c" <<'@//E*O*F movef.c//'
/*	rename installation files from TOC file

	movef prefix

	Writes 'MOVEF.sh', and 'MOVEF_INST.sh'

	Steve Roseman
	Lehigh University Computing Center
        lusgr at chili.cc.lehigh.edu
	03/08/91

*/

#include <stdio.h>

main(argc, argv)
     int argc;
     char *argv[];

{
  FILE
    *outfile, 
    *outfile_inst,
    *TOC;

  char
    fnbuf[80],
    full_name[80],
    file_no[10],
    inline[1024],
    skip,
    *colon, *lbrk, *per1, *perl;

  int
    i, tape_no;

  if (argc != 2) {
    printf("Usage: movef prefix\n");
    exit(1);
  }

  sprintf(fnbuf, "%s_3", argv[1]);
  if ((TOC = fopen(fnbuf, "r")) == 0) {
    printf("Cannot open TOC file %s.\n", fnbuf);
    exit(1);
  }
  
  if ((outfile = fopen("MOVEF.sh", "w")) == 0) {
    printf("Cannot output output file 'MOVEF.sh'.\n");
    exit(1);
  }
  chmod("MOVEF.sh", 0755);

  if ((outfile_inst = fopen("MOVEF_INST.sh", "w")) == 0) {
    printf("Cannot output output file 'MOVEF_INST.sh'.\n");
    exit(1);
  }
  chmod("MOVEF_INST.sh", 0755);


/*	Got the files output, now loop through the TOC file to get the file
	names of each product.
*/

  while (fgets(inline, 1000, TOC) != EOF) {
    if (strlen(inline) == 0) break;
    if ((colon = strchr(inline, ':')) == NULL) continue;
    if ((lbrk = strchr(inline, '{')) == NULL) continue;

    sscanf(inline, "%d%c%s", &tape_no, &skip, file_no);

/*	We got the tape number and file number.  Next, get the product
	name.
*/
    if (fgets(inline, 1000, TOC) == EOF) break;
    if (strlen(inline) == 0) break;
    sscanf(inline, "%s", full_name);

    if ((per1 = strchr(full_name, '.')) == NULL) {
      strcpy(fnbuf, full_name);
    } else {      
      perl = per1;
      while (strchr(perl+1, '.')) {
	perl = strchr(perl+1, '.');
      }
      *per1 = '\0';
      strcpy(fnbuf, full_name);
      *per1 = '.';
      strcat(fnbuf, perl);
    }

/*	Finally, build and output the 'mv' and the 'instupdt' commands.
*/
    sprintf(inline, "mv %s", argv[1]);
    for (i=0 ; i<tape_no ; i++) 
      strcat(inline, "_");
    strcat(inline, file_no);
    strcat(inline, " ");
    strcat(inline, fnbuf);
    fprintf(outfile, "%s\n", inline);

    fprintf(outfile_inst, "instupdt 2>>/tmp/dlw.log -acq -d '/usr/lpp.install/%s' '-v' '-X' '-F' all\n", fnbuf);

/*	Skip until } found.
*/
    do {
      if (fgets(inline, 1000, TOC) == EOF) break;
      if (strlen(inline) == 0) break;
    } while (inline[0] != '}');

  }
}
@//E*O*F movef.c//
chmod u=rw,g=r,o=r movef.c
 
echo x - t2d
sed 's/^@//' > "t2d" <<'@//E*O*F t2d//'
#!/bin/ksh
#
#	Copy files * from tape to disk (where * is $1 + sequential number
#	1, 2, ..) until a zero-length file is reached.
#
#	Usage: t2d prefix
#
file=1
loop=1
if [ $# -gt 0 ]
then
  prefix=$1
else
  prefix='f_'
fi

tctl rewind
while [ loop -ne 0 ]
do
  file_name=$prefix"$file"
  echo Copying $file_name
  dd of=$file_name if=/dev/rmt0.1 bs=51200
  ls -l $file_name
	
  if [ -s $file_name ]
  then
    let file=$file+1
  else
    rm $file_name
    echo done
    tctl rewind &
    loop=0
  fi
done
@//E*O*F t2d//
chmod u=rwx,g=rx,o=rx t2d
 
echo x - d2t
sed 's/^@//' > "d2t" <<'@//E*O*F d2t//'
#!/bin/ksh
#
#	Copy files * from disk to tape (where * is $1 + sequential number
#	1, 2, ..)
#
#	Usage: d2t prefix
#
file=1
loop=1
if [ $# -gt 0 ]
then
  prefix=$1
else
  prefix='f_'
fi

while [ loop -ne 0 ]
do
  file_name=$prefix"$file"
  if [ -s $file_name ]
  then
    echo Copying $file_name
    dd if=$file_name of=/dev/rmt0.1 bs=5120
    let file=$file+1
  else
    echo done
    tctl rewind &
    loop=0
  fi
done
@//E*O*F d2t//
chmod u=rwx,g=rx,o=rx d2t
 
echo x - f2d
sed 's/^@//' > "f2d" <<'@//E*O*F f2d//'
#!/bin/ksh
#
#	Copy floppys to disk files name* (where * is $1 + sequential number
#	1, 2, ..)  Keeps requesting floppies until ^C entered.
#
#	Usage: f2d prefix
#
file=1
loop=1
if [ $# -gt 0 ]
then
  prefix=$1
else
  prefix='f_'
fi

while [ loop -ne 0 ]
do
  file_name=$prefix"$file"
  echo
  echo Insert source floppy $file and press Enter, or ^C
  read a
  echo Copying $file_name
  dd if=/dev/fd0 of=$file_name bs=90k
  ls -l $file_name
  let file=$file+1
done
@//E*O*F f2d//
chmod u=rwx,g=rx,o=rx f2d
 
echo x - d2f
sed 's/^@//' > "d2f" <<'@//E*O*F d2f//'
#!/bin/ksh
#
#	Copy floppy image files * from disk to floppy (where * is $1 +
#	 sequential number 1, 2, ..)
#
#	Usage: d2f prefix
#
file=1
loop=1
if [ $# -gt 0 ]
then
  prefix=$1
else
  prefix='f_'
fi

while [ loop -ne 0 ]
do
  file_name=$prefix"$file"
  if [ -s $file_name ]
  then
    echo
    echo Insert destination floppy $file and press Enter
    read a
    echo Copying $file_name
    dd if=$file_name of=/dev/fd0 bs=90k
    let file=$file+1
  else
    loop=0
  fi
done
@//E*O*F d2f//
chmod u=rwx,g=rx,o=rx d2f
 
exit 0



More information about the Comp.unix.aix mailing list