===============================================================================
                        Solaris Package Library
===============================================================================

Welcome to the Solaris package library. These files are supplied as a service
to the internet community to allow them to quickly configure their machines
with useful free software.

For those who's experience with packages is limited to the installation of the
operating system or patches, well there is a lot of useful functionality
hidden in the pkg system. By far the most outstanding benefit is the ability
to add and remove software quickly and relatively thoughtlessly and being
confident that all of the old versions of software have been removed. Too many
times I've seen sites with left over files and directories from old versions
of compilers, development tools and communications programs. This is inherently
a problem both for disk usage and cluttering and also ending up in a situation
where you don't know what belongs on your system and what is garbage.

To avoid these problems on the systems I am responsible for, and because I
don't see the point in compiling the same program twenty times, I have created
package formats of the tools I install. Creation of the packages is remarkably
easy after the first few, somewhat droll one might say. However the work pays
off when I can confidentally add software quickly and easily to a new host.
As a guide it takes less than 30 minutes to configure an Ultra Server to a
state where users can do whatever users do, where before it would have taken
days or longer to configure and build the files.

Enjoy,
Mark <mark@sunsite.unc.edu>



Packages
========

Here are the packages currently publically available:

SPARC:
    GNUbison.1.25.SPARC.Solaris.2.5.pkg.tgz
    GNUg77.0.5.18.SPARC.Solaris.2.5.pkg.tgz
    GNUgcc.2.7.2.SPARC.Solaris.2.5.pkg.tgz
    GNUgdb.4.16.SPARC.Solaris.2.5.pkg.tgz
    GNUgroff.1.10.SPARC.Solaris.2.5.pkg.tgz
    GNUlibg++.2.7.2.SPARC.Solaris.2.5.pkg.tgz
    GNUm4.1.4.SPARC.Solaris.2.5.pkg.tgz
    GNUpatch.2.1.SPARC.Solaris.2.5.pkg.tgz
    GNUplot3.5.SPARC.Solaris.2.5.pkg.tgz
    GNUscreen.3.7.1.SPARC.Solaris.2.5.pkg.tgz
    GNUtar.1.11.8.SPARC.Solaris.2.5.pkg.tgz
    GNUzip.1.2.4.SPARC.Solaris.2.5.pkg.tar
    X11R6.1.SPARC.Solaris.2.5.pkg.tgz
    expect.5.19.0.SPARC.Solaris.2.5.pkg.tgz
    expect.5.20.18.SPARC.Solaris.2.5.pkg.tgz
    less.290.SPARC.Solaris.2.5.pkg.tgz
    md5sum.1.00.SPARC.Solaris.2.5.pkg.tgz
    perl4.036.SPARC.Solaris.2.5.pkg.tgz
    perl5.000.SPARC.Solaris.2.5.pkg.tgz
    tcl.7.4.SPARC.Solaris.2.5.pkg.tgz
    tcl.7.5.p1.SPARC.Solaris.2.5.pkg.tgz
    tcsh.6.06.SPARC.Solaris.2.5.pkg.tgz
    tk.4.0.SPARC.Solaris.2.5.pkg.tgz
    tk.4.1.SPARC.Solaris.2.5.pkg.tgz
    traceroute.3.5.SPARC.Solaris.2.5.pkg.tgz
    xpm.SPARC.Solaris.2.5.pkg.tgz

i86pc:
    GNUbison.1.25.i86pc.Solaris.2.5.1.pkg.tgz
    GNUgcc.2.7.2.i86pc.Solaris.2.5.1.pkg.tgz
    GNUlibg++.2.7.2.i86pc.Solaris.2.5.1.pkg.tgz
    GNUm4.1.4.i86pc.Solaris.2.5.1.pkg.tgz
    GNUtar.1.11.8.i86pc.Solaris.2.5.1.pkg.tgz
    GNUzip.1.2.4.i86pc.Solaris.2.5.1.pkg.tar
    expect.5.20.18.i86pc.Solaris.2.5.1.pkg.tgz
    less.290.i86pc.Solaris.2.5.1.pkg.tgz
    md5sum.1.00.i86pc.Solaris.2.5.1.pkg.tgz
    perl4.036.i86pc.Solaris.2.5.1.pkg.tgz
    tcl.7.5.p1.i86pc.Solaris.2.5.1.pkg.tgz
    tcsh.6.06.i86pc.Solaris.2.5.1.pkg.tgz
    tk.4.1.i86pc.Solaris.2.5.1.pkg.tgz

Note: Solaris 2.5 and Solaris 2.5.1 are essentially the same. You can use the
      Solaris 2.5 packages on a 2.5.1 machine without problems.

Note: You WILL get errors running the compilers if you do not have the right
      installation of Solaris on your machine. The "minimal" install choice
      will not install the packages you need to compile software. You will
      need to manually:

      Install the Solaris CD.
      Change to the /cdrom/solaris_2_5/s0/Solaris.2.5 directory
      pkgadd -d`pwd` SUNWhea SUNWarc SUNWbtool SUNWlibC SUNWlibCf SUNWlibm
                     SUNWlibms SUNWsprot

      The developer install choice may lack the packages as well. Check using
      pkginfo | more.

Note: GNUg77 is a full GNUgcc with Fortran additions. Don't add GNUgcc if you
      are going to use GNUg77. It is compiled with (and includes) GNUgcc 2.7.2.




Groups
======
    Some packages need to be used in conjunction with others, or are compiled
    to specifically use a certain version of another package. To install
    properly you WILL need to install ALL parts of the group.

    Group: expect.5.19.0,  tcl.7.4,    tk.4.0
    Group: expect.5.20.18, tcl.7.5.p1, tk.4.1




Package Assumptions
===================

I have used /usr/local as the top directory of my tree. All files are owned by
root and the group is root as well. All files are world readable and only root
is able to write to them. If your contributed software tree is not /usr/local
then you will need to do further work to integrate the new software. This may
involve loopback mounts to avoid having a /usr/local softlink overwritten.
(This will happen in a few of the packages, the more recent ones don't change
either the /usr or /usr/local directory inodes.)



Package Installation
====================

To install you will need to FTP the relevant tgz file and unpack it into a
package tree. (A .tgz file is a tar file that is gzipped). You will need to
install the GNUzip package first, (it is not compressed), to uncompress the
other files.

FTP the pkg.tgz files in BINARY or IMAGE mode. You can fetch and unpack the
files in any directory. I recommend /var/tmp.

Once you have the file local, (we will use GNUzip as the demonstration pkg),
you unpack it with:

For a pkg.tgz file:

    % gunzip -c GNUzip.1.2.4.SPARC.Solaris.2.5.pkg.tgz | tar -xvf -

For a pkg.tar file:

    % tar -xvf GNUzip.1.2.4.SPARC.Solaris.2.5.pkg.tar
    GNUzip/
    GNUzip/pkgmap
    GNUzip/pkginfo
    GNUzip/root/
    GNUzip/root/usr/
    GNUzip/root/usr/local/
    GNUzip/root/usr/local/bin/
    GNUzip/root/usr/local/bin/gzexe
    GNUzip/root/usr/local/bin/gzip
    GNUzip/root/usr/local/bin/zdiff
    GNUzip/root/usr/local/bin/zforce
    GNUzip/root/usr/local/bin/zgrep
    GNUzip/root/usr/local/bin/zmore
    GNUzip/root/usr/local/bin/znew
    GNUzip/root/usr/local/info/
    GNUzip/root/usr/local/info/gzip.info
    GNUzip/root/usr/local/man/
    GNUzip/root/usr/local/man/man1/
    GNUzip/root/usr/local/man/man1/gzexe.1
    GNUzip/root/usr/local/man/man1/gzip.1
    GNUzip/root/usr/local/man/man1/zdiff.1
    GNUzip/root/usr/local/man/man1/zforce.1
    GNUzip/root/usr/local/man/man1/zgrep.1
    GNUzip/root/usr/local/man/man1/zmore.1
    GNUzip/root/usr/local/man/man1/znew.1

Change your uid to root:

    % su - root
    Password:
    #

Install the package onto the system:

    # pkgadd -d`pwd` GNUzip
    Processing package instance <GNUzip> from </var/tmp>

    GNU zip 1.2.4
    (sun4,sun4c,sun4m,sun4e,sun4u) 1.2.4
    GNU
    ## Processing package information.
    ## Processing system information.
       8 package pathnames are already properly installed.
    ## Verifying disk space requirements.
    ## Checking for conflicts with packages already installed.

    The following files are already installed on the system and are being
    used by another package:
    * /usr/local/bin/gzip

    * - conflict with a file which does not belong to any package.

    Do you want to install these conflicting files [y,n,?,q] y
    ## Checking for setuid/setgid programs.

    Installing GNU zip 1.2.4 as <GNUzip>

    ## Installing part 1 of 1.
    /usr/local/bin/gzexe
    /usr/local/bin/gzip
    /usr/local/bin/zdiff
    /usr/local/bin/zforce
    /usr/local/bin/zgrep
    /usr/local/bin/zmore
    /usr/local/bin/znew
    /usr/local/info/gzip.info
    /usr/local/man/man1/gzexe.1
    /usr/local/man/man1/gzip.1
    /usr/local/man/man1/zdiff.1
    /usr/local/man/man1/zforce.1
    /usr/local/man/man1/zgrep.1
    /usr/local/man/man1/zmore.1
    /usr/local/man/man1/znew.1
    [ verifying class <none> ]
    /usr/local/bin/gunzip <linked pathname>
    /usr/local/bin/zcat <linked pathname>
    /usr/local/bin/zcmp <linked pathname>
    /usr/local/man/man1/gunzip.1 <linked pathname>
    /usr/local/man/man1/zcat.1 <linked pathname>
    /usr/local/man/man1/zcmp.1 <linked pathname>

    Installation of <GNUzip> was successful.
    #

As you can see I already had gzip binary installed on the system, but not all
the other parts of it. I answered 'y' to overwrite the installed gzip with the
new package copy.

NOTE: After adding a package you will need to do housekeeping tasks (as root)
such as updating the manual page index:

    # catman -w &

Also check your paths are up to date so you can "see" the new software.
Affected environment variables are PATH, MANPATH and LD_LIBRARY_PATH.



Package Verification
====================

To verify that a package is installed use:

    # pkginfo | grep zip
    utility     GNUzip         GNU zip 1.2.4

or:

    # pkgchk GNUzip
    #

or, to check what is in the pkg:

    # pkgchk -v GNUzip
    /usr
    /usr/local
    /usr/local/bin
    /usr/local/bin/gunzip
    /usr/local/bin/gzexe
    /usr/local/bin/gzip
    /usr/local/bin/zcat
    /usr/local/bin/zcmp
    /usr/local/bin/zdiff
    /usr/local/bin/zforce
    /usr/local/bin/zgrep
    /usr/local/bin/zmore
    /usr/local/bin/znew
    /usr/local/info
    /usr/local/info/gzip.info
    /usr/local/lib
    /usr/local/man
    /usr/local/man/man1
    /usr/local/man/man1/gunzip.1
    /usr/local/man/man1/gzexe.1
    /usr/local/man/man1/gzip.1
    /usr/local/man/man1/zcat.1
    /usr/local/man/man1/zcmp.1
    /usr/local/man/man1/zdiff.1
    /usr/local/man/man1/zforce.1
    /usr/local/man/man1/zgrep.1
    /usr/local/man/man1/zmore.1
    /usr/local/man/man1/znew.1

If desired you can now rm the pkg.tgz file and the package directory.
I recommend keeping the pkg.tgz files handy in case of a disc crash etc.



Removing packages
=================

If you wish to install a new version of some software that is installed, or to
revert to a previous version you will have to remove the current version from
the system. You simply use:

    # pkgrm GNUzip

and answer 'y' to delete the package from the system. I often juggle different
versions of packages when I am developing software and need to revert to older
versions.



Other commands
==============

The full set of package commands are:

    % man -k pkg
    pkgadd          pkgadd (1m)     - transfer software package to the system
    pkgask          pkgask (1m)     - stores answers to a request script
    pkgchk          pkgchk (1m)     - check accuracy of installation
    pkginfo         pkginfo (1)     - display software package information
    pkginfo         pkginfo (4)     - package characteristics file
    pkgmap          pkgmap (4)      - package contents description file
    pkgmk           pkgmk (1)       - produce an installable package
    pkgparam        pkgparam (1)    - displays package parameter values
    pkgproto        pkgproto (1)    - generate prototype file entries for pkgmk
    pkgrm           pkgrm (1m)      - removes a package from the system
    pkgtrans        pkgtrans (1)    - translate package format