blob: b5aaff78e6ab41609a04db0f530fbcbb910a4555 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#! /bin/bash
set -euo pipefail
function join_by { local IFS="$1"; shift; echo "$*"; }
usage () {
echo "Usage: $0 [-d date]"
}
fg_green="\033[32m"
fg_red="\033[31m"
fg_blue="\033[34m"
fg_reset="\033[0m"
fg_bold="\033[1m"
MIRRORLIST_FILE="https://raw.githubusercontent.com/archlinux32/packages/master/core/pacman-mirrorlist/mirrorlist"
function create_torrent_for_arch () {
declare -a available_mirrors
mirrorlist="$(curl "$MIRRORLIST_FILE" 2>/dev/null | grep Server | cut -d '=' -f 2 | sed -e 's/\s//g;s_$arch/$repo_archisos/_')"
if [ "$#" -eq 0 ] ; then
echo "No architecture specified, selecting 'i686'"
arch="i686"
elif [ "$#" -eq 1 ] ; then
echo "Selecting architecture '$1'"
arch="$1"
else
usage
echo "Too many arguments, exiting" >&2
exit 1
fi
iso_string="archlinux-$iso_date-$arch.iso"
for i in $mirrorlist ; do
echo -n -e "$fg_reset${fg_bold}Checking $fg_reset$fg_blue$i$fg_reset "
curl -g "$i" 2>/dev/null | grep -q "$iso_string" && (
echo -e "$fg_reset${fg_green}OK$fg_reset"
) || ( echo -e "$fg_reset${fg_red}Failed$fg_reset" ; false ) || continue
available_mirrors=(${available_mirrors[@]} "$i")
done
echo "${#available_mirrors[@]} mirrors available"
if [ ! -f "$iso_string" ] ; then
echo -e "$fg_reset${fg_bold}Downloading iso...$fg_reset"
curl -O "${available_mirrors[0]}$iso_string"
else
echo -e "$fg_reset${fg_bold}Reusing already downloaded iso...$fg_reset"
fi
echo -e "$fg_reset${fg_bold}Downloading verification files...$fg_reset"
curl -O "${available_mirrors[0]}$iso_string.sig"
curl -O "${available_mirrors[0]}sha512sums"
echo -n -e "$fg_reset${fg_bold}Checking PGP signature...$fg_reset "
gpg --verify "$iso_string.sig" "$iso_string" || exit 100
echo -e "$fg_reset${fg_green}OK"
echo -e "$fg_reset${fg_bold}Checking SHA512 sums...$fg_reset"
sha512sum --ignore-missing --check sha512sums || exit 101
echo -e "$fg_reset${fg_bold}Create torrent file...$fg_reset"
if [ -f "$iso_string.torrent" ] ; then
rm "$iso_string.torrent"
fi
mktorrent --announce=http://dopsi.ch:6969/announce --web-seed="$(join_by ',' "${available_mirrors[@]}")" "$iso_string"
echo -e "$fg_reset${fg_bold}Create magnet link...$fg_reset"
magnet_link="$(transmission-show --magnet "$iso_string.torrent")"
echo "$magnet_link"
echo -e "$fg_reset${fg_bold}Create RSS feed files...$fg_reset"
python magnet2feed.py "$magnet_link" "$iso_date"
}
### Actual program
declare -a architectures=("i686" "dual")
iso_date=''
while getopts "d:h" o; do
case "${o}" in
d)
iso_date=${OPTARG}
;;
h)
usage
exit
;;
*)
echo "$0: unknown option ${o}" >&2
usage
;;
esac
done
shift $((OPTIND-1))
[ -z "$iso_date" ] && read -r -p "Date of the ISO: " iso_date
for a in "${architectures[@]}" ; do
create_torrent_for_arch "$a"
done
# vim: set ts=4 sw=4:
|