diff mbox

[v3,6/8] docker: make sure debootstrap is at least 1.0.67

Message ID 1473192351-601-7-git-send-email-silbe@linux.vnet.ibm.com (mailing list archive)
State New, archived
Headers show

Commit Message

Sascha Silbe Sept. 6, 2016, 8:05 p.m. UTC
debootstrap prior to 1.0.67 generated an empty sources.list during
foreign bootstraps (Debian#732255 [1]). Fall back to the git checkout
if the installed debootstrap version is too old.

[1] https://bugs.debian.org/732255

Signed-off-by: Sascha Silbe <silbe@linux.vnet.ibm.com>
---
v2→v3:
  - fix unbalanced white space around pipes
  - replaced GNU-specific version sort option with POSIX compliant set
    of options

 tests/docker/dockerfiles/debian-bootstrap.pre | 10 ++++++++++
 1 file changed, 10 insertions(+)

Comments

Fam Zheng Sept. 7, 2016, 2:12 a.m. UTC | #1
On Tue, 09/06 22:05, Sascha Silbe wrote:
> debootstrap prior to 1.0.67 generated an empty sources.list during
> foreign bootstraps (Debian#732255 [1]). Fall back to the git checkout
> if the installed debootstrap version is too old.
> 
> [1] https://bugs.debian.org/732255
> 
> Signed-off-by: Sascha Silbe <silbe@linux.vnet.ibm.com>
> ---
> v2→v3:
>   - fix unbalanced white space around pipes
>   - replaced GNU-specific version sort option with POSIX compliant set
>     of options
> 
>  tests/docker/dockerfiles/debian-bootstrap.pre | 10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> diff --git a/tests/docker/dockerfiles/debian-bootstrap.pre b/tests/docker/dockerfiles/debian-bootstrap.pre
> index 3d9f7f4..ee69e89 100755
> --- a/tests/docker/dockerfiles/debian-bootstrap.pre
> +++ b/tests/docker/dockerfiles/debian-bootstrap.pre
> @@ -3,6 +3,8 @@
>  # Simple wrapper for debootstrap, run in the docker build context
>  #
>  FAKEROOT=`which fakeroot 2> /dev/null`
> +# debootstrap < 1.0.67 generates empty sources.list, see Debian#732255
> +MIN_DEBOOTSTRAP_VERSION=1.0.67
>  
>  exit_and_skip()
>  {
> @@ -40,9 +42,17 @@ fi
>  #
>  
>  if [ -z $DEBOOTSTRAP_DIR ]; then
> +    NEED_DEBOOTSTRAP=false
>      DEBOOTSTRAP=`which debootstrap 2> /dev/null`
>      if [ -z $DEBOOTSTRAP ]; then
>          echo "No debootstrap installed, attempting to install from SCM"
> +        NEED_DEBOOTSTRAP=true
> +    elif ! (echo "${MIN_DEBOOTSTRAP_VERSION}" ; "${DEBOOTSTRAP}" --version \
> +            | cut -d ' ' -f 2) | sort -t . -n -k 1,1 -k 2,2 -k 3,3 -C; then

Like -V, -C is not available on OSX either. Maybe use "-c"? If so, I can fix it
when applying.

https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/sort.1.html

Fam

> +        echo "debootstrap too old, attempting to install from SCM"
> +        NEED_DEBOOTSTRAP=true
> +    fi
> +    if $NEED_DEBOOTSTRAP; then
>          DEBOOTSTRAP_SOURCE=https://anonscm.debian.org/git/d-i/debootstrap.git
>          git clone ${DEBOOTSTRAP_SOURCE} ./debootstrap.git
>          export DEBOOTSTRAP_DIR=./debootstrap.git
> -- 
> 1.9.1
> 
>
Sascha Silbe Sept. 7, 2016, 12:10 p.m. UTC | #2
Dear Fam,

Fam Zheng <famz@redhat.com> writes:

[...]
>> +        NEED_DEBOOTSTRAP=true
>> +    elif ! (echo "${MIN_DEBOOTSTRAP_VERSION}" ; "${DEBOOTSTRAP}" --version \
>> +            | cut -d ' ' -f 2) | sort -t . -n -k 1,1 -k 2,2 -k 3,3 -C; then
>
> Like -V, -C is not available on OSX either. Maybe use "-c"? If so, I can fix it
> when applying.
>
> https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/sort.1.html

Thanks for the pointer. So Apple took a 2005 version of GNU sort,
removed version sort support (introduced in 1997) and neglected to
update it for POSIX.1-2008 compliance [1]?

Guess using "-c" and redirecting stderr to /dev/null is our only option
then. Feel free to fix that up when applying.

Thanks for pointing out these portability issues!

Sascha

[1] http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sort.html
diff mbox

Patch

diff --git a/tests/docker/dockerfiles/debian-bootstrap.pre b/tests/docker/dockerfiles/debian-bootstrap.pre
index 3d9f7f4..ee69e89 100755
--- a/tests/docker/dockerfiles/debian-bootstrap.pre
+++ b/tests/docker/dockerfiles/debian-bootstrap.pre
@@ -3,6 +3,8 @@ 
 # Simple wrapper for debootstrap, run in the docker build context
 #
 FAKEROOT=`which fakeroot 2> /dev/null`
+# debootstrap < 1.0.67 generates empty sources.list, see Debian#732255
+MIN_DEBOOTSTRAP_VERSION=1.0.67
 
 exit_and_skip()
 {
@@ -40,9 +42,17 @@  fi
 #
 
 if [ -z $DEBOOTSTRAP_DIR ]; then
+    NEED_DEBOOTSTRAP=false
     DEBOOTSTRAP=`which debootstrap 2> /dev/null`
     if [ -z $DEBOOTSTRAP ]; then
         echo "No debootstrap installed, attempting to install from SCM"
+        NEED_DEBOOTSTRAP=true
+    elif ! (echo "${MIN_DEBOOTSTRAP_VERSION}" ; "${DEBOOTSTRAP}" --version \
+            | cut -d ' ' -f 2) | sort -t . -n -k 1,1 -k 2,2 -k 3,3 -C; then
+        echo "debootstrap too old, attempting to install from SCM"
+        NEED_DEBOOTSTRAP=true
+    fi
+    if $NEED_DEBOOTSTRAP; then
         DEBOOTSTRAP_SOURCE=https://anonscm.debian.org/git/d-i/debootstrap.git
         git clone ${DEBOOTSTRAP_SOURCE} ./debootstrap.git
         export DEBOOTSTRAP_DIR=./debootstrap.git