You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Dr. Ralf S. Engelschall 73a0203cdc upgrade to GNU config 20051231 20 years ago
..
HISTORY upgrade to GNU config 20051231 20 years ago
README
aux.prereq.sh adjust copyrights for new year 2006 20 years ago
aux.usrgrp.sh adjust copyrights for new year 2006 20 years ago
aux.wrapbin.sh adjust copyrights for new year 2006 20 years ago
aux.wrapsrc.sh adjust copyrights for new year 2006 20 years ago
bash.patch
beecrypt.patch
dot.bash_login
dot.bashrc
gzip.c
install.sh adjust copyrights for new year 2006 20 years ago
local.README
lsync adjust copyrights for new year 2006 20 years ago
lsync.8
lsync.pod adjust copyrights for new year 2006 20 years ago
make.patch
man.sh adjust copyrights for new year 2006 20 years ago
openpkg.1
openpkg.boot adjust copyrights for new year 2006 20 years ago
openpkg.pgp
openpkg.pod adjust copyrights for new year 2006 20 years ago
openpkg.sh adjust copyrights for new year 2006 20 years ago
openpkg.spec upgrade to GNU config 20051231 20 years ago
pod2man.sh
rc adjust copyrights for new year 2006 20 years ago
rc.8
rc.conf
rc.func adjust copyrights for new year 2006 20 years ago
rc.openpkg
rc.pod adjust copyrights for new year 2006 20 years ago
root.README
rpm-config.8
rpm-config.pod adjust copyrights for new year 2006 20 years ago
rpm-config.sh adjust copyrights for new year 2006 20 years ago
rpm.patch.bugfix adjust copyrights for new year 2006 20 years ago
rpm.patch.feature adjust copyrights for new year 2006 20 years ago
rpm.patch.porting adjust copyrights for new year 2006 20 years ago
rpm.patch.regen adjust copyrights for new year 2006 20 years ago
rpmdb adjust copyrights for new year 2006 20 years ago
rpmmacros adjust copyrights for new year 2006 20 years ago
rpmpopt adjust copyrights for new year 2006 20 years ago
rpmrc adjust copyrights for new year 2006 20 years ago
rpmtool adjust copyrights for new year 2006 20 years ago
rpmtool.8
rpmtool.pod adjust copyrights for new year 2006 20 years ago
shtool
tar.patch
uuid.8
uuid.pod adjust copyrights for new year 2006 20 years ago
uuid.sh adjust copyrights for new year 2006 20 years ago

README


OpenPKG Boostrap Package Source Tree
====================================

This is the source code tree for the OpenPKG bootstrap package. What
you find here is rather complex and tricky stuff, so don't be confused
if you don't understand everything immediately.

The Files
---------

README .................. this file ;)

openpkg.boot ............ the bootstrapping procedure
openpkg.spec ............ the regular build procedure

gzip-1.3.5.tar .......... untouched distribution tarball of the GNU gzip tool
make-3.80.tar.gz ........ untouched distribution tarball of the GNU make tool
patch-2.5.9.tar.gz ...... untouched distribution tarball of the GNU patch tool
bash-2.05b.tar.gz ....... untouched distribution tarball of the GNU bash tool
tar-1.13.94.tar.gz ...... untouched distribution tarball of the GNU tar tool
uuid-1.0.0.tar.gz ....... untouched distribution tarball of the OSSP uuid tool
curl-7.11.2.tar.gz ...... untouched distribution tarball of the cURL tool
bzip2-1.0.2.tar.gz ...... untouched distribution tarball of the BZIP2 library
zlib-1.2.1.tar.gz ....... untouched distribution tarball of the ZLIB library
beecrypt-3.1.0.tar.gz ... untouched distribution tarball of the BeeCrypt library
rpm-4.2.1.tar.gz ........ untouched distribution tarball of the RPM tool

make.patch .............. patch for GNU make
bash.patch .............. patch for GNU bash
beecrypt.patch .......... patch for BeeCrypt
rpm.patch.bugfix ........ patch for RPM (bugfixing parts)
rpm.patch.feature ....... patch for RPM (new features parts)
rpm.patch.porting ....... patch for RPM (portability enhancement parts)
rpm.patch.regen ......... patch for RPM (re-generated files parts)

rpmpopt ................. replacements/extensions for RPM's POPT configuration
rpmmacros ............... replacements/extensions for RPM's macros
rpmrc ................... replacements for RPM's run-command configuration

root.README ............. the source for installed <prefix>/README
local.README ............ the source for installed <prefix>/local/README
dot.bashrc .............. the source for installed <prefix>/.bashrc
dot.bash_login .......... the source for installed <prefix>/.bash_login
dot.lsyncrc ............. the source for installed <prefix>/local/.lsyncrc

rc ...................... the OpenPKG run-command handling script
rc.func ................. the OpenPKG run-command function definitions
rc.conf ................. the OpenPKG run-command configuration template
rc.openpkg .............. the OpenPKG run-command script for the bootstrap package

rpmtool ................. the rpmtool tool (program source)
rpmtool.8 ............... the rpmtool tool (manual page)
rpmtool.pod ............. the rpmtool tool (manual page source)

lsync ................... the lsync tool (program source)
lsync.8 ................. the lsync tool (manual page)
lsync.pod ............... the lsync tool (manual page source)

aux.usrgrp.sh ........... user/group name/id determination script
aux.prereq.sh ........... prerequisite checking script
aux.wrapsrc.sh .......... wrapper script for generating openpkg-V-R.src.sh
aux.wrapbin.sh .......... wrapper script for generating openpkg-V-R.P-L.sh

shtool .................. the portable shell tool (GNU shtool)
platform ................ the platform identification script (OSSP platform)

rpmx.sh ................. RPM eXtension (Shell wrapper)
rpmx.pl ................. RPM eXtension (Perl program)
mkproxyrpm.pl ........... RPM eXtension (Perl program, --makeproxy part)

openpkg.pgp ............. the OpenPGP public key of "The OpenPKG Project"

The Bootstrapping Procedure
---------------------------

The complexity of this OpenPKG RPM package results from the fact
that we force us to treat this bootstrapping package equal to every
other regular package. This implies first that the packaging tool
RPM is packaged with itself as an OpenPKG RPM package (means: its
build procedure is a real RPM .spec file and it can be installed and
upgraded through a binary or source RPM), second that RPM is installed
into the same filesystem hierarchy as all other packages and third
that RPM manages its own files. The reason for this should be obvious:
100% consistency for the whole OpenPKG software packaging facility!

The drawback is that this package requires a very tricky bootstrapping
procedure which had cost a lot of time to figure out and establish. If
you ever wanted to know the gory details, here they are...

The first step was that we wrote the regular openpkg.spec file for
building the bootstrap package with RPM under the assumption that RPM
is already available. This way we can provide RPM as an RPM package.
Just remains the problem how we actually bootstrap in the case where
RPM is still not available, i.e., when we reach a new platform and
have to build the package from scratch. Here the openpkg.boot script
comes into play. It executes the openpkg.spec build procedure very
similar to the way RPM would do ("rpm -bb"). That is, openpkg.boot
partly emulates RPM -- just enough that openpkg.spec works. As a
result, openpkg.spec cannot use any fancy RPM features or other things
before openpkg.boot is able to emulate it, of course.

After openpkg.boot executed the %prep, %build and %install scripts
of openpkg.spec, there is a fresh version of the target filesystem
hierarchy staying under a temporary build root. The openpkg.boot
script then creates a very special temporary "rpm" command which
allows the installed "rpm" command inside the build root to work
(although it is built for the final target filesystem path). Then
the $RPM_BOOT variable is set and the package is again "built" via
openpkg.spec -- but this time with the real RPM tool. To avoid
unneccessary re-compilation, the openpkg.spec skips %prep, %build
and %install if $RPM_BOOT is defined, so on this second build phase,
only %files is executed, i.e., a binary RPM openpkg-V-R.P-L.rpm is
rolled from the files in the build root. Additionally, a source RPM
openpkg-V-R.src.rpm is rolled for consistency reasons.

Finally we override the installation in the build root again by
installing the now rolled binary RPM openpkg-V-R.P-L.rpm again by
using the real RPM tool. This way we achieve that RPM is remembered
as an RPM package in its own database. We just have to make sure the
package is still relocated to the build root while installing. For
this we could use --prefix=$RPM_BUILD_ROOT%{l_prefix}, but this would
create an incorrect file list for the package "openpkg" in the RPM
database. Instead we use the tricky --justdb option for "rpm" which
means "rpm" behaves as it would install into the real location, but
does not actually install anything. But as a side-effect, the database
inside the build root is now correct.

After this procedure, the build root contains the target filesystem
hierarchy with RPM installed with itself. What is now remaining is
to roll a bootstrap package with this stuff for initial installation
without RPM. For this the build root is packed into a tarball,
compressed, again wrapped into another tarball together with the
uncompression tools, and finally wrapped into a self-extracting
shell script by appending aux.wrapbin.sh (padded to 64KB for easier
unpacking of the attached tarball) to its front.

The result is the binary bootstrap script openpkg-V-R.P-L.sh which
can be used to install the target hierarchy from scratch without any
pre-installed RPM. Nevetheless the installed target hierarchy looks
_exactly_ as it would have been installed with RPM. If one later wants
to upgrade this hierarchy one can just use the generated or a newer
openpkg-V-R.P-L.rpm.

To allow one to easily repeat this from-source bootstrapping procedure
on other machines, one can run "./openpkg.boot -s" which rolls a
openpkg-V-R.src.sh script which is a self-extracting script containing
an attached tarball of the sources of this directory. This script
contains the same contents like openpkg-V-R.src.rpm, but is intended
for running the described bootstrapping procedure from scratch without
any RPM.

Platforms and Level of Support
------------------------------

Current this boostrapping package officially supports the following
platforms (older versions are often still working, but no longer
supported):

ix86-freebsd4.9
ix86-freebsd5.1
alpha-freebsd5.1
ix86-debian2.2
ix86-debian3.0
ix86-gentoo1.4
ix86-suse8.2
ix86-redhat9
sparc64-solaris2.6
sparc64-solaris8
sparc64-solaris9
ix86-solaris9
ix86-solaris10
ix86-unixware7.1.3
ix86-darwin6.6.2

The following platforms were supported by older versions of
this package, but their support status is currently not known:

ix86-netbsd1.6
hppa-hpux11.20

For following platforms until now are not supported, but support for
them is planned:

ix86-openbsd2.4
alpha-tru645.X
mips-irix5.X.X
ppc-aix4.X.X