diff --git a/contrib/confs/rebuilderd-sync.conf b/contrib/confs/rebuilderd-sync.conf index 283c929..ac53a78 100644 --- a/contrib/confs/rebuilderd-sync.conf +++ b/contrib/confs/rebuilderd-sync.conf @@ -17,6 +17,12 @@ source = "https://ftp.halifax.rwth-aachen.de/archlinux/$repo/os/$arch" #pkgs = ["some-pkg", "python-*"] #excludes = ["tensorflow*"] +[profile."fedora"] +distro = "fedora" +suite = "Everything" +architectures = ["x86_64"] +source = "https://ftp.halifax.rwth-aachen.de/fedora/linux/releases/38/" + [profile."debian-main"] distro = "debian" suite = "main" diff --git a/docker-compose.yml b/docker-compose.yml index 2b1ec6f..7eb77fc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -51,6 +51,18 @@ services: - REBUILDERD_COOKIE_PATH=/secret/auth volumes: - ./secret:/secret + worker-fedora: + build: + context: . + dockerfile: worker/Dockerfile.fedora + # number of concurrent workers + scale: 1 + init: true + command: ['connect', 'http://daemon:8484'] + environment: + - REBUILDERD_COOKIE_PATH=/secret/auth + volumes: + - ./secret:/secret worker-tails: build: context: . diff --git a/tools/src/schedule/fedora.rs b/tools/src/schedule/fedora.rs index 6fa3f23..c3a92d6 100644 --- a/tools/src/schedule/fedora.rs +++ b/tools/src/schedule/fedora.rs @@ -14,42 +14,49 @@ pub async fn sync(sync: &PkgsSync) -> Result> { if !url.ends_with('/') { url.push('/'); } + url.push_str(&sync.suite); + url.push('/'); - let bytes = fetch_url_or_path(&client, &format!("{url}repodata/repomd.xml")).await?; - let location = get_primary_location_from_xml(&bytes)?; + let mut bases: HashMap<_, PkgGroup> = HashMap::new(); + for arch in &sync.architectures { + let mut url = url.clone(); + url.push_str(&arch); + url.push_str("/os/"); - let bytes = fetch_url_or_path(&client, &format!("{url}{location}")).await?; - info!("Parsing index ({} bytes)...", bytes.len()); - let packages = parse_package_index(GzDecoder::new(&bytes[..]))?; + let bytes = fetch_url_or_path(&client, &format!("{url}repodata/repomd.xml")).await?; + let location = get_primary_location_from_xml(&bytes)?; - let mut bases: HashMap<_, PkgGroup> = HashMap::new(); - for pkg in packages { - if !pkg.matches(sync) { - continue; - } + let bytes = fetch_url_or_path(&client, &format!("{url}{location}")).await?; + info!("Parsing index ({} bytes)...", bytes.len()); + let packages = parse_package_index(GzDecoder::new(&bytes[..]))?; + + for pkg in packages { + if !pkg.matches(sync) { + continue; + } - // let url = mirror_to_url(source, &sync.suite, arch, &pkg.filename)?; - let url = format!("{url}{}", pkg.location.href); - let version= format!("{}-{}", pkg.version.ver, pkg.version.rel); - let artifact = PkgArtifact { - name: pkg.name, - version, - url, - }; + let url = format!("{url}{}", pkg.location.href); + let version= format!("{}-{}", pkg.version.ver, pkg.version.rel); + let artifact = PkgArtifact { + name: pkg.name, + version, + url, + }; - if let Some(group) = bases.get_mut(&pkg.format.sourcerpm) { - group.add_artifact(artifact); - } else { - let mut group = PkgGroup::new( - pkg.format.sourcerpm.clone(), - format!("{}-{}", pkg.version.ver, pkg.version.rel), - sync.distro.to_string(), - sync.suite.to_string(), - pkg.arch, - None, - ); - group.add_artifact(artifact); - bases.insert(pkg.format.sourcerpm, group); + if let Some(group) = bases.get_mut(&pkg.format.sourcerpm) { + group.add_artifact(artifact); + } else { + let mut group = PkgGroup::new( + pkg.format.sourcerpm.clone(), + format!("{}-{}", pkg.version.ver, pkg.version.rel), + sync.distro.to_string(), + sync.suite.to_string(), + pkg.arch, + None, + ); + group.add_artifact(artifact); + bases.insert(pkg.format.sourcerpm, group); + } } } diff --git a/worker/Dockerfile.fedora b/worker/Dockerfile.fedora new file mode 100644 index 0000000..75d5c45 --- /dev/null +++ b/worker/Dockerfile.fedora @@ -0,0 +1,18 @@ +FROM fedora +WORKDIR /usr/src/rebuilderd +RUN dnf -y install cargo openssl-devel rust +COPY . . +RUN --mount=type=cache,target=/var/cache/buildkit \ + CARGO_HOME=/var/cache/buildkit/cargo \ + CARGO_TARGET_DIR=/var/cache/buildkit/fedora/target \ + cargo build --release --locked -p rebuilderd-worker && \ + cp -v /var/cache/buildkit/fedora/target/release/rebuilderd-worker / + +FROM fedora +RUN dnf -y install openssl-libs +COPY --from=0 \ + /usr/src/rebuilderd/worker/rebuilder-fedora.sh \ + /usr/local/libexec/rebuilderd/ +COPY --from=0 /rebuilderd-worker /usr/local/bin/ +ENV REBUILDERD_WORKER_BACKEND=fedora=/usr/local/libexec/rebuilderd/rebuilder-fedora.sh +ENTRYPOINT ["rebuilderd-worker"] diff --git a/worker/rebuilder-fedora.sh b/worker/rebuilder-fedora.sh new file mode 100755 index 0000000..21ba682 --- /dev/null +++ b/worker/rebuilder-fedora.sh @@ -0,0 +1,2 @@ +#!/bin/sh +echo hello