Solaris Package Archive

Mark <>

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

A package, in this sense of the word, is a installable collection of files with embedded configuration details which instruct the installing program on file attributes, locations, pre and post installation procedures and also system requirements. Solaris comes with the complete System V package tools installed. You don't need to do anything special to utilize them.

For those whose 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.

See the Trouble Shooting section below if you have problems.


    Main Archive Site
    Points to note
    Groups Of Packages
    Package Assumptions
    Package Installation
    Environment Variables
    Trouble Shooting
    Package Verification
    Removing Packages
    Creating Packages
    Other Package Commands

Main Archive Site

The main site for these files is at UNC, North Carolina, USA. They are hosted on I'd like to thank the UNC for their support. The packages can be located on the sites below. Don't email the admins about the packages. Email me. @ UNC :


If you want to obtain a copy of these packages you can use a variety of methods. FTP, wget and rsync allow command line fetching. To obtain them via rsync you can use variants of this command:
    % rsync -av --dry-run --no-motd .

    To fetch all Solaris 10 SPARC 64 bit packages:

    % rsync -av --dry-run --no-motd --include 'sparc/' --include '*SPARC.64bit.Solaris.10.*' --exclude '*' .

    Obviously you need to remove the --dry-run argument first to actually transfer files.

Authorized Mirrors

These sites are co-operating to provide these files at locations where network connectivity makes sense to mirror. Many thanks to their admins.

In alphabetical order:

SunSITE Germany

    Machine Admin : <>

SunSITE Poland

    Machine Admin: Wojtek Sylwestrzak <>

SWITCH Mirror Switzerland

    Machine Admin: Thomas Lenggenhager <>

    HTTP links:

    FTP links:
Mark <>


Points to note

Backwards Compatibility
    Solaris is quite backwards compatible, you can generally take a binary from an earlier release and run it successfully on a later version of Solaris. This does NOT apply however to specific programs like GNUgcc in the long run. When compiling the differences between the releases does start to become noticed, the different header files, libraries, patches and also new binaries.

    For some time I have been configuring the packages to check for the release of Solaris on the machine you are attempting to install on, if it's different from the version it was compiled for, the package will refuse to install. This is a precaution to stop novice administrators shooting themselves in the proverbial foot. Obviously the software will probably run, but it's much more desirable to use the correct version for your O.S.

O.S. Packages Needed For Compiling
    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 them. Using admintool may not work.

      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 SUNWtoo SUNWdfbh SUNWcg6h

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

    If using a release other than 2.5, change the path accordingly.

    The ` characters above are "back tics", not single quotes. If you can't tell the difference, change your font to courier.

X11 Support Not Included
    With the X11 games I am not really going to go out of my way to provide detailed support for users. The reason for this is that they work for me on a Solaris system with my X11R6.4 packages and if they don't work for you then you will have to discover the reason for yourself. Most likely it will be because of wrong versions of Solaris and X11. Caveat Emptor. See the Trouble Shooting section below for library errors.

Upgrading Your X11 To A New Release
    When installing a new package of X11, to do it properly you should first uninstall all the other X11 packages you have installed. In reverse order if possible. This means you should:

    pkgrm fvwm2 tetris roxndiam xpacman xpm X11R6.1

    The reason for this is you need to remove the packages from the old X11 directory and then add them into the new one. If you don't do this you will have your other X11 programs "left behind" in the X11R6.1 directory. Once this is done and you have added the new X11R6.x package, you can pkgadd the X11 programs again:

    pkgadd X11R64 xpm fvwm2 tetris roxndiam xpacman

    You should then look in the old X11R6.x tree to find any left over files, such as the xdm error logs, auth files etc. Unless you have added files from somewhere else you should be able to delete the old X11R6.x tree.

Some Tools Have Strange Side Effects
    Some of you may have wondered why I haven't blitzed the archive with more GNU tools. Apart from a relentless pursuit of laziness, it isn't really a good idea to replace most Solaris binaries with GNU ones. For instance, the GNU binutils can really give you weird results which can shorten your life. Very few sane admins install these. I try to supply packages which you can use and won't go biting you in soft places. You're welcome.

Solaris tar Should Be Used
    Some of you have reported errors in packages where file names have been truncated whilst unpacking. The reason for this is you are not using /usr/bin/tar to unpack the archive, more likely it's /usr/local/bin/tar which is usually GNUtar. Use the Solaris tar instead.


Groups Of Packages

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.

To identify which package requires other libraries etc to run, you will need to use the ldd tool to identify missing libraries. Usually it's reasonably simple to match a required library to the package that ships with it but sometimes it gets tricky. Notably the libintl library ships in the gettext package and is widley used by many other programs.

An example of one of the most demanding packages is PHP. Here's the list of required extra software:
# Required for /usr/local/lib/

# Required for /usr/local/lib/
# Required for /usr/local/lib/
# Required for /usr/local/lib/

# Required for /usr/local/lib/

# Required for /usr/local/lib/

# Required for /usr/local/lib/

# Required for /usr/local/mysql/lib/

# Required for /usr/local/lib/

# Required for /usr/local/lib/

# Required for /usr/local/lib/

# Required for /usr/local/lib/

# Required for /usr/local/lib/

# Required for /usr/local/lib/

# Required for /usr/local/lib/

# Required for /usr/local/lib/

# Required for /usr/local/lib/

# Required for /usr/local/lib/

# Required for /usr/local/lib/

# Required for /usr/local/lib/

# Required for /usr/local/lib/

# Required for /usr/local/lib/

# Required for /usr/local/lib/
# Required for /usr/local/lib/

# Required for /usr/local/lib/
# Required for /usr/local/lib/
# Required for /usr/local/lib/
# Required for /usr/local/lib/

# Required for /usr/local/lib/

# Required for /usr/local/lib/

# Required for /usr/local/lib/

# Required for /usr/local/lib/
# Required for /usr/local/lib/

# Required for /usr/local/lib/

# Required for /usr/local/lib/

# Required for /usr/local/lib/
Once you've satisfied all of those dependancies then you'll still have to find the library dependancies of the software you just added to support PHP. It's a bit of work sometimes.


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 unless explicitly needed. 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

If you have problems, see the Trouble Shooting section below.

To install you will need to either FTP or HTTP fetch the relevant tgz or .pkg file to your local system. For .tgz files you then need to unpack it into a file system tree. (A .tgz file is a tar file that is gzipped). For older Solaris releases you will need to install the GNUzip package first, (it is not compressed), to uncompress the other files.

If using FTP to get your files, fetch the pkg.tgz files in BINARY or IMAGE mode. You must unpack the files in a directory the user nobody can access. I recommend /var/tmp.

Once you have the file cached locally, (we will use GNUzip as the demonstration pkg), you can unpack it (if required) with these methods:

For a pkg.tgz file:
    % umask 0
    % cd /var/tmp
    % gunzip -c GNUzip.1.2.4.SPARC.Solaris.2.5.pkg.tgz | /usr/bin/tar -xvf -
For a pkg.tar file:
    % umask 0
    % cd /var/tmp
    % /usr/bin/tar -xvf GNUzip.1.2.4.SPARC.Solaris.2.5.pkg.tar
Change your uid to root:
    % su - root
Ensure you are in the correct directory, i.e. your current directory must contain the packages you wish to install:
    # ls -aCF
    ./   ../   GNUzip/
Install the package onto the system. You tell it where to find the package, (i.e. in the '.' or $PWD directory, or just the .pkg file itself), and then the name of the package you want to add.
    # pkgadd -d`pwd` GNUzip
    or :
    # pkgadd -d. GNUzip
    or :
    # pkgadd -d$PWD GNUzip
    or :
    # pkgadd -d GNUzip.1.24.i86pc.Solaris.2.6.pkg GNUzip
You will see:
    Processing package instance <GNUzip> from </var/tmp>

    GNU zip 1.2.4
    (sun4,sun4c,sun4m,sun4e,sun4u) 1.2.4
    ## 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.
    [ 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 a 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.

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.
Those who wish to install a lot of packages at once will find the bulk installation instructions useful.

Environment Variables

To setup your accounts properly for these packages you need to have your environment variables pointing to the software. You must have at least the following set up:

For /bin/sh (~/.profile) and /bin/ksh (~/.kshrc):



For /bin/csh and /usr/local/bin/tcsh (~/.cshrc):

    setenv LD_LIBRARY_PATH "/lib:/usr/lib:/usr/local/lib:/usr/local/X11/lib:/usr/dt/lib:/usr/openwin/lib"
    setenv PATH "/usr/local/bin:/bin:/usr/ccs/bin:/etc:/usr/etc:/usr/local/X11/bin:/usr/ucb:/usr/openwin/bin:/usr/local/etc:/usr/sbin"
    setenv MANPATH "/usr/local/man:/usr/man:/usr/local/X11/man"


    setenv PAGER less
    setenv EDITOR vi
    setenv CC cc
    setenv CXX CC
I've personally stopped using the LD_LIBRARY_PATH variable, preferring to use the -R/usr/local/lib compile flag so that libraries and binaries will automatically look in that directory for run time libraries. It makes the packages more resilient as they won't accidentally link to libraries in another random location first.

Trouble Shooting

I get a number of emails from people that report problems which seem to congregate around a small amount of common errors. Predominately the compilers cause people problems.

Assuming the GNUgcc packages themselves installed correctly you might see the following errors:

    An include file in the "va_args*" group is missing when called from stdio.h

      You don't have the necessary compiling packages installed on your machine.

        When Solaris is installed on a machine it asks which setup to install; "Minimal", "Developer", "Full Installation" or even "Full Installation with OEM support". Only some of these choices will give you the packages you need to compile your own programs. If you read the Notes section earlier in this file it will tell you how to manually (not with admintool) add the files to your system. This is a very common problem I see a lot.

    Your X11 libraries don't match or aren't found.

      Often X11 libraries will have different revision numbers and a program expecting a version of a library to enable it to run will report an error if it can't find the library it is looking for. The quickest solution is to link the missing library to one you do have on your machine:

      cd /usr/local/X11R6.1/lib; ln -s

      This provides a which allows any program looking for it to continue running.

      Also make sure your LD_LIBRARY_PATH includes all the X11 libraries:

        See the Environment Variables section.

    You can't find your mission critical X11 games or fvwm2 window manager.

    You didn't pkgrm and then pkgadd them. See the Notes section above.

    My xv is complaining about a missing xpm library.

    Install the xpm package found on this site.
    Check your LD_LIBRARY_PATH variable. See the Environment Variables section.

    Your package doesn't verify. Missing packet.h.

    Use Solaris tar to unpack the packages. pkgrm the installed package and then install it correctly. See the Notes section above.

    You can't compile any network programs without __inet_addr() errors.

      The bind.8.1.1 package installs it's own file in the /usr/local/include/arpa directory. GNUgcc will search this directory before /usr/include and thereby break your compiles if you don't link in the bind library as well.

        host:/var/tmp root# gcc -o addr addr.c -lnsl
        Undefined         first referenced
        symbol            in file
        __inet_addr       /var/tmp/cca0073y1.o
        ld: fatal: Symbol referencing errors. No output written to addr
        host:/var/tmp root# gcc -o addr addr.c -lnsl -lbind
        host:/var/tmp root#

    Adding a package dies with "can't open" for the checkinstall script

      You need to make sure the user "nobody" can run the checkinstall script. The package file unpacks itself properly using the provided instructions but you need to make sure the parent directories can be passed through, (i.e. user "nobody" can 'cd' through them).

      To decode the problem you might see something like this:

        Processing package instance <GNUg77> from </export/home/mark/software>
        /export/home/mark/software/GNUg77/install/checkinstall: cannot open

      This is telling me the directory /export/home/mark/software is not searchable for the "nobody" user. I should probably unpack the .pkg.tgz file in /var/tmp instead. Also I should make sure I do a umask 0 command first so I don't pollute the permissions when unpacking.

    Only a very small number of problems can be attributed to other causes. Once I used the wrong tar on a package, another time someone used the wrong g++ compilation option. Out of 254,526 installations (to date) of GNUgcc I haven't seen a single problem that wasn't mentioned here. If you do encounter one, email me at Please include the output of uname -a. Also, telling me the name and version of the package helps a lot. :)

    If a packages file permissions don't let you retrieve it then it is likely the package is not ready for release yet. Please wait until I have reset the access rights to publish the file. Don't email me :)


    Package Verification

    To verify that a package is installed use:

    % pkginfo | grep zip
    utility     GNUzip     GNU zip 1.2.4
    % pkgchk GNUzip

    or, to check what is in the pkg:
      % pkgchk -v GNUzip
    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.

    To see what third party packages you have installed a quick check is:
      % pkginfo | grep -v SUNW
      utility   GNUbison   GNU bison 1.25 SPARC Solaris 2.4
      utility   GNUcvs     GNU cvs 1.9 SPARC Solaris 2.4
      utility   GNUflex    GNU flex 2.5.4a SPARC Solaris 2.4
      utility   GNUgcc     GNU gcc 2.8.1 SPARC Solaris 2.4
      utility   GNUgdb     GNU gdb 4.16 SPARC Solaris 2.4
      utility   GNUgdbm    GNU libgdbm 1.7.3 SPARC Solaris 2.4
      utility   GNUgroff   GNU groff 1.11 SPARC Solaris 2.4
      utility   GNUindent  GNU indent 1.9.1 SPARC Solaris 2.4
      utility   GNUlibstc  GNU libstdc++ SPARC Solaris 2.4
      utility   GNUm4      GNU m4 1.4 SPARC Solaris 2.4
      utility   GNUmake    GNU make 3.77 SPARC Solaris 2.4
      utility   GNUpatch   GNU patch 2.5 SPARC Solaris 2.4
      utility   GNUplot    GNU plot 3.5 SPARC Solaris 2.4
      utility   GNUtar     GNU tar 1.12 SPARC Solaris 2.4
      utility   GNUtexnfo  GNU texinfo 3.9 SPARC Solaris 2.4
      utility   GNUzip     GNU zip 1.2.4
      utility   less       less 332 SPARC Solaris 2.4
      utility   perl5      perl 5.004.04 SPARC Solaris 2.4
      utility   rcs        rcs 5.7 SPARC Solaris 2.4
      utility   tcsh       tcsh 6.07.02 SPARC Solaris.2.4
      utility   troute     traceroute 3.5

    Removing Packages

    If you wish to install a new version of some packaged software that is already 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.


    Creating Packages

    To create packages is simple once you know what you are doing. To make your own packages for your own personal use you might find these instructions useful.

    Once you have made your package you will probably want to show it off etc. Please don't email me asking me to include it in the archive, I am quite paranoid about what binaries I run on my machines and it would be negligent of me to accept any files from anyone else.


    Other Package Commands

    Most of the 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