Program: mkuue

This script retrieves a list of files from a remote
host, uuencodes them, and builds a self extracting and
configuring script around the uuencoded file.

Usage: mkuue srcFile destFile fileAttributes

   srcFile = The name of the source file to uuencode

   destFile = The name of the destination file after
              it is uudecoded

   fileAttributes = This is "ls -l" output for the
             destination file after it is uudecoded. 
             This information is used to set attributes
             such as permissions, owner, group.

Author: Dana French (dfrench@mtxia.com)

"AutoContent" enabled


Description:

This utility creates a self extracting archive for a specified file. The self extracting archive contains a shell script that that knows how to test and reconfigure various attributes of the file, and the archive also contains a "uuencoded" copy of the file itself. The attributes tested and reconfigured by the self extracting archive include cksum, owner, group and permissions. This utility generates the shell script necessary to perform these tests and reconfigurations, uuencodes the specified file, and saves all of this to a single archive. This archive may be executed which causes the file to be extracted, installed, tested, and configured as the original file in its original location.

Assumptions:

It is assumed the source file exists and is not the same name as the destination file. The "uuencode" command is accessible in the PATH variable. The "cksum" command calculates a 32-bit Cyclic Redundancy Check (CRC) which is POSIX 1003.2 compliant. The execute permission bit for the archive files generated by this utility will be set.

Dependencies:

The self extracting archives generated by this utility will require the directories containing the "uudecode" and "cksum" commands to be in the PATH variable.

Documentation for this script is maintaned using the "AutoContent" utilities and requires the script be maintained according to those standards.

Products:

This utility generates a self extracting archive for any file. The archive will contain all the information necessary to install and configure the file to its original location. The file can be extracted, tested, installed and configured simply by executing the archive file.

Configured Usage:

This utility requires three command line arguments.

srcFile = The file to be archived

destFile = The name of the file after it is extracted from the archive.

fileAttributes = The file attributes of the destination file after it is extracted from the archive. The attributes should be in the form of "ls -l" output and should be enclosed in quotes on the command line so that they all appear as the 3rd command line argument.

Details:

When the "mkuue" script begins, the first thing it does is process the 3rd command line argument and extract the various file attributes for the destination file. The file owner and group can be easily extracted from the "ls -l" output, however the permissions require some processing.

The permission settings are contained within the first 10 characters of the "ls -l" output and are processed in 3 steps. The first character is the file type and is ignored, the next 3 characters are associated with the "user" or file owner permissions. The permissions are checked to see if the tacky bit or SUID bit is set. If so the appropriate permission setting is added to the permission string which will be used when the file is extracted.

The next set of 3 characters are associated with the "group" category of permissions. The permissions are checked to see if the tacky bit or SUID bit is set. If so the appropriate permission setting is added to the permission string which will be used when the file is extracted.

The last set of 3 characters are associated with the "other" category of permissions. Again, the permissions are checked to see if the tacky bit or SUID bit is set. If so the appropriate permission setting is added to the permission string which will be used when the file is extracted.

With the permission setting strings for each user category now known and extracted from the "ls -l" output, a mnemonic "exact setting" string is constructed for use with the "chmod" command during the archive extraction.

The checksum of the source file is obtained and saved so that it may be compared with the checksum of the destination file when the archive is extracted. The checksum is assumed to be a POSIX 1003.2 compliant 32-bit checksum Cyclic Redundancy Check (CRC).

A korn shell script is now created by "mkuue" which will contain the commands necessary to extract, test the cksum, and configure the file attributes of the destination file. This script is what has been referred to previously as the "self extracting archive". Each archive always checks to see if it is being executed by "root" as this is necessary to perform the "chown" commmand.

Within the script generated by mkuue, the script uudecodes itself, which will extract the uuencoded portion of the script to a temporary file location. The temporary file is then copied to the original source file name in preparation for the checksum.

During the execution of the self extracting archive, the original checksum is compared with the checksum of the newly extracted file. If they do not match, an error message is displayed and the script exits.

The script "mkuue" will now generate commands to cause the self extracting archive to copy the newly created and tested source file to the destination file name. If during the execution of the self extracting archive, the environment variable 'ALT_ROOT' is set, its value will be prepended to the destination file name. This allows self extracting archives to be extracted to alternate locations such as an 'alt_rootvg'. If the copy fails, an error message is displayed and the script exits.

Commands are generated to cause the self extracting archive to change the owner of the file to match the owner specified in the file attributes when the archive was created.

Similarly, commands are generated to cause the group setting of the file to be changed to match the group specified in the file attributes when the archive was created.

Finally, commands will be generated to cause the the self extracting archive to reset the permissions of the destination file according to permissions specified on the command line when the archive was created.

The commands necessary to extract the destination file from the archive are complete.

The source file will now be uuencoded and appended to the end of the self extracting archive script. The file name to which the archive will be initially extracted is a temporary file name, rather than the actual destination file name. This is so the "cksum"s can be compared and evaluated before replacing the existing file. If the cksums do not match, the existing file is NOT replaced, and an error message is issued.

The creation of the self extracting archive is now complete. The archive can be stored and saved for later use. It contains all the information it needs to extract, test, install, and configure the destination file it contains.

This file last modified 02/04/09