Philip Brown has a script called pkgreloc.ksh that will relocate solaris packages. However, it does not *quite* work for Solaris 10. Now, I am not sure if this is a Solaris 10 thing or not but before it really works, there is a slight change..
Let’s say you download a package (say for e.g syslogng-1.6.11-sol10-sparc-local) from www.sunfreeware.com. The packages there are designed to be installed in /usr/local. Well, /usr/local/ for me is an NFS file system and I may not necessarily want to install it. I’d rather install is somewhere else, say /export/software.
Using the pkgreloc.ksh, I tried relocating the package and installing it.
bash-3.00# ./pkgreloc.ksh syslogng-1.6.11-sol10-sparc-local /export/software/syslog-ng attempting to change BASEDIR from /usr/local to /export/software/syslog-ng Transferringpackage instance Transferring package instance You may now run 'pkgadd -d syslogng-1.6.11-sol10-sparc-local.new' bash-3.00# pkgadd -d syslogng-1.6.11-sol10-sparc-local.new The following packages are available: 1 SMCsyslng syslogng (sparc) 1.6.11 Select package(s) you wish to process (or 'all' to process all packages). (default: all) [?,??,q]: all Processing package instance as the package base directory. ## Processing package information. pkgadd: ERROR: bad entry read in pkgmap pathname=pkginfo problem=unable to read content info pkgadd: ERROR: unable to process pkgmap Installation offrom syslogng(sparc) 1.6.11 B. Scheidler Usingfailed (internal error). No changes were made to the system.
The problem is in with this line in the pkgreloc.ksh script
mtime=`grep 'pkginfo' pkgmap | cut -f6 -d' '`
The above line expects to find 1 line with the word pkginfo in it. However, the pkgmap file has got 3 lines.
A quick look:
bash-3.00# mkdir q bash-3.00# pkgtrans syslogng-1.6.11-sol10-sparc-local q bash-3.00# cd q bash-3.00# grep 'pkginfo' pkgmap 1 f none doc/syslogng/solbuild/pkginfo 0644 bin bin 207 16772 1150183529 1 f none doc/syslogng/solbuild/pkginfo.in 0644 bin bin 210 17157 1150183529 1 i pkginfo 193 16400 1150183530 bash-3.00#
The intent of the code is to edit the 3rd line
1 i pkginfo 193 16400 1150183530
So edit the pkgreloc.ksh file and change the line to the following:
mtime=`grep 'i pkginfo' pkgmap | cut -f6 -d' '`
Re-run:
bash-3.00# ./pkgreloc.ksh syslogng-1.6.11-sol10-sparc-local /export/software/syslog-ng attempting to change BASEDIR from /usr/local to /export/software/syslog-ng Transferringpackage instance Transferring package instance You may now run 'pkgadd -d syslogng-1.6.11-sol10-sparc-local.new' bash-3.00# pkgadd -d syslogng-1.6.11-sol10-sparc-local.new The following packages are available: 1 SMCsyslng syslogng (sparc) 1.6.11 Select package(s) you wish to process (or 'all' to process all packages). (default: all) [?,??,q]: all Processing package instance as the package base directory. ## Processing package information. ## Processing system information. ## Verifying disk space requirements. ## Checking for conflicts with packages already installed. ## Checking for setuid/setgid programs. Installing syslogng asfrom syslogng(sparc) 1.6.11 B. Scheidler Using## Installing part 1 of 1. /export/software/syslog-ng/doc/syslogng/AUTHORS /export/software/syslog-ng/doc/syslogng/COPYING /export/software/syslog-ng/doc/syslogng/ChangeLog /export/software/syslog-ng/doc/syslogng/INSTALL /export/software/syslog-ng/doc/syslogng/NEWS /export/software/syslog-ng/doc/syslogng/PORTS /export/software/syslog-ng/doc/syslogng/README /export/software/syslog-ng/doc/syslogng/README.spoof /export/software/syslog-ng/doc/syslogng/contrib/Makefile /export/software/syslog-ng/doc/syslogng/contrib/Makefile.am /export/software/syslog-ng/doc/syslogng/contrib/Makefile.in /export/software/syslog-ng/doc/syslogng/contrib/README /export/software/syslog-ng/doc/syslogng/contrib/fedora-packaging/syslog-ng.conf /export/software/syslog-ng/doc/syslogng/contrib/fedora-packaging/syslog-ng.init /export/software/syslog-ng/doc/syslogng/contrib/fedora-packaging/syslog-ng.logrotate /export/software/syslog-ng/doc/syslogng/contrib/fedora-packaging/syslog-ng.sysconfig /export/software/syslog-ng/doc/syslogng/contrib/init.d.HP-UX /export/software/syslog-ng/doc/syslogng/contrib/init.d.RedHat /export/software/syslog-ng/doc/syslogng/contrib/init.d.RedHat-7.3 /export/software/syslog-ng/doc/syslogng/contrib/init.d.SuSE /export/software/syslog-ng/doc/syslogng/contrib/init.d.SunOS /export/software/syslog-ng/doc/syslogng/contrib/init.d.solaris /export/software/syslog-ng/doc/syslogng/contrib/relogger.pl /export/software/syslog-ng/doc/syslogng/contrib/rhel-packaging/syslog-ng.conf /export/software/syslog-ng/doc/syslogng/contrib/rhel-packaging/syslog-ng.init /export/software/syslog-ng/doc/syslogng/contrib/rhel-packaging/syslog-ng.logrotate /export/software/syslog-ng/doc/syslogng/contrib/syslog-ng.conf.HP-UX /export/software/syslog-ng/doc/syslogng/contrib/syslog-ng.conf.RedHat /export/software/syslog-ng/doc/syslogng/contrib/syslog-ng.conf.SunOS /export/software/syslog-ng/doc/syslogng/contrib/syslog-ng.conf.doc /export/software/syslog-ng/doc/syslogng/contrib/syslog-ng.vim /export/software/syslog-ng/doc/syslogng/contrib/syslog2ng /export/software/syslog-ng/doc/syslogng/doc/Makefile /export/software/syslog-ng/doc/syslogng/doc/Makefile.am /export/software/syslog-ng/doc/syslogng/doc/Makefile.in /export/software/syslog-ng/doc/syslogng/doc/sgml/Makefile /export/software/syslog-ng/doc/syslogng/doc/sgml/Makefile.am /export/software/syslog-ng/doc/syslogng/doc/sgml/Makefile.in /export/software/syslog-ng/doc/syslogng/doc/sgml/syslog-ng.html.tar.gz /export/software/syslog-ng/doc/syslogng/doc/sgml/syslog-ng.txt /export/software/syslog-ng/doc/syslogng/doc/sgml/syslog-ng.xml /export/software/syslog-ng/doc/syslogng/doc/stresstest.sh /export/software/syslog-ng/doc/syslogng/doc/syslog-ng.8 /export/software/syslog-ng/doc/syslogng/doc/syslog-ng.conf.5 /export/software/syslog-ng/doc/syslogng/doc/syslog-ng.conf.demo /export/software/syslog-ng/doc/syslogng/doc/syslog-ng.conf.sample /export/software/syslog-ng/doc/syslogng/doc/syslog-ng.conf.solaris /export/software/syslog-ng/doc/syslogng/doc/syslog-ng.old.txt /export/software/syslog-ng/doc/syslogng/solbuild/CVS/Entries /export/software/syslog-ng/doc/syslogng/solbuild/CVS/Repository /export/software/syslog-ng/doc/syslogng/solbuild/CVS/Root /export/software/syslog-ng/doc/syslogng/solbuild/CVS/Tag /export/software/syslog-ng/doc/syslogng/solbuild/admin /export/software/syslog-ng/doc/syslogng/solbuild/pkginfo /export/software/syslog-ng/doc/syslogng/solbuild/pkginfo.in /export/software/syslog-ng/doc/syslogng/solbuild/pkgmaker.sh /export/software/syslog-ng/doc/syslogng/solbuild/prototype-maker.sh /export/software/syslog-ng/doc/syslogng/solbuild/rules /export/software/syslog-ng/doc/syslogng/solbuild/rules.conf /export/software/syslog-ng/doc/syslogng/solbuild/space /export/software/syslog-ng/doc/syslogng/solbuild/syslog-ng.init.d /export/software/syslog-ng/man/man5/syslog-ng.conf.5 /export/software/syslog-ng/man/man8/syslog-ng.8 /export/software/syslog-ng/sbin/syslog-ng [ verifying class ] Installation of was successful. bash-3.00#












How did you get rid of the requirement for the syslog-ng.conf file to be physically in /usr/local/etc ?
By relocating the basedir from /usr/local/ to /export/software, you are relocating the entire s/w tree. So if syslog-ng stored its config in $BASEDIR/etc, after relocation, it will be in /export/software/etc.