Support for GitHub API tokens added (fixes Hexxeh/rpi-update#151) (#237)

* Support for GitHub API tokens added (fixes Hexxeh/rpi-update#151)

Use it like this:

$ sudo GITHUB_API_TOKEN=“<my-api-token”> rpi-update

* Added details about the GITHUB_API_TOKEN option to README

* Corrected headline level
This commit is contained in:
Alexander Graf
2017-03-15 15:16:18 +01:00
committed by popcornmix
parent d74ace7328
commit cabadf0b91
2 changed files with 23 additions and 9 deletions

View File

@@ -130,7 +130,13 @@ To just get a list of commits contained in rpi-update since you last updated, ru
This won't update your firmware This won't update your firmware
#### Troubleshooting #### `GITHUB_API_TOKEN`
By default, `rpi-update` will not use a custom GitHub API token. If you run into rate limiting issues, you can supply an API token on the command line:
sudo GITHUB_API_TOKEN=<your API token> rpi-update
## Troubleshooting
There are two possible problems related to SSL certificates that may prevent There are two possible problems related to SSL certificates that may prevent
this tool from working. this tool from working.

View File

@@ -34,6 +34,7 @@ WANT_SYMVERS=${WANT_SYMVERS:-0}
PRUNE_MODULES=${PRUNE_MODULES:-0} PRUNE_MODULES=${PRUNE_MODULES:-0}
RPI_UPDATE_UNSUPPORTED=${RPI_UPDATE_UNSUPPORTED:-0} RPI_UPDATE_UNSUPPORTED=${RPI_UPDATE_UNSUPPORTED:-0}
JUST_CHECK=${JUST_CHECK:-0} JUST_CHECK=${JUST_CHECK:-0}
GITHUB_API_TOKEN=${GITHUB_API_TOKEN:-""}
FW_REPO="${REPO_URI}.git" FW_REPO="${REPO_URI}.git"
FW_REPOLOCAL=${FW_REPOLOCAL:-"${WORK_PATH}/.rpi-firmware"} FW_REPOLOCAL=${FW_REPOLOCAL:-"${WORK_PATH}/.rpi-firmware"}
FW_PATH="${BOOT_PATH}" FW_PATH="${BOOT_PATH}"
@@ -46,11 +47,18 @@ if command -v vcgencmd > /dev/null; then
vcgencmd get_config str | grep -qE "^kernel=" && echo -e "You appear to be using a custom kernel file.\nSkipping installation of new kernel, as bundled dtb files may be incompatible with your kernel." && SKIP_KERNEL=1 vcgencmd get_config str | grep -qE "^kernel=" && echo -e "You appear to be using a custom kernel file.\nSkipping installation of new kernel, as bundled dtb files may be incompatible with your kernel." && SKIP_KERNEL=1
fi fi
# Support for custom GitHub Auth Tokens
GITHUB_AUTH_PARAM=""
if [[ -n "${GITHUB_API_TOKEN}" ]]; then
echo " *** Using GitHub token for all requests."
GITHUB_AUTH_PARAM="--header \"Authorization: token ${GITHUB_API_TOKEN}\""
fi
function update_self() { function update_self() {
echo " *** Performing self-update" echo " *** Performing self-update"
_tempFileName="$0.tmp" _tempFileName="$0.tmp"
if ! curl -Lfs --output "${_tempFileName}" "${UPDATE_URI}"; then if ! eval curl -Lfs ${GITHUB_AUTH_PARAM} --output "${_tempFileName}" "${UPDATE_URI}"; then
echo " !!! Failed to download update for rpi-update!" echo " !!! Failed to download update for rpi-update!"
echo " !!! Make sure you have ca-certificates installed and that the time is set correctly" echo " !!! Make sure you have ca-certificates installed and that the time is set correctly"
exit 1 exit 1
@@ -134,7 +142,7 @@ function update_sdk {
} }
function show_notice { function show_notice {
local FULL_NOTICE=`curl -Lfs https://raw.githubusercontent.com/hexxeh/rpi-firmware/${FW_REV}/NOTICE.md` local FULL_NOTICE=`eval curl -Lfs ${GITHUB_AUTH_PARAM} https://raw.githubusercontent.com/hexxeh/rpi-firmware/${FW_REV}/NOTICE.md`
local NOTICE=$(echo "$FULL_NOTICE" | tail -n+2) local NOTICE=$(echo "$FULL_NOTICE" | tail -n+2)
if [ -z "$NOTICE" ]; then if [ -z "$NOTICE" ]; then
return return
@@ -270,14 +278,14 @@ function do_update {
function download_rev { function download_rev {
if [[ ${SKIP_DOWNLOAD} -eq 0 ]]; then if [[ ${SKIP_DOWNLOAD} -eq 0 ]]; then
if ! curl -Lfs --output /dev/null --head --fail "${REPO_URI}/tarball/${FW_REV}"; then if ! eval curl -Lfs ${GITHUB_AUTH_PARAM} --output /dev/null --head --fail "${REPO_URI}/tarball/${FW_REV}"; then
echo "Invalid git hash specified" echo "Invalid git hash specified"
exit 1 exit 1
fi fi
echo " *** Downloading specific firmware revision (this will take a few minutes)" echo " *** Downloading specific firmware revision (this will take a few minutes)"
rm -rf "${FW_REPOLOCAL}" rm -rf "${FW_REPOLOCAL}"
mkdir -p "${FW_REPOLOCAL}" mkdir -p "${FW_REPOLOCAL}"
curl -L "${REPO_URI}/tarball/${FW_REV}" | tar xzf - -C "${FW_REPOLOCAL}" --strip-components=1 eval curl -L ${GITHUB_AUTH_PARAM} "${REPO_URI}/tarball/${FW_REV}" | tar xzf - -C "${FW_REPOLOCAL}" --strip-components=1
fi fi
} }
@@ -330,7 +338,7 @@ function noobs_fix {
function get_hash_date { function get_hash_date {
commit_api="https://api.github.com/repos/Hexxeh/rpi-firmware/git/commits/" commit_api="https://api.github.com/repos/Hexxeh/rpi-firmware/git/commits/"
curl -Ls "$commit_api"$1 | grep "date" | head -1 | awk -F\" '{print $4}' eval curl -Ls ${GITHUB_AUTH_PARAM} "$commit_api"$1 | grep "date" | head -1 | awk -F\" '{print $4}'
} }
function compare_hashes { function compare_hashes {
@@ -383,11 +391,11 @@ command -v readelf >/dev/null 2>&1 || {
if [[ "${FW_REV}" == "" ]]; then if [[ "${FW_REV}" == "" ]]; then
# ask github for latest version hash # ask github for latest version hash
REPO_API=${REPO_URI/github.com/api.github.com\/repos}/git/refs/heads/${BRANCH} REPO_API=${REPO_URI/github.com/api.github.com\/repos}/git/refs/heads/${BRANCH}
FW_REV=$(curl -Ls ${REPO_API} | awk '{ if ($1 == "\"sha\":") { print substr($2, 2, 40) } }') FW_REV=$(eval curl -Ls ${GITHUB_AUTH_PARAM} ${REPO_API} | awk '{ if ($1 == "\"sha\":") { print substr($2, 2, 40) } }')
if [[ "${FW_REV}" == "" ]]; then if [[ "${FW_REV}" == "" ]]; then
echo " *** No hash received from github: ${REPO_API}" echo " *** No hash received from github: ${REPO_API}"
# run again with errors not suppressed # run again with errors not suppressed
curl -L ${REPO_API} eval curl -L ${GITHUB_AUTH_PARAM} ${REPO_API}
exit 1 exit 1
fi fi
fi fi
@@ -407,7 +415,7 @@ else
echo " *** Firmware update required. New commits available:" echo " *** Firmware update required. New commits available:"
DIFF_API=${REPO_URI/github.com/api.github.com\/repos}/compare/$(cat "${FW_REVFILE}")...${BRANCH} DIFF_API=${REPO_URI/github.com/api.github.com\/repos}/compare/$(cat "${FW_REVFILE}")...${BRANCH}
SEPARATOR="======================================================" SEPARATOR="======================================================"
curl -Ls ${DIFF_API} | awk -v SEPARATOR="${SEPARATOR}" -F\" ' { if ($2 == "commits") {commits=1} if (commits && $2 == "message") {print SEPARATOR "\nCommit: " $4} }' | sed 's/\\n\\n/\nCommit:\ /g' eval curl -Ls ${GITHUB_AUTH_PARAM} ${DIFF_API} | awk -v SEPARATOR="${SEPARATOR}" -F\" ' { if ($2 == "commits") {commits=1} if (commits && $2 == "message") {print SEPARATOR "\nCommit: " $4} }' | sed 's/\\n\\n/\nCommit:\ /g'
exit 2 exit 2
fi fi
fi fi