Skip to contentSkip to conversation

Some download-related changes (branch yem/check-downloads)

PATCH Superseded Yann E. MORIN 2 participants 20 messages Jun 8, 2014 – Jun 13, 2014

v7 of 11 Superseded Latest is v11 →

lore
Share & tools
lore
#0 lore raw

v7 cover Some download-related changes (branch yem/check-downloads)

From: "Yann E. MORIN" <[email protected]>

Hello All!

This series contains those download-related changes:

- Patches 1..2 : preparatory patches for upcoming helper scripts and hash checks

- Patches 3..8 : move download helpers to shell scripts, one such script for each download helper

- Patch 9 : don't use DL_DIR as scratchpad for temporary VCS
checkouts, since DL_DIR is a precious location

- Patches 10..11: check hashes of downloaded files, to ensure the files are genuine (with doc)

- Patch 12 : add hashes for ca-certificates

Changes v6 -> v7:
- use single-line title in manual (Samuel)
- use leftover cruft in bzr helper (Thomas)

Changes v5 -> v6:
- ensure we can run multiple parallel downloads from different build dirs with the same BR2_DL_DIR (Thomas)
- also convert bzr
- fix for stray failed downloads

Changes v4 -> v5:
- update ca-certificates hashes after version bump
- fix detection of comments and empty lines in .hash file
- rebase on top of master

Changes v3 -> v4:
- enhance the manual, typoes (Gustavo, Samuel, Thomas DS)
- remove spurious test bump on package/fis (Samuel)

Changes v2 -> v3:
- avoid partial downloads (Thomas DS)
- store hash-type in .hash file (Gustavo)
- typoes (Samuel, Gustavo)
- add possibility to treat missing hashes as an error

Changes v1 -> v2:
- don't do any behavioural change when switching to shell scripts, just reproduce exactly what was in the Makefile (Luca, Arnout)
- support more than one hash algorithm (Arnout, Gustavo)
- typoes (Luca, Baruch)

Regards,
Yann E. MORIN.

The following changes since commit 1ff9045f4b62b53f55457f00a80d63e77acd758c:

  sunxi-mali: use only -I${includedir} as pkg-config Cflags (2014-06-08 18:52:14 +0200)

are available in the git repository at:

git://gitorious.org/buildroot/buildroot.git yem/check-downloads

for you to fetch changes up to 305759abe954f35112f303fe909e97c1ca33bb63:

package/ca-certificates: add tarball's hashes (2014-06-08 22:39:47 +0200)

----------------------------------------------------------------
Yann E. MORIN (12):
Makefile: add BR2_DL_DIR to EXTRA_ENV
pkg-infra: also set PKGDIR for the download step
pkg-infra: move the git download helper to a script
pkg-infra: move the svn download helper to a script
pkg-infra: move the cvs download helper to a script
pkg-infra: move the hg download helper to a script
pkg-infra: move the wget download helper to a script
pkg-infra: move the bzr download helper to a script
pkg-infra: don't use DL_DIR as scratchpad for temporary downloads
pkg-infra: add possiblity to check downloaded files against known hashes
manual: add documentation about packages' hashes package/ca-certificates: add tarball's hashes

 docs/manual/adding-packages-directory.txt    | 66 ++++++++++++++++++++++
 package/Makefile.in                          |  1 +
 package/ca-certificates/ca-certificates.hash |  3 +
 package/pkg-download.mk                      | 83 ++++++++++++----------------
 package/pkg-generic.mk                       |  1 +
 support/download/bzr                         | 34 ++++++++++++
 support/download/check-hash                  | 77 ++++++++++++++++++++++++++
 support/download/cvs                         | 40 ++++++++++++++
 support/download/git                         | 50 +++++++++++++++++
 support/download/hg                          | 38 +++++++++++++
 support/download/svn                         | 37 +++++++++++++
 support/download/wget                        | 32 +++++++++++
 12 files changed, 413 insertions(+), 49 deletions(-)
 create mode 100644 package/ca-certificates/ca-certificates.hash
 create mode 100755 support/download/bzr
 create mode 100755 support/download/check-hash
 create mode 100755 support/download/cvs
 create mode 100755 support/download/git
 create mode 100755 support/download/hg
 create mode 100755 support/download/svn
 create mode 100755 support/download/wget
Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#1 lore raw

PATCH v7 1/12 Makefile: add BR2_DL_DIR to EXTRA_ENV

From: "Yann E. MORIN" <[email protected]>

Also export BR2_DL_DIR for incoming download helper scripts.

---
 package/Makefile.in | 1 +
 1 file changed, 1 insertion(+)
package/Makefile.in +1 -0
index 0233506..97053ba 100644
@@ -305,6 +305,7 @@ HOST_MAKE_ENV=PATH=$(BR_PATH) \
 # post-images)
 EXTRA_ENV=\
 	PATH=$(BR_PATH) \
+	BR2_DL_DIR=$(BR2_DL_DIR) \
 	BUILD_DIR=$(BUILD_DIR)
 
 ################################################################################
Signature · 1 line
1.8.3.2
#2 lore raw

PATCH v7 2/12 pkg-infra: also set PKGDIR for the download step

In reply to Yann E. MORIN

From: "Yann E. MORIN" <[email protected]>

This will be needed to get the hash file, to check the downloaded files.

---
 package/pkg-generic.mk | 1 +
 1 file changed, 1 insertion(+)
package/pkg-generic.mk +1 -0
index ccd7f3b..5293a7a 100644
@@ -574,6 +574,7 @@ $$($(2)_TARGET_PATCH):			RAWNAME=$(patsubst host-%,%,$(1))
 $$($(2)_TARGET_PATCH):			PKGDIR=$(pkgdir)
 $$($(2)_TARGET_EXTRACT):		PKG=$(2)
 $$($(2)_TARGET_SOURCE):			PKG=$(2)
+$$($(2)_TARGET_SOURCE):			PKGDIR=$(pkgdir)
 $$($(2)_TARGET_DIRCLEAN):		PKG=$(2)
 
 # Compute the name of the Kconfig option that correspond to the
Signature · 1 line
1.8.3.2
#3 lore raw

PATCH v7 3/12 pkg-infra: move the git download helper to a script

In reply to Yann E. MORIN

From: "Yann E. MORIN" <[email protected]>

The git download helper is getting a bit more complex. Fixing it in the Makefile when it breaks (like the recent breakage with a non-existing sha1-cset) proves to be challenging, to say the least.

Move it into a shell script in support/download/git, which will make it much easier to read, maintain, fix and enhance in the future.

---
 package/pkg-download.mk | 17 +++--------------
 support/download/git    | 37 +++++++++++++++++++++++++++++++++++++
 2 files changed, 40 insertions(+), 14 deletions(-)
 create mode 100755 support/download/git
package/pkg-download.mk +3 -14
index 4cfb913..888d26e 100644
@@ -12,7 +12,7 @@ WGET := $(call qstrip,$(BR2_WGET)) $(QUIET)
 SVN := $(call qstrip,$(BR2_SVN))
 CVS := $(call qstrip,$(BR2_CVS))
 BZR := $(call qstrip,$(BR2_BZR))
-GIT := $(call qstrip,$(BR2_GIT))
+export GIT := $(call qstrip,$(BR2_GIT))
 HG := $(call qstrip,$(BR2_HG)) $(QUIET)
 SCP := $(call qstrip,$(BR2_SCP)) $(QUIET)
 SSH := $(call qstrip,$(BR2_SSH)) $(QUIET)
@@ -84,19 +84,8 @@ github = https://github.com/$(1)/$(2)/archive/$(3)
 # problems
 define DOWNLOAD_GIT
 	test -e $(DL_DIR)/$($(PKG)_SOURCE) || \
-	(pushd $(DL_DIR) > /dev/null && \
-	 ((test "`git ls-remote $($(PKG)_SITE) $($(PKG)_DL_VERSION)`" && \
-	   echo "Doing shallow clone" && \
-	   $(GIT) clone --depth 1 -b $($(PKG)_DL_VERSION) --bare $($(PKG)_SITE) $($(PKG)_BASE_NAME)) || \
-	  (echo "Doing full clone" && \
-	   $(GIT) clone --bare $($(PKG)_SITE) $($(PKG)_BASE_NAME))) && \
-	pushd $($(PKG)_BASE_NAME) > /dev/null && \
-	$(GIT) archive --format=tar --prefix=$($(PKG)_BASE_NAME)/ -o $(DL_DIR)/.$($(PKG)_SOURCE).tmp $($(PKG)_DL_VERSION) && \
-	gzip -c $(DL_DIR)/.$($(PKG)_SOURCE).tmp > $(DL_DIR)/$($(PKG)_SOURCE) && \
-	rm -f $(DL_DIR)/.$($(PKG)_SOURCE).tmp && \
-	popd > /dev/null && \
-	rm -rf $($(PKG)_DL_DIR) && \
-	popd > /dev/null)
+	$(EXTRA_ENV) support/download/git $($(PKG)_SITE) $($(PKG)_DL_VERSION) \
+					  $($(PKG)_BASE_NAME) $(DL_DIR)/$($(PKG)_SOURCE)
 endef
 
 # TODO: improve to check that the given PKG_DL_VERSION exists on the remote
support/download/git new file +37 -0
new file mode 100755
index 0000000..96db3a9
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+# We want to catch any command failure, and exit immediately
+set -e
+
+# Download helper for git
+# Call it with:
+#   $1: git repo
+#   $2: git cset
+#   $3: package's basename (eg. foobar-1.2.3)
+#   $4: output file
+# And this environment:
+#   BR2_DL_DIR: path to Buildroot's download dir
+#   GIT       : the git command to call
+
+repo="${1}"
+cset="${2}"
+basename="${3}"
+output="${4}"
+
+repodir="${BR2_DL_DIR}/${basename}"
+
+if [ -n "$(${GIT} ls-remote "${repo}" "${cset}" 2>&1)" ]; then
+    printf "Doing shallow clone\n"
+    ${GIT} clone --depth 1 -b "${cset}" --bare "${repo}" "${repodir}"
+else
+    printf "Doing full clone\n"
+    ${GIT} clone --bare "${repo}" "${repodir}"
+fi
+
+pushd "${repodir}"
+${GIT} archive --prefix="${basename}/" -o "${output}.tmp" --format=tar "${cset}"
+gzip -c "${output}.tmp" >"${output}"
+rm -f "${output}.tmp"
+popd
+
+rm -rf "${repodir}"
Signature · 1 line
1.8.3.2
#4 lore raw

PATCH v7 4/12 pkg-infra: move the svn download helper to a script

In reply to Yann E. MORIN

From: "Yann E. MORIN" <[email protected]>

Maintaining the download helpers in the Makefile has proved to be a bit complex, so move it to a shell script.

---
 package/pkg-download.mk |  9 +++------
 support/download/svn    | 25 +++++++++++++++++++++++++
 2 files changed, 28 insertions(+), 6 deletions(-)
 create mode 100755 support/download/svn
package/pkg-download.mk +3 -6
index 888d26e..570a47b 100644
@@ -9,7 +9,7 @@
 
 # Download method commands
 WGET := $(call qstrip,$(BR2_WGET)) $(QUIET)
-SVN := $(call qstrip,$(BR2_SVN))
+export SVN := $(call qstrip,$(BR2_SVN))
 CVS := $(call qstrip,$(BR2_CVS))
 BZR := $(call qstrip,$(BR2_BZR))
 export GIT := $(call qstrip,$(BR2_GIT))
@@ -133,11 +133,8 @@ endef
 
 define DOWNLOAD_SVN
 	test -e $(DL_DIR)/$($(PKG)_SOURCE) || \
-	(pushd $(DL_DIR) > /dev/null && \
-	$(SVN) export -r $($(PKG)_DL_VERSION) $($(PKG)_SITE) $($(PKG)_DL_DIR) && \
-	$(TAR) czf $($(PKG)_SOURCE) $($(PKG)_BASE_NAME)/ && \
-	rm -rf $($(PKG)_DL_DIR) && \
-	popd > /dev/null)
+	$(EXTRA_ENV) support/download/svn $($(PKG)_SITE) $($(PKG)_DL_VERSION) \
+					  $($(PKG)_BASE_NAME) $(DL_DIR)/$($(PKG)_SOURCE)
 endef
 
 define SOURCE_CHECK_SVN
support/download/svn new file +25 -0
new file mode 100755
index 0000000..c3ab32c
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+# We want to catch any command failure, and exit immediately
+set -e
+
+# Download helper for svn
+# Call it with:
+#   $1: svn repo
+#   $2: svn revision
+#   $3: package's basename (eg. foobar-1.2.3)
+#   $4: output file
+# And this environment:
+#   SVN       : the svn command to call
+#   BR2_DL_DIR: path to Buildroot's download dir
+
+repo="${1}"
+rev="${2}"
+basename="${3}"
+output="${4}"
+
+pushd "${BR2_DL_DIR}"
+${SVN} export -r "${rev}" "${repo}" "${basename}"
+tar czf "${output}" "${basename}"
+rm -rf "${basename}"
+popd
Signature · 1 line
1.8.3.2
#5 lore raw

PATCH v7 5/12 pkg-infra: move the cvs download helper to a script

In reply to Yann E. MORIN

From: "Yann E. MORIN" <[email protected]>

Maintaining the download helpers in the Makefile has proved to be a bit complex, so move it to a shell script.

---
 package/pkg-download.mk | 11 ++++-------
 support/download/cvs    | 27 +++++++++++++++++++++++++++
 2 files changed, 31 insertions(+), 7 deletions(-)
 create mode 100755 support/download/cvs
package/pkg-download.mk +4 -7
index 570a47b..97a26f2 100644
@@ -10,7 +10,7 @@
 # Download method commands
 WGET := $(call qstrip,$(BR2_WGET)) $(QUIET)
 export SVN := $(call qstrip,$(BR2_SVN))
-CVS := $(call qstrip,$(BR2_CVS))
+export CVS := $(call qstrip,$(BR2_CVS))
 BZR := $(call qstrip,$(BR2_BZR))
 export GIT := $(call qstrip,$(BR2_GIT))
 HG := $(call qstrip,$(BR2_HG)) $(QUIET)
@@ -114,12 +114,9 @@ endef
 
 define DOWNLOAD_CVS
 	test -e $(DL_DIR)/$($(PKG)_SOURCE) || \
-	(pushd $(DL_DIR) > /dev/null && \
-	$(CVS) -z3 -d:pserver:anonymous@$(call stripurischeme,$(call qstrip,$($(PKG)_SITE))) \
-		co -d $($(PKG)_BASE_NAME) -r :$($(PKG)_DL_VERSION) -P $($(PKG)_RAWNAME) && \
-	$(TAR) czf $($(PKG)_SOURCE) $($(PKG)_BASE_NAME)/ && \
-	rm -rf $($(PKG)_DL_DIR) && \
-	popd > /dev/null)
+	$(EXTRA_ENV) support/download/cvs $(call stripurischeme,$(call qstrip,$($(PKG)_SITE))) \
+					  $($(PKG)_DL_VERSION) $($(PKG)_RAWNAME) \
+					  $($(PKG)_BASE_NAME) $(DL_DIR)/$($(PKG)_SOURCE)
 endef
 
 # Not all CVS servers support ls/rls, use login to see if we can connect
support/download/cvs new file +27 -0
new file mode 100755
index 0000000..06b8647
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+# We want to catch any command failure, and exit immediately
+set -e
+
+# Download helper for cvs
+# Call it with:
+#   $1: cvs repo
+#   $2: cvs revision
+#   $3: package's name (eg. foobar)
+#   $4: package's basename (eg. foobar-1.2.3)
+#   $5: output file
+# And this environment:
+#   CVS       : the cvs command to call
+#   BR2_DL_DIR: path to Buildroot's download dir
+
+repo="${1}"
+rev="${2}"
+rawname="${3}"
+basename="${4}"
+output="${5}"
+
+cd "${BR2_DL_DIR}"
+${CVS} -z3 -d":pserver:anonymous@${repo}" \
+       co -d "${basename}" -r ":${rev}" -P "${rawname}"
+tar czf "${output}" "${basename}"
+rm -rf "${basename}"
Signature · 1 line
1.8.3.2
#6 lore raw

PATCH v7 6/12 pkg-infra: move the hg download helper to a script

In reply to Yann E. MORIN

From: "Yann E. MORIN" <[email protected]>

Maintaining the download helpers in the Makefile has proved to be a bit complex, so move it to a shell script.

---
 package/pkg-download.mk | 11 +++--------
 support/download/hg     | 25 +++++++++++++++++++++++++
 2 files changed, 28 insertions(+), 8 deletions(-)
 create mode 100755 support/download/hg
package/pkg-download.mk +3 -8
index 97a26f2..37f0830 100644
@@ -13,7 +13,7 @@ export SVN := $(call qstrip,$(BR2_SVN))
 export CVS := $(call qstrip,$(BR2_CVS))
 BZR := $(call qstrip,$(BR2_BZR))
 export GIT := $(call qstrip,$(BR2_GIT))
-HG := $(call qstrip,$(BR2_HG)) $(QUIET)
+export HG := $(call qstrip,$(BR2_HG)) $(QUIET)
 SCP := $(call qstrip,$(BR2_SCP)) $(QUIET)
 SSH := $(call qstrip,$(BR2_SSH)) $(QUIET)
 LOCALFILES := $(call qstrip,$(BR2_LOCALFILES))
@@ -161,13 +161,8 @@ endef
 
 define DOWNLOAD_HG
 	test -e $(DL_DIR)/$($(PKG)_SOURCE) || \
-	(pushd $(DL_DIR) > /dev/null && \
-	rm -rf $($(PKG)_BASE_NAME) && \
-	$(HG) clone --noupdate --rev $($(PKG)_DL_VERSION) $($(PKG)_SITE) $($(PKG)_BASE_NAME) && \
-	$(HG) archive --repository $($(PKG)_BASE_NAME) --type tgz --prefix $($(PKG)_BASE_NAME)/ \
-	              --rev $($(PKG)_DL_VERSION) $(DL_DIR)/$($(PKG)_SOURCE) && \
-	rm -rf $($(PKG)_DL_DIR) && \
-	popd > /dev/null)
+	$(EXTRA_ENV) support/download/hg $($(PKG)_SITE) $($(PKG)_DL_VERSION) \
+					  $($(PKG)_BASE_NAME) $(DL_DIR)/$($(PKG)_SOURCE)
 endef
 
 # TODO: improve to check that the given PKG_DL_VERSION exists on the remote
support/download/hg new file +25 -0
new file mode 100755
index 0000000..70b49cf
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+# We want to catch any command failure, and exit immediately
+set -e
+
+# Download helper for hg
+# Call it with:
+#   $1: hg repo
+#   $2: hg cset
+#   $3: package's basename (eg. foobar-1.2.3)
+#   $4: output file
+# And this environment:
+#   HG        : the hg command to call
+#   BR2_DL_DIR: path to Buildroot's download dir
+
+repo="${1}"
+cset="${2}"
+basename="${3}"
+output="${4}"
+
+cd "${BR2_DL_DIR}"
+${HG} clone --noupdate --rev "${cset}" "${repo}" "${basename}"
+${HG} archive --repository "${basename}" --type tgz --prefix "${basename}" \
+              --rev "${cset}" "${output}"
+rm -rf "${basename}"
Signature · 1 line
1.8.3.2
#7 lore raw

PATCH v7 6/12 pkg-infra: move the hg download helper to a script

Quoted 7 lines · Yann E. MORIN

From: "Yann E. MORIN" <[email protected]>

Maintaining the download helpers in the Makefile has proved to be a bit complex, so move it to a shell script.

[tested a particular scenario that used to fail, when the 'hg archive' step is interrupted, now working fine]

#8 lore raw

PATCH v7 7/12 pkg-infra: move the wget download helper to a script

In reply to Yann E. MORIN

From: "Yann E. MORIN" <[email protected]>

Maintaining the download helpers in the Makefile has proved to be a bit complex, so move it to a shell script.

---
 package/pkg-download.mk | 13 +++----------
 support/download/wget   | 21 +++++++++++++++++++++
 2 files changed, 24 insertions(+), 10 deletions(-)
 create mode 100755 support/download/wget
package/pkg-download.mk +3 -10
index 37f0830..b495bbb 100644
@@ -8,7 +8,7 @@
 ################################################################################
 
 # Download method commands
-WGET := $(call qstrip,$(BR2_WGET)) $(QUIET)
+export WGET := $(call qstrip,$(BR2_WGET)) $(QUIET)
 export SVN := $(call qstrip,$(BR2_SVN))
 export CVS := $(call qstrip,$(BR2_CVS))
 BZR := $(call qstrip,$(BR2_BZR))
@@ -175,17 +175,10 @@ define SHOW_EXTERNAL_DEPS_HG
   echo $($(PKG)_SOURCE)
 endef
 
-# Download a file using wget. Only download the file if it doesn't
-# already exist in the download directory. If the download fails,
-# remove the file (because wget -O creates a 0-byte file even if the
-# download fails).  To handle an interrupted download as well, download
-# to a temporary file first.  The temporary file will be overwritten
-# the next time the download is tried.
+
 define DOWNLOAD_WGET
 	test -e $(DL_DIR)/$(2) || \
-	($(WGET) -O $(DL_DIR)/$(2).tmp '$(call qstrip,$(1))' && \
-	 mv $(DL_DIR)/$(2).tmp $(DL_DIR)/$(2)) || \
-	(rm -f $(DL_DIR)/$(2).tmp ; exit 1)
+	$(EXTRA_ENV) support/download/wget '$(call qstrip,$(1))' $(DL_DIR)/$(2)
 endef
 
 define SOURCE_CHECK_WGET
support/download/wget new file +21 -0
new file mode 100755
index 0000000..7865517
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+# We want to catch any command failure, and exit immediately
+set -e
+
+# Download helper for wget
+# Call it with:
+#   $1: URL
+#   $2: output file
+# And this environment:
+#   WGET      : the wget command to call
+
+url="${1}"
+output="${2}"
+
+if ${WGET} -O "${output}.tmp" "${url}"; then
+    mv "${output}.tmp" "${output}"
+else
+    rm -f "${output}.tmp"
+    exit 1
+fi
Signature · 1 line
1.8.3.2
#9 lore raw

PATCH v7 8/12 pkg-infra: move the bzr download helper to a script

In reply to Yann E. MORIN

From: "Yann E. MORIN" <[email protected]>

Maintaining the download helpers in the Makefile has proved to be a bit complex, so move it to a shell script.

---
 package/pkg-download.mk |  4 ++--
 support/download/bzr    | 19 +++++++++++++++++++
 2 files changed, 21 insertions(+), 2 deletions(-)
 create mode 100755 support/download/bzr
package/pkg-download.mk +2 -2
index b495bbb..e0dda39 100644
@@ -11,7 +11,7 @@
 export WGET := $(call qstrip,$(BR2_WGET)) $(QUIET)
 export SVN := $(call qstrip,$(BR2_SVN))
 export CVS := $(call qstrip,$(BR2_CVS))
-BZR := $(call qstrip,$(BR2_BZR))
+export BZR := $(call qstrip,$(BR2_BZR))
 export GIT := $(call qstrip,$(BR2_GIT))
 export HG := $(call qstrip,$(BR2_HG)) $(QUIET)
 SCP := $(call qstrip,$(BR2_SCP)) $(QUIET)
@@ -101,7 +101,7 @@ endef
 
 define DOWNLOAD_BZR
 	test -e $(DL_DIR)/$($(PKG)_SOURCE) || \
-	$(BZR) export $(DL_DIR)/$($(PKG)_SOURCE) $($(PKG)_SITE) -r $($(PKG)_DL_VERSION)
+	$(EXTRA_ENV) support/download/bzr $($(PKG)_SITE) $($(PKG)_DL_VERSION) $(DL_DIR)/$($(PKG)_SOURCE)
 endef
 
 define SOURCE_CHECK_BZR
support/download/bzr new file +19 -0
new file mode 100755
index 0000000..68121f4
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+# We want to catch any command failure, and exit immediately
+set -e
+
+# Download helper for bzr
+# Call it with:
+#   $1: bzr repo
+#   $2: bzr revision
+#   $3: output file
+# And this environment:
+#   BZR       : the bzr command to call
+#   BR2_DL_DIR: path to Buildroot's download dir
+
+repo="${1}"
+rev="${2}"
+output="${3}"
+
+${BZR} export "${output}" "${repo}" -r "${rev}"
Signature · 1 line
1.8.3.2
#10 lore raw

PATCH v7 9/12 pkg-infra: don't use DL_DIR as scratchpad for temporary downloads

In reply to Yann E. MORIN

From: "Yann E. MORIN" <[email protected]>

DL_DIR can be a very precious place for some users: they use it to store all the downloaded archives to share across all their Buildroot (and maybe non-Buildroot) builds.

We do not want to trash this location with our temporary downloads (e.g. git, Hg, svn, cvs repository clones/checkouts, or wget, bzr tep tarballs).

Turns out that we already have some kind of scratchpad, the BUILD_DIR. Although it is not really a disposable location, that's the best we have so far.

Also, we create the temporary tarballs with mktemp using the final tarrball, as template, since we want the temporary to be on the same filesystem as the final location, so the 'mv' is just a plain, atomic rename(2), and we are not left with a half-copied file as the final location.

Using mktemp ensures all temp file names are unique, so it allows for parallel downloads from different build dirs at the same time, without cloberring each downloads.

Note: we're using neither ${TMP} nor ${TMPDIR} since they are shared locations, sometime with little place (eg. tmpfs), and some of the repositories we clone/checkout can be very big.

Cc Samuel Martin <[email protected]>
Cc Arnout Vandecappelle <[email protected]>
Cc Thomas Petazzoni <[email protected]>

---
Changes v6 -> v7:
- drop leftovers from a previous attempt in bzr (Thomas)

Changes v5 -> v6:
- ensure we can do parallel downloads from multiple build-dirs (Thomas)

Changes v4 -> v5
- explain why we create the temp files where we create them (Arnout)

Changes v3 -> v4:
- remove spurious bump in package/fis (Samuel)

---
 support/download/bzr  | 21 ++++++++++++++++++---
 support/download/cvs  | 25 +++++++++++++++++++------
 support/download/git  | 25 +++++++++++++++++++------
 support/download/hg   | 27 ++++++++++++++++++++-------
 support/download/svn  | 26 +++++++++++++++++++-------
 support/download/wget | 19 +++++++++++++++----
 6 files changed, 110 insertions(+), 33 deletions(-)
support/download/bzr +18 -3
index 68121f4..e0da34c 100755
@@ -9,11 +9,26 @@ set -e
 #   $2: bzr revision
 #   $3: output file
 # And this environment:
-#   BZR       : the bzr command to call
-#   BR2_DL_DIR: path to Buildroot's download dir
+#   BZR      : the bzr command to call
+#   BUILD_DIR: path to Buildroot's build dir
 
 repo="${1}"
 rev="${2}"
 output="${3}"
 
-${BZR} export "${output}" "${repo}" -r "${rev}"
+tmp_dl="$( mktemp "${BUILD_DIR}/.XXXXXX" )"
+
+# Play tic-tac-toe with temp files
+# - first, we download to a trashable location (the build-dir)
+# - the we move to a temp file in the final location, so it is
+#   on the same filesystem as the final file
+# - finally, we atomically rename to the final file
+
+if ${BZR} export "${tmp_dl}" "${repo}" -r "${rev}"; then
+    tmp_output="$( mktemp "${output}.XXXXXX" )"
+    mv "${tmp_dl}" "${tmp_output}"
+    mv "${tmp_output}" "${output}"
+else
+    rm -f "${tmp_dl}"
+    exit 1
+fi
support/download/cvs +19 -6
index 06b8647..edcf55c 100755
@@ -11,8 +11,8 @@ set -e
 #   $4: package's basename (eg. foobar-1.2.3)
 #   $5: output file
 # And this environment:
-#   CVS       : the cvs command to call
-#   BR2_DL_DIR: path to Buildroot's download dir
+#   CVS      : the cvs command to call
+#   BUILD_DIR: path to Buildroot's build dir
 
 repo="${1}"
 rev="${2}"
@@ -20,8 +20,21 @@ rawname="${3}"
 basename="${4}"
 output="${5}"
 
-cd "${BR2_DL_DIR}"
+repodir="${basename}.tmp-cvs-checkout"
+
+cd "${BUILD_DIR}"
+# Remove leftovers from a previous failed run
+rm -rf "${repodir}"
+
+# Play tic-tac-toe with temp files
+# - first, we download to a trashable location (the build-dir)
+# - then we create a temporary tarball in the final location, so it is
+#   on the same filesystem as the final file
+# - finally, we atomically rename to the final file
+
 ${CVS} -z3 -d":pserver:anonymous@${repo}" \
-       co -d "${basename}" -r ":${rev}" -P "${rawname}"
-tar czf "${output}" "${basename}"
-rm -rf "${basename}"
+       co -d "${repodir}" -r ":${rev}" -P "${rawname}"
+temp_output="$( mktemp "${output}.XXXXXX" )"
+tar czf "${temp_output}" "${repodir}"
+mv "${temp_output}" "${output}"
+rm -rf "${repodir}"
support/download/git +19 -6
index 96db3a9..1d2493d 100755
@@ -10,15 +10,27 @@ set -e
 #   $3: package's basename (eg. foobar-1.2.3)
 #   $4: output file
 # And this environment:
-#   BR2_DL_DIR: path to Buildroot's download dir
-#   GIT       : the git command to call
+#   GIT      : the git command to call
+#   BUILD_DIR: path to Buildroot's build dir
 
 repo="${1}"
 cset="${2}"
 basename="${3}"
 output="${4}"
 
-repodir="${BR2_DL_DIR}/${basename}"
+repodir="${basename}.tmp-git-checkout"
+tmp_tar="$( mktemp "${BUILD_DIR}/.XXXXXX" )"
+
+# Play tic-tac-toe with temp files
+# - first, we download to a trashable location (the build-dir)
+# - then we create the uncomporessed tarball in tht same trashable location
+# - then we create a temporary compressed tarball in the final location, so
+#   it is on the same filesystem as the final file
+# - finally, we atomically rename to the final file
+
+cd "${BUILD_DIR}"
+# Remove leftovers from a previous failed run
+rm -rf "${repodir}"
 
 if [ -n "$(${GIT} ls-remote "${repo}" "${cset}" 2>&1)" ]; then
     printf "Doing shallow clone\n"
@@ -29,9 +41,10 @@ else
 fi
 
 pushd "${repodir}"
-${GIT} archive --prefix="${basename}/" -o "${output}.tmp" --format=tar "${cset}"
-gzip -c "${output}.tmp" >"${output}"
-rm -f "${output}.tmp"
+${GIT} archive --prefix="${basename}/" -o "${tmp_tar}" --format=tar "${cset}"
+tmp_output="$( mktemp "${output}.XXXXXX" )"
+gzip -c "${tmp_tar}" >"${tmp_output}"
+mv "${tmp_output}" "${output}"
 popd
 
 rm -rf "${repodir}"
support/download/hg +20 -7
index 70b49cf..bf9d4ea 100755
@@ -10,16 +10,29 @@ set -e
 #   $3: package's basename (eg. foobar-1.2.3)
 #   $4: output file
 # And this environment:
-#   HG        : the hg command to call
-#   BR2_DL_DIR: path to Buildroot's download dir
+#   HG       : the hg command to call
+#   BUILD_DIR: path to Buildroot's build dir
 
 repo="${1}"
 cset="${2}"
 basename="${3}"
 output="${4}"
 
-cd "${BR2_DL_DIR}"
-${HG} clone --noupdate --rev "${cset}" "${repo}" "${basename}"
-${HG} archive --repository "${basename}" --type tgz --prefix "${basename}" \
-              --rev "${cset}" "${output}"
-rm -rf "${basename}"
+repodir="${basename}.tmp-hg-checkout"
+
+cd "${BUILD_DIR}"
+# Remove leftovers from a previous failed run
+rm -rf "${repodir}"
+
+# Play tic-tac-toe with temp files
+# - first, we download to a trashable location (the build-dir)
+# - then we create a temporary tarball in the final location, so it is
+#   on the same filesystem as the final file
+# - finally, we atomically rename to the final file
+
+${HG} clone --noupdate --rev "${cset}" "${repo}" "${repodir}"
+tmp_output="$( mktemp "${output}.XXXXXX" )"
+${HG} archive --repository "${repodir}" --type tgz --prefix "${basename}" \
+              --rev "${cset}" "${tmp_output}"
+mv "${tmp_output}" "${output}"
+rm -rf "${repodir}"
support/download/svn +19 -7
index c3ab32c..3977591 100755
@@ -10,16 +10,28 @@ set -e
 #   $3: package's basename (eg. foobar-1.2.3)
 #   $4: output file
 # And this environment:
-#   SVN       : the svn command to call
-#   BR2_DL_DIR: path to Buildroot's download dir
+#   SVN      : the svn command to call
+#   BUILD_DIR: path to Buildroot's build dir
 
 repo="${1}"
 rev="${2}"
 basename="${3}"
 output="${4}"
 
-pushd "${BR2_DL_DIR}"
-${SVN} export -r "${rev}" "${repo}" "${basename}"
-tar czf "${output}" "${basename}"
-rm -rf "${basename}"
-popd
+repodir="${basename}.tmp-svn-checkout"
+
+cd "${BUILD_DIR}"
+# Remove leftovers from a previous failed run
+rm -rf "${repodir}"
+
+# Play tic-tac-toe with temp files
+# - first, we download to a trashable location (the build-dir)
+# - then we create a temporary tarball in the final location, so it is
+#   on the same filesystem as the final file
+# - finally, we atomically rename to the final file
+
+${SVN} export -r "${rev}" "${repo}" "${repodir}"
+tmp_output="$( mktemp "${output}.XXXXXX" )"
+tar czf "${tmp_output}" "${repodir}"
+mv "${tmp_output}" "${output}"
+rm -rf "${repodir}"
support/download/wget +15 -4
index 7865517..989829a 100755
@@ -8,14 +8,25 @@ set -e
 #   $1: URL
 #   $2: output file
 # And this environment:
-#   WGET      : the wget command to call
+#   WGET     : the wget command to call
+#   BUILD_DIR: path to Buildroot's build dir
 
 url="${1}"
 output="${2}"
 
-if ${WGET} -O "${output}.tmp" "${url}"; then
-    mv "${output}.tmp" "${output}"
+tmp_dl="$( mktemp "${BUILD_DIR}/.XXXXXX" )"
+
+# Play tic-tac-toe with temp files
+# - first, we download to a trashable location (the build-dir)
+# - then we copy to a temporary tarball in the final location, so it is
+#   on the same filesystem as the final file
+# - finally, we atomically rename to the final file
+
+if ${WGET} -O "${tmp_dl}" "${url}"; then
+    tmp_output="$( mktemp "${output}.XXXXXX" )"
+    mv "${tmp_dl}" "${tmp_output}"
+    mv "${tmp_output}" "${output}"
 else
-    rm -f "${output}.tmp"
+    rm -f "${tmp_dl}"
     exit 1
 fi
Signature · 1 line
1.8.3.2
#11 lore raw

PATCH v7 9/12 pkg-infra: don't use DL_DIR as scratchpad for temporary downloads

Quoted 22 lines · Yann E. MORIN

From: "Yann E. MORIN" <[email protected]>

DL_DIR can be a very precious place for some users: they use it to store all the downloaded archives to share across all their Buildroot (and maybe non-Buildroot) builds.

We do not want to trash this location with our temporary downloads (e.g. git, Hg, svn, cvs repository clones/checkouts, or wget, bzr tep tarballs).

Turns out that we already have some kind of scratchpad, the BUILD_DIR. Although it is not really a disposable location, that's the best we have so far.

Also, we create the temporary tarballs with mktemp using the final tarrball, as template, since we want the temporary to be on the same filesystem as the final location, so the 'mv' is just a plain, atomic rename(2), and we are not left with a half-copied file as the final location.

Using mktemp ensures all temp file names are unique, so it allows for parallel downloads from different build dirs at the same time, without cloberring each downloads.

Quoted 9 lines

Note: we're using neither ${TMP} nor ${TMPDIR} since they are shared locations, sometime with little place (eg. tmpfs), and some of the repositories we clone/checkout can be very big.

Cc Samuel Martin <[email protected]>
Cc Arnout Vandecappelle <[email protected]>
Cc Thomas Petazzoni <[email protected]>

[tested a particular scenario that used to fail: two separate builds using a shared DL_DIR, ccache enabled, so that they run almost synchronously. These would download the same file at the same time, corrupting each other. With the patches in this series, all works fine.]

#12 lore raw

PATCH v7 10/12 pkg-infra: add possiblity to check downloaded files against known hashes

In reply to Yann E. MORIN

From: "Yann E. MORIN" <[email protected]>

Some of the packages that Buildroot might build are sensitive packages, related to security: openssl, dropbear, ca-certificates...

Some of those packages are downloaded over plain http, because there is no way to get them over a secure channel, such as https.

In these dark times of pervasive surveillance, the potential for harm that a tampered-with package could generate, we may want to check the integrity of those sensitive packages.

So, each package may now provide a list of hashes for all files that needs to be downloaded, and Buildroot will just fail if any downloaded file does not match its known hash, in which case it is removed.

Hashes can be any of the md5, sha1 or sha2 variants, and will be checked even if the file was pre-downloaded.

Cc Baruch Siach <[email protected]>
Cc Arnout Vandecappelle <[email protected]>
Cc Gustavo Zacarias <[email protected]>

---
Changes v4 -> v5:
- fix detection of comments and empty lines

---
Note: this is not a bullet-proof solution, since Buildroot may itself be compromised. But since we do sign our releases, then we secure the list of hashes at the same time. Only random snapshots from the repository may be at risk of tampering, although this is highly doubtfull, given how git stores its data.

---
 package/pkg-download.mk     | 20 ++++++++++--
 support/download/check-hash | 76 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 93 insertions(+), 3 deletions(-)
 create mode 100755 support/download/check-hash
package/pkg-download.mk +17 -3
index e0dda39..dcf6b62 100644
@@ -58,6 +58,17 @@ domainseparator=$(if $(1),$(1),/)
 # github(user,package,version): returns site of GitHub repository
 github = https://github.com/$(1)/$(2)/archive/$(3)
 
+# Helper for checking a tarball's checksum
+# If the hash does not match, remove the incorrect file
+# $(1): the path to the file with the hashes
+# $(2): the full path to the file to check
+define VERIFY_HASH
+	if ! support/download/check-hash $(1) $(2); then \
+		rm -f $(2); \
+		exit 1; \
+	fi
+endef
+
 ################################################################################
 # The DOWNLOAD_* helpers are in charge of getting a working copy
 # of the source repository for their corresponding SCM,
@@ -147,7 +158,8 @@ endef
 # to prepend the path with a slash: scp://[user@]host:/absolutepath
 define DOWNLOAD_SCP
 	test -e $(DL_DIR)/$(2) || \
-	$(SCP) '$(call stripurischeme,$(call qstrip,$(1)))' $(DL_DIR)/$(2)
+	$(SCP) '$(call stripurischeme,$(call qstrip,$(1)))' $(DL_DIR)/$(2) && \
+	$(call VERIFY_HASH,$(PKGDIR)/$($(PKG)_NAME).hash,$(DL_DIR)/$(2))
 endef
 
 define SOURCE_CHECK_SCP
@@ -178,7 +190,8 @@ endef
 
 define DOWNLOAD_WGET
 	test -e $(DL_DIR)/$(2) || \
-	$(EXTRA_ENV) support/download/wget '$(call qstrip,$(1))' $(DL_DIR)/$(2)
+	$(EXTRA_ENV) support/download/wget '$(call qstrip,$(1))' $(DL_DIR)/$(2) && \
+	$(call VERIFY_HASH,$(PKGDIR)/$($(PKG)_NAME).hash,$(DL_DIR)/$(2))
 endef
 
 define SOURCE_CHECK_WGET
@@ -191,7 +204,8 @@ endef
 
 define DOWNLOAD_LOCALFILES
 	test -e $(DL_DIR)/$(2) || \
-		$(LOCALFILES) $(call stripurischeme,$(call qstrip,$(1))) $(DL_DIR)
+	$(LOCALFILES) $(call stripurischeme,$(call qstrip,$(1))) $(DL_DIR) && \
+	$(call VERIFY_HASH,$(PKGDIR)/$($(PKG)_NAME).hash,$(DL_DIR)/$(2))
 endef
 
 define SOURCE_CHECK_LOCALFILES
support/download/check-hash new file +76 -0

76 lines not on this page · raw message

Signature · 1 line
1.8.3.2
#13 lore raw

PATCH v7 10/12 pkg-infra: add possiblity to check downloaded files against known hashes

Hi Yann,

On Sun, Jun 8, 2014 at 10:43 PM, Yann E. MORIN <[email protected]> wrote:
[..]

Quoted 21 lines
support/download/check-hash new file +15 -0
new file mode 100755
index 0000000..d498752
@@ -0,0 +1,76 @@
+#!/bin/sh
+set -e
+
+# Helper to check a file matches its known hash
+# Call it with:
+#   $1: the full path to the file to check
+#   $2: the path of the file containing all the the expected hashes
+
+h_file="${1}"
+file="${2}"
+
+# Does the hash-file exist?
+if [ ! -f "${h_file}" ]; then
+    exit 0
+fi

support/download/check-hash line 25

Quoted 10 lines
support/download/check-hash new file +10 -0
+
+# Check one hash for a file
+# $1: known hash
+# $2: file (full path)
+check_one_hash() {
+    _h="${1}"
+    _known="${2}"
+    _file="${3}"
+
+    # Note: sha3 is not supported, since there is currently no implemetation

nit: implementation

Quoted 12 lines
support/download/check-hash new file +12 -0
+    #       (the NIST has yet to publish the parameters).
+    case "${_h}" in
+        md5|sha1)                       ;;
+        sha224|sha256|sha384|sha512)    ;;
+        *) # Unknown hash, exit with error
+            printf "ERROR: unknown hash '%s' for '%s'\n"  \
+                   "${_h}" "${_file##*/}" >&2
+            exit 1
+            ;;
+    esac
+
+    # Do the hashes match?

support/download/check-hash line 47

Quoted 10 lines
support/download/check-hash new file +10 -0
+    _hash=$( ${_h}sum "${_file}" |cut -d ' ' -f 1 )
+    if [ "${_hash}" = "${_known}" ]; then
+        printf "%s: OK (%s: %s)\n" "${_file##*/}" "${_h}" "${_hash}"
+        return 0
+    fi
+
+    printf "ERROR: %s has wrong %s hash:\n" "${_file##*/}" "${_h}" >&2
+    printf "ERROR: expected: %s\n" "${_known}" >&2
+    printf "ERROR: got     : %s\n" "${_hash}" >&2
+    printf "ERROR: Incomplete download, or MITM attack\n" >&2

I would write MITM in full: the average user will not know or realize what it means.

[..]

Best regards,
Thomas

#14 lore raw

PATCH v7 11/12 manual: add documentation about packages' hashes

In reply to Yann E. MORIN

From: "Yann E. MORIN" <[email protected]>

Although md5 is, for legacy reasons, a supported hash type, it is not documented on purpose, since it is now known to be weak.

Cc Baruch Siach <[email protected]>
Cc Arnout Vandecappelle <[email protected]>
Cc Samuel Martin <[email protected]>
Cc Thomas De Schampheleire <[email protected]>

---
Changes v6 -> v7:
- use single-line title (Samuel)

---
 docs/manual/adding-packages-directory.txt | 66 +++++++++++++++++++++++++++++++
 support/download/check-hash               |  1 +
 2 files changed, 67 insertions(+)
docs/manual/adding-packages-directory.txt +66 -0
index 69b012c..c2f0a1a 100644
@@ -357,3 +357,69 @@ different way, using different infrastructures:
 
 Further formatting details: see xref:writing-rules-mk[the writing
 rules].
+
+[[adding-packages-hash]]
+=== The +.hash+ file
+
+Optionally, you can add a third file, named +libfoo.hash+, that contains
+the hashes of the downloaded files for the +libfoo+ package.
+
+The hashes stored in that file are used to validate the integrity of the
+downloaded files.
+
+The format of this file is one line for each file for which to check the
+hash, each line being space-separated, with these three fields:
+
+* the type of hash, one of:
+** +sha1+, +sha224+, +sha256+, +sha384+, +sha512+
+* the hash of the file:
+** for +sha1+, 40 hexadecimal characters
+** for +sha224+, 56 hexadecimal characters
+** for +sha256+, 64 hexadecimal characters
+** for +sha384+, 96 hexadecimal characters
+** for +sha512+, 128 hexadecimal characters
+* the name of the file, without any directory component
+
+Lines starting with a +#+ sign are considered comments, and ignored. Empty
+lines are ignored.
+
+There can be more than one hash for a single file, each on its own line. In
+this case, all hashes must match.
+
+Ideally, the hashes stored in this file should match the hashes published by
+upstream, e.g. on their website, in the e-mail announcement... If upstream
+provides more than one type of hash (say, +sha1+ and +sha512+), then it is
+best to add all those hashes in the +.hash+ file. If upstream does not
+provide any hash, then compute at least one yourself, and mention this in a
+comment line above the hashes.
+
+*Note:* the number of spaces does not matter, so one can use spaces to
+properly align the different fields.
+
+The example below defines a +sha1+ and a +sha256+ published by upstream for
+the main +libfoo-1.2.3.tar.bz2+ tarball, plus two locally-computed hashes,
+a +sha256+ for a downloaded patch, and a +sha1+ for a downloaded binary blob:
+
+----
+# Hashes from: http://www.foosoftware.org/download/libfoo-1.2.3.tar.bz2.{sha1,sha256}:
+sha1   486fb55c3efa71148fe07895fd713ea3a5ae343a                         libfoo-1.2.3.tar.bz2
+sha256 efc8103cc3bcb06bda6a781532d12701eb081ad83e8f90004b39ab81b65d4369 libfoo-1.2.3.tar.bz2
+
+# No upstream hashes for the following:
+sha256 ff52101fb90bbfc3fe9475e425688c660f46216d7e751c4bbdb1dc85cdccacb9 libfoo-fix-blabla.patch
+sha1   2d608f3c318c6b7557d551a5a09314f03452f1a1                         libfoo-data.bin
+----
+
+If the +.hash+ file is present, and it contains one or more hashes for a
+downloaded file, the hash(es) computed by Buildroot (after download) must
+match the hash(es) stored in the +.hash+ file. If one or more hashes do
+not match, Buildroot considers this an error, deletes the downloaded file,
+and aborts.
+
+If the +.hash+ file is present, but it does not contain a hash for a
+downloaded file, no check is done for that file. If you set the
+environment variable +BR2_ENFORCE_CHECK_HASH+ to a non-empty value, and
+there is no hash for a downloaded file, Buildroot considers this an
+error, deletes the downloaded file, and aborts.
+
+If the +.hash+ file is missing, then no check is done at all.
support/download/check-hash +1 -0
index d498752..ce50e5a 100755
@@ -22,6 +22,7 @@ check_one_hash() {
     _known="${2}"
     _file="${3}"
 
+    # Note: md5 is supported, but undocumented on purpose.
     # Note: sha3 is not supported, since there is currently no implemetation
     #       (the NIST has yet to publish the parameters).
     case "${_h}" in
Signature · 1 line
1.8.3.2
#15 lore raw

PATCH v7 12/12 package/ca-certificates: add tarball's hashes

In reply to Yann E. MORIN

From: "Yann E. MORIN" <[email protected]>

ca-certificates contains sensitive security-related information, and we want to ensure the archive that we download has not been compromised.

Add the sha1 and sha256 hashes from Debian's packaging.

---
Changes v4 -> v5:
- update hashes since we've bumped the version

---
 package/ca-certificates/ca-certificates.hash | 3 +++
 1 file changed, 3 insertions(+)
 create mode 100644 package/ca-certificates/ca-certificates.hash
package/ca-certificates/ca-certificates.hash new file +3 -0
new file mode 100644
index 0000000..bcd0723
@@ -0,0 +1,3 @@
+# hashes from: $(CA_CERTIFICATES_SITE)/ca-certificates_$(CA_CERTIFICATES_VERSION).dsc :
+sha1   ad57a45f0422fafd78a2e8191e5204f2306cc91b                         ca-certificates_20140223.tar.xz
+sha256 815b7cd97200b0d76450bb3e7d9b65997ac494ab6467b17369f65b2ef94bcb0c ca-certificates_20140223.tar.xz
Signature · 1 line
1.8.3.2
#16 lore raw

v7 cover Some download-related changes (branch yem/check-downloads)

In reply to Yann E. MORIN

Hi Yann,

On Sun, Jun 8, 2014 at 10:43 PM, Yann E. MORIN <[email protected]> wrote:
[..]

Quoted 27 lines

Yann E. MORIN (12):
Makefile: add BR2_DL_DIR to EXTRA_ENV
pkg-infra: also set PKGDIR for the download step
pkg-infra: move the git download helper to a script
pkg-infra: move the svn download helper to a script
pkg-infra: move the cvs download helper to a script
pkg-infra: move the hg download helper to a script
pkg-infra: move the wget download helper to a script
pkg-infra: move the bzr download helper to a script
pkg-infra: don't use DL_DIR as scratchpad for temporary downloads
pkg-infra: add possiblity to check downloaded files against known hashes
manual: add documentation about packages' hashes package/ca-certificates: add tarball's hashes

 docs/manual/adding-packages-directory.txt    | 66 ++++++++++++++++++++++
 package/Makefile.in                          |  1 +
 package/ca-certificates/ca-certificates.hash |  3 +
 package/pkg-download.mk                      | 83 ++++++++++++----------------
 package/pkg-generic.mk                       |  1 +
 support/download/bzr                         | 34 ++++++++++++
 support/download/check-hash                  | 77 ++++++++++++++++++++++++++
 support/download/cvs                         | 40 ++++++++++++++
 support/download/git                         | 50 +++++++++++++++++
 support/download/hg                          | 38 +++++++++++++
 support/download/svn                         | 37 +++++++++++++
 support/download/wget                        | 32 +++++++++++
 12 files changed, 413 insertions(+), 49 deletions(-)
Quoted 9 lines
 create mode 100644 package/ca-certificates/ca-certificates.hash
 create mode 100755 support/download/bzr
 create mode 100755 support/download/check-hash
 create mode 100755 support/download/cvs
 create mode 100755 support/download/git
 create mode 100755 support/download/hg
 create mode 100755 support/download/svn
 create mode 100755 support/download/wget

Is there any particular reason why the scp and localfiles method was not split to a separate file like the others?
One could think this is because they are oneliners, but so is the bzr method...

Best regards,
Thomas

#17 lore raw

v7 cover Some download-related changes (branch yem/check-downloads)

Thomas DS, All,

On 2014-06-10 21:44 +0200, Thomas De Schampheleire spake thusly:

Quoted 38 lines · Yann E. MORIN

[..]

Quoted 27 lines

Yann E. MORIN (12):
Makefile: add BR2_DL_DIR to EXTRA_ENV
pkg-infra: also set PKGDIR for the download step
pkg-infra: move the git download helper to a script
pkg-infra: move the svn download helper to a script
pkg-infra: move the cvs download helper to a script
pkg-infra: move the hg download helper to a script
pkg-infra: move the wget download helper to a script
pkg-infra: move the bzr download helper to a script
pkg-infra: don't use DL_DIR as scratchpad for temporary downloads
pkg-infra: add possiblity to check downloaded files against known hashes
manual: add documentation about packages' hashes package/ca-certificates: add tarball's hashes

 docs/manual/adding-packages-directory.txt    | 66 ++++++++++++++++++++++
 package/Makefile.in                          |  1 +
 package/ca-certificates/ca-certificates.hash |  3 +
 package/pkg-download.mk                      | 83 ++++++++++++----------------
 package/pkg-generic.mk                       |  1 +
 support/download/bzr                         | 34 ++++++++++++
 support/download/check-hash                  | 77 ++++++++++++++++++++++++++
 support/download/cvs                         | 40 ++++++++++++++
 support/download/git                         | 50 +++++++++++++++++
 support/download/hg                          | 38 +++++++++++++
 support/download/svn                         | 37 +++++++++++++
 support/download/wget                        | 32 +++++++++++
 12 files changed, 413 insertions(+), 49 deletions(-)
Quoted 8 lines
 create mode 100644 package/ca-certificates/ca-certificates.hash
 create mode 100755 support/download/bzr
 create mode 100755 support/download/check-hash
 create mode 100755 support/download/cvs
 create mode 100755 support/download/git
 create mode 100755 support/download/hg
 create mode 100755 support/download/svn
 create mode 100755 support/download/wget
Quoted 3 lines

Is there any particular reason why the scp and localfiles method was not split to a separate file like the others?
One could think this is because they are oneliners, but so is the bzr method...

There's no real reason. Initially, the series was to check the download hashes; it then spiraled out to englobe the helper scripts, but still with the ultimate goal of checking the hashes.

So I was, like, is there a reason to check hashes of locally or scp-retrieved packages? My own answer was, no, there's no reason.

But I don;t mind converting them, of course. It's just it was not the initial goal of the series, so I overlookjed them.

But in retrospect, we should convert them, if at least to handle the multiple downloads in parallel and avoiding two builds to step on each others' feet...

I'll do.

PS. Thanks for the other review, too, I'll fix. :-)

Regards,
Yann E. MORIN.

Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#18 lore raw

v7 cover Some download-related changes (branch yem/check-downloads)

Thomas DS, All,

On 2014-06-10 22:08 +0200, Yann E. MORIN spake thusly:

Quoted 43 lines

On 2014-06-10 21:44 +0200, Thomas De Schampheleire spake thusly:

Quoted 38 lines · Yann E. MORIN

[..]

Quoted 27 lines

Yann E. MORIN (12):
Makefile: add BR2_DL_DIR to EXTRA_ENV
pkg-infra: also set PKGDIR for the download step
pkg-infra: move the git download helper to a script
pkg-infra: move the svn download helper to a script
pkg-infra: move the cvs download helper to a script
pkg-infra: move the hg download helper to a script
pkg-infra: move the wget download helper to a script
pkg-infra: move the bzr download helper to a script
pkg-infra: don't use DL_DIR as scratchpad for temporary downloads
pkg-infra: add possiblity to check downloaded files against known hashes
manual: add documentation about packages' hashes package/ca-certificates: add tarball's hashes

 docs/manual/adding-packages-directory.txt    | 66 ++++++++++++++++++++++
 package/Makefile.in                          |  1 +
 package/ca-certificates/ca-certificates.hash |  3 +
 package/pkg-download.mk                      | 83 ++++++++++++----------------
 package/pkg-generic.mk                       |  1 +
 support/download/bzr                         | 34 ++++++++++++
 support/download/check-hash                  | 77 ++++++++++++++++++++++++++
 support/download/cvs                         | 40 ++++++++++++++
 support/download/git                         | 50 +++++++++++++++++
 support/download/hg                          | 38 +++++++++++++
 support/download/svn                         | 37 +++++++++++++
 support/download/wget                        | 32 +++++++++++
 12 files changed, 413 insertions(+), 49 deletions(-)
Quoted 8 lines
 create mode 100644 package/ca-certificates/ca-certificates.hash
 create mode 100755 support/download/bzr
 create mode 100755 support/download/check-hash
 create mode 100755 support/download/cvs
 create mode 100755 support/download/git
 create mode 100755 support/download/hg
 create mode 100755 support/download/svn
 create mode 100755 support/download/wget
Quoted 3 lines

Is there any particular reason why the scp and localfiles method was not split to a separate file like the others?
One could think this is because they are oneliners, but so is the bzr method...

Quoted 6 lines

There's no real reason. Initially, the series was to check the download hashes; it then spiraled out to englobe the helper scripts, but still with the ultimate goal of checking the hashes.

So I was, like, is there a reason to check hashes of locally or scp-retrieved packages? My own answer was, no, there's no reason.

And yet, I've converted them over to check the hashes... Weird... :-/

Conversion to script helpers in progress. Thanks! :-)

Regards,
Yann E. MORIN.

Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#19 lore raw

v7 cover Some download-related changes (branch yem/check-downloads)

In reply to Yann E. MORIN

All,

On 2014-06-08 22:43 +0200, Yann E. MORIN spake thusly:

Quoted 1 line

This series contains those download-related changes:

I have made some changes locally. I will push them a bit later tonight.

Regards,
Yann E. MORIN.

Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'