Procedure to build RPM
-
Prepare
LCG_externals
andLCG_generators
.txt files:lcgjenkins/splitglobalsummary.py <release without LCG_> <platform> <compiler>
- Downloads
LCG_xx_<platform>.txt
file, produced by CMake during build area configuration step, from EOS using HTTP - Reads it line by line, parses each line and reformats it
- Writes the reformatted line to
LCG_externals_<platform>.txt
, if the line doesn't contain substringMCGenerators
, or to LCG_generators_.txt otherwise. - Copies LCG_contrib_.txt file from
/cvmfs/sft.cern.ch/lcg/releases
to the build dir
- Downloads
-
Create
externals.spec
andgenerators.spec
:
lcgjenkins/LCGRPM/package/createLCGRPMSpec.py LCG_externals_<platform>.txt -b ${WORKDIR}/packaging -o externals.spec --release <LCG_xx>
lcgjenkins/LCGRPM/package/createLCGRPMSpec.py LCG_generators_<platform>.txt -b ${WORKDIR}/packaging -o generators.spec --release <LCG_xx>
- Build actual RPMs:
rpmbuild -bb externals.spec
rpmbuild -bb generators.spec
All RPMs created this way have some hardcoded properties:
Vendor: LHCb
License: GPL
Group: LCG
BuildArch: noarch
Distribution: whatever
(BuildArch
is "target system architecture": x86_64
, aarch
, ppc
...; Distribution
is "target system OS")
Release RPMs
Each release consists of:
- One "Externals master RPM" (
LCG_xx_<platform>-1.0.0-xx.rpm
), which is an empty RPM that depends on "link RPMs" for externals (LCG_xx_<package>_<version>_<platform>-1.0.0-xx.rpm
), "externals meta RPM" (LCGMeta_xx_externals_<platform>-1.0.0-xx.rpm
) and compiler (e.g.gcc_8.2.0_x86_64_slc6
) - One "Generators master RPM" (
LCG_generators_xx_<platform>-1.0.0-xx.rpm
), which is an empty RPM that depends on "link RPMs" for generators (LCG_xx_<package>_<version>_<platform>-1.0.0-xx.rpm
), "generators meta RPM" (LCGMeta_xx_generators_<platform>-1.0.0-xx.rpm
) and compiler (e.g.gcc_8.2.0_x86_64_slc6
) - One "externals meta RPM" that contains
LCG_externals_<platform>.txt
file and has no dependencies - One "generators meta RPM" that contains
LCG_generators_<platform>.txt
file and has no dependencies - A number of "link RPMs", each containing a symbolic link (from the unhashed version to the hashed one) and depending on "package RPM", "meta RPM" and "link RPM"s of the dependencies (including gcc/clang). This RPM also updates
LCG_externals_<platform>.txt.installed
orLCG_generators_<platform>.txt.installed
(adds or removes line describing it's package) - A number of "package RPMs", containing actual packages files in a "hashed" directory (
<package>-<hash>
) and depending on "package RPMs" of their dependencies (including gcc/clang)
The name of the package (as passed to yum install
) consists of:
- LCG release (only for "link RPMs")
- Package name (e.g.
ROOT
) - Package hash (only for "package RPMs")
- Package version
- Package platform (e.g.
x86_64_slc6_gcc49_dbg
)
The package version is always 1.0.0
, and the revision is equal to the numeric part of the release name (except "Generators master RPM" in RPM-based releases, in which the revision of this RPM is incremented each time a new generator is built or rebuilt).
Example: ROOT version 6.18.00 for platform x86_64-centos7-gcc8-opt
in release LCG_96
- Link RPM: LCG_96_ROOT_6.18.00_x86_64_centos7_gcc8_opt (
/eos/project/l/lcg/www/lcgpackages/rpms_updates/LCG_96release/LCG_96_ROOT_6.18.00_x86_64_centos7_gcc8_opt-1.0.0-96.noarch.rpm
)
$ rpm -qpR /eos/project/l/lcg/www/lcgpackages/rpms_updates/LCG_96release/LCG_96_ROOT_6.18.00_x86_64_centos7_gcc8_opt-1.0.0-96.noarch.rpm
ROOT-2459b_6.18.00_x86_64_centos7_gcc8_opt
LCGMeta_96_externals_x86_64_centos7_gcc8_opt
LCG_96_srm_ifce_1.13.0_0_x86_64_centos7_gcc8_opt
LCG_96_blas_0.3.5.openblas_x86_64_centos7_gcc8_opt
LCG_96_Vc_1.4.1_x86_64_centos7_gcc8_opt
LCG_96_vdt_0.4.3_x86_64_centos7_gcc8_opt
LCG_96_Davix_0.7.3_x86_64_centos7_gcc8_opt
LCG_96_gl2ps_1.4.0_x86_64_centos7_gcc8_opt
LCG_96_fftw_3.3.8_x86_64_centos7_gcc8_opt
LCG_96_oracle_18.3.0.0.0_x86_64_centos7_gcc8_opt
LCG_96_libxml2_2.9.9_x86_64_centos7_gcc8_opt
LCG_96_numpy_1.16.4_x86_64_centos7_gcc8_opt
LCG_96_gfal_1.13.0_0_x86_64_centos7_gcc8_opt
LCG_96_mysql_5.7.26_x86_64_centos7_gcc8_opt
LCG_96_zlib_1.2.11_x86_64_centos7_gcc8_opt
LCG_96_tbb_2019_U7_x86_64_centos7_gcc8_opt
LCG_96_Python_2.7.16_x86_64_centos7_gcc8_opt
LCG_96_R_3.5.3_x86_64_centos7_gcc8_opt
LCG_96_dcap_2.47.7_1_x86_64_centos7_gcc8_opt
LCG_96_xrootd_4.9.1_x86_64_centos7_gcc8_opt
LCG_96_GSL_2.5_x86_64_centos7_gcc8_opt
LCG_96_gcc_8.2.0_x86_64_centos7
- Package RPM: ROOT-885ca_6.18.00_x86_64_centos7_gcc8_opt (
/eos/project/l/lcg/www/lcgpackages/rpms_updates/ROOT-885ca_6.18.00_x86_64_centos7_gcc8_opt-1.0.0-96.noarch.rpm
)
$ rpm -qpR /eos/project/l/lcg/www/lcgpackages/rpms_updates/ROOT-2459b_6.18.00_x86_64_centos7_gcc8_opt-1.0.0-96.noarch.rpm
srm_ifce-be254_1.13.0_0_x86_64_centos7_gcc8_opt
blas-bb5ea_0.3.5.openblas_x86_64_centos7_gcc8_opt
Vc-d25d4_1.4.1_x86_64_centos7_gcc8_opt
vdt-992df_0.4.3_x86_64_centos7_gcc8_opt
Davix-24bc8_0.7.3_x86_64_centos7_gcc8_opt
gl2ps-30f0b_1.4.0_x86_64_centos7_gcc8_opt
fftw-102c2_3.3.8_x86_64_centos7_gcc8_opt
oracle-8593b_18.3.0.0.0_x86_64_centos7_gcc8_opt
libxml2-3501e_2.9.9_x86_64_centos7_gcc8_opt
numpy-a6af8_1.16.4_x86_64_centos7_gcc8_opt
gfal-6fc75_1.13.0_0_x86_64_centos7_gcc8_opt
mysql-c3e26_5.7.26_x86_64_centos7_gcc8_opt
zlib-da225_1.2.11_x86_64_centos7_gcc8_opt
tbb-ba3eb_2019_U7_x86_64_centos7_gcc8_opt
Python-e553a_2.7.16_x86_64_centos7_gcc8_opt
R-883db_3.5.3_x86_64_centos7_gcc8_opt
dcap-cdd28_2.47.7_1_x86_64_centos7_gcc8_opt
xrootd-51b64_4.9.1_x86_64_centos7_gcc8_opt
GSL-32fc5_2.5_x86_64_centos7_gcc8_opt
gcc_8.2.0_x86_64_centos7