Do not use rsync for choosing mirror server 89/20189/2
authorMichal Skalski <mskalski@mirantis.com>
Thu, 1 Sep 2016 22:39:30 +0000 (00:39 +0200)
committerMichal Skalski <mskalski@mirantis.com>
Mon, 5 Sep 2016 09:04:55 +0000 (11:04 +0200)
Rsync protocol was used for creating local mirrors, but now we only need
http connection. This requirement can be problematic for environments
which are behind proxy and can lead to build failures when rsync is not
allowed.

Change-Id: I4efcf500fd0c25de5fdb87307e7210cc4a96714d
Signed-off-by: Michal Skalski <mskalski@mirantis.com>
build/f_isoroot/f_repobuild/select_ubuntu_repo.sh

index 4bca6bd..7b134e7 100755 (executable)
@@ -1,67 +1,32 @@
 #!/bin/bash
 ##############################################################################
-# Copyright (c) 2015 Ericsson AB and others.
+# Copyright (c) 2015,2016 Ericsson AB and others.
 # mskalski@mirantis.com
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Apache License, Version 2.0
 # which accompanies this distribution, and is available at
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
-RSYNC="rsync -4 --contimeout 5 --no-motd --list-only"
 
-# try to choose close ubuntu mirror which support rsync protocol
-# https://bugs.launchpad.net/fuel/+bug/1459252
-
-# A minor modificiation of Michal Skalski's original Makefile version
-# to only consider repos where no repo updates are in progress (as
-# that may have us hanging quite a while otherwise). If no suitable
-# local mirror can be found after four attempts, the default archive
-# is returned instead.
+# Try to choose close ubuntu mirror
 
 # Some Ubuntu mirrors seem less reliable for this type of mirroring -
 # as they are discoved they can be added to the blacklist below in order
 # for them not to be considered.
 BLACKLIST="mirrors.se.eu.kernel.org mirror.its.dal.ca"
 
-return_url=0
-
-while [ "$1" != "" ]; do
-    case $1 in
-        -u | --url )   shift
-                       return_url=1
-                       ;;
-    # Shift all the parameters down by one
-    esac
-    shift
-done
-
-cnt=0
-while [ $cnt -lt 4 ]
+for url in $(curl -s http://mirrors.ubuntu.com/mirrors.txt)
 do
-    for url in $(curl -s http://mirrors.ubuntu.com/mirrors.txt)
-    do
-        host=$(echo $url | cut -d'/' -f3)
-       echo ${BLACKLIST} | grep -q ${host} && continue
-        if $RSYNC "${host}::ubuntu/." &> /dev/null
-        then
-            if ! $RSYNC "${host}::ubuntu/Archive-Update-in-Progress*" &> /dev/null
-            then
-                if [ "$return_url" = "1" ]; then
-                    echo "$url"
-                    exit 0
-                else
-                    echo "$host"
-                    exit 0
-                fi
-            fi
-        fi
-    done
-    cnt=$[cnt + 1]
-    sleep 15
+    host=$(echo $url | cut -d'/' -f3)
+    echo ${BLACKLIST} | grep -q ${host} && continue
+    if curl -s -o /dev/null --head --fail "$url"; then
+      echo $url
+      exit 0
+    else
+      continue
+    fi
 done
 
-if [ "$return_url" = "1" ]; then
-    echo "http://archive.ubuntu.com/ubuntu/"
-else
-    echo "archive.ubuntu.com"
-fi
+# If no suitable local mirror can be found,
+# the default archive is returned instead.
+echo "http://archive.ubuntu.com/ubuntu/"