164 lines
5.6 KiB
Plaintext
164 lines
5.6 KiB
Plaintext
|
|
|
|
To build RPM you will need several other packages:
|
|
--------------------------------------------------
|
|
|
|
|
|
The zlib library for compression support available from
|
|
http://www.cdrom.com/pub/infozip/zlib/
|
|
|
|
The berkeley db library db.1.85, or db.2* (currently the latest is
|
|
db-2.6.4) with compatibility mode for db.1.85 defined. The developers
|
|
of RPM did not upgrade RPM to use the current version of libdb because
|
|
they are uncomfortable with changes in the softwares license. Now db2
|
|
has a special exception license within glibc-2.1 so whatever license
|
|
discomfort there is/was is quickly becoming moot. The remaining issue
|
|
is that the db_185 compatibility does not work in glibc-2.1. This is
|
|
available from
|
|
http://www.sleepycat.com/download.html.
|
|
|
|
The instructions for building db-2.6.4:
|
|
|
|
cd build_unix
|
|
../dist/configure --enable-compat185
|
|
make
|
|
make install
|
|
|
|
|
|
It may be desired to install bzip2 and gzip so that RPM can use these
|
|
formats. Gzip, is necessary to build packages that contain compressed
|
|
tar balls, these are quite common on the Internet.
|
|
These are availible from
|
|
http://www.digistar.com/bzip2/index.html
|
|
http://www.gnu.org/
|
|
|
|
If National Language Support (NLS) is desired
|
|
you will need gnu gettext available from
|
|
http://www.gnu.org/
|
|
|
|
If you need support of RPM 1.x databases, which are in an old RPM
|
|
format. You will need the GNU db library gdbm to build the rpmconvert
|
|
binary. This is availible from :
|
|
http://www.gnu.org/
|
|
|
|
For best results you should compile with GCC and GNU Make. Users have
|
|
reported difficulty with other build tools. available from
|
|
http://www.gnu.org/
|
|
|
|
|
|
To compile RPM:
|
|
--------------
|
|
|
|
If your libraries are in a standard place you will need to change
|
|
the configure environment.
|
|
|
|
Here is an example:
|
|
LIBS='-L/opt/libz/ -L/opt/BerkeleyDB/lib/' \
|
|
CPPFLAGS='-I/opt/libz/ -I/opt/BerkeleyDB/include' \
|
|
export LIBS CPPFLAGS
|
|
./configure
|
|
|
|
now build the system with:
|
|
|
|
make
|
|
|
|
if you wish to make a tarfile of the binaries so that you may easily
|
|
install on other machines (ed note: what about putting gzip and bzip2
|
|
in the tar, modifying the /etc/rpmrc?):
|
|
|
|
make tar
|
|
|
|
when installing do not forget to init the database (rpm --initdb)
|
|
|
|
|
|
|
|
Non Linux Configuration Issues:
|
|
------------------------------
|
|
|
|
|
|
OS dependencies:
|
|
----------------
|
|
|
|
Under Red Hat Linux all libraries (in fact all files distributed with
|
|
the OS) are under RPM control and this section is not an issue.
|
|
|
|
RPM will need to be informed of all the dependencies which were
|
|
satisfied before RPM was installed. Typically this only refers to
|
|
libraries that are installed by the OS, but may include other
|
|
libraries and packages which are availible at the time RPM is
|
|
installed and will not under RPM control. Another common example of
|
|
libraries which may need dependency provisions are precompiled
|
|
libraries which are installed by the OS package manager during system
|
|
build time. The list of dependencies you will wish to load into RPM
|
|
will depend on exactly how you bootstrap RPM onto your system and what
|
|
parts of the sytem you put into packages as well as on the specific OS
|
|
you are using.
|
|
|
|
You should satisfy dependencies for all shells and interpreters. A
|
|
reasonable list of OS installed shells can be generated with:
|
|
|
|
cat /etc/shells
|
|
|
|
You should satisfy dependencies for all system libraries. For each of
|
|
the system library directories you should run
|
|
|
|
echo * | find-provides.sh
|
|
|
|
(On Linux a list of system library directories can be found in
|
|
/etc/ld.so.conf, other OS require an experienced system administrator
|
|
to know where the libraries are.)
|
|
|
|
|
|
You may add as many "provides: " lines as you like to /etc/rpmrc/ but
|
|
they can not be continued. Each line is limited to 8K bytes. Here is
|
|
a example (truncated) of the provides lines used by one user of
|
|
Digital Unix.
|
|
|
|
provides: /bin/sh /usr/bin/ksh /usr/bin/csh
|
|
provides: libc.so.osf.1 libm.so.osf.1 libcurses.so.xpg4 libdb.so.osf.1
|
|
provides: libX11.so libXaw.so.6.0 libXext.so libXm.so.motif1.2 libXmu.so
|
|
provides: libdnet_stub.so.osf.1 libsecurity.so.osf.1 libpthread.so.osf.1
|
|
provides: libexc.so.osf.1 libmach.so.osf.1 libdps.so libdpstk.so
|
|
|
|
|
|
|
|
rpmfilename:
|
|
-----------
|
|
|
|
If you plan on packaging for more then one OS you may want to edit
|
|
/etc/rpmrc and change the line which has rpmfilename to something
|
|
which include both the %{OS} and %{ARCH}. This will cause the name of
|
|
the generated rpm files to the operating system name as well as the
|
|
architecture which the rpm runs under. The line to change looks like:
|
|
|
|
> rpmfilename: %{ARCH}/%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm
|
|
|
|
you may wish to include both the %{OS} and %{ARCH} in the final base
|
|
name, so that it's easier to distinguish between what package is
|
|
appropriate for a particular arch-os-version combo. We suggest
|
|
|
|
> rpmfilename: %{ARCH}/%{NAME}-%{VERSION}-%{RELEASE}.%{OS}-%{ARCH}.rpm
|
|
|
|
There is no %{OS_VERSION} tag, so if you need to also distinguish between
|
|
RPMs for certain versions of the OS, you can hard-code the version in
|
|
the rpmrc on the build machine, so that .rpm files are generated with
|
|
the version as part of the filename.
|
|
|
|
For example when one user builds RPMs for Digital Unix 4.0b and 4.0d,
|
|
optimization is important and he will build one set of RPMs for the
|
|
EV4 processor and another set for the EV56 processor. He specifies
|
|
both the OS version (if it's important, as it is for a few packages)
|
|
and the processor version by default by setting a special rpmfilename:
|
|
on the particular build machine.
|
|
|
|
The "rpmfilename: "tag on one machine (Digital Unix 4.0d, EV56 PWS 433)
|
|
looks like:
|
|
|
|
rpmfilename: %{OS}/4.0d/%{ARCH}/%{NAME}-%{VERSION}-%{RELEASE}.%{OS}-%{ARCH}-ev56.rpm
|
|
|
|
For package `foo-1.1', at build time that would translate into:
|
|
|
|
osf1/4.0d/alpha/foo-1.1-1.osf1-alphaev56.rpm
|
|
|
|
|