Documentation Main - Root "apebase.sourceforge.net" Repository - Home Page - SourceForge Page - Downloads - Subversion Repository - Forums - Report A Bug
Welcome to the Ape Base Compile System Documentation
Ape Base Compile System Version: 1.02-ap20104400 SVN r73 2008-03-23 09:19:42Z BrynM
About the Ape Base Compile System

The Ape Base Compile System is a set of bash scripts to leverage both ESP EPM (http://www.epmhome.org/) and MREPO (http://dag.wieers.com/home-made/mrepo/) in maintaining Red Hat based systems that require custom and secluded binaries. If you need "Ape" to be an acronym, then go for "Application Packaging Environment" as christened by Mark Stokan. The original notion for the name was that this system was "aping" the performance of several tasks.

The idea...
  • Achieve *nix cross platform reproducable compiles of such applications as Apache HTTPD, MySQL or PHP.
  • Compile to a common --prefix parent directory such as /ape/application/version or /parent-of-your-choice/application/version. This makes it possible to have several different versions of an application installed at once allowing a simple migration between versions.
  • Create an easy method to switch between the currently selected application version while retaining the availability of other installed versions.
  • Facilitate the usage of currently selected application binaries from a central "bin" directory.
  • Facilitate builds being packaged for delivery via Yum and other common installers (via MREPO).
  • Configure, compile, install and package simple compiles with minimal user interaction.
  • Provide complete control over the build process with advanced usage.
  • Provide a method for non-compiled "skeleton" files to be include with installation and distribution.
  • Find some way to do all of the above while balancing elegance and brute force. I am always open to suggestions on that point.
Ape is not or cannot...
  • Ape Base Compile System does not debug your compiles.
  • Ape Base Compile System does not guarantee your compile will work.
  • Ape Base Compile System does not package things that do not consist of configure, make, make install steps out of the box. However, such a thing can be done with advanced usage. In fact, I use it to package itself into an RPM. To clarify, don't expect to be able to do this without some experience under your belt.
  • Ape Base Compile System cannot relocate packages that do not support `configure` and it's "--prefix" directive. Normally to relocate such an application you must edit it's Makefile appropriately. If you know how to do so and feel confident in doing so, you should point your application's Makefile prefix to the equivalent of "${APE_CONF_BASE_DEST_PARENT_DIR}/${APE_CONF_DEST_DIR_LABEL}/${APE_CONF_VERSION}". Doing so will enable you to utilize the rest of Ape Base Compile System's functionality.
  • Ape Base Compile System does not update packages on remote machines (unless you tell it to with triggered commands).
  • Ape Base Compile System will not force the application you are compiling to honor the --prefix directive. You can, with a little work, wrangle such applications for packaging using ape.
  • Do not taunt Ape Base Compile System.
  • Ape Base Compile System may not make complicated compiles such as PHP with custom modules much easier. It's main benefit is making your work reproducable for complicated compiles.
Documentation Conventions

Since there's a lot of information to cover here, some explanation conventions will be handy.

  • Single *nix shell system commands referenced in normal sentences are denoted with back ticks as illustrated in the following sentence.

    Commonly, `ls` is the file listing command.

  • When a relative path is used ("./" or "../") in normal text, it is assumed you are in the /ape/_compile directory. This convention only applies to normal text.
  • A *nix shell prompt for system commands is shown below. The commands you type in are highlighted in  this color text . Root's shell prompt is denoted with text  colored this way . Normal shell out put is colored  like this . An open and waiting cursor looks like  |  meaning that for the moment you are done typing in commands..
    [root@localhost:/ape/_compile]$ echo 'This is a shell prompt - bash, sh, csh, cygwin, etc...'
    This is a shell prompt - bash, sh, csh, cygwin, etc...
    [root@localhost:/ape/_compile]$ |
  • When a relative path is used ("./" or "../") in a *nix shell prompt, it is asumed that you are within the directory listed inside of root's propmt string. For example a root prompt showing the following is in the directory /ape/_compile.:
    [root@localhost:/ape/_compile]$ |
    Thus the command...
    [root@localhost:/ape/_compile]$ ls -ld ./src
    drwxr-xr-x 14 root root 4096 Mar 15 02:17 ./src
    [root@localhost:/ape/_compile]$ |
    Is functionally the equivalent of the command...
    [root@localhost:~]$ ls -ld /ape/_compile/src
    drwxr-xr-x 14 root root 4096 Mar 15 02:17 /ape/_compile/src
    [root@localhost:~]$ |
    This convention only applies to *nix shell prompts.
  • Script and file portions are as follows: #!/bin/bash
    # this will set a variable for use later in compile
    export THIS_IS_A_VAR='value'
    Relative paths should never be used in scripts or other files unless instructed to do so. Using Ape User Configuration Variables and Ape Internal System Variables is the preffered method of substituting directory names inside scripts and files.
  • Required configuration variables are denoted with:
    Required for normal usage. You need to fill this in.
  • Finally, the default values of any variables are easy to find as they look like this:
    Default: "foo"
Requirements

In order to install Ape Base Compile System via the RPM, you will need these things. If you installed another way that doesn't support dependancies, you should gather and install these tools. In addition to them, there are some optional things that may make usage easier.

  • It should be noted that you don't need to start a bash prompt per se to run Ape Base Compile System. The scripts run it internally via their shebang.

    Other POSIX style shells, such as Bourne, can be used but Bash itself is a requirement of installing the RPM. You are, however, on your own. Substituting the shell is unsupported until further notice. If you wish to substitute shells, you have two options. First, you may pass your script at a shell prompt (`/bin/sh ./scripts/foo-1.0.sh`). This method may not always work, as the shell you are executing may honor the "#!/bin/bash" shebang within the default scripts. Second and simplest, you may change the shebang itself in your script. Since all other scripts are sourced rather than executed, the script should go fine as long as the shell's functionality supports a bash-like instruction set.

  • Most any application you wish to compile will need this.

  • Most any application you wish to compile will need this too. If you are not installing the RPM, I would recommend using GCC, but any compiler supported by automake can be used.

Installation

There are two ways to get Ape Base Compile System. You can either install the RPM (recommended) or checkout the Subversion repository.

  • To install the RPM, first download the current release from the SourceForge download page at https://sourceforge.net/project/showfiles.php?group_id=220974. You must browse the site if you wish to find the direct download link for use with `wget`. Then install it in the normal manner.

    [root@localhost:~]$ wget http://somemirror.dl.sourceforge.net/sourceforge/apebase/apeBase-1.0-ap20088363.el5.ape.noarch.rpm
    [root@localhost:~]$ rpm -i apeBase-1.0-ap20088363.el5.ape.noarch.rpm
    [root@localhost:~]$ |

    You're done you lucky RPM user you. Skip on ahead to the Setup section.

  • There are two ways to install via Subversion. The first is if you wish to merely install and do not plan to develop or contribute to the Ape Base Compile System project. The second is for developers and contributors who wish to do extensive work. I would recommend you perform an RPM installation rather than a Subversion installation unless you plan to develop Ape Base Compile System. If for some reason, you can't use RPM (perhaps OS X), then by all means use the first method of Subversion installation.

    • We will need to manually create the /ape directory and `svn export` the Ape Base Compile System trunk to create /ape/_compile. Once that is done, manually run the post-installation script.

      [root@localhost:~]$ mkdir /ape
      [root@localhost:~]$ svn export https://apebase.svn.sourceforge.net/svnroot/apebase/trunk /ape/_compile
      # lots of subversion output ensues...
      A    here/sourceballs/.ape_create_directory
      Exported revision NN.
      [root@localhost:~]$ /ape/_compile/util/bin/ape_post_install.sh
      ## ape_post_install.sh #  In directory /ape/_compile/rpms.
      create symbolic link `redhat' to `centos'
      create symbolic link `up-mrepo.sh' to `../util/bin/up-mrepo.sh'
      ## ape_post_install.sh #  In directory /ape/_compile/rpms/centos.
      create symbolic link `el4.6' to `el4'
      ## ape_post_install.sh #  In directory /ape/_compile/scripts.
      create symbolic link `_blank_build_script-copy_to_create_your_own.sh' to `../include/_blank_build_script-copy_to_create_your_own.sh'
      ## ape_post_install.sh #  In directory /ape/_compile/rpms/mrepo-www.
      create symbolic link `apeDocs' to `../../util/docs'
      ## ape_post_install.sh # Complete.
      [root@localhost:~]$ |

      To upgrade, simply perform the last two steps again.

      [root@localhost:~]$ svn export https://apebase.svn.sourceforge.net/svnroot/apebase/trunk /ape/_compile
      # lots of subversion output ensues...
      A    here/sourceballs/.ape_create_directory
      Exported revision NN.
      [root@localhost:~]$ /ape/_compile/util/bin/ape_post_install.sh
      ## ape_post_install.sh #  In directory /ape/_compile/rpms.
      create symbolic link `redhat' to `centos'
      create symbolic link `up-mrepo.sh' to `../util/bin/up-mrepo.sh'
      ## ape_post_install.sh #  In directory /ape/_compile/rpms/centos.
      create symbolic link `el4.6' to `el4'
      ## ape_post_install.sh #  In directory /ape/_compile/scripts.
      create symbolic link `_blank_build_script-copy_to_create_your_own.sh' to `../include/_blank_build_script-copy_to_create_your_own.sh'
      ## ape_post_install.sh #  In directory /ape/_compile/rpms/mrepo-www.
      create symbolic link `apeDocs' to `../../util/docs'
      ## ape_post_install.sh # Complete.
      [root@localhost:~]$ |
    • For minor development, patch files and revised copies are acceptable to submit with bug reports. There is no need to perform a Subversion installation if you are merely patching the project. The subversion trunk always contains the stable release and is not to be developed against. If you wish to develop, please use the latest version number in /branches and coordinate with the other developers to hear news about branch changes.

      Similar to the Checkout method, will need to manually create the /ape directory and `svn co` to create /ape/_compile. However, we need to `svn co` instead of `export` and use the path to the branch. Once that is done, manually run the post-installation script.

      [root@localhost:~]$ mkdir /ape
      [root@localhost:~]$ svn co https://apebase.svn.sourceforge.net/svnroot/apebase/branches/*VERSION* /ape/_compile
      # lots of subversion output ensues...
      A    here/sourceballs/.ape_create_directory
      Exported revision NN.
      [root@localhost:~]$ /ape/_compile/util/bin/ape_post_install.sh
      ## ape_post_install.sh #  In directory /ape/_compile/rpms.
      create symbolic link `redhat' to `centos'
      create symbolic link `up-mrepo.sh' to `../util/bin/up-mrepo.sh'
      ## ape_post_install.sh #  In directory /ape/_compile/rpms/centos.
      create symbolic link `el4.6' to `el4'
      ## ape_post_install.sh #  In directory /ape/_compile/scripts.
      create symbolic link `_blank_build_script-copy_to_create_your_own.sh' to `../include/_blank_build_script-copy_to_create_your_own.sh'
      ## ape_post_install.sh #  In directory /ape/_compile/rpms/mrepo-www.
      create symbolic link `apeDocs' to `../../util/docs'
      ## ape_post_install.sh # Complete.
      [root@localhost:~]$ |
Setup
  • Depending on how you want to use Ape Base Compile System, your setup can either be really fast or extensive. Either way, the first thing you'll want to do is set up a system wide config file. To do so, copy the sample to get yourself started.

    [root@localhost:~]$ cp /ape/_compile/include/sample.ape_config.sh /ape/_compile/include/ape_config.sh
    [root@localhost:~]$ |

    All of the Ape User Configuration Variables are available in /ape/_compile/include/ape_config.sh. Some that are commonly changed have been provided in the sample file. If /ape/_compile/include/ape_config.sh does not exist, all default values will be used but your script will proceed to run.

    If you don't need MREPO to be served via a webserver and already have EPM installed, then you are done. If you need to build EPM or have MREPO served via HTTPD, then proceed.

  • If you'd like to build ESP EPM, there is already a script ready for you to do so. First set up your ./src directory.

    • The most essential part of your compile and packaging efforts is the source code for your application. In our example, we'll be getting ready to compile ESP EPM. To place it, we'll download the source package from http://www.epmhome.org/ to our ./sourceballs directory, extract it to the ./src directory and know what we need to chage if anything in our user script. Please be sure to use the appropriate mirror from http://www.epmhome.org/ to download. We will be dealing with a GZipped Tarball in this example. If you have a zip, rar or other type of package, please substitute the `tar` commands below for their appropriate equivalent and read the documentation for that equivalent.

      First, grab the source package.

      [root@localhost:~]$ wget --directory-prefix=/ape/_compile/sourceballs 'http://ftp.SOME-MIRROR/pub/epm/4.1/epm-4.1-source.tar.gz'
      --10:24:06--  http://ftp.SOME-MIRROR/pub/epm/4.1/epm-4.1-source.tar.gz
      Resolving ftp.SOME-MIRROR... 208.256.256.256
      Connecting to ftp.SOME-MIRROR|208.256.256.256|:80... connected.
      HTTP request sent, awaiting response... 200 OK
      Length: 509728 (498K) [application/x-gzip]
      Saving to: `/ape/_compile/sourceballs/epm-4.1-source.tar.gz'
      
      100%[=================================================================================================================================================>] 509,728      984K/s   in 0.5s
      
      10:24:07 (984 KB/s) - `/ape/_compile/sourceballs/epm-4.1-source.tar.gz' saved [509728/509728]
      
      [root@localhost:~]$ |

      Now we extract it to /ape/_compile/src/, but first we check to see that everything in the source package is inside of a directory. In this case, the directory is named in the style of "app-version" as Ape Base Compile System will expect it: ("epm-4.1"). If the contents of the source package are at the root of the package, you may wish to alter "--directory /ape/_compile/src" to something like "--directory /ape/_compile/src/app-version" in the second command below.

      [root@localhost:~]$ tar --gzip --list --file /ape/_compile/sourceballs/epm-4.1-source.tar.gz | head -n 10
      epm-4.1/
      epm-4.1/doc/
      epm-4.1/doc/3-packaging.html
      epm-4.1/doc/epmlogo.tif
      epm-4.1/doc/epm.man
      epm-4.1/doc/d-relnotes.html
      epm-4.1/doc/mkepmlist.man
      epm-4.1/doc/c-reference.html
      epm-4.1/doc/epminstall.man
      epm-4.1/doc/Makefile.in
      [root@localhost:~]$ tar --gzip --extract --directory /ape/_compile/src --file /ape/_compile/sourceballs/epm-4.1-source.tar.gz
      [root@localhost:~]$ ls -ld /ape/_compile/src/epm-4.1
      drwxrwxr-x 5 1110 games 4096 Apr 10  2007 /ape/_compile/src/epm-4.1
      [root@localhost:~]$ |

      In this case, you'll notice the odd owner and group of /ape/_compile/src/epm-4.1 in the final directory listing (`ls`). These were the permissions from the extracted archive. We shoudl fix them before going on.

      [root@localhost:~]$ chown -R root:root /ape/_compile/src/epm-4.1
      [root@localhost:~]$ ls -ld /ape/_compile/src/epm-4.1
      drwxrwxr-x 5 root root 4096 Apr 10  2007 /ape/_compile/src/epm-4.1
      [root@localhost:~]$ |

      If you wish to further organize the ./src directory, you can do so. Perhaps you'd like to keep all of your MySQL sources together. In such a case you would create the directory in ./src and adjust your APE_CONF_SOURCE_DIR_NAME variable accordingly in your user script.

    • A script has already been prodived to both test your installation and build ESP EPM. The script is ./scripts/ape.epm-4.1.sh. Note that you should not copy this script to create one of your own. To create your own script, copy the file ./scripts/_blank_build_script-copy_to_create_your_own.sh.

      First, let's look at its help output.

      [root@localhost:~]$ /ape/_compile/scripts/ape.epm-4.1.sh -h
      INFO:
        User script for the Ape Base Compile System. For information about the
        Ape Base Compile System, please visit http://apebase.sourceforge.net/.
        You may also find documentation on this local machine at
        http://apebase.sourceforge.net:80/apeDocs if the Ape Base Compile System
        is fully installed.
      VERSION:
        1.02-ap20104400 SVN r73 2008-03-23 09:19:42Z BrynM
      USAGE:
        ape.epm-4.1.sh [-a] [-c] [-h] [-i] [-j] [-k] [-m] [-o] [-r [-g]]  [-s] [-t]
      OPTIONS:
        -a      Run `configure`, `make`, `make install` and RPM steps.
                 Essentially shorthand for the combined flags -cmisr.
        -c      Run `configure` step.
        -i      Run `make install` step. This will also perform a removal like -k and
                 activate -s.
        -j      Just run and exit performing only common actions. Primarily only used
                 for debugging script failures..
        -h      Show usage and exit.
        -k      Remove previous build and exit.
        -m      Run `make` step.
        -o      Show `configure --help` output.
        -r [-g] Create RPM using EPM (requires the ESP EPM binaries). The -g flag will
                 cause the resulting RPM to be deposited into the appropriate gold
                 directory for the distribution (currently only RHEL based).
        -s      Copy skeleton config files.
        -t      Experimental. Tarball up installed version into a .tar.gz under the
                 current directory.
      NOTES:
        Execution order is -c, -m, (implied -k) -i, -s , -r , -t. The options -h, -j, -k
          and -o will ech stop execution directly after performing their task. Implied
          -k means that a removal is performed, but this is actually part of the -i step
          and not an actual usage of the -k process.
        Some commands produce logs within the "output" directory.
        RPMs end up in the "rpms" directory in subfolders organized by distro,
          release and architecture.
        Tarballs end up in the current working directory.
        Files copied from the skel directory always end up under the compiled
          --prefix.
        You can add additional EPM directives by providing a file to the
          APE_CONF_USER_EPM_STUB setting.
      [root@localhost:~]$ |
      

      Now would be a good opportunity to take a quick read of /ape/_compile/scripts/ape.epm-4.1.sh before we use it.

      [root@localhost:~]$ less /ape/_compile/scripts/ape.epm-4.1.sh
      [root@localhost:~]$ # press [q] to exit `less` when you are done reading
      [root@localhost:~]$ |

      If you compare /ape/_compile/scripts/ape.epm-4.1.sh to the default user script /ape/_compile/scripts/_blank_build_script-copy_to_create_your_own.sh, you'll notice that only five variables have changed. The first two are mandatory for any usage of Ape Base Compile System. The final three are optional to use in your own scripts. I use them to bind the installation of EPM to your Ape Base Compile System installation so your preferred APE_CONF_BASE_DEST_PARENT_DIR can stay clean.

      1. The name of the package has been set using APE_CONF_PACKAGE_NAME. # Proper name of package for RPM package naming such as "php" or "mysql".
        # package names can only contain letters and numbers. No spaces or punctuation
        # such as a dash ("-") or underscore ("_") are allowed.
        export APE_CONF_PACKAGE_NAME="epm"
      2. The version number has been set using APE_CONF_VERSION. # Version number that we will use for the final directory name of the install.
        #
        export APE_CONF_VERSION="4.1"
      3. Since we are building the Ape Base Compile System specific version of EPM, we'll make sure the RPM gets the "ape" prefix with APE_CONF_PACKAGE_NAME_PREFIX. # prefix for proper name of package used in RPM package naming to differentiate
        # from packages built by others. Such as "ape" to produce an RPM for "apePhp".
        #
        export APE_CONF_PACKAGE_NAME_PREFIX="ape"
      4. We want to use out link-to-current script in a minute or two, so we make sure one gets created by setting APE_CONF_SKEL_LINKTO_SCRIPT to "yes". Since we are changing the default value, I've left the original commented out for reference and added a new line with my altered value. # whether or not to build a link-to-current script - yes or no
        #
        #export APE_CONF_SKEL_LINKTO_SCRIPT="no"
        export APE_CONF_SKEL_LINKTO_SCRIPT="yes"
      5. The final customization is to be sure that epm gets build within the Ape Base Compile System parent directory, "/ape". Since this is the default, we simple uncomment APE_CONF_BASE_DEST_PARENT_DIR to ensure this particular user script always builds to there. # Base install path (the root directory for --prefix)
        # Change this if you want your applications to end up in a place other than /ape.
        #
        export APE_CONF_BASE_DEST_PARENT_DIR="/ape"

      Time for the good stuff. Let's run /ape/_compile/scripts/ape.epm-4.1.sh. Though we would be tempted to use the "-a" flag here, EPM doesn't exist yet, so the RPM step will fail. Instead, we will run the script with "-cmis". Note that I've edited out the non- output below for brevity.

      [root@localhost:~]$ /ape/_compile/scripts/ape.epm-4.1.sh -cmis
      ## ape.epm-4.1.sh # Auto enable -k option
      ## ape.epm-4.1.sh # Auto enable -s option
      ## ape.epm-4.1.sh # Begining apeEpm from sources in epm-4.1.
      ## ape.epm-4.1.sh # Target Directory: /ape/epm/4.1
      ## ape.epm-4.1.sh # Detected "i386" mode.
      ## ape.epm-4.1.sh # Lib path (APE_SYS_DETECTED_ARCHITECTURE) is "lib"
      ## ape.epm-4.1.sh # Using APE_CONF_COMPILE_HOME /ape/_compile
      ## ape.epm-4.1.sh # Moving to /ape/_compile/src/epm-4.1
      ## ape.epm-4.1.sh # Running `/ape/_compile/src/epm-4.1/configure`
      ## ape.epm-4.1.sh # Configure String: -->( ./configure --prefix=/ape/epm/4.1 2>&1 | tee /ape/_compile/output/configure-apeEpm-4.1-ap167463-i386.log )<--
      ## ape.epm-4.1.sh # ape_sys_run_configure result: 0
      ## ape.epm-4.1.sh # `make clean` result: 0
      ## ape.epm-4.1.sh # ape_sys_run_make result: 0
      ## ape.epm-4.1.sh # Removing previous build...
      ## ape.epm-4.1.sh # ape_sys_run_remove result: 0
      ## ape.epm-4.1.sh # ape_sys_run_make_install result: 0
      ## ape.epm-4.1.sh # Skipping creation of "/ape/_compile/skels/epm-4.1/bin/link_to_current.epm-4.1.sh" as it would overwrite an existing file
      ## ape.epm-4.1.sh # ape_sys_run_create_ltcurr_script result: 0
      ## ape.epm-4.1.sh # Copying skeleton files from "", "/ape/_compile/skels/epm-4.1" and "".
      ## ape.epm-4.1.sh # Executing `/usr/bin/rsync --stats --recursive --copy-links --copy-dirlinks --times --human-readable --exclude-from=/ape/_compile/include/skel_exclude.txt /ape/_compile/skels/epm-4.1/ /ape/epm/4.1/ 2>&1`.
      ## ape.epm-4.1.sh # Skel rsync number of files: 3
      ## ape.epm-4.1.sh # ape_sys_run_skel result: 0
      ## ape.epm-4.1.sh # Moving back to /ape/_compile
      [root@localhost:~]$ &#124;

      Asuming that all went well, and you didn't get any compile errors, we're ready for the final two steps. We are going to run the link-to-current script /ape/epm/4.1/bin/link_to_current.epm-4.1.sh to make our version the active one. Then we are finally going to roll our intallation into an RPM by running /ape/_compile/scripts/ape.epm-4.1.sh with the "-r" flag.

      [root@localhost:~]$ /ape/epm/4.1/bin/link_to_current.epm-4.1.sh
      ** link_to_current.epm-4.1.sh ** begun for APP "epm" VER "4.1"
      ** link_to_current.epm-4.1.sh ** CAUTION! Linking version 4.1 to be the current epm version!
      create symbolic link `/ape/epm/current' to `/ape/epm/4.1'
      create symbolic link `/ape/bin/epm' to `/ape/epm/current/bin/epm'
      create symbolic link `/ape/bin/epminstall' to `/ape/epm/current/bin/epminstall'
      create symbolic link `/ape/bin/mkepmlist' to `/ape/epm/current/bin/mkepmlist'
      create symbolic link `/ape/bin/link_to_current.epm-4.1.sh' to `/ape/epm/4.1/bin/link_to_current.epm-4.1.sh'
      ** link_to_current.epm-4.1.sh ** complete.
      [root@localhost:~]$ /ape/_compile/scripts/ape.epm-4.1.sh -r
      ## ape.epm-4.1.sh # Begining apeEpm from sources in epm-4.1.
      ## ape.epm-4.1.sh # Target Directory: /ape/epm/4.1
      ## ape.epm-4.1.sh # Detected "i386" mode.
      ## ape.epm-4.1.sh # Lib path (APE_SYS_DETECTED_ARCHITECTURE) is "lib"
      ## ape.epm-4.1.sh # Using APE_CONF_COMPILE_HOME /ape/_compile
      ## ape.epm-4.1.sh # Moving to /ape/_compile/src/epm-4.1
      ## ape.epm-4.1.sh # Skipping creation of "/ape/_compile/skels/epm-4.1/bin/link_to_current.epm-4.1.sh" as it would overwrite an existing file
      ## ape.epm-4.1.sh # ape_sys_run_create_ltcurr_script result: 0
      ## ape.epm-4.1.sh # Compiling epm list file "/ape/_compile/epm-extra/epm-4.1.list"
      ## ape.epm-4.1.sh # Executing "/ape/bin/mkepmlist --prefix /ape/epm/4.1/ /ape/epm/4.1/ >>/ape/_compile/epm-extra/epm-4.1.list"
      ## ape.epm-4.1.sh # Executing "/ape/bin/epm --output-dir /ape/_compile/util/tmp-build -f rpm apeEpm /ape/_compile/epm-extra/epm-4.1.list 2>&1"
      ## ape.epm-4.1.sh # Moved `/ape/_compile/util/tmp-build/apeEpm-4.1-ap167464-linux-2.6-intel.rpm' -> `/ape/_compile/rpms/centos/el5/i386/apeEpm-4.1-ap167464.el5.ape.i386.rpm'.
      ## ape.epm-4.1.sh # Executing APE_CONF_POST_RPM_CMD "/ape/_compile/rpms/up-mrepo.sh -v".
      ## ape.epm-4.1.sh # Nothing to do. Either MREPO is not installed or no processes called mrepoHttpd were found.
      ## ape.epm-4.1.sh # ape_sys_run_rpm result: 0
      ## ape.epm-4.1.sh # Moving back to /ape/_compile
      [root@localhost:~]$ &#124;

      You may have noticed the references to a file called "link_to_current.epm-4.1.sh" landing in "/ape/epm/4.1/bin". Link-to-current scripts are explained fully explained later. For now, let's just run it to complete the EPM installation. You might be able to glean some information from its output.

      [root@localhost:~]$ /ape/epm/4.1/bin/link_to_current.epm-4.1.sh
      ** link_to_current.epm-4.1.sh ** begun for APP "epm" VER "4.1"
      ** link_to_current.epm-4.1.sh ** CAUTION! Linking version 4.1 to be the current epm version!
      create symbolic link `/ape/epm/current' to `/ape/epm/4.1'
      create symbolic link `/ape/bin/epm' to `/ape/epm/current/bin/epm'
      create symbolic link `/ape/bin/epminstall' to `/ape/epm/current/bin/epminstall'
      create symbolic link `/ape/bin/mkepmlist' to `/ape/epm/current/bin/mkepmlist'
      create symbolic link `/ape/bin/link_to_current.epm-4.1.sh' to `/ape/epm/4.1/bin/link_to_current.epm-4.1.sh'
      ** link_to_current.epm-4.1.sh ** complete.
      [root@localhost:~]$ &#124;

      You are now ready to finalize a complete Ape Base Compile System installation by moving on to the next step and setting up Apache to serve MREPO repositories.

    • I'm hoping you can accomplish this based upon the instructions for setting up EPM. The process should be the same, except this time you are grabbing the Apache Foundation HTTPD daemon. We aren't recompiling MREPO as that takes some advanced usage (MREPO doesn not support `configure` nor it's "--prefix" parameter).

      You'll want to grab the source files from httpd.apache.org and move your source tarball to the ./sourceballs directory. For our example, we grabbed ourselves a copy of "httpd-2.2.8.tar.gz" from a mirror. WE're also asuming you've extracted it to ./src/httpd-2.2.8.

Ape Root Directories

These are the default directories created by installing Ape Base Compile System. You will undoubtably make some of your own as well.

The ./epm-extra Directory
This is where the Ape Base Compile System deposits the EPM list files (*.list) it creates. The "extra" is added because this is also the location the Ape Base Compile System will look for any user EPM list stubs (*.stub) appropriate to what it is compiling. To control what stub file will be appended to the generated list, please see the APE_CONF_USER_EPM_STUB configuration variable. The contents of this directory will fluctuate and grow with usage. You may want to clean out unused list (*.list) files after a while. Remember to keep your stub (*.stub) files though!
The ./include Directory
[root@localhost:/ape/_compile]$ tree ./include/
./include/
|- _blank_build_script-copy_to_create_your_own.sh # actual file copy in ./scripts lis linked to
|- ape_config.sh # master configuration
|- ape_functions.sh #common functions file
|- ape_init.sh # Ape Base Compile System init file
|- ape_variables.sh # internal system variables
`- scripts_common.sh # the file that your script will eventually execute to compile with
[root@localhost:/ape/_compile]$ &#124;
This is where the non-user portions of the compile system live. Please fo not edit them unless you really, absolutely, positively know what you are doing. The only exception is the file "ape_config.sh", which you can customize to suit your desired environment. Customizing "ape_config.sh" will alter default configuration values for all scripts.
The ./output Directory
This is where log files are dumped duting the compilation process. Logs are created when the scripts make underlying calls to `configure`, `configure --help`, `make`, `make clean` and `make install`. This is another directory that should be cleaned out every so often.
The ./post-install Directory

This is a place for you to store arbitrary scripts which you have set to run using Triggered Commands. For more information about when you can trigger commands, see variables such as APE_CONF_POST_CONFIGURE_CMD in the Ape User Configuration Variables section. If a file named " ${APE_CONF_PACKAGE_NAME}- ${APE_CONF_VERSION}.post-install.sh" is created in the ./post-install directory, it will be assumed to be your intended APE_CONF_POST_RPM_INSTALL_CMD script. It will be included in the disrtibution as " /${APE_CONF_BASE_DEST_PARENT_DIR} /${APE_CONF_DEST_DIR_LABEL} /${APE_CONF_VERSION}/bin/${APE_CONF_PACKAGE_NAME}-${APE_CONF_VERSION}.post-install.sh" but not run at RPM installation until entered as the value of APE_CONF_POST_RPM_INSTALL_CMD.

The ./rpms Directory
[root@localhost:/ape/_compile]$ tree -dl ./rpms/
./rpms/
|- centos # centos rpms
| |- el4
| | |- i386
| | |- ia64
| | `- x86_64
| |- el5
| | |- i386
| | |- ia64
| | `- x86_64
| |- gold4 # final production ready rpms
| | |- i386
| | |- ia64
| | `- x86_64
| `- gold5 # final production ready rpms
|   |- i386
|   |- ia64
|   `- x86_64
|- misc # unknown or undetected *nix brand  
| |- gold # final production ready rpms
| | |- i386
| | |- ia64
| | `- x86_64
| |- i386
| |- ia64
| `- x86_64
|- mrepo-src # mrepo mirror dir if mrepoHttpd is built
|- mrepo-www # mrepo web root if mrepoHttpd is built
|- up-mrepo.sh # script for updating the local mrepoHttpd install
`- redhat -> centos # symlinked back to ./centos
[root@localhost:/ape/_compile]$ &#124;

There are three RPM archive directories created by default. They are ./rpms/centos, ./rpms/misc and ./rpms/redhat which is a symbolic link to ./rpms/centos. Additionally, Ape Base Compile System will create a directory tree for your OS or disro if it can be detected, but release subdirectories will not be created for non-RHEL based disributions. If the OS or distro can't be detected, created RPMs will be placed in the ./rpms/misc tree.

Red Hat based distributions will contain subdirectories for the release, such as ./rpms/centos/el4. Though a Fedora tree is not created at installation, it will also contain directories such as ./rpms/fedora/fc7 when needed.

The "./rpms" directory will be kept orderly even if mounted remotely from machines of differing architectures, provided you use mostly default names and locations for produced RPMS. If the mrepohttpd ("./scripts/ape.mrepoHttpd-2.2.8.sh") is built and installed, it will utilized the "./rpms" sirectory as it's source. As you find builds you are happy with, you may want to copy the RPM to your gold repository and have the rest of your non-development architecture feed from that. You can also build an RPM directly to the gold directories by using the -g option for -r when you run your script.

The ./scripts Directory

This is your primary working directory. A copy of "_blank_build_script-copy_to_create_your_own.sh" is there waiting for you to create your own compile scripts with. The user scripts will be discussed in detail later.

The ./skels Directory
[root@localhost:/ape/_compile]$ tree ./skels/
./skels/
|- epm-4.1 # skel directory for the 4.1 version of EPM
| `- bin
|   `- link_to_current.epm-4.1.sh # script to automate linking the 4.1 version to current
|- mrepoHttpd # generic mrepoHttpd skel dir - all version will get these
| |- LICENSE # duh
| |- conf # the apache conf directory
| | |- conf.d
| | | `- mrepo.conf #settings for mrepo - not a vhost
| | |- extra # apache extras
| | |- magic #mime file
| | |- mime.types # mime types file
| | |- mrepoHttpd.conf # minimal httpd.conf
| | `- original# original httpd configs for reference
| `- etc # local /etc
|   |- init.d
|   | `- mrepoHttpd # file usable for chkconfig
|   |- mrepo.conf # mainly empty mrepo.conf
|   |- mrepo.conf.d
|   | `- apelocal.repo.conf # the ape local mrepo repositories
|   |- sysconfig
|   `- yum.repos.d
|     `- apelocal.repo # a yum config for checking the local repo
|- mrepoHttpd-2.2.8 # version specific skel - only applied to 2.2.8
| `- bin
|   `- link_to_current.mrepoHttpd-2.2.8.sh # link build of 2.2.8 to the current version
`- link_to_current._template_.sh # template link-to-current file
[root@localhost:/ape/_compile]$ &#124;

This may look complicated, but it's not. There's just a lot in example stuff there. The function of the ./skels directory is to store files you wish copied to your installation directory after the make install step.

The ./sourceballs Directory
This is a place to store your source files so that Ape Base Compile System can automaticaly find them. Please see the ./src description below for it's usage.
The ./src Directory

The most essential part of your compile and packaging efforts is the source code for your application. In our example, we'll be getting ready to compile ESP EPM. To place it, we'll download the source package from http://www.epmhome.org/ to our ./sourceballs directory, extract it to the ./src directory and know what we need to chage if anything in our user script. Please be sure to use the appropriate mirror from http://www.epmhome.org/ to download. We will be dealing with a GZipped Tarball in this example. If you have a zip, rar or other type of package, please substitute the `tar` commands below for their appropriate equivalent and read the documentation for that equivalent.

First, grab the source package.

[root@localhost:~]$ wget --directory-prefix=/ape/_compile/sourceballs 'http://ftp.SOME-MIRROR/pub/epm/4.1/epm-4.1-source.tar.gz'
--10:24:06--  http://ftp.SOME-MIRROR/pub/epm/4.1/epm-4.1-source.tar.gz
Resolving ftp.SOME-MIRROR... 208.256.256.256
Connecting to ftp.SOME-MIRROR|208.256.256.256|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 509728 (498K) [application/x-gzip]
Saving to: `/ape/_compile/sourceballs/epm-4.1-source.tar.gz'

100%[=================================================================================================================================================>] 509,728      984K/s   in 0.5s

10:24:07 (984 KB/s) - `/ape/_compile/sourceballs/epm-4.1-source.tar.gz' saved [509728/509728]

[root@localhost:~]$ &#124;

Now we extract it to /ape/_compile/src/, but first we check to see that everything in the source package is inside of a directory. In this case, the directory is named in the style of "app-version" as Ape Base Compile System will expect it: ("epm-4.1"). If the contents of the source package are at the root of the package, you may wish to alter "--directory /ape/_compile/src" to something like "--directory /ape/_compile/src/app-version" in the second command below.

[root@localhost:~]$ tar --gzip --list --file /ape/_compile/sourceballs/epm-4.1-source.tar.gz | head -n 10
epm-4.1/
epm-4.1/doc/
epm-4.1/doc/3-packaging.html
epm-4.1/doc/epmlogo.tif
epm-4.1/doc/epm.man
epm-4.1/doc/d-relnotes.html
epm-4.1/doc/mkepmlist.man
epm-4.1/doc/c-reference.html
epm-4.1/doc/epminstall.man
epm-4.1/doc/Makefile.in
[root@localhost:~]$ tar --gzip --extract --directory /ape/_compile/src --file /ape/_compile/sourceballs/epm-4.1-source.tar.gz
[root@localhost:~]$ ls -ld /ape/_compile/src/epm-4.1
drwxrwxr-x 5 1110 games 4096 Apr 10  2007 /ape/_compile/src/epm-4.1
[root@localhost:~]$ &#124;

In this case, you'll notice the odd owner and group of /ape/_compile/src/epm-4.1 in the final directory listing (`ls`). These were the permissions from the extracted archive. We shoudl fix them before going on.

[root@localhost:~]$ chown -R root:root /ape/_compile/src/epm-4.1
[root@localhost:~]$ ls -ld /ape/_compile/src/epm-4.1
drwxrwxr-x 5 root root 4096 Apr 10  2007 /ape/_compile/src/epm-4.1
[root@localhost:~]$ &#124;

If you wish to further organize the ./src directory, you can do so. Perhaps you'd like to keep all of your MySQL sources together. In such a case you would create the directory in ./src and adjust your APE_CONF_SOURCE_DIR_NAME variable accordingly in your user script.

The ./util Directory
[root@localhost:/ape/_compile]$ tree -ld ./util
./util
|- bin # semi-stable extra utilities
|- dev-extra # unstable extra utilities
|- docs # documentation
| |- images
| `- src
|   |- about
|   |- conf_vars
|   |- root_dirs
|   |- sys_vars
|   |- tut
|   `- usage
`- tmp-build # a temp directory for Ape Base Compile System to use
[root@localhost:/ape/_compile]$ &#124;

There is some neat stuff in here, but most of it is experimental. The ./tmp-buld directory is exactly what it sounds like. A temporary storage space. As such, you may wish to clean it out every so often.

The main thing of interest to you should be the documentation (./doc) subdirectory. The rest of the ./util directory will have to wait to be documented until each part is stable.

Custom User Script General Usage
Command Line Usage

This should go without saying, but you need to create a compile script for yourself before you can do anything with this. You need to copy the file name "_blank_build_script-copy_to_create_your_own.sh" to an appripriate name of your choosing. A good rule of thumb is to at least use the application name and version number. Assuming we are preparing to guild "myapp" version 1.0, we would:

[root@localhost:~]$ cd /ape/_compile # for easy access to files
[root@localhost:/ape/_compile]$ cp ./scripts/_blank_build_script-copy_to_create_your_own.sh ./scripts/myapp-1.0.sh
[root@localhost:/ape/_compile]$ vi ./scripts/myapp-1.0.sh # make our adjustments to the script so we can use it.
[root@localhost:/ape/_compile]$ ./scripts/myapp-1.0.sh -a # perform all steps from configure to RPM.
[root@localhost:/ape/_compile]$ # If compile failed, curse and go back to the `vi` command above.
[root@localhost:/ape/_compile]$ &#124;

Once you have your script created and configured, the usage like the usage below, but with a different script name:

[root@localhost:/ape/_compile/scripts]$ ./scripts/myapp-1.0.sh -h
INFO:
  User script for the Ape Base Compile System. For information about the
  Ape Base Compile System, please visit http://apebase.sourceforge.net/.
  You may also find documentation on this local machine at
  http://apebase.sourceforge.net:80/apeDocs if the Ape Base Compile System
  is fully installed.
VERSION:
  1.02-ap20104400 SVN r73 2008-03-23 09:19:42Z BrynM
USAGE:
  myapp-1.0.sh [-a] [-c] [-h] [-i] [-j] [-k] [-m] [-o] [-r [-g]]  [-s] [-t]
OPTIONS:
  -a      Run `configure`, `make`, `make install` and RPM steps.
           Essentially shorthand for the combined flags -cmisr.
  -c      Run `configure` step.
  -i      Run `make install` step. This will also perform a removal like -k and
           activate -s.
  -j      Just run and exit performing only common actions. Primarily only used
           for debugging script failures..
  -h      Show usage and exit.
  -k      Remove previous build and exit.
  -m      Run `make` step.
  -o      Show `configure --help` output.
  -r [-g] Create RPM using EPM (requires the ESP EPM binaries). The -g flag will
           cause the resulting RPM to be deposited into the appropriate gold
           directory for the distribution (currently only RHEL based).
  -s      Copy skeleton config files.
  -t      Experimental. Tarball up installed version into a .tar.gz under the
           current directory.
NOTES:
  Execution order is -c, -m, (implied -k) -i, -s , -r , -t. The options -h, -j, -k
    and -o will ech stop execution directly after performing their task. Implied
    -k means that a removal is performed, but this is actually part of the -i step
    and not an actual usage of the -k process.
  Some commands produce logs within the "output" directory.
  RPMs end up in the "rpms" directory in subfolders organized by distro,
    release and architecture.
  Tarballs end up in the current working directory.
  Files copied from the skel directory always end up under the compiled
    --prefix.
  You can add additional EPM directives by providing a file to the
    APE_CONF_USER_EPM_STUB setting.
[root@localhost:/ape/_compile/scripts]$ &#124;
Making Your First User Script

Making a script to package an application is rather easy. Of course, compiling that application may be another story.

  1. We need to build an application called MyApp, Version 1.0.
  2. The sources for this applicaiton can be found in /ape/_compile/myapp-1.0
  3. The only configure option we need for MyApp, Version 1.0 is "--enable-shared=yes" to build shared libraries.
  4. We aren't doing anything fancy with Ape User Configuration Variables.

The above list is numbered because we will be dealing with some possible complications of these items at the end of this section after we've got the basics.

Tutorials and Examples

These tutorials will take you in order from simple to complex.

Getting Ready to Compile (Basic Tutorial)

The most essential part of your compile and packaging efforts is the source code for your application. In our example, we'll be getting ready to compile ESP EPM. To place it, we'll download the source package from http://www.epmhome.org/ to our ./sourceballs directory, extract it to the ./src directory and know what we need to chage if anything in our user script. Please be sure to use the appropriate mirror from http://www.epmhome.org/ to download. We will be dealing with a GZipped Tarball in this example. If you have a zip, rar or other type of package, please substitute the `tar` commands below for their appropriate equivalent and read the documentation for that equivalent.

First, grab the source package.

[root@localhost:~]$ wget --directory-prefix=/ape/_compile/sourceballs 'http://ftp.SOME-MIRROR/pub/epm/4.1/epm-4.1-source.tar.gz'
--10:24:06--  http://ftp.SOME-MIRROR/pub/epm/4.1/epm-4.1-source.tar.gz
Resolving ftp.SOME-MIRROR... 208.256.256.256
Connecting to ftp.SOME-MIRROR|208.256.256.256|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 509728 (498K) [application/x-gzip]
Saving to: `/ape/_compile/sourceballs/epm-4.1-source.tar.gz'

100%[=================================================================================================================================================>] 509,728      984K/s   in 0.5s

10:24:07 (984 KB/s) - `/ape/_compile/sourceballs/epm-4.1-source.tar.gz' saved [509728/509728]

[root@localhost:~]$ &#124;

Now we extract it to /ape/_compile/src/, but first we check to see that everything in the source package is inside of a directory. In this case, the directory is named in the style of "app-version" as Ape Base Compile System will expect it: ("epm-4.1"). If the contents of the source package are at the root of the package, you may wish to alter "--directory /ape/_compile/src" to something like "--directory /ape/_compile/src/app-version" in the second command below.

[root@localhost:~]$ tar --gzip --list --file /ape/_compile/sourceballs/epm-4.1-source.tar.gz | head -n 10
epm-4.1/
epm-4.1/doc/
epm-4.1/doc/3-packaging.html
epm-4.1/doc/epmlogo.tif
epm-4.1/doc/epm.man
epm-4.1/doc/d-relnotes.html
epm-4.1/doc/mkepmlist.man
epm-4.1/doc/c-reference.html
epm-4.1/doc/epminstall.man
epm-4.1/doc/Makefile.in
[root@localhost:~]$ tar --gzip --extract --directory /ape/_compile/src --file /ape/_compile/sourceballs/epm-4.1-source.tar.gz
[root@localhost:~]$ ls -ld /ape/_compile/src/epm-4.1
drwxrwxr-x 5 1110 games 4096 Apr 10  2007 /ape/_compile/src/epm-4.1
[root@localhost:~]$ &#124;

In this case, you'll notice the odd owner and group of /ape/_compile/src/epm-4.1 in the final directory listing (`ls`). These were the permissions from the extracted archive. We shoudl fix them before going on.

[root@localhost:~]$ chown -R root:root /ape/_compile/src/epm-4.1
[root@localhost:~]$ ls -ld /ape/_compile/src/epm-4.1
drwxrwxr-x 5 root root 4096 Apr 10  2007 /ape/_compile/src/epm-4.1
[root@localhost:~]$ &#124;

If you wish to further organize the ./src directory, you can do so. Perhaps you'd like to keep all of your MySQL sources together. In such a case you would create the directory in ./src and adjust your APE_CONF_SOURCE_DIR_NAME variable accordingly in your user script.

Create your own script for installing ESP EPM (Basic Tutorial)

(this section has yet to be written)

Ape User Configuration Variables

The most commonly useful of thes variables are already in the template "_blank_build_script-copy_to_create_your_own.sh" for use in creating your own scripts. There are several here that are not normally included in that template which may be useful to you for more complicated tasks. Processing a compile task begins as these variables are initialized where possible in "./include/ape_config.sh" and the settings in your coopy of "_blank_build_script-copy_to_create_your_own.sh" overwrites the values where needed. Finally, "./include/scripts_common.sh" performs any needed validation before starting the requested task.

APE_CONF_ALWAYS_CFLAGS (User Configuration Variable)
Default: (empty)

Always append these CFLAGS to any existing CFLAGS at compile time.

APE_CONF_BASE_DEST_PARENT_DIR (User Configuration Variable)
Default: "/ape"

Base install path (the root directory for --prefix). Change this if you want your applications to end up in a place other than /ape or you need to override the setting in include/ape_config.sh.

APE_CONF_COMPANY_NAME (User Configuration Variable)
Default: "Company Name (www.companyurl.tld) using ESP EPM (www.epmhome.org)"

Name of the place/organization/company you are using this at for credits and vendor RPM properties.

APE_CONF_COMPILE_HOME (User Configuration Variable)
Default: "/ape/_compile"

The root directory of Ape Base.

APE_CONF_CONFIGURE_STRING (User Configuration Variable)
Required for normal usage. You need to fill this in.
Default: (empty)

This is your configure string. This is required most of the time unless you don't need any ooptions.

VERY IMPORTANT
You don't need to specify a "--prefix" as other variables will take care of it. (none) should contain everything else.

APE_CONF_DEST_DIR_LABEL (User Configuration Variable)
Default: "${APE_CONF_PACKAGE_NAME}"

Subdirectory in APE_CONF_BASE_DEST_PARENT_DIR to store versions - such as "php" for "/ape/php" to be used.

APE_CONF_DISABLE_AUTO_REMOVAL (User Configuration Variable)
Default: "off"

Force the removal step to be skipped unless specified at the command line. This will also skip APE_CONF_PRE_REMOVE_CMD and APE_CONF_POST_REMOVE_CMD.

APE_CONF_LICENSE_FILE (User Configuration Variable)
Default: (empty)

Location of user specified LICENSE file for use in rpm creation.

APE_CONF_PACKAGE_NAME (User Configuration Variable)
Required for normal usage. You need to fill this in.
Default: (empty)

Proper name of package for RPM package naming such as "php" or "mysql". Not to be confused with APE_CONF_DEST_DIR_LABEL.

APE_CONF_PACKAGE_NAME_PREFIX (User Configuration Variable)
Default: (empty)

Prefix for proper name of package used in RPM package naming to differentiate from packages built by others. Such as "ape" to produce a PHP RPM called "apePhp".

APE_CONF_POST_CONFIGURE_CMD (User Configuration Variable)
Default: (empty)

Command(s) to run after configure step.

A note about triggered commands. These can be commands, user functions or scripts local to the compile machine. They run at their appripriate steps designated by their names. None of them are required. If you would like to disable the use of a particular step, just put something that will fail with a greater than 0 exit status into its value. The easiest is something like "exit 1 # comment". If you include the comment, you can pass a message along. If a triggered command has a greater than 0 exit value (return code), further processing will be halted.

Here is an example to disable this particular step:

export APE_CONF_POST_CONFIGURE_CMD="exit 1 # APE_CONF_POST_CONFIGURE_CMD step not implemented"

Thus, running `somepackage.sh -c` will output:

## somepackage.sh # Executing APE_CONF_POST_CONFIGURE_CMD "exit 1 #  APE_CONF_POST_CONFIGURE_CMD step not implemented".
[root@localhost:~]$ echo $?
1
[root@localhost:~]$ &#124;
APE_CONF_POST_INSTALL_CMD (User Configuration Variable)
Default: (empty)

Command(s) to run after install step.

A note about triggered commands. These can be commands, user functions or scripts local to the compile machine. They run at their appripriate steps designated by their names. None of them are required. If you would like to disable the use of a particular step, just put something that will fail with a greater than 0 exit status into its value. The easiest is something like "exit 1 # comment". If you include the comment, you can pass a message along. If a triggered command has a greater than 0 exit value (return code), further processing will be halted.

Here is an example to disable this particular step:

export APE_CONF_POST_INSTALL_CMD="exit 1 # APE_CONF_POST_INSTALL_CMD step not implemented"

Thus, running `somepackage.sh -c` will output:

## somepackage.sh # Executing APE_CONF_POST_INSTALL_CMD "exit 1 #  APE_CONF_POST_INSTALL_CMD step not implemented".
[root@localhost:~]$ echo $?
1
[root@localhost:~]$ &#124;
APE_CONF_POST_MAKE_CMD (User Configuration Variable)
Default: (empty)

Command(s) to run after make step.

A note about triggered commands. These can be commands, user functions or scripts local to the compile machine. They run at their appripriate steps designated by their names. None of them are required. If you would like to disable the use of a particular step, just put something that will fail with a greater than 0 exit status into its value. The easiest is something like "exit 1 # comment". If you include the comment, you can pass a message along. If a triggered command has a greater than 0 exit value (return code), further processing will be halted.

Here is an example to disable this particular step:

export APE_CONF_POST_MAKE_CMD="exit 1 # APE_CONF_POST_MAKE_CMD step not implemented"

Thus, running `somepackage.sh -c` will output:

## somepackage.sh # Executing APE_CONF_POST_MAKE_CMD "exit 1 #  APE_CONF_POST_MAKE_CMD step not implemented".
[root@localhost:~]$ echo $?
1
[root@localhost:~]$ &#124;
APE_CONF_POST_REMOVE_CMD (User Configuration Variable)
Default: (empty)

Command(s) to run after remove step.

A note about triggered commands. These can be commands, user functions or scripts local to the compile machine. They run at their appripriate steps designated by their names. None of them are required. If you would like to disable the use of a particular step, just put something that will fail with a greater than 0 exit status into its value. The easiest is something like "exit 1 # comment". If you include the comment, you can pass a message along. If a triggered command has a greater than 0 exit value (return code), further processing will be halted.

Here is an example to disable this particular step:

export APE_CONF_POST_REMOVE_CMD="exit 1 # APE_CONF_POST_REMOVE_CMD step not implemented"

Thus, running `somepackage.sh -c` will output:

## somepackage.sh # Executing APE_CONF_POST_REMOVE_CMD "exit 1 #  APE_CONF_POST_REMOVE_CMD step not implemented".
[root@localhost:~]$ echo $?
1
[root@localhost:~]$ &#124;
APE_CONF_POST_RPM_CMD (User Configuration Variable)
Default: "${APE_CONF_COMPILE_HOME}/rpms/up-mrepo.sh"

Command(s) to run after RPM step.

A note about triggered commands. These can be commands, user functions or scripts local to the compile machine. They run at their appripriate steps designated by their names. None of them are required. If you would like to disable the use of a particular step, just put something that will fail with a greater than 0 exit status into its value. The easiest is something like "exit 1 # comment". If you include the comment, you can pass a message along. If a triggered command has a greater than 0 exit value (return code), further processing will be halted.

Here is an example to disable this particular step:

export APE_CONF_POST_RPM_CMD="exit 1 # APE_CONF_POST_RPM_CMD step not implemented"

Thus, running `somepackage.sh -c` will output:

## somepackage.sh # Executing APE_CONF_POST_RPM_CMD "exit 1 #  APE_CONF_POST_RPM_CMD step not implemented".
[root@localhost:~]$ echo $?
1
[root@localhost:~]$ &#124;
APE_CONF_POST_RPM_INSTALL_CMD (User Configuration Variable)
Default: (empty)

Command(s) to run after someone installs your RPM. This command is stored in the RPM itself by EPM. Note that the user may nor have the benefit of any of the Ape variables or functions existing in their environament at install time. It is best to stick with a pre-installed script which you include via a SKEL or normal shell command for this particular trigger.

APE_CONF_POST_RPM_LIST_CMD (User Configuration Variable)
Default: (empty)

Command(s) to run immediately after the EPM list file is created prior to RPM packaging.

A note about triggered commands. These can be commands, user functions or scripts local to the compile machine. They run at their appripriate steps designated by their names. None of them are required. If you would like to disable the use of a particular step, just put something that will fail with a greater than 0 exit status into its value. The easiest is something like "exit 1 # comment". If you include the comment, you can pass a message along. If a triggered command has a greater than 0 exit value (return code), further processing will be halted.

Here is an example to disable this particular step:

export APE_CONF_POST_RPM_LIST_CMD="exit 1 # APE_CONF_POST_RPM_LIST_CMD step not implemented"

Thus, running `somepackage.sh -c` will output:

## somepackage.sh # Executing APE_CONF_POST_RPM_LIST_CMD "exit 1 #  APE_CONF_POST_RPM_LIST_CMD step not implemented".
[root@localhost:~]$ echo $?
1
[root@localhost:~]$ &#124;
APE_CONF_POST_SKEL_CMD (User Configuration Variable)
Default: (empty)

Command(s) to run after SKEL step.

A note about triggered commands. These can be commands, user functions or scripts local to the compile machine. They run at their appripriate steps designated by their names. None of them are required. If you would like to disable the use of a particular step, just put something that will fail with a greater than 0 exit status into its value. The easiest is something like "exit 1 # comment". If you include the comment, you can pass a message along. If a triggered command has a greater than 0 exit value (return code), further processing will be halted.

Here is an example to disable this particular step:

export APE_CONF_POST_SKEL_CMD="exit 1 # APE_CONF_POST_SKEL_CMD step not implemented"

Thus, running `somepackage.sh -c` will output:

## somepackage.sh # Executing APE_CONF_POST_SKEL_CMD "exit 1 #  APE_CONF_POST_SKEL_CMD step not implemented".
[root@localhost:~]$ echo $?
1
[root@localhost:~]$ &#124;
APE_CONF_PRE_CONFIGURE_CMD (User Configuration Variable)
Default: (empty)

Command(s) to run before the configure step.

A note about triggered commands. These can be commands, user functions or scripts local to the compile machine. They run at their appripriate steps designated by their names. None of them are required. If you would like to disable the use of a particular step, just put something that will fail with a greater than 0 exit status into its value. The easiest is something like "exit 1 # comment". If you include the comment, you can pass a message along. If a triggered command has a greater than 0 exit value (return code), further processing will be halted.

Here is an example to disable this particular step:

export APE_CONF_PRE_CONFIGURE_CMD="exit 1 # APE_CONF_PRE_CONFIGURE_CMD step not implemented"

Thus, running `somepackage.sh -c` will output:

## somepackage.sh # Executing APE_CONF_PRE_CONFIGURE_CMD "exit 1 #  APE_CONF_PRE_CONFIGURE_CMD step not implemented".
[root@localhost:~]$ echo $?
1
[root@localhost:~]$ &#124;
APE_CONF_PRE_INSTALL_CMD (User Configuration Variable)
Default: (empty)

Command(s) to run before the make install step.

A note about triggered commands. These can be commands, user functions or scripts local to the compile machine. They run at their appripriate steps designated by their names. None of them are required. If you would like to disable the use of a particular step, just put something that will fail with a greater than 0 exit status into its value. The easiest is something like "exit 1 # comment". If you include the comment, you can pass a message along. If a triggered command has a greater than 0 exit value (return code), further processing will be halted.

Here is an example to disable this particular step:

export APE_CONF_PRE_INSTALL_CMD="exit 1 # APE_CONF_PRE_INSTALL_CMD step not implemented"

Thus, running `somepackage.sh -c` will output:

## somepackage.sh # Executing APE_CONF_PRE_INSTALL_CMD "exit 1 #  APE_CONF_PRE_INSTALL_CMD step not implemented".
[root@localhost:~]$ echo $?
1
[root@localhost:~]$ &#124;
APE_CONF_PRE_MAKE_CMD (User Configuration Variable)
Default: (empty)

Command(s) to run before the make step.

A note about triggered commands. These can be commands, user functions or scripts local to the compile machine. They run at their appripriate steps designated by their names. None of them are required. If you would like to disable the use of a particular step, just put something that will fail with a greater than 0 exit status into its value. The easiest is something like "exit 1 # comment". If you include the comment, you can pass a message along. If a triggered command has a greater than 0 exit value (return code), further processing will be halted.

Here is an example to disable this particular step:

export APE_CONF_PRE_MAKE_CMD="exit 1 # APE_CONF_PRE_MAKE_CMD step not implemented"

Thus, running `somepackage.sh -c` will output:

## somepackage.sh # Executing APE_CONF_PRE_MAKE_CMD "exit 1 #  APE_CONF_PRE_MAKE_CMD step not implemented".
[root@localhost:~]$ echo $?
1
[root@localhost:~]$ &#124;
APE_CONF_PRE_REMOVE_CMD (User Configuration Variable)
Default: (empty)

Command(s) to run before the remove step.

A note about triggered commands. These can be commands, user functions or scripts local to the compile machine. They run at their appripriate steps designated by their names. None of them are required. If you would like to disable the use of a particular step, just put something that will fail with a greater than 0 exit status into its value. The easiest is something like "exit 1 # comment". If you include the comment, you can pass a message along. If a triggered command has a greater than 0 exit value (return code), further processing will be halted.

Here is an example to disable this particular step:

export APE_CONF_PRE_REMOVE_CMD="exit 1 # APE_CONF_PRE_REMOVE_CMD step not implemented"

Thus, running `somepackage.sh -c` will output:

## somepackage.sh # Executing APE_CONF_PRE_REMOVE_CMD "exit 1 #  APE_CONF_PRE_REMOVE_CMD step not implemented".
[root@localhost:~]$ echo $?
1
[root@localhost:~]$ &#124;
APE_CONF_PRE_RPM_CMD (User Configuration Variable)
Default: (empty)

Command(s) to run before the EPM/RPM step.

A note about triggered commands. These can be commands, user functions or scripts local to the compile machine. They run at their appripriate steps designated by their names. None of them are required. If you would like to disable the use of a particular step, just put something that will fail with a greater than 0 exit status into its value. The easiest is something like "exit 1 # comment". If you include the comment, you can pass a message along. If a triggered command has a greater than 0 exit value (return code), further processing will be halted.

Here is an example to disable this particular step:

export APE_CONF_PRE_RPM_CMD="exit 1 # APE_CONF_PRE_RPM_CMD step not implemented"

Thus, running `somepackage.sh -c` will output:

## somepackage.sh # Executing APE_CONF_PRE_RPM_CMD "exit 1 #  APE_CONF_PRE_RPM_CMD step not implemented".
[root@localhost:~]$ echo $?
1
[root@localhost:~]$ &#124;
APE_CONF_PRE_SKEL_CMD (User Configuration Variable)
Default: (empty)

Command(s) to run before the SKEL step.

A note about triggered commands. These can be commands, user functions or scripts local to the compile machine. They run at their appripriate steps designated by their names. None of them are required. If you would like to disable the use of a particular step, just put something that will fail with a greater than 0 exit status into its value. The easiest is something like "exit 1 # comment". If you include the comment, you can pass a message along. If a triggered command has a greater than 0 exit value (return code), further processing will be halted.

Here is an example to disable this particular step:

export APE_CONF_PRE_SKEL_CMD="exit 1 # APE_CONF_PRE_SKEL_CMD step not implemented"

Thus, running `somepackage.sh -c` will output:

## somepackage.sh # Executing APE_CONF_PRE_SKEL_CMD "exit 1 #  APE_CONF_PRE_SKEL_CMD step not implemented".
[root@localhost:~]$ echo $?
1
[root@localhost:~]$ &#124;
APE_CONF_QUIET_COMPILES (User Configuration Variable)
Default: "no"

Quiet compiles. This can also be enabled by using "-q" at the command line. Enabling this pipe compile messages to log files and display only Ape messaging where possible. This will affect the "-c", "-m" and "-i" options. The "-o" command line compile option is the only exception to this setting.

APE_CONF_RELEASE (User Configuration Variable)
Default: "ap`expr \`date +%s\` / 7200 # 2 hour intervals since epoch`"

Release number (minor version so RPMs can be upgraded to new compiles of the same sources) if you want to specify something other than an auto generated one. This is auto-generated in ./include/ape_config.sh to be the number of seconds since the Unix epoch split into two hour increments with the letters "ap" prepended. An example value would be "ap167321"

APE_CONF_REVISION_MESSAGE (User Configuration Variable)
Default: "Custom Build release ${APE_CONF_RELEASE}."

Extra message for the description detailing RPM revision. This shows up in `rpm` and `yum` commands.

APE_CONF_RPM_NO_CLOBBER (User Configuration Variable)
Default: (empty)

This will set the no-clobber flag for files installed from your RPM. This will trigger the creation of "filename.rpmnew" if the destination file exists and has been altered. File names or paths are accepted separated by spaces.

APE_CONF_RPM_OS_DESTINATIONS (User Configuration Variable)
Default: "on"

This variable is deprecated. Please do not alter it.

APE_CONF_RPM_PROVIDES (User Configuration Variable)
Default: (empty)

What, if anything special, your RPM package provides. Separate names with spaces or tabs. You don't need to speify the package name, such as "apePhp", because that is added automatically. Example:

export APE_CONF_PACKAGE_NAME_PREFIX="ape"
export APE_CONF_PACKAGE_NAME=cups
export APE_CONF_RPM_PROVIDES="cups cupssys cupssys-client" # note that "apeCups" will be auto added at runtime
APE_CONF_RPM_REQUIRES (User Configuration Variable)
Default: (empty)

Any other things that should be required to install your RPM. Separate files or packages with spaces and denote version numbers with @. Example:

APE_CONF_RPM_REQUIRES="bind@30:9.3.3-10.el5 mysql@5.0.0 perl perl-DBI"
APE_CONF_RPM_USER_DESTINATION (User Configuration Variable)
Default: (empty)

User destination for created RPM file. If you have installed ape.mrepoHttpd you probably should leave this alone.

APE_CONF_SKEL_LINKTO_SCRIPT (User Configuration Variable)
Default: (empty)

User specified link-to-current script to install. Leave this alone unless you are debugging.

APE_CONF_SOURCE_DIR_NAME (User Configuration Variable)

The name of your source directory such as "epm-4.1". This is expected to be found within Ape's ./src directory. Using the previous example, a (none) value of "epm-4.1" the path from the Ape root would be "./src/epm-4.1" for the source files. If you would like to organize your applications into subdirectories of ./src, then adjust this variable as follows in your user script. You will notice that the variables representing the application and version are still present.

# Name of the source dir underneath ${APE_CONF_COMPILE_HOME}/src (designated below)
# This is the directory with the actual source code in it.
# Change this from the detected settings if you need to.
#
export APE_CONF_SOURCE_DIR_NAME="subdirectory/${APE_CONF_PACKAGE_NAME}-${APE_CONF_VERSION}"

If you would like to place your source directory completely ourside of APE_CONF_COMPILE_HOME, then you would adjust APE_CONF_SOURCE_DIR_NAME as follows.

# Name of the source dir underneath ${APE_CONF_COMPILE_HOME}/src (designated below)
# This is the directory with the actual source code in it.
# Change this from the detected settings if you need to.
#
export APE_CONF_SOURCE_DIR_NAME="/path/to/your/source/directory"
APE_CONF_TAG_OUTPUT_DELIM (User Configuration Variable)
Default: "#"

Delimiter used output tags during Ape scripts. For example, setting

export APE_CONF_TAG_OUTPUT_DELIM="*"

Will result in output like:

## foo-1.0.sh * Detected "i386" mode.
APE_CONF_TAG_OUTPUT_PREFIX (User Configuration Variable)
Default: "##"

Prefix to output tags during Ape scripts. For example, setting

export APE_CONF_TAG_OUTPUT_PREFIX="*"

Will result in output like:

* foo-1.0.sh # Detected "i386" mode.
APE_CONF_TAG_OUTPUT_TAG (User Configuration Variable)
Default: "`basename $0`"

The actual tag used to differentiate Ape output from the output of things Ape may be running. By default this is set to the name of the current script. Note that if you would like a datestamp to appear in the tag, you could use APE_CONF_TAG_OUTPUT_TIMESTAMP if you don't need a custom timestamp.

Example:

export APE_CONF_TAG_OUTPUT_TAG="some text `basename $0` something"

Will result in output something like:

## some text foo-1.0.sh something # Detected "i386" mode.
APE_CONF_TAG_OUTPUT_TIMESTAMP (User Configuration Variable)
Default: "no"

Whether or not to append timestamps to the output tags. The output tag is the "## scriptname.sh #" prefix to Ape output. This is useful if you are piping output to a log file. Yes, no, true, false, 0, 1 and empry are accepted values for APE_CONF_TAG_OUTPUT_TIMESTAMP.

Example:

export APE_CONF_TAG_OUTPUT_TIMESTAMP="yes"

Will result in output something like:

## foo-1.0.sh  2008.03.16.06:57.45 # Detected "i386" mode.

Note: If you are piping your output to a log file, remember to pipe STDERR to your log with something like `script.sh 2>&1 >>logfile.log`.

APE_CONF_TARBALL (User Configuration Variable)

The file name of the tarball to produce during the Tar step. Do not include directory or path information. Just the file name.

APE_CONF_TMPDIR (User Configuration Variable)
Default: **SEE BELOW

What to set the gcc TMPDIR and RPM temporary destination to. EPM will be given this setting with the "--output-dir" directive and the resulting RPM is moved to where it belongs afterward. The default value of this variable is set with the first found directory in APE_SYS_POSSIBLE_TEMPS. APE_SYS_POSSIBLE_TEMPS itself should not be changed unless you know what you are doing.

APE_CONF_USER_ARCHITECTURE (User Configuration Variable)
Default: (empty)

Use this to specify a different target architecture than the `uname -i` detected one for the RPM build. A primary usage is to force architecture independant ('noarch') RPMs.

APE_CONF_USER_EPM_STUB (User Configuration Variable)

Stub epm list file with basic or extra information. Most of the time you can leave this alone and make a file in the appropriate place if you need to add things to the generated EPM list file. This file will be appended to the generated EPM list file. You can use any directives available in the EPM documentation.

APE_CONF_VERSION (User Configuration Variable)
Required for normal usage. You need to fill this in.
Default: (empty)

Version number that we will use for the final directory name of the install such as "5.2.0.2" or "0.2.1beta".

Ape Internal System Variables
APE_SYS_APE_VERSION (System Variable)
* APE_SYS_APE_VERSION has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_APE_VERSION.shtml. *
APE_SYS_ARCHITECTURE (System Variable)
* APE_SYS_ARCHITECTURE has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_ARCHITECTURE.shtml. *
APE_SYS_ARGLIST (System Variable)
* APE_SYS_ARGLIST has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_ARGLIST.shtml. *
APE_SYS_ARGLIST_HUMAN (System Variable)
* APE_SYS_ARGLIST_HUMAN has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_ARGLIST_HUMAN.shtml. *
APE_SYS_BIG_HEAVY_WOOD (System Variable)
* APE_SYS_BIG_HEAVY_WOOD has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_BIG_HEAVY_WOOD.shtml. *
APE_SYS_CHANGELOG (System Variable)

The name of the changelog file. This is used when I build Ape Base Compile System itself.

APE_SYS_CREATED_LINKTO_FILE (System Variable)

This is used during the SKEL step and after to contain the link-to-current file path if is was created.

APE_SYS_DEBUG_GIVEUP (System Variable)
* APE_SYS_DEBUG_GIVEUP has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_DEBUG_GIVEUP.shtml. *
APE_SYS_DETECTED_ARCHITECTURE (System Variable)
* APE_SYS_DETECTED_ARCHITECTURE has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_DETECTED_ARCHITECTURE.shtml. *
APE_SYS_DETECTED_LIB_PATH_TYPE (System Variable)
* APE_SYS_DETECTED_LIB_PATH_TYPE has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_DETECTED_LIB_PATH_TYPE.shtml. *
APE_SYS_DIRS_OTHER_DIRECTORIES (System Variable)
* APE_SYS_DIRS_OTHER_DIRECTORIES has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_DIRS_OTHER_DIRECTORIES.shtml. *
APE_SYS_DIRS_SCRIPT_DIRECTORIES (System Variable)
* APE_SYS_DIRS_SCRIPT_DIRECTORIES has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_DIRS_SCRIPT_DIRECTORIES.shtml. *
APE_SYS_DIRS_SCRIPT_SYS_DIRECTORIES (System Variable)
* APE_SYS_DIRS_SCRIPT_SYS_DIRECTORIES has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_DIRS_SCRIPT_SYS_DIRECTORIES.shtml. *
APE_SYS_DIRS_SCRIPT_USER_DIRECTORIES (System Variable)
* APE_SYS_DIRS_SCRIPT_USER_DIRECTORIES has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_DIRS_SCRIPT_USER_DIRECTORIES.shtml. *
APE_SYS_EPM_LIST_FILE (System Variable)
* APE_SYS_EPM_LIST_FILE has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_EPM_LIST_FILE.shtml. *
APE_SYS_EPM_PATH (System Variable)
* APE_SYS_EPM_PATH has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_EPM_PATH.shtml. *
APE_SYS_INIT_RAN (System Variable)
* APE_SYS_INIT_RAN has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_INIT_RAN.shtml. *
APE_SYS_LTCURR_RESULT (System Variable)
* APE_SYS_LTCURR_RESULT has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_LTCURR_RESULT.shtml. *
APE_SYS_MKEPMLIST_PATH (System Variable)
* APE_SYS_MKEPMLIST_PATH has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_MKEPMLIST_PATH.shtml. *
APE_SYS_OLD_PWD (System Variable)
* APE_SYS_OLD_PWD has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_OLD_PWD.shtml. *
APE_SYS_OS_VERSION_SHORT (System Variable)
* APE_SYS_OS_VERSION_SHORT has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_OS_VERSION_SHORT.shtml. *
APE_SYS_POSSIBLE_TEMPS (System Variable)
* APE_SYS_POSSIBLE_TEMPS has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_POSSIBLE_TEMPS.shtml. *
APE_SYS_PROPER_NAME (System Variable)
* APE_SYS_PROPER_NAME has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_PROPER_NAME.shtml. *
APE_SYS_RUN_CONFHELP (System Variable)
* APE_SYS_RUN_CONFHELP has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_RUN_CONFHELP.shtml. *
APE_SYS_RUN_CONFIGURE (System Variable)
* APE_SYS_RUN_CONFIGURE has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_RUN_CONFIGURE.shtml. *
APE_SYS_RUN_CONFIGURE_RESULT (System Variable)
* APE_SYS_RUN_CONFIGURE_RESULT has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_RUN_CONFIGURE_RESULT.shtml. *
APE_SYS_RUN_COPY_SKELS (System Variable)
* APE_SYS_RUN_COPY_SKELS has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_RUN_COPY_SKELS.shtml. *
APE_SYS_RUN_EPM (System Variable)
* APE_SYS_RUN_EPM has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_RUN_EPM.shtml. *
APE_SYS_RUN_EPM_GOLD (System Variable)
* APE_SYS_RUN_EPM_GOLD has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_RUN_EPM_GOLD.shtml. *
APE_SYS_RUN_EPM_RESULT (System Variable)
* APE_SYS_RUN_EPM_RESULT has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_RUN_EPM_RESULT.shtml. *
APE_SYS_RUN_EPM_SKIP_APP_DIR (System Variable)
* APE_SYS_RUN_EPM_SKIP_APP_DIR has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_RUN_EPM_SKIP_APP_DIR.shtml. *
APE_SYS_RUN_MAKE (System Variable)
* APE_SYS_RUN_MAKE has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_RUN_MAKE.shtml. *
APE_SYS_RUN_MAKE_INSTALL (System Variable)
* APE_SYS_RUN_MAKE_INSTALL has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_RUN_MAKE_INSTALL.shtml. *
APE_SYS_RUN_MAKE_INSTALL_RESULT (System Variable)
* APE_SYS_RUN_MAKE_INSTALL_RESULT has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_RUN_MAKE_INSTALL_RESULT.shtml. *
APE_SYS_RUN_MAKE_RESULT (System Variable)
* APE_SYS_RUN_MAKE_RESULT has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_RUN_MAKE_RESULT.shtml. *
APE_SYS_RUN_RM_INSTALLED (System Variable)
* APE_SYS_RUN_RM_INSTALLED has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_RUN_RM_INSTALLED.shtml. *
APE_SYS_RUN_RM_INSTALL_RESULT (System Variable)
* APE_SYS_RUN_RM_INSTALL_RESULT has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_RUN_RM_INSTALL_RESULT.shtml. *
APE_SYS_RUN_TARBALL (System Variable)
* APE_SYS_RUN_TARBALL has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_RUN_TARBALL.shtml. *
APE_SYS_SCRIPTS_COMMON_RETURN (System Variable)
* APE_SYS_SCRIPTS_COMMON_RETURN has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_SCRIPTS_COMMON_RETURN.shtml. *
APE_SYS_SKELS_RESULT (System Variable)
* APE_SYS_SKELS_RESULT has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_SKELS_RESULT.shtml. *
APE_SYS_SKELS_SYNC_CMD (System Variable)
* APE_SYS_SKELS_SYNC_CMD has not been documented yet. You can contribute it by editing /ape/_compile/util/docs/src/sys_vars/sys_vars_APE_SYS_SKELS_SYNC_CMD.shtml. *
Changelog
## ape_compile.sh # Executing `svn log -v /ape/root_svn/branches/1.02 | sed -r 's/[0-9]{2}:[0-9]{2}:[0-9]{2}/00:00:00/g' | grep -vE '^\s*$' | grep -v '^Changed paths' | grep -vE '^ +[AMDR]\s' | fmt -s -w 120 >>/ape/_compile/util/docs/changelog.txt`. ------------------------------------------------------------------------ r73 | BrynM | 2008-03-23 00:00:00 -0700 (Sun, 23 Mar 2008) | 5 lines Sat Mar 22 00:00:00 PDT 2008 + root + added svn up to ape_compile.sh for changelog generation Sat Mar 22 00:00:00 PDT 2008 + root + added links to default values that contain variables in docs Sat Mar 22 00:00:00 PDT 2008 + root + documented APE_CONF_TMPDIR Sun Mar 23 00:00:00 PDT 2008 + root + linkorama Sun Mar 23 00:00:00 PDT 2008 + root + more setup documentation ------------------------------------------------------------------------ r72 | BrynM | 2008-03-22 00:00:00 -0700 (Sat, 22 Mar 2008) | 1 line Sat Mar 22 00:00:00 PDT 2008 + root + appended OSI BSD license to each .sh script and propsets ------------------------------------------------------------------------ r71 | BrynM | 2008-03-22 00:00:00 -0700 (Sat, 22 Mar 2008) | 1 line Sat Mar 22 00:00:00 PDT 2008 + root + appended OSI BSD license to each .sh script ------------------------------------------------------------------------ r70 | BrynM | 2008-03-22 00:00:00 -0700 (Sat, 22 Mar 2008) | 4 lines Sat Mar 22 00:00:00 PDT 2008 + root + added -o option and created accompanying var APE_CONF_QUIET_COMPILES Sat Mar 22 00:00:00 PDT 2008 + root + documented -o option and created accompanying var APE_CONF_QUIET_COMPILES doc Sat Mar 22 00:00:00 PDT 2008 + root + documented APE_SYS_POSSIBLE_TEMPS Sat Mar 22 00:00:00 PDT 2008 + root + implemented fallback temp directories ------------------------------------------------------------------------ r69 | BrynM | 2008-03-21 00:00:00 -0700 (Fri, 21 Mar 2008) | 2 lines Thu Mar 20 00:00:00 PDT 2008 + root + documented APE_CONF_DISABLE_AUTO_REMOVAL Fri Mar 21 00:00:00 PDT 2008 + root + added new APE_CONF_TMPDIR ------------------------------------------------------------------------ r68 | BrynM | 2008-03-20 00:00:00 -0700 (Thu, 20 Mar 2008) | 1 line Thu Mar 20 00:00:00 PDT 2008 + root + documented APE_CONF_DISABLE_AUTO_REMOVAL ------------------------------------------------------------------------ r67 | BrynM | 2008-03-20 00:00:00 -0700 (Thu, 20 Mar 2008) | 6 lines Wed Mar 19 00:00:00 PDT 2008 + root + cursor blinky Wed Mar 19 00:00:00 PDT 2008 + root + no longer require mrepo to install rpm Wed Mar 19 00:00:00 PDT 2008 + root + requitements documentation Wed Mar 19 00:00:00 PDT 2008 + root + removed requirement for rpm-devel Wed Mar 19 00:00:00 PDT 2008 + root + narrowed requirement of make to just automake Thu Mar 20 00:00:00 PDT 2008 + root + added new APE_CONF_DISABLE_AUTO_REMOVAL variable ------------------------------------------------------------------------ r66 | BrynM | 2008-03-19 00:00:00 -0700 (Wed, 19 Mar 2008) | 2 lines Wed Mar 19 00:00:00 PDT 2008 + root + cursor blinky in docs Wed Mar 19 00:00:00 PDT 2008 + root + documentation cleanup and additions ------------------------------------------------------------------------ r65 | BrynM | 2008-03-19 00:00:00 -0700 (Wed, 19 Mar 2008) | 2 lines Wed Mar 19 00:00:00 PDT 2008 + root + cursor blinky in docs Wed Mar 19 00:00:00 PDT 2008 + root + documentation cleanup and additions ------------------------------------------------------------------------ r64 | BrynM | 2008-03-19 00:00:00 -0700 (Wed, 19 Mar 2008) | 1 line Wed Mar 19 00:00:00 PDT 2008 + root + documentation cleanup and additions ------------------------------------------------------------------------ r63 | BrynM | 2008-03-19 00:00:00 -0700 (Wed, 19 Mar 2008) | 1 line Wed Mar 19 00:00:00 PDT 2008 + root + documentation cleanup and additions ------------------------------------------------------------------------ r62 | BrynM | 2008-03-19 00:00:00 -0700 (Wed, 19 Mar 2008) | 3 lines Tue Mar 18 00:00:00 PDT 2008 + root + changelog support for build of ape and docs Tue Mar 18 00:00:00 PDT 2008 + root + fixed trailing slashes for user directory variables Tue Mar 18 00:00:00 PDT 2008 + root + cleaned up missing 1.0 in svn branches ------------------------------------------------------------------------ r61 | BrynM | 2008-03-18 00:00:00 -0700 (Tue, 18 Mar 2008) | 1 line migration file ------------------------------------------------------------------------ r60 | BrynM | 2008-03-18 00:00:00 -0700 (Tue, 18 Mar 2008) | 1 line minor variables file bug ------------------------------------------------------------------------ r59 | BrynM | 2008-03-18 00:00:00 -0700 (Tue, 18 Mar 2008) | 1 line docs ------------------------------------------------------------------------ r58 | BrynM | 2008-03-18 00:00:00 -0700 (Tue, 18 Mar 2008) | 3 lines Tue Mar 18 00:00:00 PDT 2008 + root + s/s_apeCliUsage/s_apeUsageCli/g s/s_apeInstallation/s_apeAboutInstall/g s/s_apeDocConventions/s_apeAboutDocConv/g ------------------------------------------------------------------------ r56 | BrynM | 2008-03-18 00:00:00 -0700 (Tue, 18 Mar 2008) | 1 line docs ------------------------------------------------------------------------ r55 | BrynM | 2008-03-17 00:00:00 -0700 (Mon, 17 Mar 2008) | 1 line fresh trunk ------------------------------------------------------------------------ r53 | BrynM | 2008-03-17 00:00:00 -0700 (Mon, 17 Mar 2008) | 1 line official 1.02 ------------------------------------------------------------------------ r51 | BrynM | 2008-03-17 00:00:00 -0700 (Mon, 17 Mar 2008) | 1 line 1.01 patch release ap20096876 ------------------------------------------------------------------------ r7 | BrynM | 2008-03-13 00:00:00 -0700 (Thu, 13 Mar 2008) | 1 line merge fixes back to trunk ------------------------------------------------------------------------ r6 | BrynM | 2008-03-13 00:00:00 -0700 (Thu, 13 Mar 2008) | 1 line fix bad perms on symlinks ------------------------------------------------------------------------ r2 | BrynM | 2008-03-11 00:00:00 -0700 (Tue, 11 Mar 2008) | 2 lines + Tue Mar 11 00:00:00 PDT 2008 + root + initial import + Tue Mar 11 00:00:00 PDT 2008 + root + set props on appropriate files ------------------------------------------------------------------------ r1 | BrynM | 2008-03-11 00:00:00 -0700 (Tue, 11 Mar 2008) | 1 line initial paths ------------------------------------------------------------------------ ## ape_compile.sh # Executing `svn log -v /ape/root_svn/branches/1.01 | sed -r 's/[0-9]{2}:[0-9]{2}:[0-9]{2}/00:00:00/g' | grep -vE '^\s*$' | grep -v '^Changed paths' | grep -vE '^ +[AMDR]\s' | fmt -s -w 120 >>/ape/_compile/util/docs/changelog.txt`. ------------------------------------------------------------------------ r50 | BrynM | 2008-03-17 00:00:00 -0700 (Mon, 17 Mar 2008) | 1 line path release with altered gold (now copy) and fixed rsync ------------------------------------------------------------------------ r49 | BrynM | 2008-03-17 00:00:00 -0700 (Mon, 17 Mar 2008) | 1 line minor bug fix for unsupported rsync option in some versions of rsync ------------------------------------------------------------------------ r46 | BrynM | 2008-03-17 00:00:00 -0700 (Mon, 17 Mar 2008) | 1 line calling 1.01 final RPM rename ------------------------------------------------------------------------ r45 | BrynM | 2008-03-17 00:00:00 -0700 (Mon, 17 Mar 2008) | 1 line calling 1.01 final RPM ------------------------------------------------------------------------ r44 | BrynM | 2008-03-17 00:00:00 -0700 (Mon, 17 Mar 2008) | 1 line calling 1.01 final ------------------------------------------------------------------------ r43 | BrynM | 2008-03-17 00:00:00 -0700 (Mon, 17 Mar 2008) | 1 line calling 1.1 final ------------------------------------------------------------------------ r42 | BrynM | 2008-03-17 00:00:00 -0700 (Mon, 17 Mar 2008) | 1 line calling 1.1 final ------------------------------------------------------------------------ r41 | BrynM | 2008-03-17 00:00:00 -0700 (Mon, 17 Mar 2008) | 6 lines Sun Mar 16 00:00:00 PDT 2008 + root + moved documentation stylesheet to ssi shtml format Sun Mar 16 00:00:00 PDT 2008 + root + the -g flag now creates a symlink to the created RPM in its original location Sun Mar 16 00:00:00 PDT 2008 + root + added sourceforge links to footer Sun Mar 16 00:00:00 PDT 2008 + root + finished epm setup instructions Mon Mar 17 00:00:00 PDT 2008 + root + converted skel copy to rsync so files can be filtered such as the .svn files Mon Mar 17 00:00:00 PDT 2008 + root + added new APE_SYS_SKELS_SYNC_CMD sys var for rsync support ------------------------------------------------------------------------ r40 | BrynM | 2008-03-16 00:00:00 -0700 (Sun, 16 Mar 2008) | 1 line style ------------------------------------------------------------------------ r39 | BrynM | 2008-03-16 00:00:00 -0700 (Sun, 16 Mar 2008) | 1 line rpm checkpoint ------------------------------------------------------------------------ r38 | BrynM | 2008-03-16 00:00:00 -0700 (Sun, 16 Mar 2008) | 2 lines Sun Mar 16 00:00:00 PDT 2008 + root + removed extraneous style sheet Sun Mar 16 00:00:00 PDT 2008 + root + more docs ------------------------------------------------------------------------ r37 | BrynM | 2008-03-16 00:00:00 -0700 (Sun, 16 Mar 2008) | 1 line fixed revision and version tracking ------------------------------------------------------------------------ r36 | BrynM | 2008-03-16 00:00:00 -0700 (Sun, 16 Mar 2008) | 1 line fixed revision and version tracking ------------------------------------------------------------------------ r35 | BrynM | 2008-03-16 00:00:00 -0700 (Sun, 16 Mar 2008) | 1 line ------------------------------------------------------------------------ r34 | BrynM | 2008-03-16 00:00:00 -0700 (Sun, 16 Mar 2008) | 1 line ------------------------------------------------------------------------ r33 | BrynM | 2008-03-16 00:00:00 -0700 (Sun, 16 Mar 2008) | 1 line ------------------------------------------------------------------------ r32 | BrynM | 2008-03-16 00:00:00 -0700 (Sun, 16 Mar 2008) | 1 line oops - screwed up again ------------------------------------------------------------------------ r31 | BrynM | 2008-03-16 00:00:00 -0700 (Sun, 16 Mar 2008) | 1 line oops - screwed up ------------------------------------------------------------------------ r30 | BrynM | 2008-03-16 00:00:00 -0700 (Sun, 16 Mar 2008) | 5 lines Current contents of /tmp/root.sfmess: Sun Mar 16 00:00:00 PDT 2008 + root + added APE_CONF_TAG_OUTPUT_PREFIX Sun Mar 16 00:00:00 PDT 2008 + root + fixed missing comment in _blank_build_script-copy_to_create_your_own.sh Sun Mar 16 00:00:00 PDT 2008 + root + added begining of setup instructions Sun Mar 16 00:00:00 PDT 2008 + root + documented APE_CONF_TAG_OUTPUT_DELIM, APE_CONF_TAG_OUTPUT_PREFIX, APE_CONF_TAG_OUTPUT_TAG and APE_CONF_TAG_OUTPUT_TIMESTAMP ------------------------------------------------------------------------ r29 | BrynM | 2008-03-16 00:00:00 -0700 (Sun, 16 Mar 2008) | 20 lines Current contents of /tmp/root.sfmess: Sun Mar 16 00:00:00 PDT 2008 + root + Fixing missing revision messages Sun Mar 16 00:00:00 PDT 2008 + root + added new cli usage to reflect new -g option for -r to documentation Sun Mar 16 00:00:00 PDT 2008 + root + fixed tab in cli help output Sun Mar 16 00:00:00 PDT 2008 + root + more documentation for root dirs Sun Mar 16 00:00:00 PDT 2008 + root + ./include/ape_config.sh now created as ./ape_config.sh.sample Sun Mar 16 00:00:00 PDT 2008 + root + added error function ape_fling to print to STDERR Sun Mar 16 00:00:00 PDT 2008 + root + separated stderr and stdout where possible Sun Mar 16 00:00:00 PDT 2008 + root + reformatted output tagging to include timestamp Sun Mar 16 00:00:00 PDT 2008 + root + configurable output tagging Sun Mar 16 00:00:00 PDT 2008 + root + created ./util/dev-extra/ape_status.sh to make status output filter volatile file paths Sun Mar 16 00:00:00 PDT 2008 + root + empty spot for setup instructions Sun Mar 16 00:00:00 PDT 2008 + root + installation instructions Sun Mar 16 00:00:00 PDT 2008 + root + fixed stray .svn .rpmnew and .rpmsave getting into the release package. Sun Mar 16 00:00:00 PDT 2008 + root + fixed help output Sun Mar 16 00:00:00 PDT 2008 + root + moved link-to-current file creation to skel step Sun Mar 16 00:00:00 PDT 2008 + root + added version number tracking internally and in docs Sun Mar 16 00:00:00 PDT 2008 + root + added new cli usage to reflect new -g option for -r to documentation Sun Mar 16 00:00:00 PDT 2008 + root + fixed tab in cli help output Sun Mar 16 00:00:00 PDT 2008 + root + more documentation for root dirs ------------------------------------------------------------------------ r28 | BrynM | 2008-03-16 00:00:00 -0700 (Sun, 16 Mar 2008) | 1 line ------------------------------------------------------------------------ r27 | BrynM | 2008-03-15 00:00:00 -0700 (Sat, 15 Mar 2008) | 3 lines Sun Mar 16 00:00:00 PDT 2008 + root + created ./util/dev-extra/ape_status.sh to make status output filter volatile file paths Sun Mar 16 00:00:00 PDT 2008 + root + empty spot for setup instructions Sun Mar 16 00:00:00 PDT 2008 + root + installation instructions ------------------------------------------------------------------------ r26 | BrynM | 2008-03-15 00:00:00 -0700 (Sat, 15 Mar 2008) | 1 line rid of extraneous ./rpms/centos/gold ------------------------------------------------------------------------ r25 | BrynM | 2008-03-15 00:00:00 -0700 (Sat, 15 Mar 2008) | 1 line rpm copy ------------------------------------------------------------------------ r24 | BrynM | 2008-03-15 00:00:00 -0700 (Sat, 15 Mar 2008) | 2 lines + Sat Mar 15 00:00:00 PDT 2008 + root + added gold functionality to rpm step + Sat Mar 15 00:00:00 PDT 2008 + root + doc verbosity ------------------------------------------------------------------------ r23 | BrynM | 2008-03-15 00:00:00 -0700 (Sat, 15 Mar 2008) | 1 line revision and version tracking done ------------------------------------------------------------------------ r22 | BrynM | 2008-03-15 00:00:00 -0700 (Sat, 15 Mar 2008) | 1 line revision and version tracking done ------------------------------------------------------------------------ r21 | BrynM | 2008-03-15 00:00:00 -0700 (Sat, 15 Mar 2008) | 1 line revision file ------------------------------------------------------------------------ r20 | BrynM | 2008-03-15 00:00:00 -0700 (Sat, 15 Mar 2008) | 1 line revision file ------------------------------------------------------------------------ r19 | BrynM | 2008-03-15 00:00:00 -0700 (Sat, 15 Mar 2008) | 1 line test ------------------------------------------------------------------------ r18 | BrynM | 2008-03-15 00:00:00 -0700 (Sat, 15 Mar 2008) | 1 line test ------------------------------------------------------------------------ r17 | BrynM | 2008-03-15 00:00:00 -0700 (Sat, 15 Mar 2008) | 1 line added versio file ------------------------------------------------------------------------ r16 | BrynM | 2008-03-15 00:00:00 -0700 (Sat, 15 Mar 2008) | 5 lines + Fri Mar 14 00:00:00 PDT 2008 + root + fixed stray .svn .rpmnew and .rpmsave getting into the release package. + Sat Mar 15 00:00:00 PDT 2008 + root + fixed help output + Sat Mar 15 00:00:00 PDT 2008 + root + moved link-to-current file creation to skel step + Sat Mar 15 00:00:00 PDT 2008 + root + moved link-to-current file creation to skel step + Sat Mar 15 00:00:00 PDT 2008 + root + added versiono number tracking internally and in docs ------------------------------------------------------------------------ r15 | BrynM | 2008-03-14 00:00:00 -0700 (Fri, 14 Mar 2008) | 1 line oops - rpmnew files checked in ------------------------------------------------------------------------ r14 | BrynM | 2008-03-14 00:00:00 -0700 (Fri, 14 Mar 2008) | 1 line needed to only reset non-set vars ------------------------------------------------------------------------ r13 | BrynM | 2008-03-13 00:00:00 -0700 (Thu, 13 Mar 2008) | 1 line test RPM ------------------------------------------------------------------------ r12 | BrynM | 2008-03-13 00:00:00 -0700 (Thu, 13 Mar 2008) | 1 line tweaking output of mv RPM ------------------------------------------------------------------------ r11 | BrynM | 2008-03-13 00:00:00 -0700 (Thu, 13 Mar 2008) | 1 line tweaking finding the resultant RPM ------------------------------------------------------------------------ r10 | BrynM | 2008-03-13 00:00:00 -0700 (Thu, 13 Mar 2008) | 1 line simplified user script even mmore, added check for APE_CONF_SOURCE_DIR_NAME of "none" ------------------------------------------------------------------------ r9 | BrynM | 2008-03-13 00:00:00 -0700 (Thu, 13 Mar 2008) | 1 line 1.01 branch ------------------------------------------------------------------------ r8 | BrynM | 2008-03-13 00:00:00 -0700 (Thu, 13 Mar 2008) | 1 line 1.01 branch ------------------------------------------------------------------------ r7 | BrynM | 2008-03-13 00:00:00 -0700 (Thu, 13 Mar 2008) | 1 line merge fixes back to trunk ------------------------------------------------------------------------ r6 | BrynM | 2008-03-13 00:00:00 -0700 (Thu, 13 Mar 2008) | 1 line fix bad perms on symlinks ------------------------------------------------------------------------ r2 | BrynM | 2008-03-11 00:00:00 -0700 (Tue, 11 Mar 2008) | 2 lines + Tue Mar 11 00:00:00 PDT 2008 + root + initial import + Tue Mar 11 00:00:00 PDT 2008 + root + set props on appropriate files ------------------------------------------------------------------------ r1 | BrynM | 2008-03-11 00:00:00 -0700 (Tue, 11 Mar 2008) | 1 line initial paths ------------------------------------------------------------------------
Documentation for the Ape Base Compile System v1.02-ap20104400 SVN r73 2008-03-23 09:19:42Z BrynM at http://apebase.sourceforge.net:80/apeDocs/ (127.0.0.1)
Last Modified: Sunday, 23-Mar-2008 05:47:47 UTC - Now: Friday, 29-Mar-2024 05:53:55 UTC
Ape logo originally from image in "Round-about Rambles in Lands of Fact and Fancy" by Frank Richard Stockton via Project Gutenberg (direct link)
Valid XHTML 1.0 Transitional SourceForge.net Logo
Home Page - SourceForge Page - Downloads - Subversion Repository - Forums - Report A Bug
Ape Base Compile System project hosted by SourceForge.