Software Packages for Solaris
There are several famous free software archives for Solaris:
pkgsrc
pkgsrc is my favorite package manager for Solaris 10, because it is very flexible, well maintained and highly customable. And you can use the same package manager on most other operating systems.
Download
Download the lastest tar from
ftp://ftp.netbsd.org/pub/pkgsrc/
. For Solaris 10 it is a good idea to choose the lastest stable quartal version over the current i.e. 2007Q3, 2007Q4 ...
cd /usr
wget ftp://ftp.netbsd.org/pub/pkgsrc/pkgsrc-2008Q2/pkgsrc-2008Q2.tar.gz
gtar xfz pkgsrc-2008Q2.tar.gz
cd pkgsrc/bootstrap
Read the README.Solaris and choose between
gcc
and
SunStudio and between 32 Bit and 64 Bit. gcc 32 Bit is suitable in most cases. I had trouble with
OpenSSL and
OpenLDAP and switched to
SunStudio cc
32 Bit.
setenv CC /opt/SUNWspro/bin/cc
setenv SUNWSPROBASE /opt/SUNWspro
CC=/opt/SUNWspro/bin/cc
SUNWSPROBASE=/opt/SUNWspro
export CC SUNWSPROBASE
bootstrap
for both gcc and cc:
./bootstrap
[... lot of output ...]
a more sophisticat version
./bootstrap --compiler gcc --pkgdbdir /opt/pkg/db/pkg --prefix /opt/pkg --sysconfdir /opt/pkg/etc --workdir=/tmp/work --varbase /var/pkg
[... lot of output ...]
Path to library
If you get an error about a library not being found, remember to use
crle -u -l libpath
to add it to the link path.
With
crle
you get the current PATH.
Links:
install a package
Now you can choose a package by changing into that directory:
rehash
cd /usr/pkgsrc/editor/vim
bmake install
hints
include ccs in your PATH.
set your PATH to
/usr/sfw/bin:/usr/ccs/bin:/usr/bin:/usr/sbin
befor you bootstrap pkgsrc, so that the libtool find
/usr/ccs/bin/ar
if you miss that you get problem with libiconv
gcc -shared -Wl,-h -Wl,libcharset.so.1 -o .libs/libcharset.so.1.0.0
.libs/localcharset.o .libs/relocatable.o
-L/opt/pkgsrc/converters/libiconv/work/.buildlink/lib -lc
-Wl,-R/usr/pkg/lib
(cd .libs && rm -f libcharset.so.1 && ln -s libcharset.so.1.0.0 libcharset.so.1)
(cd .libs && rm -f libcharset.so && ln -s libcharset.so.1.0.0 libcharset.so)
false cru .libs/libcharset.a localcharset.o relocatable.o
If you use zones it is a good idea to put
/opt/pkg
in a extra ZFS-filesystem. So you can decide later on if like to import the
/opt/pkg
from the global zone or to manage the packages in the zone itself. Or you can make ZFS-snapshots before you make an upgrade.
tar cvfp pkg.tar pkg
mv pkg pkg.old
zfs create -o mountpoint=/opt/pkg rpool/ROOT/s10x_u6wos_07b/pkg
zfs list
tar cvfp pkg.tar pkg
example
Solaris mk.conf
update your packages
- pkg_chk
- pkg_rolling-replace -suvX bmake,bootstrap-mk-files,pax,pkg_install
- pkg_rolling-replace -rsuvX bmake,bootstrap-mk-files,pax,pkg_install
Links:
update bmake and bootstrap-mk-files
... that are not upgrade-able with the methods above
Whenever the bmake and bootstrap-mk-files packages need updating, the automated process fails because both of those packages are needed to do the update ==> chicken-and-egg problem.
cd pkgtools/bootstrap-mk-files
bmake USE_DESTDIR=yes package
pkg_add -uu /usr/pkgsrc/packages/All/bootstrap-mk-files...tgz
cd ../../devel/bmake
bmake USE_DESTDIR=yes package
pkg_add -uu /usr/pkgsrc/packages/All/bmake...tgz
...
same for install-sh, pdksh, pkg_install
Maybe you have to force the installation for pkg_install with
pkg_add -f -uu
Check the database afterwards with
pkg_admin check
Badly formated man pages
Man pages in pkgsrc are sometimes badly formated under Solaris. Have a look at
FormattedManPages
get rid of old sfw libraries
If you have used the GCC from /usr/sfw so far, the packages built in advance of GCC contain references to /usr/sfw/lib/libgcc_s.so. Among these packages are libiconv and gettext. As a consequence, every subsequent package you compile with the pkgsrc GCC that uses these libraries may contain references to this libgcc and the one from the pgksrc GCC. This is ugly at best, but may cause real trouble at worst. To remove all traces of the wrong libgcc, reinstall (i.e. bmake replace) the packages converter/libiconv, devel/gettext-lib and devel/gettext-tools.
ldd /opt/pkg/bin/* | grep sfw
You can also check your packages with
pkg_admin check
pkg_admin rebuild
packages