  RPM-for-Unix HOW-TO
  Al Dev (Alavoor Vasudevan)        alavoor[AT]yahoo.com
  v1.8, 27 Mar 2002

  This document will help you to setup Redhat RPM program on various
  Unix operating systems like Solaris, AIX, Irix, HPUX and many others.
  The information in this document applies to all flavors of Unix like -
  Solaris, HPUX, AIX, SCO, Sinix, BSD, NetBSD, Apple Macintosh (which is
  BSD), UnixWare, etc.. and may be useful to other operating systems (MS
  Windows 2000) which support "C" compiler.
  ______________________________________________________________________

  Table of Contents



  1. Introduction

  2. Install RPM

     2.1 Get Gnu "gcc"
     2.2 Get BerkeleyDB

  3. BerkeleyDB and gcc

     3.1 Solaris - BerkeleyDB and gcc
     3.2 AIX - BerkeleyDB and gcc
     3.3 IRIX Silicon Graphics - BerkeleyDB and gcc
     3.4 HPUX - BerkeleyDB and gcc
     3.5 UnixWare - BerkeleyDB and gcc
     3.6 Apple Macintosh OS X (Unix) - BerkeleyDB and gcc

  4. Compiling RPM

     4.1 Troubleshooting RPM Compile

  5. Using RPM

     5.1 Basic RPM Commands
     5.2 RPM Build Commands
     5.3 RPM Query Commands
     5.4 RPM Verify Commands

  6. Installing 8000 RPMs

     6.1 Bootstrap Programs - The Rocket Soars Up!!
     6.2 Install Foundation RPMs
     6.3 Troubleshoot Building Foundation RPMs

  7. Create gcc RPM Package

     7.1 Solaris Sparc gcc, glibc, kernel-headers and binutils
     7.2 PowerPC gcc, glibc, kernel-headers and binutils
     7.3 Create glibc RPM

  8. Use Debian Packages - Convert deb to rpm

     8.1 Debian Packing Program
     8.2 Debian to Redhat RPM

  9. Convert RPM to Solaris Package rpm2pkg

  10. Related URLs

  11. Other Formats of this Document

     11.1 Acrobat PDF format
     11.2 Convert Linuxdoc to Docbook format
     11.3 Convert to MS WinHelp format
     11.4 Reading various formats
     11.5 Convert HTML to SGML html2sgml

  12. Copyright



  ______________________________________________________________________

  1.  Introduction

  (The latest version of this document is at
  <http://www.milkywaygalaxy.freeservers.com>. You may want to check
  there for changes).

  Redhat RPM program is the key program to install Redhat Linux Source
  RPMs.  There are more than 8000 Redhat application programs available
  on the internet in rpm source-code format. If you just install rpm
  program on other flavors of Unix like Solaris, AIX, Irix or HPUX, then
  you can very easily compile, build and install any of those 8000
  application source RPMs.

  RPM is the "gateway" to thousands of applications and programs, which
  are in source code rpm format.

  Maintainence of application programs is extremely easy with RPM
  program.  You can very easily remove, add and upgrade the application
  package from the system. Using RPM program you can query the system to
  find the list of packages installed and you can even list the files
  installed by a particular package. RPM program can also give the exact
  path locations of the files installed by a particular package.

  The upgrades and updates can be automated using the rpm program and
  the Redhat Network support.

  The redhat rpm program is extremely powerful, extremely easy to use
  and is the most popular packaging program in the world. Packaging
  programs on other Unix platforms like pkgadd, smitt are very primitive
  and are not as powerful as rpm program. And rpm program is very
  portable and works on most Unix operating systems.

  The guidelines given here can be useful for setting up Debian package
  program deb on Solaris and other Unix flavors.  GNU Debian Linux is
  another popular distribution and uses deb program which is similar to
  rpm program . You can use either rpm or deb program.

  2.  Install RPM

  To install RPM program you need gcc and BerkeleyDB.  First you should
  decide the version of Redhat Linux which you want to use. The versions
  of Redhat Linux are 7.1 (latest), 6.2, 5.x (old versions).

  To build rpm package you need atleast BerkeleyDB and gcc compiler.  It
  is very important that you MUST select proper versions of gcc,
  BerkeleyDB and RPM source based on whether you want to represent
  Redhat 7.1, Redhat 6.2 or 5.x. If you happen to have a Redhat Linux
  box then do -

  ______________________________________________________________________
  bash$ rpm -qa | grep -i gcc
  bash$ rpm -qi gcc-2.96-81

  bash$ rpm -qa | grep -i db3
  bash$ rpm -qi db3-3.1.17-7

  bash$ rpm -qa | grep -i rpm
  bash$ rpm -qi rpm-4.0.2-8
  ______________________________________________________________________


  From above, you can get the proper version numbers.

  WARNING: If you do not use proper version numbers of gcc, db3 and rpm
  combinations then RPM program may not compile or work properly..

  For example - to target Redhat Linux 7.1 on Solaris, you should use
  gcc version 2.96, Sleepycat Berkeley DB version 3.1.17 and RPM source
  version 4.0.2.  Any other combination of versions WILL NOT work.

  You can see the list of files and programs needed to build rpm. Login
  on linux box and:

  ______________________________________________________________________
  bash$ rpm -qR rpm-4.0.2-8
  gawk
  fileutils
  textutils
  mktemp
  popt
  glibc >= 2.1.92
  db1 = 1.85
  /bin/sh
  /bin/sh
  /sbin/ldconfig
  ld-linux.so.2
  libbz2.so.1
  libc.so.6
  libdb-3.1.so
  libdb.so.2
  libpopt.so.0
  librpm.so.0
  librpmbuild.so.0
  librpmio.so.0
  libz.so.1
  /bin/sh
  libc.so.6(GLIBC_2.0)
  libc.so.6(GLIBC_2.1)
  libc.so.6(GLIBC_2.1.3)
  libc.so.6(GLIBC_2.2)
  libdb.so.2(GLIBC_2.0)
  rpmlib(CompressedFileNames) <= 3.0.4-1
  bash$

  To see to which package gawk belongs to do:

  bash$ rpm -qif /usr/bin/gawk
  Name        : gawk                         Relocations: (not relocateable)
  Version     : 3.0.6                             Vendor: Red Hat, Inc.
  Group       : Applications/Text             Source RPM: gawk-3.0.6-1.src.rpm
  ______________________________________________________________________



  2.1.  Get Gnu "gcc"

  First, you need to install the Gnu C compiler gcc.  You can use one of
  the following three sources:

  ·  Unix gcc package from ``'', ``'', ``'', ``'', ``'', ``''.


  ·  Redhat source rpm from cdrom or from  <http://www.redhat.com> or
     from  <http://www.rpmfind.net>


  ·  Download binaries from  <http://www.gnu.org> or gcc-home
     <http://www.gnu.org/software/gcc/gcc.html> where you can find gcc
     binary for Unix
     <http://www.gnu.org/software/gcc/install/binaries.html>.

  If you downloaded Solaris/Unix package:



  ______________________________________________________________________
  # su - root
  # man pkgadd
  # pkgadd -d gcc-sparc*.pkg
  ______________________________________________________________________



  If you downloaded rpm package:

  ______________________________________________________________________
  bash$ mkdir my_temp_build
  bash$ cd my_temp_build
  bash$ rpm2cpio gcc-*.src.rpm | cpio -dimv
  bash$ tar zxvf gcc*.tar.gz
  bash$ cd gcc-2.96
  bash$ ./configure
  bash$ make
  ______________________________________________________________________



  2.2.  Get BerkeleyDB

  Second, you need to install the BerkeleyDB embedded database from
  <http://www.sleepycat.com>.  RPM internally uses the embedded database
  BerkeleyDB to store the package information.  You can use one of the
  following three sources:

  ·  Redhat source rpm from cdrom or from  <http://www.redhat.com> or
     from  <http://www.rpmfind.net>


  ·  Download binaries from <http://www.sleepycat.com> go here and see
     Berkeley DB Patches and ChangeLogs
     <http://www.sleepycat.com/update/index.html> scroll down and select
     proper version like 3.1.17 (one which matches with Redhat Linux
     7.1).


  ·  Unix gcc package from ``'', ``'', ``'', ``'', ``'', ``''.

  If you downloaded source rpm or source tar.gz file:

  ______________________________________________________________________
  bash$ mkdir my_temp_build
  bash$ cd my_temp_build
  bash$ rpm2cpio db3-3.1.17-7.src.rpm | cpio -dimv
  bash$ tar zxvf db3*.tar.gz
  bash$ cd db3-3.1.17
  bash$ cd build_unix
  bash$ ../dist/configure --enable-compat185
  bash$ make
  bash$ make install
  ______________________________________________________________________



  If you downloaded Unix package:

  ______________________________________________________________________
  # su - root
  # man pkgadd
  # pkgadd -d db-3*-sparc*.pkg
  ______________________________________________________________________

  3.  BerkeleyDB and gcc

  Download BerkeleyDB and gcc for Unix as given below:

  3.1.  Solaris - BerkeleyDB and gcc

  You can get gcc and BerkeleyDB for Solaris from:

  ·  Solaris gcc package from  <http://www.sunfreeware.com>


  ·  Sparc, Sun Solaris, Ultra Sparc  <http://www.ultralinux.org>

  3.2.  AIX - BerkeleyDB and gcc

  You can get gcc and BerkeleyDB for AIX from:

  ·  IBM main site  <http://www-1.ibm.com/servers/aix/library> and
     download-site
     <http://www-1.ibm.com/servers/aix/library/downloads.html>.


  ·  Univ of California AIX site  <http://aixpdslib.seas.ucla.edu>


  ·  Norcal org site  <http://www.aiche-norcal.org/AIXtip/freeware.htm>


  ·  Bull site  <http://www.bull.de/pub>


  ·  The PowerPC arch rpms are at  <http://penguinppc.org>.

  3.3.  IRIX Silicon Graphics - BerkeleyDB and gcc

  You can get gcc and BerkeleyDB for SGI IRIX from:

  ·  SGI main site  <http://freeware.sgi.com>


  ·  SGI freware alphabetical listing  <http://freeware.sgi.com/index-
     by-alpha.html>

  3.4.  HPUX - BerkeleyDB and gcc

  You can get gcc and BerkeleyDB for HPUX from:

  ·  Gnu gcc for HPUX
     <http://devresource.hp.com/OpenSource/Tools/gcc/gcc.html>


  ·  HPUX opensource tools  <http://devresource.hp.com/OpenSource/Tools>
     and tool-list
     <http://devresource.hp.com/OpenSource/Tools/OpenSourceLib.html>


  ·  HPUX freeware <http://bak-px.online.sh.cn/mirrors/hpux.freeware>


  ·  HPUX Porting and Archive Center  <http://hpux.cs.utah.edu> and
     alphabetical listing <http://hpux.cs.utah.edu/hppd/hpux> and Gnu
     <http://hpux.cs.utah.edu/hppd/hpux/Gnu/alpha.html>



  3.5.  UnixWare - BerkeleyDB and gcc

  You can get gcc and BerkeleyDB for UnixWare from:

  ·  FreeBird site  <http://www.freebird.org>


  ·  Skunkware site  <http://www.sco.com/skunkware>


  ·  Gnu gcc for gcc-unixware <http://www.freebird.org/sw-
     map/developer.html> and faq-site <http://www.faqs.org/faqs/unix-
     faq/unixware/overview/section-1.html>

  3.6.  Apple Macintosh OS X (Unix) - BerkeleyDB and gcc

  You can get gcc and BerkeleyDB for Apple Macintosh OS X (which is BSD
  Unix) from:

  ·  Gnu gcc for Apple Mac OS shipped with OS  called "ProjectBuilder
     IDE" <http://developer.apple.com/tools/projectbuilder> and faq
     <http://maccentral.macworld.com/news/0007/13.macosx.shtml>


  ·  List of Opensource packages for Mac Darwin-project
     <http://www.publicsource.apple.com/projects/darwin/1.2/projects.html>


  ·  See also Fink Project <http://fink.sourceforge.net> Fink uses
     Debian tools like dpkg and apt-get to provide powerful binary
     package management.

  4.  Compiling RPM

  After building Berkeley DB3 and gcc, compile rpm program now.  Get rpm
  source code from one of the following two sources:

  ·  Redhat source rpm from cdrom or from  <http://www.redhat.com> or
     from  <http://www.rpmfind.net> and look for proper version like 7.1


  ·  Download source code of rpm from <http://www.rpm.org> go here and
     select proper version like 4.0.2 (one which matches with Redhat
     Linux 7.1).  Download from ftp-site <ftp://ftp.rpm.org/pub>.


  If you downloaded rpm*.tar.gz file:

  ______________________________________________________________________
  bash$ mkdir my_temp_build
  bash$ cd my_temp_build
  bash$ tar zxvf rpm*.tar.gz
  bash$ cd rpm-4.0.2
  bash$ export LIBS='-L/usr/local/BerkeleyDB.3.1/lib'
  bash$ export CPPFLAGS='-I/usr/local/BerkeleyDB.3.1/include'
  bash$ ./configure
  bash$ make
  ______________________________________________________________________



  If you downloaded rpm source code file follow the steps below.  But
  you may need rpm2cpio program, which is packaged in rpm package. Get
  rpm package (may be old version like 3.0) from ``''.


  ______________________________________________________________________
  bash$ mkdir my_temp_build
  bash$ cd my_temp_build
  bash$ rpm2cpio rpm-4.0.2-8.src.rpm | cpio -dimv
  bash$ tar zxvf rpm*.tar.gz
  bash$ cd rpm-4.0.2
  bash$ export LIBS='-L/usr/local/BerkeleyDB.3.1/lib'
  bash$ export CPPFLAGS='-I/usr/local/BerkeleyDB.3.1/include'
  bash$ ./configure
  bash$ make
  ______________________________________________________________________



  4.1.  Troubleshooting RPM Compile

  If you encounter any problem in compiling rpm program, you may have to
  do some minor corrections.

  In case of Solaris 8 and rpm v4.0.2, I got these problems:

  ·  Error db3/db.h not found in lib/db3.c. Solution is - create a soft
     link:

     ___________________________________________________________________
     bash# ln -s /usr/local/BerkeleyDB.3.1.17/include  /usr/include/db3

     Or edit the file lib/db3.c and change
     #include <db3/db.h>
     to
     #include <db.h>
     ___________________________________________________________________



  ·  Edit Makefile and put -L before libmisc.a at line 186


  ·  Compile error in file rpmsort.c: Function errx() not found.
     Solution is - edit the file rpmsort.c and copy and paste the
     function errx() from misc/err*.c. Or comment out line having errx()
     and put fprintf(stderr, "Error encountered - blah, blah"); exit(0);

  5.  Using RPM

  See also RPM-HOWTO <http://linuxdoc.org/HOWTO/RPM-HOWTO/use.html>
  document.

  5.1.  Basic RPM Commands

  In its simplest form, RPM can be used to install, erase or upgrade
  packages:

  ______________________________________________________________________
  bash# rpm -i foobar-1.0-1.i386.rpm   ...(to install packages)
  bash# rpm -i ftp://ftp.redhat.com/pub/redhat/RPMS/foo-1.0-1.i386.rpm ...(to install package via ftp)
  bash# rpm -e foobar  ...(to uninstall package)
  bash# rpm -U foobar-1.0-1.i386.rpm  ...(to upgrade package)
  bash# rpm --help  ...(to see help on rpm options)
  bash# man rpm  ...(to read online manual page)
  ______________________________________________________________________



  5.2.  RPM Build Commands

  To build rpm packages

  ______________________________________________________________________
  bash# rpm -i foobar*.src.rpm
  bash# cd /usr/src/redhat/SPECS
  bash# rpm -ba foobar-1.0-1.spec

  To build in incremental steps, do:
  bash# rpm -bp foobar-1.0-1.spec    ...( to do prep stage)
  bash# rpm --short-circuit -bc foobar-1.0-1.spec    ...( to do build stage)
  bash# rpm --short-circuit -bi foobar-1.0-1.spec    ...( to do install stage)
  bash# rpm -ba foobar-1.0-1.spec  ... (to do binary and source package)
  ______________________________________________________________________



  5.3.  RPM Query Commands

  You can query the rpm database with these powerful commands:

  ______________________________________________________________________
  bash$ rpm -qpl foobar-1.0-1.i386.rpm  ....(list of files in a rpm package)
  bash$ rpm -ql foobar-1.0-1   ....(list of files from already installed package)

  bash$ rpm -qpR foobar-1.0-1.i386.rpm  ....(list packages on which this package depends)
  bash$ rpm -qR foobar-1.0-1  ....(list packages on which this installed package depends)

  bash$ # rpm -q foo  ...(print package name, version, and release number of package foo)
  foo-2.0-1

  bash$ rpm -qa | less   ....(list all the installed package)
  bash$ rpm -qa | grep -i kde   ....(list all the installed package matching kde)
  bash$ rpm -qif /bin/ls ....(list the package which installed the file /bin/ls)

  To show the values RPM will use for all of the options that may be set in rpmrc files
  (/usr/lib/rpm/rpmrc, /etc/rpmrc, ~/.rpmrc ), type:
  bash$ rpm --showrc | less
  ______________________________________________________________________



  5.4.  RPM Verify Commands

  Verifying a package compares information about files installed from a
  package with the same information from the original package. Among
  other things, verifying compares the size, MD5 sum, permissions, type,
  owner and group of each file.

  The command rpm -V verifies a package. You can use any of the Package
  Selection Options listed for querying to specify the packages you wish
  to verify. A simple use is rpm -V foo which verifies that all the
  files in the foo package are as they were when they were originally
  installed. For example:


  ______________________________________________________________________
  bash$ rpm -Vf /bin/vi ...(To verify a package containing particular file)
  bash$ rpm -Va ...(To verify ALL installed packages)
  bash$ rpm -Vp foo-1.0-1.i386.rpm ...(To verify an installed package against an RPM package file)
  ______________________________________________________________________


  This can be useful if you suspect that your RPM databases are corrupt.

  If everything verified properly there will be no output. If there are
  any discrepancies they will be displayed. The format of the output is
  a string of 8 characters, a possible "c" denoting a configuration
  file, and then the file name. Each of the 8 characters denotes the
  result of a comparison of one attribute of the file to the value of
  that attribute recorded in the RPM database. A single "." (period)
  means the test passed. The following characters denote failure of
  certain tests:

  ______________________________________________________________________
       5 -- MD5 checksum
       S -- File size
       L -- Symbolic link
       T -- File modification time
       D -- Device
       U -- User
       G -- Group
       M -- Mode (includes permissions and file type)
       ? -- Unreadable file
  ______________________________________________________________________


  If you see any output, use your best judgment to determine if you
  should remove or reinstall the package, or otherwise fix the problem.

  6.  Installing 8000 RPMs

  Once RPM program is installed, it is a gateway to thousands of RPM
  packages which can be easily installed on the system.

  Prepare the rpm directories

  ______________________________________________________________________
  bash# su - root
  bash# mkdir -p /usr/local/src/redhat/BUILD
  bash# mkdir -p /usr/local/src/redhat/RPMS/sparc64
  bash# mkdir -p /usr/local/src/redhat/RPMS/noarch
  bash# mkdir -p /usr/local/src/redhat/SOURCES
  bash# mkdir -p /usr/local/src/redhat/SPECS
  bash# mkdir -p /usr/local/src/redhat/SRPMS
  ______________________________________________________________________



  You may want to edit the rpmrc file. In case of solaris 8, I had to
  remove the -m64 option for gcc, since it was giving compile errors.
  To show the values, RPM will use for all of the options that may be
  set in rpmrc files (/usr/local/lib/rpm/rpmrc, /usr/lib/rpm/rpmrc,
  /etc/rpmrc,  /.rpmrc ), type:

  ______________________________________________________________________
  bash$ rpm --showrc | less
  ______________________________________________________________________



  6.1.  Bootstrap Programs - The Rocket Soars Up!!

  Before building rpms you need the following basic programs:

  ·  install program from fileutils*.tar.gz

  ·  patch*.tar.gz

  ·  autoconf*.tar.gz

  ·  automake*.tar.gz

  ·  libtool*.tar.gz

  ·  gcc*.tar.gz

     You should download the tar.gz files or ``''. I downloaded solaris
     packages for fileutils.pkg, patch.pkg, libtool.pkg, gcc and others.
     You should install them in a temporary location like $HOME/localtmp

     ___________________________________________________________________
     bash# mkdir $HOME/localtmp
     bash# cd $HOME/localtmp
     bash# gzip -d libtool*.tar.gz
     bash# tar -xvf libtool*.tar
     bash# ./configure --with-prefix=$HOME/localtmp
     bash# make; make install
     ___________________________________________________________________


  You should include the temporary location of autoconf by:

  ______________________________________________________________________
  bash# PATH=$HOME/localtmp/bin:$PATH
  bash# export PATH
  ______________________________________________________________________



  6.2.  Install Foundation RPMs

  There are few basic rpms which must be installed before any other rpm
  is installed.  In this section, foundation rpms are listed which are
  found by using:

  ______________________________________________________________________
  bash# rpm -qR <packagename>
  bash# rpm -qR textinfo
  bash# rpm -qR fileutils
  bash# rpm -qR setup
  ______________________________________________________________________



  The foundation rpms in the order of dependency are as follows:

  ·  fileutils*.rpm

  ·  grep*.rpm (You may have to edit grep.spec and commentout --without-
     included-regex)

  ·  gawk*.rpm

  ·  sed*.rpm

  ·  texinfo*.rpm

  ·  zlib*.rpm and zlib-devel

  ·  patch*.rpm

  ·  setup*.rpm

  ·  filesystem*.rpm (You may not want install this if it effects /proc
     directory)

  ·  textutils*.rpm

  ·  glibc-common*.rpm

  ·  basesystem*.rpm

  ·  mktemp*.rpm

  ·  bash*.rpm

  ·  m4*.rpm (autoconf needs this)

  ·  autoconf

  ·  bison

  ·  binutils >= 2.9.1.0.25

  ·  gas, as, ld which are in binutils

  ·  shutils - for 'id' command

  Second stage foundation rpms are as follows.  After installing the
  foundation rpms, next important rpm is gcc, the order of rpms you need
  is:

  ·  glibc*.rpm

  ·  binutils*.rpm

  ·  kernel-headers*.rpm

  ·  glibc-devel*.rpm

  ·  gcc*.rpm

  Third stage rpms are as follows:

  ·  popt*.rpm

  ·  rpm*.rpm

  ·  perl*.rpm

  ·  And many others....

  As from previous section you should have exported temp location of
  autoconf, gcc and other programs by:

  ______________________________________________________________________
  bash# PATH=$HOME/localtmp/bin:$PATH
  bash# export PATH

  bash# rpm -i fileutils*.src.rpm
  bash# rpm -i zlib*.src.rpm
  bash# rpm -i texinfo*.src.rpm

  bash# cd /usr/local/src/redhat/SPECS
  bash# rpm -ba fileutils.spec
  ______________________________________________________________________



  After the build is successful, install it with "nodeps and
  excludedocs" to minimize the failures. After substantial installations
  of many foundation rpms you can "freshen" the rpms with rpm command.
  ______________________________________________________________________
  bash# cd /usr/local/src/redhat/RPMS/sparc64
  bash# rpm -i --nodeps --excludedocs fileutils*.rpm
  ______________________________________________________________________


  Move on to build and install the next rpm in the list texinfo, zlib,
  patch,....

  6.3.  Troubleshoot Building Foundation RPMs

  On Solaris 2.8, I encountered following problems which were fixed by
  correcting the spec file:

  ·  texinfo*.rpm: Edit the file texinfo.spec and change
     __spec_install_post, %build and %install sections:

     ___________________________________________________________________
     %define Rpmpath /usr/local
     %define __spec_install_post %{Rpmpath}/lib/rpm/brp-strip \; %{Rpmpath}/lib/rpm/brp-strip-comment-note \; rm -f

     %build
     %define _mandir %{_prefix}/share/man
     %define _infodir %{_prefix}/share/info
     %configure

     %install
     #mkdir -p ${RPM_BUILD_ROOT}/{etc,sbin}        .....this line is causing problems
     mkdir -p ${RPM_BUILD_ROOT}/etc
     mkdir -p ${RPM_BUILD_ROOT}/sbin
     ___________________________________________________________________



  ·  textutils*.rpm: Create a new unix group called 'other'. Type
     'groupadd other' and see 'man groupadd'. Second problem - edit
     textutils.spec file and in %files section replace hard-coded
     filenames/pathnames with %{_prefix}.

     ___________________________________________________________________
     %files
     # replace below line
     #/usr/bin/*
     # with the line given below
     %{_prefix}/bin/*
     ___________________________________________________________________



  ·  patch*.rpm: Edit patch.spec file and in %files section replace
     hard-coded filenames/pathnames with %{_prefix}.

     ___________________________________________________________________
     %files
     # replace below line
     #/usr/bin/*
     # with the line given below
     %{_prefix}/bin/*
     ___________________________________________________________________



  ·  gawk*.rpm: Edit gawk.spec file and in %files section and %install
     section replace hard-coded filenames/pathnames like /usr/something
     with %{_prefix}/something.


  ·  m4*.rpm: Edit m4.spec file and in %build section, the configure
     takes only --prefix and --exec-prefix. Also comment out autoconf.

  7.  Create gcc RPM Package

  The GNU gcc rpm is the most important rpm package which you should
  create after successfully creating rpm of RPM package.  In order to
  create GNU gcc rpm package, you need to install rpms, unix pkgs or
  manual configure and install the following (given in order of
  dependency) :

  ·  texinfo

  ·  patch

  ·  zlib and zlib-devel

  ·  fileutils >= 4.0.41

  ·  m4 >= 1.1 (autoconf needs this)

  ·  autoconf

  ·  bison

  ·  binutils >= 2.9.1.0.25

  ·  gas, as, ld which are in binutils

  ·  cpp - manual install gcc

  ·  gawk

  ·  shutils - for 'id' command

  ·  pthreads - Posix threads library

     You should download the tar.gz files or ``''. I downloaded solaris
     packages for texinfo.pkd, fileutils.pkg, patch.pkg, libtool.pkg,
     gcc and others.  If you download tar.gz source file then you should
     install them in a temporary location like $HOME/localtmp

     ___________________________________________________________________
     bash# mkdir $HOME/localtmp
     bash# cd $HOME/localtmp
     bash# gzip -d libtool*.tar.gz
     bash# tar -xvf libtool*.tar
     bash# ./configure --with-prefix=$HOME/localtmp
     bash# make; make install
     ___________________________________________________________________


  You should include the temporary location of autoconf by:

  ______________________________________________________________________
  bash# PATH=$HOME/localtmp/bin:$PATH
  bash# export PATH
  ______________________________________________________________________



  Now you are ready to build gcc rpm:

  ______________________________________________________________________
  bash# rpm -i gcc*.src.rpm
  bash# cd /usr/local/src/redhat/SPECS
  bash# rpm -ba gcc*.spec
  ______________________________________________________________________


  On Solaris 2.8 I had to make few changes to gcc*.spec file:

  1. In %build section : Insert --enable-hacker-mode option for
     configure command.  This is to correct error - "This configuration
     not supported in solaris 2.8".  If --enable-hacker-mode option does
     not work then you may have to comment out gcc_targetplatform within
     the code  %ifarch sparc .... %endif, just before the configure
     command.


  2. In %build section : For the configure command comment out
     %{_target_platform}, if configure fails.


  3. In %install section: Comment out numprocs = $(getconf _NPROCESSORS)
     and put numprocs=1. Since my box had 2 cpus I put numprocs=2. The
     solaris has /usr/bin/getconf which is different from GNU getconf in
     glibc.

     Setup shared lib in solaris:

     ___________________________________________________________________

     solaris# cd /var/ld
     solaris# man ld.so.1
     solaris# man crle
     solaris# crle  < hit return to see config info>
     solaris# crle /usr/lib:/usr/local/lib:/usr/local/pgsql/lib:/usr/local/BerkeleyDB.3.1/lib
     ___________________________________________________________________



  7.1.  Solaris Sparc gcc, glibc, kernel-headers and binutils

  You can download the source code rpm for sparc from sparc-gcc
  <http://www.rpmfind.net/linux/rpm2html/search.php?query=sparc> or go
  to  <http://www.rpmfind.net> and type sparc in the search field.  You
  can also download sparc-glibc, sparc-kernel-headers and sparc-binutils
  source rpms.

  ______________________________________________________________________
  solaris# rpm -i sparc-gcc*.src.rpm
  solaris# cd /usr/local/src/redhat/SPECS
  solaris# rpm -ba sparc-gcc.spec
  ______________________________________________________________________


  You may want to edit sparc-binutils.spec and in %install section: Com­
  ment out numprocs = $(getconf _NPROCESSORS) and put numprocs=1. Since
  my box had 2 cpus I put numprocs=2. The solaris has /usr/bin/getconf
  which is different from GNU getconf in glibc. Also change %files sec­
  tion change %doc /usr/man/man1/sparc-linux-ld.1.gz  to %doc
  /usr/man/man1/sparc-linux-ld.1.



  7.2.  PowerPC gcc, glibc, kernel-headers and binutils

  The PowerPC arch rpms are at  <http://penguinppc.org>.

  7.3.  Create glibc RPM

  If configure complains that your platform is not supported, then you
  may want to edit glibc.spec file and in %configure section put
  --enable-hacker-mode,

  For Solaris there is ready-made sparc-glibc*.src.rpm from sparc-gcc
  <http://www.rpmfind.net/linux/rpm2html/search.php?query=sparc> or go
  to  <http://www.rpmfind.net> and type sparc in the search field.

  The glibc needs the sparc-kernel-headers*.rpm which you can get from
  sparc-gcc
  <http://www.rpmfind.net/linux/rpm2html/search.php?query=sparc>.

  8.  Use Debian Packages - Convert deb to rpm

  Debian Linux is another popular distribution. You can use the debian
  packages for Sparc, PowerPC, m68k, MIPS, Alpha, Arm, Intel X86 or
  Itanium.

  8.1.  Debian Packing Program


  To build real debs that contain software, you'll need: binutils, cpp,
  cpio, dpkg-dev, file, gcc, libc6-dev, make, patch, perl dh-make,
  debhelper, devscripts, fakeroot and lintian . If your package needs to
  prompt the user for configuration information when it installs, get
  debconf .

  The main debian programs you need to get are:

  ·  dpkg-dev : This package contains the tools needed to create Debian
     archives. It also contains the Debian Programmers and Policy
     manuals.


  ·  debmake : This is a higher level set of tools for creating Debian
     packages. It makes the whole process tremendously easier.


  ·  debhelper : A collection of programs that can be used in a
     debian/rules file to automate common tasks related to building
     debian packages. Programs are included to install various files
     into your package, compress files, fix file permissions, integrate
     your package with the debian menu system, suidmanager, doc-base,
     etc. Most debian packages use debhelper as part of their build
     process.


  ·  debconf : Debconf is a configuration management system for debian
     packages. Packages use Debconf to ask questions when they are
     installed.


  ·  apt-howto : A Guide to APT.  This manual tries to be a quick but
     complete source of information about the APT system and its
     features.  It documents the main uses of APT with many examples.
     (You may want to edit apt-howto*.sgml and change debiandoc to
     linuxdoc and run sgml2html).

  Get these from  <http://www.debian.org/distrib/packages>, go here and
  type in the search box dpkg-dev or apt-howto and select Stable,
  Testing or Unstable in the distribution.  Download and build on your
  Unix system (Solaris, AIX, HPUX).

  See Debian Package Management
  <http://noframes.linuxjournal.com/articles/misc/0046.html> , Debian
  Policy Manual <http://www.debian.org/doc/debian-policy>, DebianNew
  Maintainer's Guide <http://www.debian.org/doc/maint-guide> and apt+rpm
  howto <http://bazar.conectiva.com.br/~godoy/apt-howto>.

  8.2.  Debian to Redhat RPM

  To install Debian packages on Sun Solaris 2.8 (Sparc/Ultra-sparc) I
  downloaded all the debian packages for sparc from
  <http://www.debian.org>. Go here and click on distribution->sparc.
  Better still, purchase the Debian binary and source cdrom for Sparc
  (or for PowerPC, Alpha).  Use alien program to convert the debian
  packages to redhat rpm.

  Get alien program from  <http://www.rpmfind.net>.

  ______________________________________________________________________
  solaris# rpm -i alien*.src.rpm
  solaris# rpm -ba alien.spec
  solaris# rpm -i alien.sparc.rpm
  solaris# alien -r glibc*.deb     (..... this will create the rpm file)
  solaris# rpm -i glibc-sparc*.rpm
  ______________________________________________________________________


  Convert all debian binary packages to rpm and install on Solaris 2.8
  OS.

  Note alien program works only for binary debian packages.

  9.  Convert RPM to Solaris Package rpm2pkg

  After building and installing all the RPMs on Solaris (or any Unix),
  you can convert those programs to Solaris (or any Unix) packages.

  To convert Redhat rpm to Solaris package do:

  ______________________________________________________________________
  bash# mkdir -p  $HOME/tmp/myprogram-1.4/usr/local
  bash# cd $HOME/tmp/myprogram-1.4/usr/local
  bash# rpm2cpio rpm-4.0.2-8.sparc64.rpm | cpio -dimv
  bash# tar -xvf rpm*.tar.gz
  bash# make_package
  ______________________________________________________________________



  And run the perl script make_package given at
  <http://www.sunfreeware.com/pkgadd.html>

  10.  Related URLs


  ·  Main site of RPM  <http://www.rpm.org>


  ·  Maximum RPM book  <http://www.rpmdp.org/rpmbook/node1.html>


  ·  RPM HOWTO  <http://linuxdoc.org/HOWTO/RPM-HOWTO/index.html>


  ·  RH manual - rpm
     <http://www.redhat.com/support/manuals/RHL-7-Manual/ref-
     guide/s1-rpm-using.html>


  ·  RPM Finder  <http://www.rpmfind.net>


  ·  RPM related sofware  <http://rpm.org/software.html>


  ·  RPM mailing lists  <http://rpm.org/mailing_list.html>


  ·  Sparc, Sun Solaris, Ultra Sparc  <http://www.ultralinux.org>


  ·  The PowerPC arch rpms are at  <http://penguinppc.org>.


  Linux goodies main site is at
  <http://www.milkywaygalaxy.freeservers.com> Mirror sites are at -
  <http://aldev0.webjump.com>, angelfire
  <http://www.angelfire.com/country/aldev0>, geocities
  <http://www.geocities.com/alavoor/index.html>, virtualave
  <http://aldev0.virtualave.net>, 50megs <http://aldev0.50megs.com>,
  theglobe <http://members.theglobe.com/aldev1/index.html>, NBCi
  <http://members.nbci.com/alavoor>, Terrashare
  <http://aldev.terrashare.com>, Fortunecity
  <http://members.fortunecity.com/aldev>, Freewebsites
  <http://aldev.freewebsites.com>, Tripod
  <http://members.tripod.lycos.com/aldev>, Spree
  <http://members.spree.com/technology/aldev>, Escalix
  <http://www.escalix.com/freepage/aldev>, Httpcity
  <http://www.httpcity.com/aldev/index.html>, Freeservers
  <http://aldev.freeservers.com>.

  11.  Other Formats of this Document

  This document is published in 14 different formats namely: DVI,
  Postscript, Latex, Adobe Acrobat PDF, LyX, GNU-info, HTML, RTF(Rich
  Text Format), Plain-text, Unix man pages, single HTML file, SGML
  (Linuxdoc format), SGML (Docbook format), and MS WinHelp format.

  This howto document is located at:

  ·  <http://www.linuxdoc.org> and click on HOWTOs and search for the
     howto document name using CTRL+f or ALT+f within the web-browser.

  You can also find this document at the following mirrors sites:

  ·  <http://www.caldera.com/LDP/HOWTO>

  ·  <http://www.linux.ucla.edu/LDP>

  ·  <http://www.cc.gatech.edu/linux/LDP>

  ·  <http://www.redhat.com/mirrors/LDP>

  ·  Other mirror sites near you (network-address-wise) can be found at
     <http://www.linuxdoc.org/mirrors.html> select a site and go to
     directory /LDP/HOWTO/xxxxx-HOWTO.html



  ·  You can get this HOWTO document as a single file tar ball in HTML,
     DVI, Postscript or SGML formats from -
     <ftp://www.linuxdoc.org/pub/Linux/docs/HOWTO/other-formats/> and
     <http://www.linuxdoc.org/docs.html#howto>


  ·  Plain text format is in:
     <ftp://www.linuxdoc.org/pub/Linux/docs/HOWTO> and
     <http://www.linuxdoc.org/docs.html#howto>


  ·  Single HTML file format is in:
     <http://www.linuxdoc.org/docs.html#howto>

     A single HTML file can be created with the command (see man
     sgml2html) - sgml2html -split 0   xxxxhowto.sgml


  ·  Translations to other languages like French, German, Spanish,
     Chinese, and Japanese are in
     <ftp://www.linuxdoc.org/pub/Linux/docs/HOWTO> and
     <http://www.linuxdoc.org/docs.html#howto> Any help from you to
     translate to other languages is welcome.

     The document is written using a tool called "SGML-Tools" which can
     be got from: <http://www.sgmltools.org> Compiling the source you
     will get the following commands like:

  ·  sgml2html xxxxhowto.sgml     (to generate html file)

  ·  sgml2html -split 0   xxxxhowto.sgml (to generate a single page html
     file)

  ·  sgml2rtf  xxxxhowto.sgml     (to generate RTF file)

  ·  sgml2latex xxxxhowto.sgml    (to generate latex file)

  11.1.  Acrobat PDF format

  A PDF file can be generated from postscript file using either acrobat
  distill or Ghostscript.  And a postscript file is generated from DVI
  which in turn is generated from a LaTex file.  You can download
  distill software from  <http://www.adobe.com> and from unix
  <http://www.adobe.com/support/downloads/acdunix.htm> and from windows
  <http://www.adobe.com:80/support/downloads/acdwin.htm> . Given below
  is a sample session:

  ______________________________________________________________________
  bash$ man sgml2latex
  bash$ sgml2latex filename.sgml
  bash$ man dvips
  bash$ dvips -o filename.ps filename.dvi
  bash$ distill filename.ps
  bash$ man ghostscript
  bash$ man ps2pdf
  bash$ ps2pdf input.ps output.pdf
  bash$ acroread output.pdf &
  ______________________________________________________________________


  Or you can use the Ghostscript command ps2pdf.  ps2pdf is a work-alike
  for nearly all the functionality of Adobe's Acrobat Distiller product:
  it converts PostScript files to Portable Document Format (PDF) files.
  ps2pdf is implemented as a very small command script (batch file) that
  invokes Ghostscript, selecting a special "output device" called
  pdfwrite. In order to use ps2pdf, the pdfwrite device must be included
  in the makefile when Ghostscript was compiled; see the documentation
  on building Ghostscript for details.

  11.2.  Convert Linuxdoc to Docbook format

  This document is written in linuxdoc SGML format. The Docbook SGML
  format supercedes the linuxdoc format and has a lot more features than
  linuxdoc.  The linuxdoc is very simple and easy to use. To convert
  linuxdoc SGML file to Docbook SGML use the program ld2db.sh and some
  Perl scripts.  The ld2db output is not 100% clean and you need to use
  the clean_ld2db.pl Perl script. You may need to manually correct a few
  lines in the document.

  ·  Download the ld2db program from
     <http://www.dcs.gla.ac.uk/~rrt/docbook.html> or from Milkyway
     Galaxy site <http://www.milkywaygalaxy.freeservers.com>

  ·  Download the cleanup_ld2db.pl perl script from from Milkyway Galaxy
     site <http://www.milkywaygalaxy.freeservers.com>

     The ld2db.sh is not 100% clean, so you will get some errors when
     you run it.

     ___________________________________________________________________
             bash$ ld2db.sh file-linuxdoc.sgml db.sgml
             bash$ cleanup.pl db.sgml > db_clean.sgml
             bash$ gvim db_clean.sgml
             bash$ docbook2html db.sgml
     ___________________________________________________________________


  And you may have to manually edit some of the minor errors after run­
  ning the Perl script. For example you may need to put closing tag <
  /Para> for each < Listitem>

  11.3.  Convert to MS WinHelp format

  You can convert the SGML howto document to a Microsoft Windows Help
  file, First convert the sgml to html using:

  ______________________________________________________________________
          bash$ sgml2html xxxxhowto.sgml     (to generate html file)
          bash$ sgml2html -split 0   xxxxhowto.sgml (to generate a single page html file)
  ______________________________________________________________________


  Then use the tool HtmlToHlp <http://javadocs.planetmirror.com/html­
  tohlpe.html>.  You can also use sgml2rtf and then use the RTF files
  for generating winhelp files.

  11.4.  Reading various formats

  In order to view the document in dvi format, use the xdvi program. The
  xdvi program is located in tetex-xdvi*.rpm package in Redhat Linux
  which can be located through ControlPanel | Applications | Publishing
  | TeX menu buttons.  To read a dvi document give the command:


               xdvi -geometry 80x90 howto.dvi
               man xdvi



  And resize the window with the mouse.  To navigate use Arrow keys,
  Page Up, Page Down keys, also you can use 'f', 'd', 'u', 'c', 'l',
  'r', 'p', 'n' letter keys to move up, down, center, next page, previ­
  ous page etc.  To turn off expert menu press 'x'.

  You can read a postscript file using the program 'gv' (ghostview) or
  The ghostscript program is in the ghostscript*.rpm package and the gv
  program is in the gv*.rpm package in Redhat Linux which can be located
  through ControlPanel | Applications | Graphics menu buttons. The gv
  program is much more user friendly than ghostscript.  Also ghostscript
  and gv are available on other platforms like OS/2, Windows 95 and NT.
  You  can view this document even on those platforms.


  ·  Get ghostscript for Windows 95, OS/2, and for all OSes from
     <http://www.cs.wisc.edu/~ghost>

  To read a postscript document give the command:


                       gv howto.ps
                       ghostscript howto.ps



  You can read an HTML format document using Netscape Navigator,
  Microsoft Internet explorer, Redhat Baron Web browser or any of the 10
  other web browsers.

  You can read the latex, LyX output using LyX an X Window front end to
  LaTex.

  11.5.  Convert HTML to SGML html2sgml

  To convert any HTML document to Linuxdoc SGML use the tool 'html2sgml'
  from  <http://www.abc.se/~m9339/prog/html2sgml.html>.

  12.  Copyright

  Copyright policy is GNU/GPL as per LDP (Linux Documentation project).
  LDP is a GNU/GPL project.  Additional restrictions are - you must
  retain the author's name, email address and this copyright notice on
  all the copies. If you make any changes or additions to this document
  then you should intimate all the authors of this document.



