#!/bin/bash # runs on the buildmaster only, works currently only there # # calls all subscripts to build the iso, sign it, generate checksums, # update the website, update RSS feeds, feed the torrents, etc. # # this script is supposed to be used by Archlinux32 people only # as it contains hard-coded pathes and server names.. # prerequisites: # - mkinitcpio-archiso32 and archiso32 installed on the host # - https://git.archlinux32.org/releng checked out locally # - pacman-mirrorlist32 for /etc/pacman.d/mirrorlist32 # - mktorrent, python-feedgenerator, transmission-cli, hefur # parameters CONFIG="releng" ARCH="i686" DATE=$(date +%Y.%m.%d) ISO="archlinux32-${DATE}-${ARCH}.iso" SIGNATURE="${ISO}.sig" TORRENT="${ISO}.torrent" TORRENT_SERVER="archlinux32.org" WEBSITE_DIR="/srv/http/archlinux32.org" MIRROR_DIR="/srv/http/mirror/mirror.archlinux32.org" ARCHISOS_DIR="${MIRROR_DIR}/archisos/" MIRROR_USER='mirror' MIRROR_GROUP='mirror' #Andreas Baumann (sign) SIGN_KEY='16194A82231E9EF823562181C8E8F5A0AF9BA7E7' # Archlinux 32 Release Key #SIGN_KEY='33CA3597B0D161AAE4173F65C17F1214114574A4' WEB_DIR="/srv/http/archlinux32.org" base_dir=$( readlink -e "${0%/*}" ) pushd() { command pushd "$@" > /dev/null } popd() { command popd "$@" > /dev/null } export pushd popd # fail on first error set -e # cleanup hook 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 # build the ISO #echo "Building ISO.." #"${base_dir}/build-iso" --config="${CONFIG}" --arch "${ARCH}" \ # --output-dir="${ARCHISOS_DIR}" --iso "${ISO}" # sign ISO echo "Signing ISO.." #pushd "${ARCHISOS_DIR}" #rm -rf "${ISO}.sig" #gpg --local-user "${SIGN_KEY}" --batch --no-tty --detach-sign "${ISO}" > sha512sums # [ ! -f md5sums ] || sed -i "/${file}$/d" md5sums # md5sum "${file}" >> md5sums #done #sort -k2,2 sha512sums --output sha512sums #sort -k2,2 md5sums --output md5sums #popd # date used for torrents and commit message date=$(echo "${ISO}" \ | sed 's/^.*-\([^-]\+\)-[^-]\+$/\1/' \ | sort -u ) # generate torrents (currently broken) #echo "Generating torrents.." #bash -x "${base_dir}/al32-mktorrent.sh" -d "${torrent_date}" -t "hefur@${TORRENT_SERVER}:" "${ARCH}" # update web page echo "Updating website.." git -C "${WEB_DIR}" pull --ff-only "${base_dir}/update-website" \ --website-dir="${WEBSITE_DIR}" \ --mirror-dir="${MIRROR_DIR}" \ --update-iso git -C "${WEB_DIR}" commit 'download/index.html' -m 'download/index.html: new isos ('"${date}"')' git -C "${WEB_DIR}" push # when did we last updates the date +%s > "${ARCHISOS_DIR}/lastupdate" # set permissions correctly of all generated or changed fles echo "Fixing/setting permissions.." #chown "${MIRROR_USER}:${MIRROR_GROUP}" \ # "${ARCHISOS_DIR}/${ISO}" "${ARCHISOS_DIR}/${SIGNATURE}" "${ARCHISOS_DIR}/${TORRENT}" \ # "${ARCHISOS_DIR}/sha512sums" "${ARCHISOS_DIR}/md5sums" "${ARCHISOS_DIR}/lastupdate" echo "Finished." exit 0 #-- # TODO from here: archive='/mnt/archlinux32archive' destination='/mnt/archlinux32/archisos' mv $( printf '%s.torrent\n' ${isos} ) feed_dual.rss feed_i686.rss "${destination}/" # torrent generation # ATM no torrents # ATM no dual # --torrent-seed-dual "https://pool.mirror.archlinux32.org/archisos/archlinux32-${date}-dual.iso.torrent" \ # --torrent-seed-i686 "https://pool.mirror.archlinux32.org/archisos/archlinux32-${date}-i686.iso.torrent" \ # # this seems to be cleanup of old isos (which must be moved to the archive # should be in a separate script too like cleanup-isos, can then be called in build-all find "${destination}" \( -name 'archlinux32-*' -o -name 'archlinux-*' \) -not -name 'archlinux32-'"${date}"'-*' \ | while read -r to_delete; do if diff -q "${to_delete}" "${archive}/iso/${to_delete#${destination}/}" >/dev/null; then rm "${to_delete}" printf '%s\n' "${to_delete}" \ | sed ' s@^.*/@@ s/\./\\./g s@.*@/ \0$/d@ ' fi done \ >> "${tmp_dir}/delete-regex" sed -i -f "${tmp_dir}/delete-regex" "${destination}/sha512sums" sed -i -f "${tmp_dir}/delete-regex" "${destination}/md5sums" echo '... done.' ;;