Address comments
This commit is contained in:
parent
59f9bd7760
commit
3ea4136158
|
@ -14,6 +14,7 @@
|
||||||
# * zsync
|
# * zsync
|
||||||
# * python
|
# * python
|
||||||
# * python-jinja
|
# * python-jinja
|
||||||
|
# * python-orjson
|
||||||
|
|
||||||
set -eu
|
set -eu
|
||||||
shopt -s extglob
|
shopt -s extglob
|
||||||
|
@ -306,13 +307,15 @@ run_mkarchiso() {
|
||||||
}
|
}
|
||||||
|
|
||||||
generate_archlinux_ipxe() {
|
generate_archlinux_ipxe() {
|
||||||
# generate the archlinux.ipxe intermediate artifact that is downloaded by the ipxe image
|
# generate the archlinux.ipxe target script that is downloaded by the ipxe image
|
||||||
print_section_start "generate_archlinux_ipxe" "Generating archlinux.ipxe image"
|
print_section_start "generate_archlinux_ipxe" "Generating archlinux.ipxe image"
|
||||||
|
|
||||||
local _ipxe_dir="${orig_pwd}/ipxe"
|
local _ipxe_dir="${orig_pwd}/ipxe"
|
||||||
local _ipxe_output_dir="${output}/ipxe"
|
local _ipxe_output="${output}/ipxe/ipxe-${version}"
|
||||||
|
|
||||||
python "${_ipxe_dir}/generate_archlinux_ipxe.py" > "${_ipxe_output_dir}/archlinux.ipxe"
|
python "${_ipxe_dir}/generate_archlinux_ipxe.py" > "${_ipxe_output}/archlinux.ipxe"
|
||||||
|
|
||||||
|
create_checksums "${_ipxe_output}/archlinux.ipxe"
|
||||||
|
|
||||||
print_section_end "generate_archlinux_ipxe"
|
print_section_end "generate_archlinux_ipxe"
|
||||||
}
|
}
|
||||||
|
@ -322,7 +325,7 @@ sign_archlinux_ipxe() {
|
||||||
print_section_start "sign_archlinux_ipxe" "Signing archlinux.ipxe image"
|
print_section_start "sign_archlinux_ipxe" "Signing archlinux.ipxe image"
|
||||||
|
|
||||||
local _ipxe_dir="${orig_pwd}/ipxe"
|
local _ipxe_dir="${orig_pwd}/ipxe"
|
||||||
local _ipxe_output_dir="${output}/ipxe"
|
local _ipxe_output="${output}/ipxe/ipxe-${version}"
|
||||||
|
|
||||||
openssl cms \
|
openssl cms \
|
||||||
-sign \
|
-sign \
|
||||||
|
@ -332,7 +335,7 @@ sign_archlinux_ipxe() {
|
||||||
-signer "${codesigning_cert}" \
|
-signer "${codesigning_cert}" \
|
||||||
-inkey "${codesigning_key}" \
|
-inkey "${codesigning_key}" \
|
||||||
-outform DER \
|
-outform DER \
|
||||||
-out "${_ipxe_output_dir}/archlinux.ipxe.sig"
|
-out "${_ipxe_output}/archlinux.ipxe.sig"
|
||||||
|
|
||||||
print_section_end "sign_archlinux_ipxe"
|
print_section_end "sign_archlinux_ipxe"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
import os
|
import os
|
||||||
import urllib.request, json
|
import urllib.request
|
||||||
|
import orjson
|
||||||
import jinja2
|
import jinja2
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
|
@ -8,35 +9,34 @@ from operator import itemgetter
|
||||||
mirrors_url = "https://archlinux.org/mirrors/status/json"
|
mirrors_url = "https://archlinux.org/mirrors/status/json"
|
||||||
releases_url = "https://archlinux.org/releng/releases/json/"
|
releases_url = "https://archlinux.org/releng/releases/json/"
|
||||||
|
|
||||||
dir_path = os.path.dirname(os.path.realpath(__file__))
|
def retrieve_releases():
|
||||||
archlinux_ipxe_template = "archlinux.ipxe.jinja"
|
releases = []
|
||||||
|
with urllib.request.urlopen(releases_url) as url:
|
||||||
|
data = orjson.loads(url.read())
|
||||||
|
releases = sorted(data["releases"], key=itemgetter('release_date'), reverse=True)
|
||||||
|
releases = [ release["version"] for release in releases if release["available"]]
|
||||||
|
|
||||||
templateLoader = jinja2.FileSystemLoader(dir_path)
|
return releases
|
||||||
templateEnv = jinja2.Environment(loader=templateLoader)
|
|
||||||
template = templateEnv.get_template(archlinux_ipxe_template)
|
|
||||||
|
|
||||||
releases = []
|
|
||||||
with urllib.request.urlopen(releases_url) as url:
|
|
||||||
data = json.loads(url.read())
|
|
||||||
releases = sorted(data["releases"], key=itemgetter('release_date'), reverse=True)
|
|
||||||
releases = [ release["version"] for release in releases if release["available"]]
|
|
||||||
|
|
||||||
|
|
||||||
mirrors_by_country = []
|
def retrieve_mirrors():
|
||||||
with urllib.request.urlopen(mirrors_url) as url:
|
|
||||||
data = json.loads(url.read())
|
|
||||||
|
|
||||||
mirrorurls = []
|
mirrorurls = []
|
||||||
for mirror in data["urls"]:
|
with urllib.request.urlopen(mirrors_url) as url:
|
||||||
if mirror["protocol"] == "http" and mirror["active"] and mirror["isos"]:
|
data = orjson.loads(url.read())
|
||||||
keys = ["url", "name", "country_code", "country"]
|
|
||||||
mirrorObj = namedtuple("Mirror", keys)
|
|
||||||
mirror = mirrorObj(mirror["url"], mirror["details"].rsplit('/',3)[1], mirror["country_code"], mirror["country"])
|
|
||||||
mirrorurls.append(mirror)
|
|
||||||
|
|
||||||
mirrorurls = sorted(mirrorurls, key=lambda x: x.name)
|
for mirror in data["urls"]:
|
||||||
mirrorurls = sorted(mirrorurls, key=lambda x: x.country)
|
if mirror["protocol"] == "http" and mirror["active"] and mirror["isos"]:
|
||||||
|
keys = ["url", "name", "country_code", "country"]
|
||||||
|
mirrorObj = namedtuple("Mirror", keys)
|
||||||
|
mirror = mirrorObj(mirror["url"], mirror["details"].rsplit('/',3)[1], mirror["country_code"], mirror["country"])
|
||||||
|
mirrorurls.append(mirror)
|
||||||
|
|
||||||
|
mirrorurls = sorted(mirrorurls, key=lambda x: x.name)
|
||||||
|
mirrorurls = sorted(mirrorurls, key=lambda x: x.country)
|
||||||
|
|
||||||
|
return mirrorurls
|
||||||
|
|
||||||
|
def sort_mirrors_by_country(mirrorurls):
|
||||||
mirrors_by_country = {}
|
mirrors_by_country = {}
|
||||||
for mirror in mirrorurls:
|
for mirror in mirrorurls:
|
||||||
if mirror.country_code not in mirrors_by_country.keys():
|
if mirror.country_code not in mirrors_by_country.keys():
|
||||||
|
@ -45,5 +45,27 @@ with urllib.request.urlopen(mirrors_url) as url:
|
||||||
mirrors_by_country[mirror.country_code]["list"].append({"url": mirror.url, "name": mirror.name})
|
mirrors_by_country[mirror.country_code]["list"].append({"url": mirror.url, "name": mirror.name})
|
||||||
|
|
||||||
mirrors_by_country = mirrors_by_country.values()
|
mirrors_by_country = mirrors_by_country.values()
|
||||||
|
|
||||||
|
return mirrors_by_country
|
||||||
|
|
||||||
|
def render_from_jinja_template(mirrors_by_country, releases):
|
||||||
|
dir_path = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
archlinux_ipxe_template = "archlinux.ipxe.jinja"
|
||||||
|
|
||||||
|
templateLoader = jinja2.FileSystemLoader(dir_path)
|
||||||
|
templateEnv = jinja2.Environment(loader=templateLoader)
|
||||||
|
template = templateEnv.get_template(archlinux_ipxe_template)
|
||||||
|
|
||||||
|
print((template.render(mirrors_by_country = mirrors_by_country, releases = releases)))
|
||||||
|
|
||||||
print((template.render(mirrors_by_country = mirrors_by_country, releases = releases)))
|
|
||||||
|
def main():
|
||||||
|
releases = retrieve_releases()
|
||||||
|
mirrorurls = retrieve_mirrors()
|
||||||
|
mirrors_by_country = sort_mirrors_by_country(mirrorurls)
|
||||||
|
|
||||||
|
render_from_jinja_template(mirrors_by_country, releases)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
python generate_archlinux_ipxe.py
|
python generate_archlinux_ipxe.py > archlinux.ipxe
|
||||||
curl https://ipxe.archlinux.org/releng/netboot/archlinux.ipxe > archweb-archlinux.ipxe
|
curl https://ipxe.archlinux.org/releng/netboot/archlinux.ipxe > archweb-archlinux.ipxe
|
||||||
|
|
||||||
diff archweb-archlinux.ipxe archlinux.ipxe
|
diff archweb-archlinux.ipxe archlinux.ipxe
|
||||||
|
|
Loading…
Reference in a new issue