Commit e2ab2a60 authored by Holger Levsen's avatar Holger Levsen
Browse files

amd64.reproduce.debian.net: turn osuosl4 into a rebuilderd-worker

parent 61f2f9a7
Loading
Loading
Loading
Loading
+0 −71
Original line number Diff line number Diff line
user                   www-data;
worker_processes       auto;
error_log              /var/log/nginx/error.log;
pid                    /run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include             mime.types;
    sendfile            on;
    server_tokens       off;

    server {
        server_name     osuosl4-amd64.debian.net;
        index index.html;
        root /var/www/html;

        listen 443 ssl;
        ssl_certificate /var/lib/dehydrated/certs/osuosl4-amd64.debian.net/fullchain.pem;
        ssl_certificate_key /var/lib/dehydrated/certs/osuosl4-amd64.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 / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ =404;
        }


        location /api/ {
            proxy_pass http://127.0.0.1:8484;
        }

    }


    server {
        listen          80;
        server_name     osuosl4-amd64.debian.net;

        location /.well-known/acme-challenge/ {
            alias /var/lib/dehydrated/acme-challenges/;
            disable_symlinks off;
            autoindex off;
        }

        location / {
            return 301 https://$host$request_uri;
        }

        return 404;
    }


}
+0 −53
Original line number Diff line number Diff line
## rebuild all of archlinux core
[profile."archlinux-core"]
distro = "archlinux"
suite = "core"
architectures = ["x86_64"]
source = "https://ftp.halifax.rwth-aachen.de/archlinux/$repo/os/$arch"

## rebuild community packages of specific maintainers, or allow-list packages by name.
## If no filter is set, all packages are imported, if both filters are set the package only
## has to match one of them to be included.
#[profile."archlinux-community"]
#distro = "archlinux"
#suite = "community"
#architectures = ["x86_64"]
#source = "https://ftp.halifax.rwth-aachen.de/archlinux/$repo/os/$arch"
#maintainers = ["somebody"]
#pkgs = ["some-pkg", "python-*"]
#excludes = ["tensorflow*"]

[profile."debian-main"]
distro = "debian"
suite = "main"
architectures = ["amd64"]
#releases = ["buster", "sid"]
releases = ["trixie"]
source = "http://deb.debian.org/debian"

[profile."debian-anarchism"]
distro = "debian"
suite = "main"
architectures = ["amd64"]
releases = ["sid"]
pkgs = ["anarchism"]
source = "http://deb.debian.org/debian"

# a set of packages to test certain edge-cases
[profile."debian-misc"]
distro = "debian"
suite = "main"
architectures = ["amd64"]
releases = ["sid"]
pkgs = ["anarchism", "binutils-arm-none-eabi", "libglib2.0-bin", "libglib2.0-dev", "sniffglue", "librust-sniffglue-dev", "dfrs", "librust-dfrs-dev"]
source = "http://deb.debian.org/debian"

[profile."tails"]
distro = "tails"
suite = "stable"
source = "https://mirrors.wikimedia.org/tails/"

[profile."tails-alpha"]
distro = "tails"
suite = "alpha"
source = "https://mirrors.wikimedia.org/tails/"
+2 −2
Original line number Diff line number Diff line
## The rebuilderd to connect to
endpoint = "http://127.0.0.1:8484"
endpoint = "https://amd64.reproduce.debian.net"
## The server would either allowlist our key or require a signup secret
#signup_secret = "your_signup_key"
signup_secret = "INSECURE"

[build]
#timeout = 86400 # 24 hours
+0 −201
Original line number Diff line number Diff line
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>
		osuosl4-amd64.debian.net - trixie/amd64
        </title>
        <style>
        body {
            font-family: sans-serif;
        }
        h1 {
            font-size: 24px;
        }

        #search-results {
            margin: 20px 0;
        }

        pre {
            margin: 0;
        }

        #search-results pre {
            margin: 12px 0;
        }

        .status {
            font-weight: bold;
        }

        .good {
            color: green;
        }

        .bad {
            color: red;
        }

        .unknown {
            color: #957fff;
        }

        footer {
            font-size: small;
            margin: 30px 0;
        }
        </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 = '/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(`/api/v0/builds/${build_id}/log`, 'log'));
                                r.appendChild(spanWith(']'));
                            }

                            if (pkg.has_attestation) {
                                r.appendChild(spanWith(' ['));
                                r.appendChild(linkTo(`/api/v0/builds/${build_id}/attestation`, 'attestation'));
                                r.appendChild(spanWith(']'));
                            }

                            if (pkg.has_diffoscope) {
                                r.appendChild(spanWith(' ['));
                                r.appendChild(linkTo(`/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(20) + row[1];
                    div.appendChild(r);
                });
            }

            function fetchStats() {
                fetch('/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'];

                        updateStats([
                            ['good', good],
                            ['bad', bad],
                            ['unknown', unknown],
                            ['build progress', (100 / (good + unknown + bad) * (good + bad)).toFixed(2) + '%'],
                            ['repro', (100 / (good + bad) * good).toFixed(2) + '%'],
                        ]);
                    });
            }

            setInterval(fetchStats, 60 * 1000);
            fetchStats();
        });
        </script>
    </head>
    <body>
        <h1>
		osuosl4-amd64.debian.net
        </h1>
        <h3>
		trixie/amd64
        </h3>

        <div id="stats">Loading stats...</div>

        <div>
            <h3>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>
            pew pew, <a href="https://github.com/kpcyrd/rebuilderd">rebuilderd</a> using <a href="https://tracker.debian.org/pkg/devscripts">debrebuild</a> (with <a href="https://tracker.debian.org/pkg/sbuild">sbuild+unshare</a> as backend) to reproduce what Debian distributes via <code><a href="https://deb.debian.org/debian/dists/">deb.debian.org</a></code>. ♥️
	    </br>
	    <!-- a href="/stats/">Statistics about BAD packages.</a> -->
	    </br>
	    <a href="https://reproduce.debian.net/">https://reproduce.debian.net/</a> has more information about this setup.
	    </br>
	    <small>
		This setup is in it's infancy. Don't consider any URLs as stable here, and more to the point, especially don't take any numbers here seriously, unless...!?!
	    </small>
        </footer>
    </body>
</html>
+4 −4
Original line number Diff line number Diff line
@@ -551,7 +551,7 @@ if [ -f /etc/debian_version ] ; then
		esac
		# packages needed for rebuilderd-worker for https://reproduce.debian.net
		case $HOSTNAME in
			infom07*|infom08*|codethink01*|codethink02*)	DEBS="$DEBS
			infom07*|infom08*|codethink01*|codethink02*|osuosl4*)	DEBS="$DEBS
							diffoscope
							python3-rpy2
							rebuilderd-worker
@@ -562,7 +562,7 @@ if [ -f /etc/debian_version ] ; then
		esac
		# packages needed for rebuilderd on https://reproduce.debian.net
		case $HOSTNAME in
			osuosl4*|osuosl5*)		DEBS="$DEBS
			osuosl5*)		DEBS="$DEBS
							nginx-full dehydrated
							diffoscope
							python3-rpy2
@@ -739,7 +739,7 @@ if [ "$HOSTNAME" = "jenkins" ] || [ "$HOSTNAME" = "ionos7-amd64" ] || [ "$HOSTNA
fi
# set secret for remote rebuilderd-workers
case $HOSTNAME in
	osuosl5*)		for a in i386 arm64 armhf riscv64 ; do
	osuosl5*)		for a in amd64 arm64 armhf i386 riscv64 ; do
					SIGNUPSECRET="$(sudo cat /opt/etc/rebuilderd-${a}.secret)"
					f=rebuilderd-${a}.conf
					if [ -f /opt/etc/$f ] ; then
@@ -749,7 +749,7 @@ case $HOSTNAME in
					fi
				done
				;;
	infom07*|infom08*|codethink01*|codethink02*)
	infom07*|infom08*|codethink01*|codethink02*|osuosl4*)
				SIGNUPSECRET="$(sudo cat /opt/etc/rebuilderd.secret)"
				f=rebuilderd-worker.conf
				if [ -f /opt/etc/$f ] ; then