{"id":35752969,"url":"https://github.com/nsls2/epics-rpm-config","last_synced_at":"2026-01-27T20:29:59.795Z","repository":{"id":322697220,"uuid":"468010948","full_name":"NSLS2/epics-rpm-config","owner":"NSLS2","description":"Configuration for EPICS rpm bundle creation at NSLS2","archived":false,"fork":false,"pushed_at":"2026-01-09T18:48:50.000Z","size":73,"stargazers_count":0,"open_issues_count":9,"forks_count":2,"subscribers_count":13,"default_branch":"main","last_synced_at":"2026-01-12T18:34:24.443Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NSLS2.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-03-09T16:40:28.000Z","updated_at":"2026-01-09T18:48:57.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/NSLS2/epics-rpm-config","commit_stats":null,"previous_names":["nsls2/epics-rpm-config"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/NSLS2/epics-rpm-config","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NSLS2%2Fepics-rpm-config","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NSLS2%2Fepics-rpm-config/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NSLS2%2Fepics-rpm-config/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NSLS2%2Fepics-rpm-config/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NSLS2","download_url":"https://codeload.github.com/NSLS2/epics-rpm-config/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NSLS2%2Fepics-rpm-config/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28482473,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-06T20:30:52.652Z","updated_at":"2026-01-27T20:29:59.789Z","avatar_url":"https://github.com/NSLS2.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NSLS2 EPICS Bundle RPM Configuration\n\nThis repository reflects the current configuration of EPICS base + modules used to create the `epics-bundle` rpm.\nIt is synced with several Jenkins projects that execute the build, package it as an RPM, and then sign and upload the rpm.\n\n### Test Environmnet Setup\n\nBefore performing any work on the configuration, you may want to set up a test environment. First, clone this repository,\nand make a new development branch. You may also want to fork this repository first instead, and clone from there.\n\n```\ngit clone --recursive https://github.com/NSLS2/epics-rpm-config\ncd epics-rpm-config\ngit checkout -b my-dev-branch\n```\n\nNext, run the build in order to get an EPICS installation on your system:\n\n```\n# This is only necessary the first time, it will install any required yum/dnf packages. Run this with root permissions\nsudo ./dependencyInstall.sh\n\n# This will install epics into the `INSTALL` directory. You can also use `make rpm` which will perform the local install and also generate an RPM\nmake localinstall\n```\n\n### Versioning Schema\n\nSince each release of the `epics-bundle` rpm contains all of EPICS base and a large variety of modules and drivers, a scheme to represent the version of the package that could denote changes to any component needed to be devised. The solution ultimately became a three part version string, as follows:\n\n1. The EPICS base version, followed by an underscore.\n2. A three number string, each separated by periods, with the following meanings:\n   * Addition/Removal of a module (potentially breaking change).\n   * Change (i.e. version bump) of module with dependants.\n   * Change to module with no dependants.\n3. A minor release number, meant to signify non-invasive changes to specfile or build process.\n\nWith each change to the configuration, if the EPICS base version remains static the second version string component should be update as necessary. If the base version changes, the first component is changed, and each number in the second and third components is reset to 0.\n\nFor example, a version string of `7.0.4.1_1.3.1-4` would indicate:\n\n* An EPICS base version of `7.0.4.1`.\n* One module was added or removed since the intial release of the rpm with that EPICS base version.\n* Three modules with dependants had their versions changed since the initial release of the rpm with that base version.\n* One module without dependants had its version changed.\n* There were 4 changes to the specfile or build tool.\n\n### Adding a Module\n\nTo add a module to the configuration, you will need a few things. First, perform the environment setup in the previous section.\n\nNext, the module needs to be visible on the network either as a git repository (highly preferrable), or as a tarball that can be grabbed with wget. As an example, I will go through the process of adding the `optics` module located at `https://github.com/epics-modules/optics`.\n\n\nDownload and unpack your module in the `BUILD/support/` directory, and if applicable, check out your desired version. Then, edit the `configure/RELEASE` file to point to the built directories for any dependancy modules, navigate to it, and try to build with `make`.\n\nFor our optics example:\n\n```\n# Enter the support directory and clone the module\ncd BUILD/support\ngit clone https://github.com/epics-modules/optics\n\n# Check out the R2-13-5 tagged release\ncd optics \u0026\u0026 git checkout -q R2-13-5\n```\n\nNext we edit the `optics/configure/RELEASE` file to point the locations of any dependencies. In our example the edited file looks like:\n\n```\nSUPPORT=/epics/utils/rhel8-epics-config/BUILD/support\n\nSNCSEQ=$(SUPPORT)/seq\n\nCALC=$(SUPPORT)/calc\n\nBUSY=$(SUPPORT)/busy\n\nASYN=$(SUPPORT)/asyn\n\nEPICS_BASE=/epics/utils/rhel8-epics-config/BUILD/base\n```\n\nFinally, we simply build with make\n\n```\nmake -s\n```\n\nIf this completes successfully, we can proceed to adding the module to the configuration permanently. Open the `INSTALL_CONFIG` file in the root of this repository. If the URL from which the module is pulled is already listed, add a line containing your module's information under it, in the same structure as the remaining modules. Otherwise, add a new URL and add your module's line under it. If it is a git repository, use `GIT_URL` otherwise, use `WGET_URL`.\n\nFor our `optics` example, it is under the `https://github.com/epics-modules` github org, which is already listed in the config file with `GIT_URL=https://github.com/epics-modules`. Under this we will add the following line:\n\n```\nOPTICS           R2-13-5              $(SUPPORT)/optics                        optics                   YES              YES              YES\n```\n\nThe first item is the module name (this must be unique and match the name used in other module `RELEASE` files). Then the module version that will be checked out, then the module location in the build folder structure, then the module repository name, and finally the three binary options are whether we want to clone, build, and package the module respectively. In most cases these should all be `YES` aside from very specific cases where a module will install build artifacts into the output directories of another module (see `epics-extensions` as an example)\n\n\nOnce you have added the module to the install config, re-run the build script as above and make sure your module builds automatically successfully.\n\n```\nmake clean\nmake localinstall\n```\n\nNote that only the top level `lib`, `bin`, `protocol`, `pmc`, `db`, `dbd`, and `include` folders will be included in the installation, so make sure your module installs any required build artifacts to their proper locations.\n\nOnce you have confirmed that the builds succeeds, the final step involves editing the rpm specfile to account for the change. Open `dist/epics-bundle.spec`, and make the following changes: \n\n* Update the `Version` and `Release` entries based on the versioning schema outlined above\n* Add an entry to the changelog that accounts for the additional module. Make sure the version number listed in the changelog uses the versioning schema correctly. For example in the `optics` case:\n\n```\n* Tue May 18 2021 Jakub Wlodek \u003cjwlodek@bnl.gov\u003e - 7.0.5_1.0.0-0\n- Adding optics module \n```\n\nNow, you may want to generate an RPM that includes your new module to make sure it behaves as expected. To generate an rpm, you must first install `git-rpm-tools`:\n\n```\nsudo dnf install git-rpm-tools\n```\n\nAnd then, simply run:\n\n```\nmake clean\nmake rpm\n```\n\nFinally, once all of this is done, make a commit to your branch, push to your fork of `epics-rpm-config`, and make a merge request with the main branch of the repo. This will be reviewed and merged, and a new version of the RPM will be generated from the updated configuration.\n\n\n### Containers\n\n**Pull and run the latest release:**\n\n```bash\ndocker pull ghcr.io/nsls2/epics-alma8:latest\ndocker run -it ghcr.io/nsls2/epics-alma8:latest\n```\n\n**Build locally:**\n\n```bash\n# Initialize submodules first\ngit submodule update --init --recursive\n\n# Build the container (AlmaLinux 8 - default)\ndocker build -t epics-alma8 .\n\n# Or build for AlmaLinux 10\ndocker build --build-arg ALMA_VERSION=10 -t epics-alma10 .\n\n# Run container\ndocker run -it epics-alma8\n# or\ndocker run -it epics-alma10\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnsls2%2Fepics-rpm-config","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnsls2%2Fepics-rpm-config","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnsls2%2Fepics-rpm-config/lists"}