Skip to content

Instantly share code, notes, and snippets.

@furandon-pig
Last active February 26, 2017 05:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save furandon-pig/32f95165c990a8de1b4c2099b88cab66 to your computer and use it in GitHub Desktop.
Save furandon-pig/32f95165c990a8de1b4c2099b88cab66 to your computer and use it in GitHub Desktop.
NetBSDのソースコードを取得するシェルスクリプトです。
#!/bin/sh
# example)
# ${BASE_URL}/NetBSD-7.0/${SRC_DIR}
BASE_URL=http://ftp.jaist.ac.jp/pub/NetBSD/
SRC_DIR=source/sets/
TEMP_DIR=${HOME}/.nbsd_kernsrc_list
KERNSRC_LIST_HTML=${TEMP_DIR}/kernsrc_list.html
KERNSRC_LIST=${TEMP_DIR}/kernsrc_list.txt
DOWNLOAD_SRC_LIST="
MD5
SHA512
sharesrc.tgz
syssrc.tgz
gnusrc.tgz
src.tgz
"
#xsrc.tgz 2015-09-25 17:03 158M
SRC_LIST_COUNT=0
for i in ${DOWNLOAD_SRC_LIST}
do
SRC_LIST_COUNT=$((SRC_LIST_COUNT + 1))
done
# detect OS type
if [ "`uname -s`" = 'NetBSD' ]; then
# NetBSD
CURL=curl
#elif [ -f /etc/lsb-release ]; then
# # Debian/Ubuntu
#elif [ -f /etc/redhat-release ]; then
# # RedHat/CentOS
else
echo 'Err: not supported OS.(T_T)'
exit 1
fi
# check args
if [ $# -lt 1 ]; then
echo 'Err:'
exit 1
fi
cmd=$1
# create temp directory
[ ! -d ${TEMP_DIR} ] && mkdir -p ${TEMP_DIR}
# parse command and execute
case ${cmd} in
list)
if [ ! -f ${KERNSRC_LIST} ]; then
${CURL} -s -o ${KERNSRC_LIST_HTML} ${BASE_URL}
grep 'DIR.*href="NetBSD-[0-9]' ${KERNSRC_LIST_HTML} \
| sed -e "s/\/<\/a.*$//" -e "s/^.*NetBSD/NetBSD/" \
> ${KERNSRC_LIST}
fi
# listup source directory
echo " Available NetBSD source archive."
cat ${KERNSRC_LIST} | awk '{ print " * "$1 }'
;;
download)
target_version=$2
if [ -z "${target_version}" ]; then
echo 'Err: download <NetBSD-version>'
exit 1
fi
if [ `grep -w ${target_version} ${KERNSRC_LIST} | wc -l` -eq 0 ]; then
echo 'Err: not found source version.'
exit 1
fi
count=1
for item in ${DOWNLOAD_SRC_LIST}
do
url=${BASE_URL}/${target_version}/${SRC_DIR}/${item}
if [ ! -f ${item} ]; then
echo " [${count}/${SRC_LIST_COUNT}]download ${item}"
count=$((count + 1))
curl -s -O ${url}
fi
done
;;
checksum)
for item in `/bin/ls *.tgz`
do
if [ ! -f ${item} ]; then
echo " [ OK ] ${item} (file not found)"
else
expect_val=`grep -w ${item} SHA512|awk '{ print $4 }'`
test_val=`shasum -a 512 ${item}|awk '{ print $1 }'`
if [ "${test_val}" = "${expect_val}" ]; then
echo " [ OK ] ${item}"
else
echo " [FAIL] ${item}"
fi
fi
done
;;
help)
echo ' list:'
echo ' show NetBSD version list.'
echo ' download <version>:'
echo ' download NetBSD source archive.'
echo ' checksum:'
echo ' check sha-512 each download files.'
echo ' help:'
echo ' show this message.'
echo
echo ' * download src files'
for item in ${DOWNLOAD_SRC_LIST}
do
echo " - ${item}"
done
;;
*)
echo "Err: unknown command '${cmd}'."
exit 1
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment