From b240d4ed7768132cef9c790318b747222ffc1fbd Mon Sep 17 00:00:00 2001 From: Erich Eckner Date: Sun, 8 Oct 2017 20:13:10 +0200 Subject: initial commit: update-website new --- update-website | 171 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100755 update-website diff --git a/update-website b/update-website new file mode 100755 index 0000000..50bdedf --- /dev/null +++ b/update-website @@ -0,0 +1,171 @@ +#!/bin/bash + +set -e + +mirror_dir='/mnt/archlinux32' +website_dir='/usr/src/github/archlinux32/website' + +tmp_dir="$(mktemp -d)" +cleanup() { + if mountpoint -q "${tmp_dir}"; then + sudo umount "${tmp_dir}" + fi + rm -rf --one-file-system "${tmp_dir}" +} +trap cleanup EXIT + +( + printf '
\n' + curl -Ss 'https://raw.githubusercontent.com/archlinux32/packages/master/core/pacman-mirrorlist/mirrorlist?'"$( + head -c 24 /dev/urandom | \ + base64 -w0 + )" | \ + sed ' + 0,/^$/d + /^$/d + /^## /{ + s|^## |\n \n\n
| + s|$|
\n\n \n\n' + printf '
\n' +) | \ + sed -i ' + :emptyLines + /^\n*$/{ + N + bemptyLines + } + /^\(\s*\n\)*\s*
$/{ + :a + s|^.*
|| + tb + $!N + ba + :b + r /dev/stdin + } + ' "${website_dir}/download/index.html" + +latest_iso_date="$( + ls "${mirror_dir}/archisos" | \ + grep '^archlinux-[0-9.]\+-\(dual\|i.86\)\.iso$' | \ + sed 's@^archlinux-\([0-9.]\+\)-\(dual\|i.86\)\.iso$@\1@' | \ + sort -k1,1 -u | \ + tail -n1 +)" + +declare -A desc +desc['i686']='i686 only' +desc['dual']='dual bootable' + +unset kernels +unset sizes +declare -A sizes +declare -A md5 +declare -A sha512 + +for arch in "${!desc[@]}"; do + iso="${mirror_dir}/archisos/archlinux-${latest_iso_date}-${arch}.iso" + if [ ! -f "${iso}" ]; then + >&2 echo "Can't find iso to arch ${arch}." + exit 1 + fi + sudo mount -o loop,ro "${iso}" "${tmp_dir}" + kernels="$( + printf '%s\n' ${kernels} $( + grep '/linux-[0-9]' "${tmp_dir}/arch/pkglist."*".txt" | \ + grep -v 'pkglist\.x86_64\.txt:' | \ + sed ' + s|^\(.*:\)\?core/linux-|| + s|-[0-9]\+$|| + ' + ) | \ + sort -u + )" + sudo umount "${tmp_dir}" + sizes["${arch}"]="$( + printf 'scale=1; %s/1024/1024\n' "$(stat -c'%s' "${iso}")" | \ + bc + )" + md5["${arch}"]="$( + grep "\s${iso##*/}\$" "${mirror_dir}/archisos/md5sums" | \ + awk '{print $1}' + )" + sha512["${arch}"]="$( + grep "\s${iso##*/}\$" "${mirror_dir}/archisos/sha512sums" | \ + awk '{print $1}' + )" + sign_keys="$( + printf '%s\n' ${sign_keys} $( + gpg --status-fd=1 --verify "${iso}.sig" "${iso}" 2> /dev/null | \ + grep '^\[GNUPG:] VALIDSIG [0-9A-F]\+ ' | \ + cut -d' ' -f3 + ) | \ + sort -u + )" +done + +if [ $(echo "${kernels}" | grep -c '\S') -ne 1 ]; then + >&2 echo 'Not exactly one kernel on the iso:' + >&2 echo "${kernels}" + exit 1 +fi + +if [ $(echo "${sign_keys}" | grep -c '\S') -ne 1 ]; then + >&2 echo 'Not exactly one key used for signing the iso:' + >&2 echo "'${sign_keys}'" + exit 1 +fi + +if [ "${sign_keys}" != 'F2955C3B63EE4E421F30670A3B08EFC6BA974CFC' ] && + [ "${sign_keys}" != '248BF41F9BDD61D41D060AE774EDA3C6B06D0506' ] && + [ "${sign_keys}" != 'DE9F7688CACF04FEB81A6C590AEEC90755DA7B5A' ]; then + >&2 echo "Unknown signing key '${sign_keys}'." + exit 1 +fi + +values=( + 'Current Release' "${latest_iso_date}" + 'Included Kernel' "${kernels}" + 'PGP Key' ''"${sign_keys}"'' +) +for arch in 'i686' 'dual'; do + values+=( + "ISO Size (${desc["${arch}"]})" "${sizes["${arch}"]} MB" + "MD5 (${desc["${arch}"]})" "${md5["${arch}"]}" + "SHA512 (${desc["${arch}"]})" "${sha512["${arch}"]}" + ) +done + +sed -i "$( + printf '/%s:/s|.*| %s|\n' "${values[@]}" + printf '/archlinux-[0-9.]\+-%s\.iso\.sig/s@archlinux-[0-9.]\+-%s\.iso\.sig@archlinux-%s-%s.iso.sig@\n' \ + 'i686' 'i686' "${latest_iso_date}" 'i686' \ + 'dual' 'dual' "${latest_iso_date}" 'dual' +) +" \ + "${website_dir}/download/index.html" -- cgit v1.2.3-70-g09d2