[Git][qa/jenkins.debian.net][master] rdn: add armel.reproduce.debian.net - with many thanks to codethink.co.uk
Holger Levsen (@holger)
gitlab at salsa.debian.org
Tue Apr 22 20:10:58 BST 2025
Holger Levsen pushed to branch master at Debian QA / jenkins.debian.net
Commits:
260230bd by Holger Levsen at 2025-04-22T21:10:39+02:00
rdn: add armel.reproduce.debian.net - with many thanks to codethink.co.uk
Signed-off-by: Holger Levsen <holger at layer-acht.org>
- - - - -
10 changed files:
- bin/rebuilderd_manual_scheduler.sh
- bin/rebuilderd_pkgsync.sh
- hosts/osuosl5-amd64/etc/cron.d/rebuilderd
- hosts/osuosl5-amd64/etc/dehydrated/domains.txt
- hosts/osuosl5-amd64/etc/nginx/nginx.conf
- + hosts/osuosl5-amd64/opt/etc/rebuilderd-armel.conf
- + hosts/osuosl5-amd64/opt/etc/rebuilderd-sync-armel.conf
- + hosts/osuosl5-amd64/var/www/html/armel/index.html
- hosts/osuosl5-amd64/var/www/html/index.html
- job-cfg/reproducible.yaml
Changes:
=====================================
bin/rebuilderd_manual_scheduler.sh
=====================================
@@ -15,6 +15,8 @@ case $1 in
;;
arm64) PORT=8486
;;
+ armel) PORT=8491
+ ;;
armhf) PORT=8487
;;
i386) PORT=8485
=====================================
bin/rebuilderd_pkgsync.sh
=====================================
@@ -19,6 +19,8 @@ case $ARCH in
;;
arm64) PORT=8486
;;
+ armel) PORT=8491
+ ;;
armhf) PORT=8487
;;
i386) PORT=8485
=====================================
hosts/osuosl5-amd64/etc/cron.d/rebuilderd
=====================================
@@ -1,3 +1,3 @@
MAILTO=root
-42 */3 * * * rebuilderd for arch in all amd64 i386 arm64 armhf riscv64 ppc64el; do mkdir -p /srv/rebuilderd/$arch/stats/ && /srv/jenkins/bin/rebuilderd_stats.py $arch /srv/rebuilderd/$arch/rebuilderd.db > /srv/rebuilderd/$arch/stats/index.html.tmp && mv /srv/rebuilderd/$arch/stats/index.html.tmp /srv/rebuilderd/$arch/stats/index.html ; done
-23 0,6,12,18 * * * rebuilderd for arch in all amd64 i386 arm64 armhf riscv64 ppc64el ; do /srv/jenkins/bin/rebuilderd_graph.sh $arch ; done
+42 */3 * * * rebuilderd for arch in all amd64 i386 arm64 armel armhf riscv64 ppc64el; do mkdir -p /srv/rebuilderd/$arch/stats/ && /srv/jenkins/bin/rebuilderd_stats.py $arch /srv/rebuilderd/$arch/rebuilderd.db > /srv/rebuilderd/$arch/stats/index.html.tmp && mv /srv/rebuilderd/$arch/stats/index.html.tmp /srv/rebuilderd/$arch/stats/index.html ; done
+23 0,6,12,18 * * * rebuilderd for arch in all amd64 i386 arm64 armel armhf riscv64 ppc64el ; do /srv/jenkins/bin/rebuilderd_graph.sh $arch ; done
=====================================
hosts/osuosl5-amd64/etc/dehydrated/domains.txt
=====================================
@@ -3,6 +3,7 @@ amd64.reproduce.debian.net
i386.reproduce.debian.net
arm64.reproduce.debian.net
armhf.reproduce.debian.net
+armel.reproduce.debian.net
riscv64.reproduce.debian.net
ppc64el.reproduce.debian.net
all.reproduce.debian.net
=====================================
hosts/osuosl5-amd64/etc/nginx/nginx.conf
=====================================
@@ -19,6 +19,7 @@ http {
server_name amd64.reproduce.debian.net;
server_name i386.reproduce.debian.net;
server_name arm64.reproduce.debian.net;
+ server_name armel.reproduce.debian.net;
server_name armhf.reproduce.debian.net;
server_name riscv64.reproduce.debian.net;
server_name ppc64el.reproduce.debian.net;
@@ -98,6 +99,20 @@ http {
alias /srv/rebuilderd/arm64/stats/ ;
disable_symlinks off;
}
+ # armel
+ location /armel/api/ {
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_pass http://127.0.0.1:8491/api/;
+ }
+ location = /armel/api/v0/build/report {
+ client_max_body_size 200M;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_pass http://127.0.0.1:8491/api/v0/build/report;
+ }
+ location /armel/stats/ {
+ alias /srv/rebuilderd/armel/stats/ ;
+ disable_symlinks off;
+ }
# armhf
location /armhf/api/ {
proxy_set_header X-Real-IP $remote_addr;
@@ -229,6 +244,31 @@ http {
}
}
+ server {
+ server_name armel.reproduce.debian.net;
+ ssi on;
+ root /var/www/html;
+ listen 443 ssl;
+ ssl_certificate /var/lib/dehydrated/certs/armel.reproduce.debian.net/fullchain.pem;
+ ssl_certificate_key /var/lib/dehydrated/certs/armel.reproduce.debian.net/privkey.pem;
+
+ ssl_session_cache shared:le_nginx_SSL:10m;
+ ssl_session_timeout 1440m;
+ ssl_session_tickets off;
+ ssl_protocols TLSv1.2 TLSv1.3;
+ ssl_prefer_server_ciphers off;
+ ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-C
+ HACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
+ location /.well-known/acme-challenge/ {
+ alias /var/lib/dehydrated/acme-challenges/;
+ disable_symlinks off;
+ autoindex off;
+ }
+ location / {
+ return 301 https://reproduce.debian.net/armel$request_uri;
+ }
+ }
+
server {
server_name armhf.reproduce.debian.net;
ssi on;
=====================================
hosts/osuosl5-amd64/opt/etc/rebuilderd-armel.conf
=====================================
@@ -0,0 +1,40 @@
+## Configuration for http daemon
+[http]
+## The address to bind to. This is 127.0.0.1:8484 by default.
+bind_addr = "127.0.0.1:8491"
+## If you use a reverse proxy, use this header instead of the actual connecting ip.
+## Make sure the reverse proxy has filters in place to prevent spoofing issues.
+#real_ip_header = "X-Real-IP"
+## Set a default endpoint for rebuildctl. This is especially useful for the sync timer.
+#endpoint = "http://127.0.0.1:8484"
+
+## A random cookie for administration is generated at startup and written to /var/lib/rebuilderd/auth-cookie
+## You can set this to a fixed value here. Use `pwgen -1s 32` to generate one.
+## rebuildctl is searching for this cookie in ~/.config/rebuilderd.conf, /etc/rebuilderd.conf and
+## /var/lib/rebuilderd/auth-cookie in that order.
+#[auth]
+#cookie = "INSECURE"
+
+## The auth cookie above is only used for the default endpoint.
+## You can use different endpoints with `rebuildctl -H https://rebuilder.example.com status`,
+## In that case you need to configure a section below if you want to attach a cookie.
+#[endpoints."https://rebuilder.example.com"]
+#cookie = "INSECURE"
+
+## IMPORTANT: in production, make sure either `authorized_workers` or `signup_secret` is configured.
+[worker]
+## If we have a fixed set of workers we can allow-list the keys here.
+#authorized_workers = ["key1", "key2"]
+## If we want to spawn new workers dynamically we can configure a sign up secret below.
+## Use `pwgen -1s 32` to generate one.
+signup_secret = "INSECURE"
+
+#[schedule]
+## Configure the delay to automatically retry failed rebuilds in hours. The
+## default is 24h, this base is multiplied with the number of rebuilds, so the
+## first retry would happen after 24h, the second retry would happen 48h after the
+## first retry and the third retry would happen 72h after the second retry. There
+## is no upper limit of retries, if you can't afford frequent retries it's
+## recommended to set this to a high value like 168 (1 week) or higher.
+## Successful rebuilds are not retried.
+#retry_delay_base = 24
=====================================
hosts/osuosl5-amd64/opt/etc/rebuilderd-sync-armel.conf
=====================================
@@ -0,0 +1,9 @@
+[profile."debian-main"]
+distro = "debian"
+suite = "main"
+architectures = ["armel"]
+#releases = ["buster", "sid"]
+releases = ["trixie"]
+source = "http://deb.debian.org/debian"
+#excludes = ["tensorflow*"]
+#pkgs = ["anarchism"]
=====================================
hosts/osuosl5-amd64/var/www/html/armel/index.html
=====================================
@@ -0,0 +1,220 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>
+ reproduce.debian.net/armel - trixie (arch:armel)
+ </title>
+ <style>
+ body {
+ font-family: sans-serif;
+ font-size: 18pt;
+ }
+ h1 {
+ font-size: 24pt;
+ }
+ h3 {
+ font-size: 18pt;
+ }
+
+ #search-results {
+ margin: 18pt 0;
+ }
+
+ pre {
+ margin: 0;
+ }
+
+ img {
+ vertical-align: middle;
+ max-width: 1920;
+ width: 50%;
+ }
+
+ #search-results pre {
+ margin: 12pt 0;
+ }
+
+ .status {
+ font-weight: bold;
+ }
+
+ .good {
+ color: green;
+ }
+
+ .bad {
+ color: red;
+ }
+
+ .unknown {
+ color: #957fff;
+ }
+
+ footer {
+ font-size: 12pt;
+ }
+ </style>
+ <script>
+ document.addEventListener('DOMContentLoaded', function() {
+ // package search
+ function spanWith(text) {
+ let s = document.createElement('span');
+ s.textContent = text;
+ return s;
+ }
+
+ function linkTo(href, text) {
+ let a = document.createElement('a');
+ a.href = href;
+ a.textContent = text;
+ return a;
+ }
+
+ function searchPkgs(query) {
+ let div = document.getElementById('search-results');
+ let url = '/armel/api/v0/pkgs/list?' + new URLSearchParams({
+ name: query,
+ distro: 'debian',
+ });
+ fetch(url)
+ .then(response => response.json())
+ .then(data => {
+ // clear children
+ div.innerHTML = '';
+
+ data.map(pkg => {
+ let build_id = pkg.build_id;
+ let r = document.createElement('pre');
+
+ r.appendChild(spanWith('['));
+ let status = pkg['status'];
+ let statusSpan = spanWith(status);
+ statusSpan.className += ' status';
+ if (status == 'GOOD') {
+ statusSpan.className += ' good';
+ } else if (status == 'BAD') {
+ statusSpan.className += ' bad';
+ } else {
+ statusSpan.className += ' unknown';
+ }
+ r.appendChild(statusSpan);
+ r.appendChild(spanWith(`] ${pkg['name']} ${pkg['version']}\t\t`));
+
+ if (build_id) {
+ r.appendChild(spanWith(' ['));
+ r.appendChild(linkTo(`/armel/api/v0/builds/${build_id}/log`, 'log'));
+ r.appendChild(spanWith(']'));
+ }
+
+ if (pkg.has_attestation) {
+ r.appendChild(spanWith(' ['));
+ r.appendChild(linkTo(`/armel/api/v0/builds/${build_id}/attestation`, 'attestation'));
+ r.appendChild(spanWith(']'));
+ }
+
+ if (pkg.has_diffoscope) {
+ r.appendChild(spanWith(' ['));
+ r.appendChild(linkTo(`/armel/api/v0/builds/${build_id}/diffoscope`, 'diffoscope'));
+ r.appendChild(spanWith(']'));
+ }
+
+ div.appendChild(r);
+ });
+ });
+ }
+
+ if (location.hash) {
+ searchPkgs(location.hash.substr(1));
+ }
+
+ document.getElementById('search').addEventListener('submit', function(e) {
+ e.preventDefault();
+ let query = document.getElementById('search-query').value;
+ location.href = `#${query}`;
+ searchPkgs(query);
+ });
+
+ // display stats
+ function updateStats(data) {
+ let div = document.getElementById('stats');
+ // clear children
+ div.innerHTML = '';
+ // add rows
+ data.map(row => {
+ let r = document.createElement('pre');
+ let key = row[0] + ': ';
+ r.textContent = key.padEnd(25) + row[1];
+ div.appendChild(r);
+ });
+ }
+
+ function fetchStats() {
+ fetch('/armel/api/v0/dashboard')
+ .then(response => response.json())
+ .then(data => {
+ let div = document.getElementById('stats');
+ let main = data['suites']['main'];
+
+ let good = main['good'];
+ let bad = main['bad'];
+ let unknown = main['unknown'];
+
+ let queue = data['queue_length'];
+ let workers = data['active_builds'].length;
+
+ updateStats([
+ ['reproduced', (100 / (good + bad) * good).toFixed(2) + '%'],
+ ['good', good],
+ ['bad', bad],
+ ['unknown (binary pkgs)', unknown],
+ ['build progress', (100 / (good + unknown + bad) * (good + bad)).toFixed(2) + '%'],
+ ['queue length (src pkgs)', queue],
+ ['active workers', workers],
+ ]);
+ });
+ }
+
+ setInterval(fetchStats, 60 * 1000);
+ fetchStats();
+ });
+ </script>
+ </head>
+ <body>
+ <h1>
+ <a href="https://reproduce.debian.net">reproduce</a>.debian.net/armel
+ </h1>
+ <a href="stats/rb.png"><img src="stats/rb.png" align="right"></a>
+ <h3>
+ trixie (arch:armel)
+ </h3>
+
+ <div id="stats">Loading stats...</div>
+
+ <div>
+ <h3>Binary package search</h3>
+ <form id="search">
+ <input type="text" id="search-query" placeholder="2ping">
+ <input type="submit" value="Search">
+ </form>
+ </div>
+ <div id="search-results">
+ </div>
+
+ <footer>
+ <br/>
+ <a href="stats/">Statistics about BAD packages</a> on arm64.
+ <br/>
+ <hr/>
+ pew pew, <a href="https://github.com/kpcyrd/rebuilderd">rebuilderd</a> using <a href="https://tracker.debian.org/pkg/devscripts">debrebuild</a> to reproduce what Debian distributes via <code><a href="https://ftp.debian.org/debian/dists/">ftp.debian.org</a></code>. ♥️
+ <br/>
+ <small>
+ <a href="https://reproduce.debian.net/">This setup</a> is in it's infancy, even though by now everything is in trixie. Still, please don't consider any URLs as stable here, and more to the point, especially don't take any numbers here seriously, unless...!?!
+ <br/>Oh, and in case you are wondering why we are doing this, then hopefully the <a href="https://reproducible-builds.org">Reproducible Builds website</a> will explain why this is useful.
+ <!--#config timefmt="%Y-%m-%d" --><br/>Static content last modified: <!--#echo var="date_gmt" -->
+ </br>
+ contact: IRC preferred: #debian-reproducible on OFTC or mail to holger at d.o
+ </small>
+ </footer>
+ </body>
+</html>
=====================================
hosts/osuosl5-amd64/var/www/html/index.html
=====================================
@@ -28,11 +28,11 @@
display: inline;
}
- #stats-all, #stats-amd64, #stats-arm64, #stats-armhf, #stats-i386, #stats-riscv64, #stats-ppc64el{
+ #stats-all, #stats-amd64, #stats-arm64, #stats-armel, #stats-armhf, #stats-i386, #stats-riscv64, #stats-ppc64el{
text-align: left;
}
- #worker, #progress-all, #progress-amd64, #progress-arm64, #progress-armhf, #progress-i386, #progress-riscv64, #progress-ppc64el{
+ #worker, #progress-all, #progress-amd64, #progress-arm64, #progress-armel, #progress-armhf, #progress-i386, #progress-riscv64, #progress-ppc64el{
font-size: 10pt;
}
@@ -92,6 +92,7 @@
fetchArchStats("all");
fetchArchStats("amd64");
fetchArchStats("arm64");
+ fetchArchStats("armel");
fetchArchStats("armhf");
fetchArchStats("i386");
fetchArchStats("riscv64");
@@ -187,6 +188,21 @@
<div id="progress-arm64">Loading progress...</div>
</td><td id="worker">
codethink02
+ </td></tr><tr><td>
+ <a href="https://reproduce.debian.net/armel/">
+ trixie/armel
+ </a>
+ </td><td>
+ <div id="stats-armel">Loading stats...</div>
+ </td><td>
+ <a href="https://reproduce.debian.net/armel/">
+ <img src="https://reproduce.debian.net/armel/stats/rb.png">
+ </a>
+ <a href="https://reproduce.debian.net/armel/stats/rb.png">📈</a>
+ </td><td>
+ <div id="progress-armel">Loading progress...</div>
+ </td><td id="worker">
+ codethink05
</td></tr><tr><td>
<a href="https://reproduce.debian.net/armhf/">
trixie/armhf
@@ -250,7 +266,7 @@
</td></tr>
</table>
<br/>
- Hopefully coming soon: armel, s390x, mips64el and <a href="https://github.com/kpcyrd/rebuilderd/issues/163">unstable/*</a>!
+ Hopefully coming soon: s390x, mips64el and <a href="https://github.com/kpcyrd/rebuilderd/issues/163">unstable/*</a>!
<br/>
<small>
(Though we currently have no idea how to get access to mips64el systems...)
=====================================
job-cfg/reproducible.yaml
=====================================
@@ -348,6 +348,7 @@
- 'codethink02': { my_arch: 'arm64' }
- 'codethink03': { my_arch: 'arm64' }
- 'codethink04': { my_arch: 'arm64' }
+ - 'codethink05': { my_arch: 'arm64' }
- 'riscv64-01': { my_arch: 'riscv64' }
- 'riscv64-02': { my_arch: 'riscv64' }
- 'riscv64-06': { my_arch: 'riscv64' }
@@ -404,6 +405,7 @@
- 'codethink02': { my_arch: 'arm64' }
- 'codethink03': { my_arch: 'arm64' }
- 'codethink04': { my_arch: 'arm64' }
+ - 'codethink05': { my_arch: 'arm64' }
- 'riscv64-01': { my_arch: 'riscv64' }
- 'riscv64-02': { my_arch: 'riscv64' }
- 'riscv64-06': { my_arch: 'riscv64' }
View it on GitLab: https://salsa.debian.org/qa/jenkins.debian.net/-/commit/260230bd683b375e3bddcf835c5e4cda7f5b35fe
--
View it on GitLab: https://salsa.debian.org/qa/jenkins.debian.net/-/commit/260230bd683b375e3bddcf835c5e4cda7f5b35fe
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/qa-jenkins-scm/attachments/20250422/92625e31/attachment-0001.htm>
More information about the Qa-jenkins-scm
mailing list