Packaging of EPICS-basedControl System Software Takashi Nakamoto (Cosylab Japan) takashi.nakamoto@cosylab.com
Abstract Packaging of control system software Control system software: EPICS base, driver supports, modules, extensions, CSS, etc. Gives a consistent way to install, uninstall and upgrade them. This work is sponsored by ITER Examples in this presentation are taken from ITER CODAC Core System. Visit ITER website for more details about CODAC Core System. https://www.iter.org/org/team/chd/cid/codac/coresystem
Motivation: typical problems EPICS drivers, modules, extensions and relevant applications are provided in different way. In most cases, only source is provided and you need to build it before you use it. Compilation errors Build dependencies. Wrong build configuration. Inconsistent way to install, uninstall and upgrade Many people scatter files in different directories with different conventions. Complex dependencies. How do you manage which version you have? Don’t waste your time to solve the common problems!
Packaging & Repository Make use of RPM, the standard packaging system. ITER: Built for 64-bit RHEL (currently 5.5). You can also use CentOS, Scientific Linux, etc. Save compiled software on a shared repository RHN Satellite Server yum repository exposed via HTTP Distribute software through this repository. Software Repository EPICS base asyn Sequencer …
Advantages from users perspective Standard tools to install, uninstall and upgrade are available. yum install / yum remove / yum upgrade … any GUI tool Compiled software packages are ready for you. Dependencies are automatically resolved. Scripts can be run after installation if any.
Unix standards All packages are installed in accordance with the standard directory structure. Use of “alternative” to resolve path to executable files. Run daemons in the same fashion of other Unix services. Run a daemon with a separate account (not root). opt codac-2.0 bin epics base module extension lib include etc edm archiver init.d var autosave epicsIOCLog Directory structure of CODAC Core System 2.0:
Available packages on CODAC Core System 2.0 EPICS base EPICS modules (record/device/driver support) sncseq, asyn, s7plc, autosave, … ni6259, pxi6682 Tools and libraries VDCT, caSnooper, pycachannel, … CSS (Control System Studio) BOY, BEAST, BEAUTY, Data Browser, … SDD tools
How to make packages? Maven Software project management tool. XML based configuration (pom.xml). We developed Maven plug-ins to make RPMs of control system software. No need to write SPEC file. Particularly customized to quickly package EPICS relevant software (IOC, modules, CSS etc.). Automatically detects dependencies. Beginning part of pom.xml Packaging information in pom.xml
Basic packaging procedure of IOC mvn-make-base-app src/main/epics/xxxApp src/main/epics/iocBoot/iocXXX src/main/edm … Make database, configure st.cmd, make operators’ screen, etc. mvn package This command compiles source, runs tests if any and makes RPMs in target directory. “mvn package” copies all the source to target and trigger “make” in “epics” directory to compile. After compilation, Maven only takes required files and pack them into RPMs. src main edm epics xxxApp iocXXX test target Example source directory structure: xxx-ioc-0.0a1.x86_64.rpm xxx-opi-0.0a1.x86_64.rpm
Example architectural view 1 Software Repository Common Software Repository RPMs RPMs RPMs RPMs RPMs RPMs IOC EPICS base Driver support Archiving server EPICS base Channel Archiver Developers directly upload RPMs to the repository. Operators’ clients EPICS base EDM ALH Developers’ workstation EPICS base EDM ALH VDCT CSS
Example architectural view 2 Common Software Repository Software Repository RPMs RPMs RPMs Continuous Integration server RPMs IOC EPICS base Driver support source Source Repository … source source Operators’ clients EPICS base EDM ALH Developers upload only modified source code.
Thank You for Your Attention ! Conclusion Save your time by using packaging system. Packaging system gives a consistent way to make packages and distribute them. Thank You for Your Attention !