[Git][qa/jenkins.debian.net][master] 2 commits: r.d.n.: no /srv/workspace on ppc64el-rdn nodes

Holger Levsen (@holger) gitlab at salsa.debian.org
Fri Apr 11 19:25:14 BST 2025



Holger Levsen pushed to branch master at Debian QA / jenkins.debian.net


Commits:
89165627 by Holger Levsen at 2025-04-11T18:44:25+02:00
r.d.n.: no /srv/workspace on ppc64el-rdn nodes

Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -
699789a5 by Holger Levsen at 2025-04-11T19:30:48+02:00
r.d.n.: add ppc64el.reproduce.debian.net

Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -


14 changed files:

- bin/debrebuild_cache_limiter.sh
- bin/djm
- bin/rebuilderd_manual_scheduler.sh
- bin/rebuilderd_pkgsync.sh
- bin/reproducible_maintenance.sh
- bin/reproducible_system_health.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-sync-ppc64el.conf
- hosts/osuosl5-amd64/var/www/html/index.html
- + hosts/osuosl5-amd64/var/www/html/ppc64el/index.html
- hosts/osuosl5-amd64/var/www/html/rebuilderd-setup.html
- update_jdn.sh


Changes:

=====================================
bin/debrebuild_cache_limiter.sh
=====================================
@@ -11,12 +11,13 @@ if [ ! -d $CACHE ] ; then
 fi
 
 case $HOSTNAME in
-	ionos17*)	LIMIT=50  ;;
-	codethink*)	LIMIT=20  ;;
-	osuosl*)	LIMIT=333 ;;
-	infom07*)	LIMIT=200 ;; # FIXME: drop extra partition again?
-	infom08*)	LIMIT=100 ;;
-	riscv64*)	LIMIT=180 ;;
+	ionos17*)		LIMIT=50  ;;
+	codethink*)		LIMIT=20  ;;
+	osuosl*-amd64)		LIMIT=333 ;;
+	osuosl*-ppc64el)	LIMIT=100 ;;
+	infom07*)		LIMIT=200 ;; # FIXME: drop extra partition again?
+	infom08*)		LIMIT=100 ;;
+	riscv64*)		LIMIT=180 ;;
 	*)		echo "Limit for $HOSTNAME not defined."
 			exit 1 ;;
 esac


=====================================
bin/djm
=====================================
@@ -446,6 +446,7 @@ get_arch_color() {
 		*arm64*)		BG=orange ;;
 		*armhf*)		BG=lightyellow ;;
 		*riscv64*)		BG=purple ;;
+		*ppc64el*)		BG=brown ;;
 		*jenkins.debian.*)	BG=yellow ;;
 		rb-mail*)		BG=pink ;;
 		*)			BG=white ;;


=====================================
bin/rebuilderd_manual_scheduler.sh
=====================================
@@ -21,6 +21,8 @@ case $1 in
 			;;
 	riscv64)	PORT=8488
 			;;
+	ppc64el)	PORT=8490
+			;;
 	*)		echo "need a valid architecture."
 			exit 1
 			;;


=====================================
bin/rebuilderd_pkgsync.sh
=====================================
@@ -25,6 +25,8 @@ case $ARCH in
 			;;
 	riscv64)	PORT=8488
 			;;
+	ppc64el)	PORT=8490
+			;;
 	*)		echo "need a valid architecture."
 			exit 1
 			;;


=====================================
bin/reproducible_maintenance.sh
=====================================
@@ -502,6 +502,7 @@ if [ "$HOSTNAME" = "$MAINNODE" ] ; then
 			arm64)		NODE="codethink${NODE_ALIAS#codethink}-arm64.debian.net" ;;
 			armhf)		NODE="${NODE_ALIAS}-armhf-rb.debian.net" ;;
 			riscv64)	NODE="${NODE_ALIAS}.debian.net" ;;
+			ppc64el)	NODE="${NODE_ALIAS}.debian.net" ;;
 		esac
 		case "$NODE" in
 			ionos9-amd64.debian.net|ionos10-amd64.debian.net)


=====================================
bin/reproducible_system_health.sh
=====================================
@@ -1,7 +1,7 @@
 #!/bin/bash
 # vim: set noexpandtab:
 
-# Copyright 2021-2024 Holger Levsen <holger at layer-acht.org>
+# Copyright 2021-2025 Holger Levsen <holger at layer-acht.org>
 # released under the GPLv2
 
 ###
@@ -101,6 +101,7 @@ for JOB_NAME in $(ls -1d reproducible_* | sort ) ; do
 		case $NODE_ARCH in
 			armhf)		NODE="$NODE_ALIAS-armhf-rb.debian.net" ;;
 			riscv64)	NODE="${NODE_ALIAS}.debian.net" ;;
+			ppc64el)	NODE="${NODE_ALIAS}.debian.net" ;;
 			*)		NODE="${NODE_ALIAS}-${NODE_ARCH}.debian.net" ;;
 		esac
 		# ignore jobs on known bad nodes:


=====================================
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 ; 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 ; do /srv/jenkins/bin/rebuilderd_graph.sh $arch ; done
+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


=====================================
hosts/osuosl5-amd64/etc/dehydrated/domains.txt
=====================================
@@ -4,4 +4,5 @@ i386.reproduce.debian.net
 arm64.reproduce.debian.net
 armhf.reproduce.debian.net
 riscv64.reproduce.debian.net
+ppc64el.reproduce.debian.net
 all.reproduce.debian.net


=====================================
hosts/osuosl5-amd64/etc/nginx/nginx.conf
=====================================
@@ -21,6 +21,7 @@ http {
         server_name     arm64.reproduce.debian.net;
         server_name     armhf.reproduce.debian.net;
         server_name     riscv64.reproduce.debian.net;
+        server_name     ppc64el.reproduce.debian.net;
         location /.well-known/acme-challenge/ {
             alias /var/lib/dehydrated/acme-challenges/;
             disable_symlinks off;
@@ -139,6 +140,20 @@ http {
             alias /srv/rebuilderd/riscv64/stats/ ;
             disable_symlinks off;
         }
+        # ppc64el
+        location /ppc64el/api/ {
+            proxy_set_header    X-Real-IP          $remote_addr;
+            proxy_pass http://127.0.0.1:8490/api/;
+        }
+        location = /ppc64el/api/v0/build/report {
+            client_max_body_size 200M;
+            proxy_set_header    X-Real-IP          $remote_addr;
+            proxy_pass http://127.0.0.1:8490/api/v0/build/report;
+        }
+        location /ppc64el/stats/ {
+            alias /srv/rebuilderd/ppc64el/stats/ ;
+            disable_symlinks off;
+        }
     }
 
     server {
@@ -287,5 +302,28 @@ http {
         }
     }
 
+    server {
+        server_name     ppc64el.reproduce.debian.net;
+        ssi on;
+        root /var/www/html;
+        listen 443 ssl;
+        ssl_certificate /var/lib/dehydrated/certs/ppc64el.reproduce.debian.net/fullchain.pem;
+        ssl_certificate_key /var/lib/dehydrated/certs/ppc64el.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/ppc64el$request_uri;
+        }
+    }
 
 }


=====================================
hosts/osuosl5-amd64/opt/etc/rebuilderd-sync-ppc64el.conf
=====================================
@@ -0,0 +1,9 @@
+[profile."debian-main"]
+distro = "debian"
+suite = "main"
+architectures = ["ppc64el"]
+#releases = ["buster", "sid"]
+releases = ["trixie"]
+source = "http://deb.debian.org/debian"
+#excludes = ["tensorflow*"]
+#pkgs = ["anarchism"]


=====================================
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-all, #stats-amd64, #stats-arm64, #stats-armhf, #stats-i386, #stats-riscv64, #stats-ppc64el{
             text-align: left;
 	}
 
-        #worker, #progress-all, #progress-amd64, #progress-arm64, #progress-armhf, #progress-i386, #progress-riscv64{
+        #worker, #progress-all, #progress-amd64, #progress-arm64, #progress-armhf, #progress-i386, #progress-riscv64, #progress-ppc64el{
             font-size: 10pt;
 	}
 
@@ -95,6 +95,7 @@
                 fetchArchStats("armhf");
                 fetchArchStats("i386");
                 fetchArchStats("riscv64");
+                fetchArchStats("ppc64el");
             }
 
             function fetchArchStats(arch) {
@@ -168,7 +169,7 @@
 	</td><td>
 		<div id="progress-amd64">Loading progress...</div>
 	</td><td id="worker">
-		osuosl4
+		osuosl4-amd64
 	</td></tr><tr><td>
 		<a href="https://reproduce.debian.net/arm64/">
 			trixie/arm64
@@ -225,6 +226,20 @@
 		<div id="progress-riscv64">Loading progress...</div>
 	</td><td id="worker">
 		riscv64-0(1|2|6|7)
+	</td></tr><tr><td>
+		<a href="https://reproduce.debian.net/ppc64el/">
+			trixie/ppc64el
+		</a>
+	</td><td>
+		<div id="stats-ppc64el">Loading stats...</div>
+	</td><td>
+		<a href="https://reproduce.debian.net/ppc64el/">
+			<img src="https://reproduce.debian.net/ppc64el/stats/rb.png">
+		</a>
+	</td><td>
+		<div id="progress-ppc64el">Loading progress...</div>
+	</td><td id="worker">
+		osuosl(6|7)-ppc64el
 	</td></tr>
 	</table>
 	<br/>


=====================================
hosts/osuosl5-amd64/var/www/html/ppc64el/index.html
=====================================
@@ -0,0 +1,220 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <title>
+		reproduce.debian.net/ppc64el - trixie (arch:ppc64el)
+        </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 = '/ppc64el/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(`/ppc64el/api/v0/builds/${build_id}/log`, 'log'));
+                                r.appendChild(spanWith(']'));
+                            }
+
+                            if (pkg.has_attestation) {
+                                r.appendChild(spanWith(' ['));
+                                r.appendChild(linkTo(`/ppc64el/api/v0/builds/${build_id}/attestation`, 'attestation'));
+                                r.appendChild(spanWith(']'));
+                            }
+
+                            if (pkg.has_diffoscope) {
+                                r.appendChild(spanWith(' ['));
+                                r.appendChild(linkTo(`/ppc64el/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('/ppc64el/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/ppc64el
+        </h1>
+        <a href="stats/rb.png"><img src="stats/rb.png" align="right"></a>
+        <h3>
+		trixie (arch:ppc64el)
+        </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 ppc64el.
+	    <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, though by now everything except rebuilderd itself 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/rebuilderd-setup.html
=====================================
@@ -155,6 +155,8 @@ while true ; do env REBUILDERD_COOKIE_PATH=~/.local/share/rebuilderd-auth-cookie
 cd ; mkdir -p riscv64 ; cd riscv64 ; /opt/usr/bin/rebuilderd -c /opt/etc/rebuilderd-riscv64.conf
 while true ; do env REBUILDERD_COOKIE_PATH=~/.local/share/rebuilderd-auth-cookie rebuildctl -H http://127.0.0.1:8488 pkgs sync-profile --sync-config /opt/etc/rebuilderd-sync-riscv64.conf debian-main --print-json | jq '.[] | select(.architecture != "all")' | jq -s | env REBUILDERD_COOKIE_PATH=~/.local/share/rebuilderd-auth-cookie rebuildctl -H http://127.0.0.1:8488 pkgs sync-stdin debian main ; ST=$(shuf -i 150-210 -n 1) ; echo sleeping ${ST}m now ; sleep ${ST}m ; done
 
+cd ; mkdir -p ppc64el ; cd ppc64el ; /opt/usr/bin/rebuilderd -c /opt/etc/rebuilderd-ppc64el.conf
+while true ; do env REBUILDERD_COOKIE_PATH=~/.local/share/rebuilderd-auth-cookie rebuildctl -H http://127.0.0.1:8490 pkgs sync-profile --sync-config /opt/etc/rebuilderd-sync-ppc64el.conf debian-main --print-json | jq '.[] | select(.architecture != "all")' | jq -s | env REBUILDERD_COOKIE_PATH=~/.local/share/rebuilderd-auth-cookie rebuildctl -H http://127.0.0.1:8490 pkgs sync-stdin debian main ; ST=$(shuf -i 150-210 -n 1) ; echo sleeping ${ST}m now ; sleep ${ST}m ; done
 
 # with rebuilderd-worker from trixie:
 rebuilderd-worker -c /opt/etc/rebuilderd-worker.conf connect


=====================================
update_jdn.sh
=====================================
@@ -227,13 +227,13 @@ case $HOSTNAME in
 			exit 1
 		fi
 		;;
-	osuosl*)
+	osuosl*-amd64)
 		if ! grep -q '/srv/workspace' /etc/fstab; then
 			echo "Warning: you need to manually create a /srv/workspace partition on OSUOSL nodes, exiting."
 			exit 1
 		fi
 		;;
-	infom07*|infom08*)
+	infom07*|infom08*|*ppc64el)
 		# runs rebuilderd and we want /tmp on disk
 		:
 		;;



View it on GitLab: https://salsa.debian.org/qa/jenkins.debian.net/-/compare/fdbd776ee6d8d60dcad723d7d16cba35cf3f04a2...699789a54142da588172713f733452d3fea37b05

-- 
View it on GitLab: https://salsa.debian.org/qa/jenkins.debian.net/-/compare/fdbd776ee6d8d60dcad723d7d16cba35cf3f04a2...699789a54142da588172713f733452d3fea37b05
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/20250411/59ed5e10/attachment-0001.htm>


More information about the Qa-jenkins-scm mailing list