@@ -79,6 +79,19 @@ distroname() {
7979 fi
8080}
8181
82+ # return the distroname as encountered in yum package repo URLS,
83+ # i.e https://cvmrepo.web.cern.ch/cvmrepo/yum/cvmfs/EL/9/
84+ distroname_yum () {
85+ case " $1 " in
86+ * " ubuntu " * ) echo EL;;
87+ * " debian " * ) echo EL;;
88+ * " rhel " * ) echo EL;;
89+ * " suse " * ) echo suse;;
90+ * ) echo " Distro name $1 not supported" >&2
91+ exit 2;;
92+ esac
93+ }
94+
8295distroversion () {
8396 if [ -n " $MACHTYPE " ]; then
8497 echo " $MACHTYPE " | sed ' s/^[^0-9]*\([0-9]*\)-.*/\1/'
@@ -103,6 +116,19 @@ distroarch() {
103116 fi
104117}
105118
119+ # download and parse the listing from a package server (give URL as 1st argument)
120+ get_cvmfs_pkg_list () {
121+ echo " $( curl -Ls $1 /| grep " cvmfs-" | sed ' s/.*href="//;s/".*//;s,^\./,,' ) "
122+ }
123+
124+
125+ get_cvmfs_latest_version_from_pkg_list () {
126+ CVMFSPKG=" ` echo " $1 " | grep " ^cvmfs-[0-9]" | tail -1` "
127+ CVMFSVERSION=" ` echo " $CVMFSPKG " | sed ' s/.*cvmfs-\([^-]*\)-.*/\1/' ` "
128+ echo $CVMFSVERSION
129+ }
130+
131+
106132DISTRO=" ` distroname` "
107133VERS=" ` distroversion` "
108134ARCH=" ` distroarch` "
@@ -144,7 +170,7 @@ EL=$VERS
144170MACH=el$EL
145171if [ " $DISTRO " = " suse" ]; then
146172 EL=7 # we get some suse stuff from rhel7
147- MACH=sle
173+ MACH=sle$VERS
148174fi
149175
150176MISSINGCMDS=" "
@@ -222,17 +248,27 @@ case $1 in
222248 EXT=" /Packages/c"
223249 fi
224250 REPO=release
225- BASEURL=" https://repo.opensciencegrid.org/osg/$REL /el$EL /$REPO /x86_64$EXT " ;;
251+ BASEURL=" https://repo.opensciencegrid.org/osg/$REL /el$EL /$REPO /x86_64$EXT "
252+ BASELIST=" $( get_cvmfs_pkg_list $BASEURL ) " ;;
226253 egi)
227254 OS=centos$EL
228- BASEURL=" https://repository.egi.eu/sw/production/umd/4/$OS /x86_64/updates" ;;
255+ if [ $EL -gt 8 ]; then
256+ BASEURL=" https://repository.egi.eu/sw/production/umd/5/al9/release/x86_64/"
257+ elif [ $EL -eq 7 ]; then
258+ BASEURL=" https://repository.egi.eu/sw/production/umd/4/centos7/x86_64/updates"
259+ else
260+ echo " ERROR: unsupported OS for egi! only centos7, almalinux9 supported." >&2
261+ exit 1
262+ fi
263+ BASELIST=" $( get_cvmfs_pkg_list $BASEURL ) " ;;
229264 default|none)
230265 INCLUDEHELPER=false
231266 BASEURL=" https://cvmrepo.web.cern.ch/cvmrepo/yum/cvmfs/EL/$EL /x86_64" ;;
232267 * ) usage;;
233268esac
234269DISTTYPE=$1
235270
271+
236272if [ -d $DIST ]; then
237273 echo " $DIST already exists" >&2
238274 exit 1
@@ -271,20 +307,18 @@ if [ "$ARCH" != "x86_64" ]; then
271307 # we're looking at x86_64 version repositories for the config rpm
272308 INCLUDEHELPER=false
273309fi
274-
275- URLS=" "
276- BASELIST=" ` curl -Ls $BASEURL /| grep " cvmfs-" | sed ' s/.*href="//;s/".*//' ` "
277- CVMFSPKG=" ` echo " $BASELIST " | grep " ^cvmfs-[0-9]" | tail -1` "
278- if [ -z " $CVMFSPKG " ]; then
279- if [ " $DISTTYPE " = egi ] && [ " $EL " = 8 ]; then
280- echo " egi's UMD does not yet support rhel8" 2>&1
281- else
282- echo " No cvmfs package found from $BASEURL " >&2
283- fi
310+ if [ " $DISTTYPE " = egi ] && [ " $EL " = 8 ]; then
311+ echo " egi's UMD does not yet support rhel8" 2>&1
284312 exit 1
285313fi
286314
315+
316+ URLS=" "
287317CVMFSURL=" "
318+ CVMFSRPMURL=" "
319+ CVMFS_BASEURL_MIRROR1=" https://cvmrepo.s3.cern.ch/cvmrepo"
320+ CVMFS_BASEURL_MIRROR2=" https://cvmrepo.web.cern.ch/cvmrepo"
321+ CVMFS_BASEURL=$CVMFS_BASEURL_MIRROR1
288322if [ " $ARCH " = " ppc64le" ]; then
289323 # Grab cvmfs package from copr, using yumdownloader to calculate
290324 # the URL
@@ -297,32 +331,47 @@ if [ "$ARCH" = "ppc64le" ]; then
297331 CVMFSRPMNAME=" $( basename $CVMFSRPMURL ) "
298332 CVMFSVERSION=" ` echo " $CVMFSRPMNAME " ' s/.*cvmfs-\([^-]*\)-.*/\1/' ` "
299333else
300- # Now that we can figure out the latest cvmfs version, download the
301- # corresponding cvmfs packages from CERN instead
302- CVMFSVERSION=" ` echo " $CVMFSPKG " | sed ' s/.*cvmfs-\([^-]*\)-.*/\1/' ` "
303- CVMFSURL=" https://ecsft.cern.ch/dist/cvmfs/cvmfs-$CVMFSVERSION "
304- CVMFSRPMNAME=" ` curl -Ls $CVMFSURL /| grep " cvmfs-$CVMFSVERSION -.*$MACH .*\.$ARCH " | sed ' s/.*href="//;s/".*//' | tail -1` "
305- if [ -z " $CVMFSRPMNAME " ]; then
306- echo " No matching cvmfs rpm found at $CVMFSURL " >&2
334+ # Get CVMFS package download urls from CERN yum repo ( with possible fallback )
335+ DISTRO_YUM=" ` distroname_yum $DISTRO ` "
336+ CVMFSURL=" $CVMFS_BASEURL /yum/cvmfs/$DISTRO_YUM /$VERS /$ARCH "
337+ # for the listing, we need to query the "s3-website" variant of the s3 url
338+ CVMFS_BASELIST=" $( get_cvmfs_pkg_list ${CVMFSURL/ cvmrepo.s3/ cvmrepo.s3-website} ) "
339+ CVMFSVERSION=" $( get_cvmfs_latest_version_from_pkg_list $CVMFS_BASELIST ) "
340+ if [ -z " CVMFSVERSION" ]; then
341+ echo " WARN: Couldn't find package listing in mirror $CVMFSURL , switching over.." >&2
342+ CVMFS_BASEURL=" $CVMFS_BASE_URL_MIRROR2 "
343+ CVMFSURL=" $CVMFS_BASEURL /yum/cvmfs/$DISTRO_YUM /$VERS /$ARCH "
344+ CVMFS_BASELIST=" $( get_cvmfs_pkg_list $CVMFSURL ) "
345+ CVMFSVERSION=" $( get_cvmfs_latest_version_from_pkg_list $CVMFS_BASELIST ) "
346+ if [ -z " CVMFSVERSION" ]; then
347+ echo " ERROR: Couldn't find package listing in mirror $CVMFS_BASEURL , and no mirrors left! " >&2
307348 exit 1
349+ fi
308350 fi
351+ CVMFSRPMNAME=" cvmfs-$CVMFSVERSION -1.$MACH .$ARCH .rpm"
309352 CVMFSRPMURL=" $CVMFSURL /$CVMFSRPMNAME "
310353fi
311- URLS=" $CVMFSRPMURL "
312354
355+ CVMFSRPMURL_LIBS=" "
313356MINORVERSION=" ` echo " $CVMFSVERSION " | cut -d. -f2` "
314357if [ " $MINORVERSION " -ge 10 ]; then
315358 # include cvmfs-libs
316- URLS= " $URLS $CVMFSURL /` echo $CVMFSRPMNAME | sed ' s/cvmfs-/cvmfs-libs-/' ` "
359+ CVMFSRPMURL_LIBS= " $CVMFSURL /` echo $CVMFSRPMNAME | sed ' s/cvmfs-/cvmfs-libs-/' ` "
317360fi
318361
362+ URLS=" $URLS $CVMFSRPMURL $CVMFSRPMURL_LIBS "
363+
319364if [ " $DISTTYPE " != " none" ]; then
320- CONFIGREPO=" ` echo " $BASELIST " | grep " ^cvmfs-config-$DISTTYPE -[0-9]" | tail -1` "
321- if [ -z " $CONFIGREPO " ]; then
322- echo " cvmfs-config not found at $BASEURL !" >&2
323- exit 1
365+ if [ " $DISTTYPE " != " default" ]; then
366+ CONFIGREPO=" ` echo " $BASELIST " | grep " ^cvmfs-config-$DISTTYPE -[0-9]" | tail -1` "
367+ if [ -z " $CONFIGREPO " ]; then
368+ echo " cvmfs-config not found at $BASEURL !" >&2
369+ exit 1
370+ fi
371+ URLS=" $URLS $BASEURL /$CONFIGREPO "
372+ else
373+ URLS=" $URLS $CVMFS_BASEURL /yum/cvmfs-config-default-latest.noarch.rpm"
324374 fi
325- URLS=" $URLS $BASEURL /$CONFIGREPO "
326375fi
327376
328377# return the url of the latest version of a package given
0 commit comments