EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  <20182019  2020  2021  2022  2023  2024  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  <20182019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: Re: Packaging EPICS and support modules as RPM
From: Michael Davidsaver via Tech-talk <[email protected]>
To: Abdalla Ahmad <[email protected]>
Cc: "[email protected]" <[email protected]>
Date: Sun, 25 Nov 2018 08:34:42 -0800
On 11/22/18 1:07 AM, Abdalla Ahmad via Tech-talk wrote:
> Hi
> 
>  
> 
> I managed to package epics base 3.15.6 and some other support modules as RPM package to be included in our local CentOS repo. Recently we thought of creating a global repo to be shared with the community, but the big problem we faced is the choice epics base version.
> 
>  
> 
> Anything that depends on EPICS base must have its EPICS_BASE defined in the configure/RELEASE file, and since there are more than one major version of EPICS, some might try base 3.14, 3.15 or 3.16 or even 7. In order for the RPM spec file to work properly, EPICS_BASE must be hardcoded in configure/RELEASE. So the question is, does it make since to create separate repo for each base version and each repo contains all support modules built against the corresponding base version? What we think of right now is 4 repos: base 3.14, base 3.15, base 3.16 and base 7. What do you think of this approach?

Now for the longer answer.

Firstly, from your question about INSTALL_LOCATION I guess you haven't come across:

https://github.com/epicsdeb

Which started as a side project of mine back in 2009, and is these days looked
after by Anton Derbenev (NSLS2), Martin Konrad (FRIB), and a few others.

While deb vs. spec incompatibility will keep you from directly using this work,
it does solve the same problem.  So I'll try to highlight some key points:

The basic build recipe[1][2] for Base is:

LD_LIBRARY_PATH=$PWD/lib/$(EPICS_HOST_ARCH):$(LD_LIBRARY_PATH) \
 make \
 LINKER_USE_RPATH=NO \
 SHRLIB_VERSION=<module-version> \
 INSTALL_LOCATION=$PWD/debian/tmp \
 FINAL_LOCATION=/usr/lib/epics \
 EPICS_SITE_VERSION=<package-version>

[1] https://github.com/epicsdeb/epics-debhelper/blob/fb87203e7c662f68fde27151a3a23998f3a5ddb1/lib/Debian/Debhelper/Buildsystem/epicsmake.pm#L38-L66
[2] https://github.com/epicsdeb/epics-base/blob/5e0e68dfc6c2cdd700aef15b65fdd0068c7e00f7/debian/rules#L62

The epics module packages install most files under /usr/lib/epics, without
per-module subdirectories (package managers would error on any conflicts).

The main exceptions to this are caget and friends, which are placed in
/usr/bin for convenience.  Also the fully qualified libraries (eg. libc.so.6)
are placed under /usr/lib to be in the default runtime linker search path.

The end result is that basic usage doesn't require any environment variables
to be set (a Debian policy).


Here is a condensed listing of the three main binary packages of Base.

$ for pkg in epics-catools epics-dev libepics3.15.3; do echo "===== $pkg ====="; dpkg -L $pkg; done
===== epics-catools =====
/usr/bin/caRepeater
/usr/bin/caget
/usr/bin/cainfo
/usr/bin/camonitor
/usr/bin/caput
/usr/bin/casw
/usr/share
/usr/share/doc
/usr/share/doc/epics-catools
/usr/share/doc/epics-catools/README
/usr/share/doc/epics-catools/changelog.Debian.gz
/usr/share/doc/epics-catools/copyright
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/caget.1.gz
/usr/share/man/man1/cainfo.1.gz
/usr/share/man/man1/camonitor.1.gz
/usr/share/man/man1/caput.1.gz
/usr/share/man/man1/makeBaseApp.1.gz
/usr/share/man/man1/makeBaseExt.1.gz
/usr/share/man/man8
/usr/share/man/man8/caRepeater.8.gz
===== epics-dev =====
/etc/epics/configure
/etc/epics/configure/CONFIG
...  Allows administrator customization
/usr/bin
/usr/bin/ascheck
/usr/bin/iocLogServer
/usr/bin/makeBaseApp
/usr/bin/makeBaseExt
/usr/bin/msi
/usr/bin/softIoc
/usr/lib
/usr/lib/epics
/usr/lib/epics/bin
/usr/lib/epics/bin/linux-x86_64
/usr/lib/epics/bin/linux-x86_64/antelope
/usr/lib/epics/bin/linux-x86_64/ascheck
...
/usr/lib/epics/configure
/usr/lib/epics/configure/Sample.Makefile
# /usr/lib/epics/configure also has symlinks to everything in /etc/epics/configure
# so that any administrator customization would actually be used.
/usr/lib/epics/db
/usr/lib/epics/db/softIocExit.db
/usr/lib/epics/dbd
/usr/lib/epics/dbd/aSubRecord.dbd
...
/usr/lib/epics/include
/usr/lib/epics/include/aSubRecord.h
...
/usr/lib/epics/include/os
/usr/lib/epics/include/os/Linux
/usr/lib/epics/include/os/Linux/epicsAtomicOSD.h
...
/usr/lib/epics/lib
/usr/lib/epics/lib/linux-x86_64
/usr/lib/epics/lib/linux-x86_64/libCom.a
/usr/lib/epics/lib/linux-x86_64/libCom.so
# note absence of libCom.so.3.15.3 for $(EPICS_HOST_ARCH) only.  See below.
...
/usr/lib/epics/lib/linux-x86_64-debug
/usr/lib/epics/lib/linux-x86_64-debug/libCom.a
/usr/lib/epics/lib/linux-x86_64-debug/libCom.so
/usr/lib/epics/lib/linux-x86_64-debug/libCom.so.3.15.3
...
/usr/lib/epics/lib/perl
/usr/lib/epics/lib/perl/DBD
/usr/lib/epics/lib/perl/DBD/Base.pm
/usr/share/perl5/EPICS
...
/usr/lib/epics/startup
/usr/lib/epics/startup/EpicsHostArch
/usr/lib/epics/startup/EpicsHostArch.pl
/usr/lib/epics/startup/Site.profile
/usr/lib/epics/templates
/usr/lib/epics/templates/makeBaseApp
...
/usr/share
/usr/share/doc
/usr/share/doc/epics-dev
/usr/share/doc/epics-dev/README
/usr/share/doc/epics-dev/changelog.Debian.gz
/usr/share/doc/epics-dev/copyright
...
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/epics-dev
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/softIoc.1.gz
/usr/share/man/man1/softioc.1.gz
/usr/share/pkgconfig
/usr/share/pkgconfig/epics-base-linux-x86_64-debug.pc
/usr/share/pkgconfig/epics-base-linux-x86_64.pc
...
/usr/share/pkgconfig/epics-base.pc
/usr/lib/epics/lib/host # a symlink to the appropriate linux-*
===== libepics3.15.3 =====
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libCom.so.3.15.3
/usr/lib/x86_64-linux-gnu/libca.so.3.15.3
/usr/lib/x86_64-linux-gnu/libcas.so.3.15.3
/usr/lib/x86_64-linux-gnu/libdbCore.so.3.15.3
/usr/lib/x86_64-linux-gnu/libdbRecStd.so.3.15.3
/usr/lib/x86_64-linux-gnu/libgdd.so.3.15.3
/usr/share
/usr/share/doc
/usr/share/doc/libepics3.15.3
/usr/share/doc/libepics3.15.3/README
/usr/share/doc/libepics3.15.3/README.Debian
/usr/share/doc/libepics3.15.3/changelog.Debian.gz
/usr/share/doc/libepics3.15.3/copyright
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/libepics3.15.3

References:
Packaging EPICS and support modules as RPM Abdalla Ahmad via Tech-talk

Navigate by Date:
Prev: Re: Purpose of INSTALL_LOCATION Variable Michael Davidsaver via Tech-talk
Next: Re: Packaging EPICS and support modules as RPM Michael Davidsaver via Tech-talk
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  <20182019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: Packaging EPICS and support modules as RPM Abdalla Ahmad via Tech-talk
Next: Re: Packaging EPICS and support modules as RPM Michael Davidsaver via Tech-talk
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  <20182019  2020  2021  2022  2023  2024 
ANJ, 25 Nov 2018 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·