From 169bcef7a5e0b25e26861dff086ef63c5b695c67 Mon Sep 17 00:00:00 2001 From: Sam Thursfield Date: Thu, 12 Jun 2014 10:27:42 +0100 Subject: Allow '.' in chroot names Baserock version numbers contain '.', so it's common to want to use it. --- manage-baserock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manage-baserock b/manage-baserock index c878d18..acee510 100755 --- a/manage-baserock +++ b/manage-baserock @@ -21,7 +21,7 @@ BASEROCK_BASE="${BASEROCK_BASE:-/opt/baserock/chroots}" ACTION="$1" -SYSTEM=$(echo $2 | tr -c -d A-Za-z0-9_-) +SYSTEM=$(echo $2 | tr -c -d A-Za-z0-9_-.) URL="$3" list_baserocks () { -- cgit v1.2.1 From a1df7cd597fb1087b678933c2bc3c5f95ed7a1ff Mon Sep 17 00:00:00 2001 From: Sam Thursfield Date: Mon, 16 Jun 2014 16:48:53 +0100 Subject: Raise an error when system name is invalid This is better than proceeding to add a system with a different name to the one the user specified, without telling them that the name was mangled. --- manage-baserock | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/manage-baserock b/manage-baserock index acee510..8210812 100755 --- a/manage-baserock +++ b/manage-baserock @@ -21,9 +21,20 @@ BASEROCK_BASE="${BASEROCK_BASE:-/opt/baserock/chroots}" ACTION="$1" -SYSTEM=$(echo $2 | tr -c -d A-Za-z0-9_-.) +SYSTEM="$2" URL="$3" +check_system_name () { + local system="$1" + local valid_chars='A-Za-z0-9_-.' + case $system in + *[^${valid_chars}]*) + echo "The specified name '${system}' contains invalid characters." + echo "Valid characters are ${valid_chars}." + exit 1 + esac +} + list_baserocks () { (cd "${BASEROCK_BASE}" && ls -d */baserock) 2>/dev/null | sed -e's@/baserock$@@' } @@ -43,6 +54,8 @@ case "${ACTION}" in exec sudo "$0" "$@" fi + check_system_name $SYSTEM + if test -d "${BASEROCK_BASE}/${SYSTEM}/baserock"; then echo "Sorry, $SYSTEM already exists" exit 1 @@ -105,7 +118,7 @@ EOF fi br-ct-sync-chroots - + ;; rm) if test $(id -u) != "0"; then -- cgit v1.2.1 From 30d769598971e46332e5a9e55913f12c25be96ba Mon Sep 17 00:00:00 2001 From: Sam Thursfield Date: Mon, 16 Jun 2014 16:57:53 +0100 Subject: Give helpful error when `manage-baserock add` is not given a URL --- manage-baserock | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/manage-baserock b/manage-baserock index 8210812..f9d646a 100755 --- a/manage-baserock +++ b/manage-baserock @@ -60,7 +60,12 @@ case "${ACTION}" in echo "Sorry, $SYSTEM already exists" exit 1 fi - + + if test -z "$URL"; then + echo "Usage: $0 add " + exit 1 + fi + TEMP_BASE=$(mktemp -d --tmpdir="${BASEROCK_BASE}") cleanup () { rm -rf "${TEMP_BASE}"; } trap cleanup 0 -- cgit v1.2.1 From 352b10b0dcebc1156bcb9b5f79b525be013d87cd Mon Sep 17 00:00:00 2001 From: Sam Thursfield Date: Mon, 16 Jun 2014 16:59:21 +0100 Subject: Fix strange error when /opt/baserock/chroots directory is missing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Create the directory if missing to avoid this when doing `manage-baserock add` mktemp: failed to create directory via template ‘/opt/baserock/chroots/tmp.XXXXXXXXXX’: No such file or directory --- manage-baserock | 2 ++ 1 file changed, 2 insertions(+) diff --git a/manage-baserock b/manage-baserock index f9d646a..0ac0aee 100755 --- a/manage-baserock +++ b/manage-baserock @@ -66,6 +66,8 @@ case "${ACTION}" in exit 1 fi + mkdir -p ${BASEROCK_BASE} + TEMP_BASE=$(mktemp -d --tmpdir="${BASEROCK_BASE}") cleanup () { rm -rf "${TEMP_BASE}"; } trap cleanup 0 -- cgit v1.2.1 From d28cf3af108c45101cf254a56334426614521091 Mon Sep 17 00:00:00 2001 From: Sam Thursfield Date: Mon, 16 Jun 2014 17:02:06 +0100 Subject: Give helpful error when URL doesn't exist MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It's slightly confusing that this script doesn't parse file:// URLs, but this is an improvement. Previously the error given was: ln: failed to create symbolic link ‘/opt/baserock/chroots/tmp.P46u6ZxYQC/tarball’ -> ‘’: No such file or directory Sorry, could not link foo into place --- manage-baserock | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/manage-baserock b/manage-baserock index 0ac0aee..b3a8f52 100755 --- a/manage-baserock +++ b/manage-baserock @@ -73,6 +73,10 @@ case "${ACTION}" in trap cleanup 0 if test "x${URL}" = "x${URL##http://}" -a "x${URL}" = "x${URL##https://}"; then + if ! test -e ${URL}; then + echo "${URL} is neither a HTTP/HTTPS url nor a path to a local file"; + exit 1; + fi if ! ln -s "$(readlink -e "${URL}")" "${TEMP_BASE}/tarball"; then echo "Sorry, could not link ${URL} into place"; exit 1; -- cgit v1.2.1