{"id":21232587,"url":"https://github.com/jeonghanlee/epics-env","last_synced_at":"2025-07-10T17:31:13.587Z","repository":{"id":43604642,"uuid":"282055837","full_name":"jeonghanlee/EPICS-env","owner":"jeonghanlee","description":"ALS-U EPICS Environment","archived":false,"fork":false,"pushed_at":"2025-06-26T20:33:00.000Z","size":491,"stargazers_count":5,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-26T21:47:44.616Z","etag":null,"topics":["als-u","epics"],"latest_commit_sha":null,"homepage":"https://als.lbl.gov/als-u/overview/","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jeonghanlee.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","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}},"created_at":"2020-07-23T21:09:12.000Z","updated_at":"2025-06-26T20:26:13.000Z","dependencies_parsed_at":"2024-03-28T07:26:21.169Z","dependency_job_id":"394511e8-f367-45d1-8a01-c711d139d7a3","html_url":"https://github.com/jeonghanlee/EPICS-env","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":"jeonghanlee/env-template","purl":"pkg:github/jeonghanlee/EPICS-env","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeonghanlee%2FEPICS-env","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeonghanlee%2FEPICS-env/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeonghanlee%2FEPICS-env/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeonghanlee%2FEPICS-env/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jeonghanlee","download_url":"https://codeload.github.com/jeonghanlee/EPICS-env/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeonghanlee%2FEPICS-env/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264618972,"owners_count":23638380,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["als-u","epics"],"created_at":"2024-11-20T23:53:21.018Z","updated_at":"2025-07-10T17:31:13.573Z","avatar_url":"https://github.com/jeonghanlee.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# EPICS Configuration Environment\n\n## Reference\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.8248353.svg)](https://doi.org/10.5281/zenodo.8248353)\n\n## Github Actions\n[![Debian 12](https://github.com/jeonghanlee/EPICS-env/actions/workflows/debian12.yml/badge.svg)](https://github.com/jeonghanlee/EPICS-env/actions/workflows/debian12.yml)\n[![Rocky 9](https://github.com/jeonghanlee/EPICS-env/actions/workflows/rocky9.yml/badge.svg)](https://github.com/jeonghanlee/EPICS-env/actions/workflows/rocky9.yml)\n[![Linux Build](https://github.com/jeonghanlee/EPICS-env/actions/workflows/build.yml/badge.svg)](https://github.com/jeonghanlee/EPICS-env/actions/workflows/build.yml)\n[![Ubuntu 22.04](https://github.com/jeonghanlee/EPICS-env/actions/workflows/ubuntu22.yml/badge.svg)](https://github.com/jeonghanlee/EPICS-env/actions/workflows/ubuntu22.yml) \n[![Linter Run](https://github.com/jeonghanlee/EPICS-env/actions/workflows/linter.yml/badge.svg)](https://github.com/jeonghanlee/EPICS-env/actions/workflows/linter.yml)\n## Introduction\nThis is the EPICS base and various modules Configuration Environment for the ALS-U project and my purpose. There are plenty of diverse ways we can do this. However, it is designed for me to minimize my limited resources to support the reproducible EPICS environment in various platforms. I want to use almost pure Makefile instead of packages, and continuous integration tools, such as Ansible, Conda, Puppet, and even shell scripts. Unfortunately, I used \"shell tricks\" within Makefile rules, but I tried to use the generic Makefile rules as much as possible. I want a system that works without looking for their dependencies over the next ten years.\n\n## Tested\n\n### Focus\n\n* Debian 12 (Bookworm)\n* Rocky 8   (Green Obsidian)\n\n\n### Eye\n* Rocky 9  (Blue Onyx)\n* macOS 14 (Sonoma, with brew, python 3.11)\n\n### Obsolete \n* ~~Scientific Linux 7~~\n* ~~CentOS 8~~\n* ~~macOS 12.0.1 (21A559)~~\n* ~~macOS 11.1 (20C69)~~\n* ~~macOS 11~~\n* ~~macOS 13 (Ventura, with brew)~~\n* ~~CentOS 7~~\n* ~~Debian 10 (Buster)~~\n* ~~Debian 11 (Bullseye)~~\n* ~~Ubuntu 22.04 LTS (Jammy Jellyfish)~~\n* ~~Alma 8~~\n* ~~Fedora 32~~\n* ~~Ubuntu 18.04/20.04~~\n* ~~Raspbian GNU/Linux 10~~\n\n## TL;DR\nThat you know, one should install all relevant packages for the EPICS base and modules. \n\nNote that due to `pyDevSup`, one must carefully set up its python version. The minimum required package is numpy. Please check the `.github/workflow` action files for the relevant packages.\n\nNote that due to `measComp`, one needs to set up a vendor library. Please check https://github.com/jeonghanlee/uldaq-env with `/usr/local` installation path.\n\nNote that due to `pvxs`, one needs to run `make symlinks` mandatory. It allows us to use the proper path for pvxs executable files and libraries with the environment. We use the system library `libevnet` instead of the pvxs bundle.\n\n```bash\nmake init\nmake patch\nmake conf\nmake build\nmake install\nmake symlinks\nmake exist\nsource ${HOME}/epics/1.1.1/debian-12/7.0.7/setEpicsEnv.bash\nsoftIoc\n```\n\n## Base and Modules\n\nAll version information is defined in `configure/RELEASE`, and include the following EPICS base and modules:\n\n```bash\n$ make vars FILTER=SRC_NAME_\n\n------------------------------------------------------------\n\u003e\u003e\u003e\u003e          Current Environment Variables             \u003c\u003c\u003c\u003c\n------------------------------------------------------------\n\nSRC_NAME_ASYN = asyn\nSRC_NAME_AUTOSAVE = autosave\nSRC_NAME_BASE = epics-base\nSRC_NAME_CALC = calc\nSRC_NAME_CAPUTLOG = caPutLog\nSRC_NAME_ETHERIP = ether_ip\nSRC_NAME_IOCSTATS = iocStats\nSRC_NAME_LUA = lua\nSRC_NAME_MCOREUTILS = MCoreUtils\nSRC_NAME_MODBUS = modbus\nSRC_NAME_RECSYNC = recsync\nSRC_NAME_RETOOLS = retools\nSRC_NAME_SNCSEQ = sequencer-2-2\nSRC_NAME_SSCAN = sscan\nSRC_NAME_STREAM = StreamDevice\n\n$ make vars FILTER=SRC_TAG_\n\n------------------------------------------------------------\n\u003e\u003e\u003e\u003e          Current Envrionment Variables             \u003c\u003c\u003c\u003c\n------------------------------------------------------------\n\nSRC_TAG_ASYN = tags/R4-40\nSRC_TAG_AUTOSAVE = tags/R5-10-1\nSRC_TAG_BASE = tags/R7.0.4\nSRC_TAG_CALC = tags/R3-7-4\nSRC_TAG_CAPUTLOG = tags/R3.7\nSRC_TAG_ETHERIP = tags/ether_ip-3-2\nSRC_TAG_IOCSTATS = 70128c7\nSRC_TAG_LUA = 5b2d131\nSRC_TAG_MCOREUTILS = tags/1.2.2\nSRC_TAG_MODBUS = tags/R3-1\nSRC_TAG_RECSYNC = eb33785\nSRC_TAG_RETOOLS = f477f09\nSRC_TAG_SNCSEQ = tags/R2-2-8\nSRC_TAG_SSCAN = tags/R2-11-3\nSRC_TAG_STREAM = bf55d4c\n```\n\n## BASE Setup\n\n```bash\nmake init.base\nmake conf.base\nmake conf.base.show\nmake patch.base      : if it is necessary.\nmake build.base\nmake install.base\nmake clean.base\nmake distclean.base  : this will delete the download source directory\nmake exist\n```\n\n## EPICS Modules Setup\n\n```bash\nmake init.modules\nmake conf.modules\nmake clean.modules\nmake build.modules\nmake install.modules\nmake clean.modules\nmake distclean.modules\nmake exist.modules\n```\n\n```bash\n$ make exist.modules\n/home/jhlee/epics-7.0.4/epics-modules\n├── asyn-4.40\n├── autosave-5.10.1\n├── calc-3.7.4\n├── caPutLog-3.7\n├── ether_ip-3.2.0\n├── iocStats-70128c7\n├── lua-5b2d131\n├── MCoreUtils-1.2.2\n├── modbus-3.1.0\n├── recsync-eb33785\n├── retools-f477f09\n├── seq-2.2.8\n├── sscan-2-11-3\n└── std-1dff82c\n```\n\n```bash\n$ make symlinks.modules\n$ make exist.modules LEVEL=0\njhlee@parity: EPICS-env (master)$ make exist.modules LEVEL=0\ntree -aL 1 /opt/epics-7.0.4/epics-modules\n/opt/epics-7.0.4/epics-modules\n├── asyn -\u003e /opt/epics-7.0.4/epics-modules/asyn-4.40\n├── asyn-4.40\n├── autosave -\u003e /opt/epics-7.0.4/epics-modules/autosave-5.10.1\n├── autosave-5.10.1\n├── calc -\u003e /opt/epics-7.0.4/epics-modules/calc-3.7.4\n├── calc-3.7.4\n├── caPutLog -\u003e /opt/epics-7.0.4/epics-modules/caPutLog-3.7\n├── caPutLog-3.7\n├── ether_ip -\u003e /opt/epics-7.0.4/epics-modules/ether_ip-3.2.0\n├── ether_ip-3.2.0\n├── iocStats -\u003e /opt/epics-7.0.4/epics-modules/iocStats-70128c7\n├── iocStats-70128c7\n├── lua -\u003e /opt/epics-7.0.4/epics-modules/lua-5b2d131\n├── lua-5b2d131\n├── MCoreUtils -\u003e /opt/epics-7.0.4/epics-modules/MCoreUtils-1.2.2\n├── MCoreUtils-1.2.2\n├── modbus -\u003e /opt/epics-7.0.4/epics-modules/modbus-3.1.0\n├── modbus-3.1.0\n├── recsync -\u003e /opt/epics-7.0.4/epics-modules/recsync-eb33785\n├── recsync-eb33785\n├── retools -\u003e /opt/epics-7.0.4/epics-modules/retools-f477f09\n├── retools-f477f09\n├── seq -\u003e /opt/epics-7.0.4/epics-modules/seq-2.2.8\n├── seq-2.2.8\n├── sscan -\u003e /opt/epics-7.0.4/epics-modules/sscan-2-11-3\n├── sscan-2-11-3\n├── std -\u003e /opt/epics-7.0.4/epics-modules/std-1dff82c\n├── std-1dff82c\n├── StreamDevice -\u003e /opt/epics-7.0.4/epics-modules/StreamDevice-2.8.15-bf55d4c\n└── StreamDevice-2.8.15-bf55d4c\n```\n\n* additional makefile rules\n\n```bash\nmake exist             : Show Base and Modules Installation Path  (one can use `LEVEL` argument, e.g., `make exist LEVEL=4`)\nmake init.modules      : Generate dynamic modules variables and clone all\nmake conf.modules      : Make conf.modules.show will print out all local configuration files.\nmake conf.modules.show : Show all local configurations (RELEASE.local, CONFIG_SITE.local, and so on)\nmake clean.modules     : Some modules have the infinite compiling loop, so we have to clean up existing things within git repositories.\nmake build.modules     : Build and install each module into its installation location\nmake install.modules   : We may not need this rule because of the standard EPICS building system default could be to build and install\nmake uninstall.modules : Execute uninstall within each module source, and remove the installed module directory.\nmake exist.modules     : Show where the modules are installed.\nmake vars              : Print all important variables\nmake PRINT._var_name   : Print the selected variable\nmake symlinks.modules   : Create / Overwrite symbolic links for all modules defined within active configuration. Remove all dead links.\n```\n\n* Delete all download sources\n\n```bash\nmake distclean.modules\n```\n\n## A Module Setup\n\nIf we define each module properly, all module build rules are generated automatically. For example,\n\n```bash\nmake build.iocStats\n\nmake clean.StreamDevice\n\nmake install.asyn\n\n```\n\nThe rule name is used in the form as\n\n```bash\nbuild_name.module_name\n```\n\nwhere `build_name` is one of `build`, `install`, `clean`, and `uninstall` And `module_name` is the module directory name without `-src` suffix.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeonghanlee%2Fepics-env","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjeonghanlee%2Fepics-env","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeonghanlee%2Fepics-env/lists"}