All,

I am sponsoring this case for Laszlo (Laca) Peter of the desktop group.
I have set the timeout for Wednesday, April 21st, 2010.  The case directory
contains this proposal.

This case proposes to integrate pkgbuild into a Minor release of Solaris.
pkgbuild is the build engine developed by the desktop release engineering
team to build the desktop components.  It is similar to rpmbuild for linux.

Thanks,

John

Title:          pkgbuild build engine
Case:           PSARC/2010/138
Submitter:      Laszlo (Laca) Peter
Owner:      John Fischer
Timeout:        04/28/2010

1.0 Introduction

1.1 Project/Component Working Name:

    pkgbuild build engine
    
1.2 Purpose

    This project delivers the pkgbuild build engine into OpenSolaris.
    Minor release binding is requested.

2.0 Summary Description

    pkgbuild is a build engine developed by the Desktop Release Engineering
    team.  It has been used for building the Desktop components of Solaris/
    OpenSolaris since 2004.  It is also used for building the OpenSolaris
    /contrib package repository.

2.1 Detailed Description

    The original purpose of pkgbuild was to facilitate delivering identical
    code using very similar build procedures on an RPM-based Linux system
    (JDS) and on Solaris.  For this reason, the input of pkgbuild is a
    spec file[1] similar to RPM's.  pkgbuild also has the same CLI and the
    same output format as rpmbuild, making it familiar to developers who
    have a background in Linux/RPM packaging.  A complete pkgbuild build
    of a component consists of the following steps (corresponding spec
    file sections in parentheses):
      o  set up source tree (%prep section)
          -  unpack sources
          -  apply source changes/patches
      o  configure and compile the sources (%build)
      o  install the binaries to a temporary proto area (%install)
      o  generate package prototypes / manifests and create / publish
         packages

    All of the above steps are identical to rpmbuild's behaviour, the
    difference is the end result, which is a source RPM and one or
    more binary RPMs in the case of rpmbuild, and a source package and
    one or more binary packages (SVr4 and/or IPS) in the case of
    pkgbuild.  The spec file includes all metainformation required
    for the above steps, including the location of the sources (a URL),
    patch names, build-time and runtime dependencies, IPS tags,
    attributes, actions.

    pkgbuild builds a single component at a time.  It looks for
    sources (source bundles, individual files, patches and copyright
    files) in %_topdir/SOURCES.  (%_topdir is macro that defines
    the location of the root of the build area).  Additional spec
    files that may be used included using %include or %use statements
    must be located in %_topdir/SPECS.  The build is performed in a
    subdirectory under the %_topdir/BUILD directory.  Dynamically
    created SVr4 prototype, pkginfo, depend files, package scripts
    (e.g. CAS or postinstall) and IPS manifest files are created under
    %_topdir/PKGMAPS.  SVr4 packages are created in %_topdir/PKGS
    and SVr4 "source packages" under %_topdir/SPKGS.  Source packages
    include all files required for reproducing the build (specs,
    sources bundles, patches, etc).  pkgbuild can automatically
    rebuild source packages using

        pkgbuild --rebuild /path/to/source_package

    IPS packages are published in the repository specified by
    the PKGBUILD_IPS_SERVER environment variable, or the local
    repository, if running (as determined using smf commands).
    Source IPS packages are published in $PKGBUILD_SRC_IPS_SERVER
    or PKGBUILD_IPS_SERVER or the local IPS repository.
    At this time, pkgbuild is not able to automatically rebuild
    IPS source packages, however, it is possible to install the
    source package (will get installed under /usr/share/src)
    and then rebuild the package using

        pkgbuild --rebuild /usr/share/src/<subdir>
    
    A higher level build script, pkgtool is provided for various
    convenience functions:

      o  download sources
      o  locate previously downloaded sources and copy them to
         where pkgbuild expects them
      o  build/install a number of spec files in the order determined
         by the dependency information in the given spec files
      o  collect log files
      o  send emails about build failures
      o  compile build reports

    The spec files used by pkgbuild and RPM are not fully compatible
    because pkgbuild needs to accommodate for the differences.
    These differences are documented on the pkgbuild web site[2].
    Full spec file documentation is not provided, because there is
    already a wealth of information available for rpm spec files.

    spectool is a command line utility intended for parsing spec files
    and querying information from that for the purpose of scripting or
    embedding the pkgbuild utilities in larger systems.
    spectool's functions include:

      o  evaluating macros in the context of a spec file
      o  print the IPS or SVr4 package names defined by a spec file
      o  print build-time or runtime dependencies
      o  print the list of sources used for the build
      o  translate an SVr4 package name or file name to an IPS package name

    pkgbuild comes with a set of predefined macros.  These are macros
    commonly available in RPM implementations (different distributions
    define different sets of macros).  Additional macros can be defined
    in the spec files and include files, the command line (--define option)
    and the ~/.pkgbuildmacros file.  This corresponds to RPM's
    ~/.rpmmacros file and the syntax of the files is the same.
    The most common use of this file is to define an alternative build
    area from the default ~/packages directory.  The syntax for this is:

    %_topdir /path/to/build/area

    pkgtool's configuration file is ~/.pkgtoolrc.  In addition, a
    .pkgtoolrc file in the current directory is also read.  The order
    is ./pkgtoolrc, ~/.pkgtoolrc.  A self-documenting template for
    this file can be generated using pkgtool --dumprc.

3.0 Delivery

    The proposed IPS package name is "command/build/pkgbuild".
    Should it be delivered to Solaris 10, the proposed SVr4 package name
    is SUNWpkgbuild.  Both names Committed.

4.0 Interface classification

    +-----------------------------------------------------------------------+
    |                          Interfaces Exported                          |
    +------------------------------+-----------------+----------------------+
    |      Interface Name          |  Classification |       Comment        |
    +------------------------------+-----------------+----------------------+
    | /usr/bin/pkgbuild            | Volatile        |                      |
    | /usr/bin/pkgtool             | Volatile        |                      |
    | /usr/bin/spectool            | Volatile        |                      |
    | /usr/lib/pkgbuild-1.3.102    | Project Private |                      |
    | ~/.pkgbuildmacros            | Uncommitted     | user-defined macros  |
    | ~/.pkgtoolrc                 | Uncommitted     | configuration file   |
    | ~/packages                   | Uncommitted     | personal build area  |
    | PKGBUILD_IPS_SERVER          | Uncommitted     | environment variable |
    | PKGBUILD_SRC_IPS_SERVER      | Uncommitted     | environment variable |
    +------------------------------+-----------------+----------------------+

    +-----------------------------------------------------------------------+
    |                          Interfaces Imported                          |
    +------------------------------+------------------+---------------------+
    |      Interface Name          |  Classification  |      Comment        |
    +------------------------------+------------------+---------------------+
    | perl 5.8.4                   | Evolving         | PSARC 1999/192      |
    | /usr/bin/pkg                 | Uncommitted      | PSARC 2008/190      |
    +------------------------------+------------------+---------------------+

5.0 References

    [1] http://www.rpm.org/max-rpm/ch-rpm-inside.html
        http://jucr.opensolaris.org/help/spec_file
    [2] http://pkgbuild.sourceforge.net/
_______________________________________________
opensolaris-arc mailing list
[email protected]

Reply via email to