7 Commits

Author SHA1 Message Date
49d616ef32 Merge branch 'upstream'
All checks were successful
Docker Image CI / build (push) Successful in 2m22s
Github-Actions / build (push) Successful in 53s
2025-04-12 14:38:43 -05:00
12f795bcf8 container names 2025-04-12 14:37:19 -05:00
Jelle van der Waa
653b482ec5 Include request scheme into opensearch data 2025-03-29 19:08:16 +01:00
Jelle van der Waa
ecc4bdf0a7 bump django to 5.0.13 2025-03-29 18:55:35 +01:00
luis.carilla
a45b88da4b fix linting issue 2025-03-29 15:13:22 +01:00
luis.carilla
e460ba4727 set a timeout for the rsync subprocess when checking mirror availability 2025-03-29 15:13:22 +01:00
Jelle van der Waa
910e428baa public: update to latest seqouia version
Closes: #553
2025-02-20 17:53:50 +01:00
9 changed files with 37 additions and 23 deletions

View File

@@ -59,7 +59,7 @@ class Command(BaseCommand):
arches = Arch.objects.filter(agnostic=False)
repos = Repo.objects.all()
arch_path_map = {arch: None for arch in arches}
arch_path_map = dict.fromkeys(arches)
all_paths = set()
total_paths = 0
for arch in arches:

View File

@@ -72,7 +72,7 @@ class Command(BaseCommand):
arches = Arch.objects.filter(agnostic=False)
repos = Repo.objects.all()
arch_path_map = {arch: None for arch in arches}
arch_path_map = dict.fromkeys(arches)
all_paths = set()
total_paths = 0
for arch in arches:

View File

@@ -1,20 +1,20 @@
version: '2'
# Run the following once:
# docker compose run --rm packages_web python manage.py migrate
# docker compose run --rm packages_web python manage.py loaddata main/fixtures/arches.json
# docker compose run --rm packages_web python manage.py loaddata main/fixtures/repos.json
# docker compose run --rm packages_web python manage.py createsuperuser --username=admin --email=admin@artixweb.local
# docker compose run --rm archweb_web python manage.py migrate
# docker compose run --rm archweb_web python manage.py loaddata main/fixtures/arches.json
# docker compose run --rm archweb_web python manage.py loaddata main/fixtures/repos.json
# docker compose run --rm archweb_web python manage.py createsuperuser --username=admin --email=admin@artixweb.local
## go to /admin and create a user according to overlay/devel/fixtures/user_profiles.json
## go to /admin/auth/user/2/change/ and add a name
# docker compose run --rm packages_web python manage.py generate_keyring pgp.surfnet.nl ./config/keyring
# docker compose run --rm packages_web python manage.py pgp_import ./config/keyring
# docker compose run --rm archweb_web python manage.py generate_keyring pgp.surfnet.nl ./config/keyring
# docker compose run --rm archweb_web python manage.py pgp_import ./config/keyring
## go to /admin/devel/developerkey/ and set the owner (and parent) for the ownerless key
## go to /admin/sites/site/1/change/ and set the domain
services:
packages_web:
archweb_web:
container_name: artixweb-packages
build:
context: ./
@@ -25,7 +25,7 @@ services:
volumes:
- ./config:/usr/src/web/config
packages_sync:
archweb_sync:
container_name: artixweb-sync
build:
context: ./
@@ -35,7 +35,7 @@ services:
- ./config:/usr/src/web/config
command: ./downloadpackages.sh
packages_nginx:
archweb_nginx:
container_name: artixweb-nginx
image: linuxserver/nginx:latest
restart: "no"

View File

@@ -184,12 +184,26 @@ def check_rsync_url(mirror_url, location, timeout):
with open(os.devnull, 'w') as devnull:
if logger.isEnabledFor(logging.DEBUG):
logger.debug("rsync cmd: %s", ' '.join(rsync_cmd))
start = time.time()
proc = subprocess.Popen(rsync_cmd, stdout=devnull, stderr=subprocess.PIPE)
_, errdata = proc.communicate()
end = time.time()
log.duration = end - start
if proc.returncode != 0:
timeout_expired = False
# add an arbitrary 5-second buffer to ensure the process completes and to catch actual rsync timeouts.
rsync_subprocess_timeout = timeout + 5
try:
proc = subprocess.Popen(rsync_cmd, stdout=devnull, stderr=subprocess.PIPE)
_, errdata = proc.communicate(timeout=rsync_subprocess_timeout)
end = time.time()
log.duration = end - start
except subprocess.TimeoutExpired:
timeout_expired = True
proc.kill()
logger.debug("rsync command timeout error: %s, %s", url, errdata)
log.is_success = False
log.duration = None
log.error = f"rsync subprocess killed after {rsync_subprocess_timeout} seconds"
if proc.returncode != 0 and not timeout_expired:
logger.debug("error: %s, %s", url, errdata)
log.is_success = False
log.error = errdata.strip().decode('utf-8')
@@ -197,7 +211,7 @@ def check_rsync_url(mirror_url, location, timeout):
# don't record a duration as it is misleading
if proc.returncode in (1, 30, 35):
log.duration = None
else:
elif not timeout_expired:
logger.debug("success: %s, %.2f", url, log.duration)
if os.path.exists(lastsync_path):
with open(lastsync_path, 'r') as lastsync:

View File

@@ -67,7 +67,7 @@ def test_sort(client, package):
def test_packages(client, package):
response = client.get('/opensearch/packages/')
assert response.status_code == 200
assert 'template="example.com/opensearch/packages/"' in response.content.decode()
assert 'template="http://example.com/opensearch/packages/"' in response.content.decode()
def test_packages_suggest(client, package):

View File

@@ -25,7 +25,7 @@ def opensearch(request):
current_site = Site.objects.get_current()
return render(request, 'packages/opensearch.xml',
{'domain': current_site.domain},
{'domain': f'{request.scheme}://{current_site.domain}'},
content_type='application/opensearchdescription+xml')

View File

@@ -31,7 +31,7 @@ def index(request):
'news_updates': News.objects.order_by('-postdate', '-id')[:15],
'pkg_updates': updates,
'staff_groups': StaffGroup.objects.all(),
'domain': current_site.domain,
'domain': f'{request.scheme}://{current_site.domain}',
}
return render(request, 'public/index.html', context)

View File

@@ -1,5 +1,5 @@
-e git+https://github.com/fredj/cssmin.git@master#egg=cssmin
Django==5.0.11
Django==5.0.13
IPy==1.1
Markdown==3.3.7
bencode.py==4.0.0

View File

@@ -132,10 +132,10 @@
<pre><code>$ b2sum -c b2sums.txt</code></pre>
To verify the PGP signature using Sequoia, first download the release signing key from WKD:
<pre><code>$ sq network wkd fetch {{ release.wkd_email }} -o release-key.pgp</code></pre>
<pre><code>$ sq network wkd search {{ release.wkd_email }} --output release-key.pgp</code></pre>
With this signing key, verify the signature:
<pre><code>$ sq verify --signer-file release-key.pgp --detached archlinux-{{ release.version }}-x86_64.iso.sig archlinux-{{ release.version }}-x86_64.iso</code></pre>
<pre><code>$ sq verify --signer-file release-key.pgp --signature-file archlinux-{{ release.version }}-x86_64.iso.sig archlinux-{{ release.version }}-x86_64.iso</code></pre>
Alternatively, using GnuPG, download the signing key from WKD:
<pre><code>$ gpg --auto-key-locate clear,wkd -v --locate-external-key {{ release.wkd_email }}</code></pre>