Please whitelist cPanel in your adblocker so that you’re able to see our version release promotions, thanks!

The Community Forums

Interact with an entire community of cPanel & WHM users!
cPanelResources

Tutorial Building Custom Packages For EasyApache 4

Get started building packages for cPanel & WHM’s EasyApache 4!

  1. cPanelResources
    At cPanel we use Open Build Service (OBS) for numerous things in the EA4 stack, and we recommend using it if you plan to build custom EasyApache 4 RPMs. Open Build Service is used for numerous things in the EA4 stack, it is usable as both a software code repository and build system. It works via both the cli utility osc and via the Open Build Service website. For most actions you will need to use both the utility and the website.

    Getting started with OBS
    You’ll need to start with the following:

    1. An account on SuSE’s excellent Open Build Service.
    2. The ‘osc’ and ‘build’ packages from the OBS repositories:
    • From your distributions package manager
    • ubuntu/debian: sudo apt-get install osc build
    • Other distros, see the OpenSuSE Tools Repository after check your package manager for the ‘osc’ package.​
    3. Run the osc command and input your account information.
    • NOTE: this will create a file at ~/.oscrc with cleartext credentials, treat accordingly.​

    OpenSuse Tips and Tricks contains a lot of useful information on using OBS and osc.

    OBS is structured into User -> Project(s) -> Package(s). For better organization, it’s recommended to create a ‘home:$user:EA4’ subproject as a ‘base of operations’, and then create your specific project and packages inside that subproject. This will look something like:

    Code:
    home:Jperkster:EA4:Suhosin ea-php54-php-suhosin
    OBS Project Repositories Setup
    When setting up OBS repositories, ensure that you are tracking off of the ‘isv:cpanel:EA4’ project, and the ‘CentOS_CentOS-6_standard’ and ‘CentOS_CentOS-7_standard’ builds.

    1 .Head to your projects ‘Repositories’ tab.
    2. Click ‘Add respositories’.
    3. Scroll down and click ‘Expert Mode’ at the bottom.
    4. Enter ‘isv:cpanel:EA4’ as the Project. This means that you are wanting to build this package off of the EA4 Production RPMs.
    5. Select the CentOS version you are building for. If you want to build both 6 and 7, you will need to repeat this process again for the other version.
    6. De-select all architectures except for i586 and x86_64. Note, cPanel does not build packages for 32bit CentOS 7.
    7. Hit ‘Add Repository’.

    OBS Project Setup
    cPanel uses the below SPEC file versioning, which allows OBS to properly set the release, build and commit versions. Ensure your spec file has:

    Code:
    %define release_prefix 1
    
    Release: %{release_prefix}%{?dist}.cpanel
    Also ensure that your OBS project -> Project Config has the following setup:

    Code:
    Prefer: sendmail
    
    Prefer: ea-apache24-mod_mpm_event
    
    Prefer: ea-apache24-mod_cgid
    
    Release: %%{?release_prefix}.<CI_CNT>.<B_CNT>
    If you are creating a new package as a patched/modified version of an upstream package, it’s often recommended to give the package a new or alternate name, and reference upstream_module in the spec file for clarity.

    Basic OBS Usage
    The osc utility allows you to interact with source files using an SVN-like interface, make local builds and numerous other things used in lifecycle management. run osc help to see a full list of all the command available. Some basic common commands are:

    osc ls isv:cpanel:EA4 - See all packages hosted to cPanel’s EasyApache4 repository.
    osc branch isv:cpanel:EA4 scl-php71 home:$MY_USER:$BRANCH_NAME - branch the scl-php71 package into your own branch.
    osc co home:$MY_USER:$BRANCH_NAME - Checkout a branch to a local working directory.
    osc add|remove . - add all files and track all removals from a directory (useful before a commit).
    osc ci -m "my commit" - commit your changes.
    osc build - build a local copy of your package.

    Patch
    Patching an RPM is a relatively easy process that involves a few small updates to the SPEC (specification) file and adding the patch file to the repository.

    1. Branch that package you are wanting to patch using osc br isv:cpanel:EA4 some_package home:$MY_USER:$MY_PATCHED and then cd into the directory with the content in it.
    2. Open the .spec file in your editor of choice.
    3. Update the following fields:
    • Update the number next to release_prefix by one. This is used to indicate the number of changes to a specific version of software.
    • Add a Patch###: line with a unique patch file and number after the other Patch directives
    • example: Patch100: foo.patch
    • in the %prep section, after the other %patch directives add your patch directive.
    • example: %patch100 -p1 -b foo
    • Add a new changelog entry in the %changelog section describing your change. See other entries for example format.​
    4. Copy the .patch file into the checked out directory and add it to the repository using the osc add $filename command.
    5. Test your change locally using the osc build command.
    6. Commit your changes using the osc ci -m "some message" command.

    Create

    Create your package branch

    It is easiest to start this by branching a package from isv:cpanel:EA4 and immediately removing it as this will set up the build dependencies for you. See osc help $command for more information on each of these commands (f.ex. osc help mkpac):
    Code:
    osc branch isv:cpanel:EA4 scl-php71 home:$MY_USER:new_package
    osc co home:geckmatic:new_package
    cd home:geckmatic:new_package
    osc delete scl-php71
    osc mkpac ea-php-php56-yaml
    osc ci -m "delete this package and add the new package"
    Add your sources and packages
    Now you can change directory into the ea-php56-php-yaml and add your sources and spec file. For creating new packages we have provided a repository containing template specifications and example implementation on GitHub. Editing the template file from this repo and filling in items between the [% %] tags should result in a building RPM. To see an example of this already completed, look at the differences between the .template file and the .spec file. For basic information on how build RPMs, please see Maximum RPM

    1. Place the .spec file in the package directory (home:$MY_USER:newpackage/ea-php-php56-yaml).
    2. Copy all the sources into the package directory. If you just want to build the example given here, just copy the contents of the SOURCES/ from the example directory of your choice into the package directory.
    3. Run osc addremove . on the package directory.
    4. osc build to test your change locally.
    5. osc ci -m "First commit" to commit to OBS

    View the Project page on Open Build Server to monitor build status or run osc results.
    Visit the repository on download.opensuse.org or run osc getbinaries.

    Resources
    Useful Links:
    Open Build Service Software for information on running your own local copy of Open Build Service.
    OpenSuse Tools Repository Used to install osc CLI utilities.
    EasyApache Example Spec Files Example EasyApache 4 Apache & PHP Module RPM spec files.
    Maximum RPM Everything RPMs. Must read!

    Official cPanel Sources:
    Official cPanel GitHub All EasyApache 4 package sources are located on cPanels GitHub.
    cPanel Production RPM Sources This is cPanels upstream Production ‘branch’ of RPMs that are live on customer systems.
    cPanel Development RPM Sources This is cPanels upstream development ‘branch’ of RPMs that are getting ready to go to customer systems, but have not been promoted to the ‘Production’ branch.

    Contributions
    Apache Modules:
    ea-apache24-mod_wsgi - Experimental wsgi package for EasyApache 4.
    ea-apache24-mod_xsendfile - mod_xsendfile Apache module for EA4.
    ea-apache24-mod_qos - mod_qos Apache 2.4 module for EA4. Currently only works on CentOS 6.

    PHP Modules:
    ea-php##-php-htscanner-enhanced - Experimental htscanner-enhanced packages.

    Help
    Official cPanel support may not be able to assist with building RPMs or any related issues. You should be able to get live, but unofficial help at #cpanel on Freenode, depending on the time/day. If you have questions on individual packages / code, open an issue on the appropriate GitHub repository.

    Thanks!
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice