<!doctype linuxdoc system>
<!-- 

************************** begin comment *****************************
     The following is the HOW-TO for setting up Redhat RPM and rpm 
	 packages under various unix systems like Solaris, AIX, Irix, HPUX 
	 etc..
	 This document is in the SGML format. You must use sgml package to 
	 process this document
************************* end of comment *****************************

-->
<!--
************************** SGML USER GUIDE *****************************
	The SGML user guide on linux is located at /usr/doc/sgml-tools
	Read the example.sgml and guide.html documents.
	Usage:
		HTML	  	sgml2html foo  (Do not give extension .sgml here!!)
		Text	 	sgml2txt foo.sgml
		Latex	  	sgml2latex foo.sgml

		Note: Use 2 dashes - before language, error while compiling
		Postscript 	sgml2latex -language=english -o ps foo.sgml
		DVI  		sgml2latex -d foo.sgml
		Lyx		sgml2lyx foo.sgml
		Richtext 	sgml2rtf foo.sgml
		gnuinfo  	sgml2info foo.sgml
		man		sgml2txt -man foo.sgml
		SGML	 	sgmlcheck foo.sgml
************************* end of comment *****************************
-->

<article>

<!-- Title information -->

<title>RPM-for-Unix HOW-TO
<!-- chapt change
RPM-Solaris-AIX-Irix-HPUX HOW-TO



-->
<author>Al Dev (Alavoor Vasudevan) 
       <htmlurl url="mailto:alavoor[AT]yahoo.com"
             name="alavoor[AT]yahoo.com">
<date>v1.8, 27 Mar 2002
<abstract>
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.
</abstract>

<!-- Table of contents -->
<toc>

<!-- Begin the document -->

<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt>Introduction
-->
<sect>Introduction
<p>
<bf>
(The latest version of this document is 
at <url url="http://www.milkywaygalaxy.freeservers.com">. You may
want to check there for changes).
</bf>

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 
<bf>rpm</bf> 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 
<bf>rpm</bf> program
and the Redhat Network support.

<it>The redhat <bf>rpm</bf> 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 <bf>rpm</bf> program. And
<bf>rpm</bf> program is very portable and works on most Unix operating systems.</it>

The guidelines given here can be useful for setting up
Debian package program
<bf>deb</bf> on Solaris and other Unix flavors.
GNU Debian Linux is another popular distribution and uses <bf>deb</bf> program
which is similar to 
<bf>rpm</bf> program
. You can use either 
<bf>rpm</bf> or
<bf>deb</bf> program.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt>Install RPM
-->
<sect>Install RPM
<p>
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
<bf>rpm</bf> 
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 -
<code>
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 
</code>
From above, you can get the proper version numbers. 

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

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 <bf>WILL NOT</bf> work.

You can see the list of files and programs needed to build rpm. Login on linux box and:
<code>
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
</code>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1>Get Gnu "gcc"
<p>
First, you need to install the Gnu C compiler gcc. 
You can use one of the following three sources: 
<itemize>
<item> Unix gcc package from 
<ref id="Solaris package">,
<ref id="AIX package">,
<ref id="IRIX package">,
<ref id="HPUX package">,
<ref id="UnixWare package">,
<ref id="Mac OS package">.
<p>
<item> Redhat source rpm from cdrom or from <url url="http://www.redhat.com">
or from <url url="http://www.rpmfind.net">
<p>
<item> Download binaries from <url url="http://www.gnu.org">
or <url name="gcc-home" url="http://www.gnu.org/software/gcc/gcc.html">
where you can find <url name="gcc binary for Unix" url="http://www.gnu.org/software/gcc/install/binaries.html">.
</itemize>

If you downloaded Solaris/Unix package:
<code>
# su - root
# man pkgadd
# pkgadd -d gcc-sparc*.pkg
</code>

If you downloaded rpm package:
<code>
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
</code>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1>Get BerkeleyDB
<p>
Second, you need to install the BerkeleyDB embedded database from 
<url url="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: 
<itemize>
<item> Redhat source rpm from cdrom or from <url url="http://www.redhat.com">
or from <url url="http://www.rpmfind.net">
<p>
<item> Download binaries from 
<url url="http://www.sleepycat.com"> go here and see
<url name="Berkeley DB Patches and ChangeLogs" url="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).
<p>
<item> Unix gcc package from 
<ref id="Solaris package">,
<ref id="AIX package">,
<ref id="IRIX package">,
<ref id="HPUX package">,
<ref id="UnixWare package">,
<ref id="Mac OS package">.
</itemize>

If you downloaded source rpm or source tar.gz file:
<code>
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
</code>

If you downloaded Unix package:
<code>
# su - root
# man pkgadd
# pkgadd -d db-3*-sparc*.pkg
</code>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt>BerkeleyDB and gcc
-->
<sect>BerkeleyDB and gcc <label id="Unix packages">
<p>
Download BerkeleyDB and gcc for Unix as given below:
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1>Solaris - BerkeleyDB and gcc 
<label id="Solaris package">
<p>
You can get gcc and BerkeleyDB for Solaris from:
<itemize>
<item> Solaris gcc package from <url url="http://www.sunfreeware.com">
<p>
<item> Sparc, Sun Solaris, Ultra Sparc <url url="http://www.ultralinux.org">
</itemize>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1>AIX - BerkeleyDB and gcc
<label id="AIX package">
<p>
You can get gcc and BerkeleyDB for AIX from:
<itemize>
<item> IBM main site <url url="http://www-1.ibm.com/servers/aix/library"> and 
<url name="download-site" url="http://www-1.ibm.com/servers/aix/library/downloads.html">.
<p>
<item> Univ of California AIX site <url url="http://aixpdslib.seas.ucla.edu">
<p>
<item> Norcal org site <url url="http://www.aiche-norcal.org/AIXtip/freeware.htm">
<p>
<item> Bull site <url url="http://www.bull.de/pub">
<p>
<item>The PowerPC arch rpms are at <url url="http://penguinppc.org">.
</itemize>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1>IRIX Silicon Graphics - BerkeleyDB and gcc
<label id="IRIX package">
<p>
You can get gcc and BerkeleyDB for SGI IRIX from:
<itemize>
<item> SGI main site <url url="http://freeware.sgi.com">
<p>
<item> SGI freware alphabetical listing <url url="http://freeware.sgi.com/index-by-alpha.html">
</itemize>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1>HPUX - BerkeleyDB and gcc
<label id="HPUX package">
<p>
You can get gcc and BerkeleyDB for HPUX from:
<itemize>
<item> Gnu gcc for HPUX <url url="http://devresource.hp.com/OpenSource/Tools/gcc/gcc.html">
<p>
<item> HPUX opensource tools <url url="http://devresource.hp.com/OpenSource/Tools">
and <url name="tool-list" url="http://devresource.hp.com/OpenSource/Tools/OpenSourceLib.html">
<p>
<item> <url name="HPUX freeware" url="http://bak-px.online.sh.cn/mirrors/hpux.freeware">
<p>
<item> HPUX Porting and Archive Center <url url="http://hpux.cs.utah.edu">
and <url name="alphabetical listing" url="http://hpux.cs.utah.edu/hppd/hpux">
and <url name="Gnu" url="http://hpux.cs.utah.edu/hppd/hpux/Gnu/alpha.html">
</itemize>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1>UnixWare - BerkeleyDB and gcc
<label id="UnixWare package">
<p>
You can get gcc and BerkeleyDB for UnixWare from:
<itemize>
<item> FreeBird site <url url="http://www.freebird.org">
<p>
<item> Skunkware site <url url="http://www.sco.com/skunkware">
<p>
<item> Gnu gcc for 
<url name="gcc-unixware" url="http://www.freebird.org/sw-map/developer.html">
and
<url name="faq-site" url="http://www.faqs.org/faqs/unix-faq/unixware/overview/section-1.html">
</itemize>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1>Apple Macintosh OS X (Unix) - BerkeleyDB and gcc
<label id="Mac OS package">
<p>
You can get gcc and BerkeleyDB for Apple Macintosh OS X (which is BSD Unix) from:
<itemize>
<item> Gnu gcc for Apple Mac OS shipped with OS  called "ProjectBuilder IDE"
<url url="http://developer.apple.com/tools/projectbuilder">
and
<url name="faq" url="http://maccentral.macworld.com/news/0007/13.macosx.shtml">
<p>
<item> List of Opensource packages for Mac <url name="Darwin-project" url="http://www.publicsource.apple.com/projects/darwin/1.2/projects.html">
<p>
<item> See also <url name="Fink Project" url="http://fink.sourceforge.net">
Fink uses Debian tools like dpkg and apt-get to provide powerful binary package management.
</itemize>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt>Compiling RPM
-->
<sect>Compiling RPM
<p>
After building Berkeley DB3 and gcc, compile rpm program now.
Get rpm source code from one of the following two sources: 
<itemize>
<item> Redhat source rpm from cdrom or from <url url="http://www.redhat.com">
or from <url url="http://www.rpmfind.net"> and look for proper version like 7.1
<p>
<item> Download source code of rpm from 
<url url="http://www.rpm.org"> go here 
and select proper version like 4.0.2 (one which matches with Redhat Linux 7.1).
Download from <url name="ftp-site" url="ftp://ftp.rpm.org/pub">.
</itemize>


If you downloaded rpm*.tar.gz file:
<code>
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
</code>

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 
<ref id="Unix packages">.
<code>
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
</code>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Troubleshooting RPM Compile<label id="troubleshoot">
<p>
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:
<itemize>
<item> Error db3/db.h not found in lib/db3.c. Solution is - create a soft link:
<code>
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> 
</code>
<p>
<item> Edit Makefile and put -L before libmisc.a at line 186
<p>
<item> 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);
</itemize>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt>Using RPM
-->
<sect>Using RPM
<p>
See also <url name="RPM-HOWTO" url="http://linuxdoc.org/HOWTO/RPM-HOWTO/use.html"> document.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Basic RPM Commands<label id="basicrpm">
<p>
In its simplest form, RPM can be used to install, erase or upgrade packages: 
<code>
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)
</code>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1>RPM Build Commands<label id="buildrpm">
<p>
To build rpm packages
<code>
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)
</code>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1>RPM Query Commands<label id="queryrpm">
<p>
You can query the rpm database with these powerful commands:
<code>
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
</code>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1>RPM Verify Commands<label id="verifyrpm">
<p>
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 <bf>rpm -V</bf> 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
<bf>rpm -V</bf> foo which verifies that all the files in the foo package
are as they were when they were originally installed. For example: 

<code>
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)
</code>
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: 
<code>
     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 
</code>
If you see any output, use your best judgment to determine 
if you should remove or reinstall the package, or otherwise fix the problem. 
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt>Installing 8000 RPMs
-->
<sect>Installing 8000 RPMs
<p>
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
<code>
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
</code>

You may want to edit the <bf>rpmrc</bf> file. In case of solaris 8,
I had to remove the <bf>-m64</bf> 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:
<code>
bash$ rpm --showrc | less
</code>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Bootstrap Programs - The Rocket Soars Up!!<label id="bootstrap">
<p>
Before building rpms you need the following basic programs:
<itemize>
<item> install program from fileutils*.tar.gz
<item> patch*.tar.gz
<item> autoconf*.tar.gz
<item> automake*.tar.gz
<item> libtool*.tar.gz
<item> gcc*.tar.gz
</itemize>
You should download the tar.gz files or 
<ref id="Unix packages">. 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
<code>
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
</code>
You should include the temporary location of autoconf by:
<code>
bash# PATH=$HOME/localtmp/bin:$PATH
bash# export PATH
</code>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Install Foundation RPMs <label id="foundationrpm">
<p>
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:
<code>
bash# rpm -qR <packagename>
bash# rpm -qR textinfo
bash# rpm -qR fileutils
bash# rpm -qR setup
</code>

The foundation rpms in the order of dependency are as follows:
<itemize>
<item> fileutils*.rpm
<item> grep*.rpm (You may have to edit grep.spec and commentout --without-included-regex)
<item> gawk*.rpm
<item> sed*.rpm
<item> texinfo*.rpm
<item> zlib*.rpm and zlib-devel
<item> patch*.rpm
<item> setup*.rpm
<item> filesystem*.rpm (You may not want install this if it effects /proc directory)
<item> textutils*.rpm
<item> glibc-common*.rpm
<item> basesystem*.rpm
<item> mktemp*.rpm
<item> bash*.rpm
<item> m4*.rpm (autoconf needs this)
<item> autoconf 
<item> bison 
<item> binutils >= 2.9.1.0.25 
<item> gas, as, ld which are in binutils
<item> shutils - for 'id' command 
</itemize>

Second stage foundation rpms are as follows.
After installing the foundation rpms, next important rpm is gcc, the order of rpms you need is:
<itemize>
<item> glibc*.rpm
<item> binutils*.rpm
<item> kernel-headers*.rpm
<item> glibc-devel*.rpm
<item> gcc*.rpm
</itemize>

Third stage rpms are as follows:
<itemize>
<item> popt*.rpm
<item> rpm*.rpm
<item> perl*.rpm
<item> And many others....
</itemize>

As from previous section you should have exported temp 
location of autoconf, gcc and other programs by:
<code>
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
</code>

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.
<code>
bash# cd /usr/local/src/redhat/RPMS/sparc64
bash# rpm -i --nodeps --excludedocs fileutils*.rpm
</code>
Move on to build and install the next rpm in the list texinfo, zlib, patch,....
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Troubleshoot Building Foundation RPMs <label id="troublefoundation">
<p>
On Solaris 2.8, I encountered following problems which were fixed by 
correcting the spec file:
<itemize>
<item> <bf>texinfo*.rpm: </bf> 
Edit the file texinfo.spec and change __spec_install_post, %build and %install sections:
<code>
%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
</code>
<p>
<item> <bf>textutils*.rpm: </bf> 
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}.
<code>
%files
# replace below line
#/usr/bin/*
# with the line given below
%{_prefix}/bin/*
</code>
<p>
<item> <bf>patch*.rpm: </bf> 
Edit patch.spec file and in %files section replace
hard-coded filenames/pathnames with %{_prefix}.
<code>
%files
# replace below line
#/usr/bin/*
# with the line given below
%{_prefix}/bin/*
</code>
<p>
<item> <bf>gawk*.rpm: </bf> 
Edit gawk.spec file and in %files section and %install section replace
hard-coded filenames/pathnames like /usr/something with %{_prefix}/something.
<p>
<item> <bf>m4*.rpm: </bf> 
Edit m4.spec file and in %build section, the configure takes only
--prefix and --exec-prefix. Also comment out autoconf.
</itemize>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt>Create gcc RPM Package
-->
<sect>Create gcc RPM Package
<p>
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) :
<itemize>
<item> texinfo
<item> patch
<item> zlib and zlib-devel
<item> fileutils >= 4.0.41
<item> m4 >= 1.1 (autoconf needs this) 
<item> autoconf 
<item> bison 
<item> binutils >= 2.9.1.0.25 
<item> gas, as, ld which are in binutils
<item> cpp - manual install gcc 
<item> gawk 
<item> shutils - for 'id' command 
<item> pthreads - Posix threads library 
</itemize>
You should download the tar.gz files or 
<ref id="Unix packages">. 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
<code>
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
</code>
You should include the temporary location of autoconf by:
<code>
bash# PATH=$HOME/localtmp/bin:$PATH
bash# export PATH
</code>

Now you are ready to build gcc rpm:
<code>
bash# rpm -i gcc*.src.rpm
bash# cd /usr/local/src/redhat/SPECS
bash# rpm -ba gcc*.spec
</code>
On Solaris 2.8 I had to make few changes to gcc*.spec file:
<enum>
<item> In %build section :  
Insert <bf><it>--enable-hacker-mode</it></bf> option for configure command.
This is to correct error 
- "This configuration not supported in solaris 2.8".
If <bf><it>--enable-hacker-mode</it></bf> option does not work then you may have to
comment out gcc_targetplatform within the code  %ifarch sparc .... %endif, 
just before the configure command.
<p>
<item> In %build section :  
For the configure command comment out %{_target_platform}, if configure fails.
<p>
<item> 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.
</enum>
Setup shared lib in solaris:
<code> 
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
</code>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Solaris Sparc gcc, glibc, kernel-headers and binutils <label id="sparcgcc">
<p>
You can download the source code rpm for sparc from
<url name="sparc-gcc" url="http://www.rpmfind.net/linux/rpm2html/search.php?query=sparc">
or go to <url url="http://www.rpmfind.net"> and type <bf>sparc</bf> in the search field.
You can also download sparc-glibc, sparc-kernel-headers and sparc-binutils source rpms.
<code>
solaris# rpm -i sparc-gcc*.src.rpm
solaris# cd /usr/local/src/redhat/SPECS
solaris# rpm -ba sparc-gcc.spec
</code>
You may want to edit sparc-binutils.spec and
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. Also change %files section change 
%doc /usr/man/man1/sparc-linux-ld.1.gz  to
%doc /usr/man/man1/sparc-linux-ld.1.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> PowerPC gcc, glibc, kernel-headers and binutils <label id="powerpc">
<p>
The PowerPC arch rpms are at <url url="http://penguinppc.org">.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1>Create glibc RPM <label id="glibc">
<p>
If configure complains that your platform is not supported, then
you may want to edit glibc.spec file and in %configure section 
put <it>--enable-hacker-mode</it>, 

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

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




<chapt>Use Debian Packages - Convert deb to rpm<label id="debian">
-->
<sect>Use Debian Packages - Convert deb to rpm<label id="debian">
<p>
Debian Linux is another popular distribution. You can use the debian packages
for Sparc, PowerPC, m68k, MIPS, Alpha, Arm, Intel X86 or Itanium.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1>Debian Packing Program<label id="debpgm">
<p>

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

The main debian programs you need to get are:
<itemize>
<item> dpkg-dev : This package contains the tools needed to create Debian archives. It also contains the Debian Programmers and Policy manuals. 
<p>
<item> debmake : This is a higher level set of tools for creating Debian packages. It makes the whole process tremendously easier. 
<p>
<item> 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.
<p>
<item> debconf : Debconf is a configuration management system for debian packages. Packages use Debconf to ask questions when they are installed.
<p>
<item> 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).
</itemize>

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

See 
<url name="Debian Package Management" url="http://noframes.linuxjournal.com/articles/misc/0046.html">
, Debian
<url name="Policy Manual" url="http://www.debian.org/doc/debian-policy">,
Debian<url name="New Maintainer's Guide"  url="http://www.debian.org/doc/maint-guide">
and <url name="apt+rpm howto" url="http://bazar.conectiva.com.br/~godoy/apt-howto">.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1>Debian to Redhat RPM <label id="deb2rpm">
<p>
To install Debian packages on Sun Solaris 2.8 (Sparc/Ultra-sparc) I downloaded
all the debian packages for sparc from
<url url="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 
<bf>alien</bf> program to convert the debian packages to redhat <bf>rpm</bf>.

Get 
<bf>alien</bf> program
from <url url="http://www.rpmfind.net">.
<code>
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
</code>
Convert all debian binary packages to rpm and install on Solaris 2.8 OS.

Note 
<bf>alien</bf> program
works only for binary debian packages.
<!--
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt>Convert RPM to Solaris Package rpm2pkg
-->
<sect>Convert RPM to Solaris Package rpm2pkg
<p>
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:
<code>
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
</code>

And run the perl script <bf>make_package</bf> given at
<url url="http://www.sunfreeware.com/pkgadd.html">
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt>Related URLs
-->
<sect>Related URLs
<p>
<itemize>
<item> Main site of RPM <url url="http://www.rpm.org">
<p>
<item> Maximum RPM book <url url="http://www.rpmdp.org/rpmbook/node1.html">
<p>
<item> RPM HOWTO <url url="http://linuxdoc.org/HOWTO/RPM-HOWTO/index.html">
<p>
<item> <url name="RH manual - rpm" url="http://www.redhat.com/support/manuals/RHL-7-Manual/ref-guide/s1-rpm-using.html">
<p>
<item> RPM Finder <url url="http://www.rpmfind.net">
<p>
<item> RPM related sofware <url url="http://rpm.org/software.html">
<p>
<item> RPM mailing lists <url url="http://rpm.org/mailing_list.html">
<p>
<item> Sparc, Sun Solaris, Ultra Sparc <url url="http://www.ultralinux.org">
<p>
<item>The PowerPC arch rpms are at <url url="http://penguinppc.org">.
</itemize>


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




<chapt change> Other Formats of this Document
-->
<sect> Other Formats of this Document
<p>
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:
<itemize>
<item> <url url="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.
</itemize>

You can also find this document at the following mirrors sites: 
<itemize>
<item> <url url="http://www.caldera.com/LDP/HOWTO">
<item> <url url="http://www.linux.ucla.edu/LDP">
<item> <url url="http://www.cc.gatech.edu/linux/LDP">
<item> <url url="http://www.redhat.com/mirrors/LDP">

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


<itemize>
<item>
You can get this HOWTO document as a single file tar ball in HTML, DVI, 
Postscript or SGML formats from -
<url url="ftp://www.linuxdoc.org/pub/Linux/docs/HOWTO/other-formats/">
and <url url="http://www.linuxdoc.org/docs.html#howto">
<p>
<item>Plain text format is in: <url url="ftp://www.linuxdoc.org/pub/Linux/docs/HOWTO">
and <url url="http://www.linuxdoc.org/docs.html#howto">
<p>
<item>Single HTML file format is in: 
<url url="http://www.linuxdoc.org/docs.html#howto">
<p> A single HTML file can be created with the command (see man sgml2html) - 
sgml2html -split 0   xxxxhowto.sgml
<p>
<item>Translations to other languages like French, German, Spanish, 
Chinese, and Japanese are in
<url url="ftp://www.linuxdoc.org/pub/Linux/docs/HOWTO">
and <url url="http://www.linuxdoc.org/docs.html#howto">
Any help from you to translate to other languages is welcome.
</itemize>
The document is written using a tool called "SGML-Tools" which can be got from: 
<url url="http://www.sgmltools.org">
Compiling the source you will get the following commands like:
<itemize>
<item>sgml2html xxxxhowto.sgml     (to generate html file)
<item>sgml2html -split 0   xxxxhowto.sgml (to generate a single page html file)
<item>sgml2rtf  xxxxhowto.sgml     (to generate RTF file)
<item>sgml2latex xxxxhowto.sgml    (to generate latex file)
</itemize>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Acrobat PDF format <label id="acrobatpdf">
<p>
A PDF file can be generated from postscript file using 
either acrobat <bf>distill</bf> or <bf>Ghostscript</bf>.
And a postscript file is generated
from DVI which in turn is generated from a LaTex file.
You can download distill software from <url url="http://www.adobe.com">
and from <url name="unix" url="http://www.adobe.com/support/downloads/acdunix.htm">
and from <url name="windows" url="http://www.adobe.com:80/support/downloads/acdwin.htm">
. Given below 
is a sample session:
<code>
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 &
</code>
Or you can use the Ghostscript command <bf>ps2pdf</bf>.
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. 
<bf>ps2pdf</bf> is implemented as a very small command script 
(batch file) that invokes Ghostscript, selecting a special "output device"
called <bf>pdfwrite</bf>. 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.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Convert Linuxdoc to Docbook format <label id="linuxdoc2docbook">
<p>
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 <bf>ld2db.sh</bf> and some Perl scripts.
The ld2db output is not 100% clean and you need to use the <bf>clean_ld2db.pl</bf>
Perl script. You may need to manually correct a few lines in the document.
<itemize>
<item> Download the ld2db program from <url url="http://www.dcs.gla.ac.uk/~rrt/docbook.html">
or from <url name="Milkyway Galaxy site" url="http://www.milkywaygalaxy.freeservers.com">
<item> Download the cleanup_ld2db.pl perl script from
from <url name="Milkyway Galaxy site" url="http://www.milkywaygalaxy.freeservers.com">
</itemize>
The ld2db.sh is not 100% clean, so you will get some errors when you run it.
<code>
	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
</code>
And you may have to manually edit some of the minor errors after 
running the Perl script. For example you may need to put closing tag <
/Para> for each <
Listitem>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Convert to MS WinHelp format <label id="mswinhelp">
<p>
You can convert the SGML howto document to a Microsoft Windows Help file, 
First convert the sgml to html using:
<code>
	bash$ sgml2html xxxxhowto.sgml     (to generate html file)
	bash$ sgml2html -split 0   xxxxhowto.sgml (to generate a single page html file)
</code>
Then use the tool <url name="HtmlToHlp" url="http://javadocs.planetmirror.com/htmltohlpe.html">.
You can also use sgml2rtf and then use the RTF files for generating winhelp files.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Reading various formats <label id="readformats">
<p>
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:
<tscreen><verb>
	xdvi -geometry 80x90 howto.dvi
	man xdvi
</verb></tscreen>
	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, previous page etc.
	To turn off expert menu press 'x'.

You can read a postscript file using the program 'gv' (ghostview) or 
'ghostscript'.
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.
 
<itemize>
<item>Get ghostscript for Windows 95, OS/2, and for 
all OSes from <url url="http://www.cs.wisc.edu/~ghost">
</itemize>

To read a postscript document give the command:
<tscreen><verb>
		gv howto.ps
		ghostscript howto.ps
</verb></tscreen>

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.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Convert HTML to SGML html2sgml <label id="html2sgml">
<p>
To convert any HTML document to Linuxdoc SGML use the tool 'html2sgml'
from <url url="http://www.abc.se/~m9339/prog/html2sgml.html">.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt> Copyright
-->
<sect> Copyright
<p>
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.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




-->
</article>
