February 4, 2012

relocating packages in Solaris 10

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
Transferring  package 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  from 

syslogng(sparc) 1.6.11
B. Scheidler
Using  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 of  failed (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
Transferring  package 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  from 

syslogng(sparc) 1.6.11
B. Scheidler
Using  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 as 

## 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#

Comments

  1. Spook says:

    How did you get rid of the requirement for the syslog-ng.conf file to be physically in /usr/local/etc ?

  2. 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.

Speak Your Mind

*