From patchwork Mon Jul 27 11:26:32 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aliaksei Karpovich X-Patchwork-Id: 5296 Return-Path: Received: from shymkent.ilbers.de ([unix socket]) by shymkent (Cyrus 2.5.10-Debian-2.5.10-3+deb9u2) with LMTPA; Mon, 27 Jul 2026 13:29:18 +0200 X-Sieve: CMU Sieve 2.4 Received: from mail-wm1-f56.google.com (mail-wm1-f56.google.com [209.85.128.56]) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8+deb9u1) with ESMTPS id 66RBTH7Y001191 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 27 Jul 2026 13:29:17 +0200 Received: by mail-wm1-f56.google.com with SMTP id 5b1f17b1804b1-49560dddaa4sf14729555e9.3 for ; Mon, 27 Jul 2026 04:29:17 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1785151750; cv=pass; d=google.com; s=arc-20260327; b=jpCjO4y38y02gQSik6oxCBDqfX0PD6fy6DHGm9etigFy4GDgibQyjWNMRCXwxqMTot J/NZ/yNjkIyPMVpvNQkt/OANu3Psk9wPnmOco94/+S5FQX0lE6bpKUHuv4+HsIisvAfA DE+NaxAF1CHnShS9cdNtY9Jh3mx9GU7wrhhe5l4pzOEbRvLK5xadLyu+M/T/GiY5zGfz tUxwhuPvWJQm1OWaFHh2J6/N8vLB+RolL54bUijtM0f5vlq2cmPoZz0TiBlx0Sb1tmNw UFigMm9mmMyj3tBX45gmW9Ofn72CzCbh2IwnGC1j3Urs312Vh6AApTAnMnmfgE8L1vSd tOGQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:dkim-signature; bh=dyfKF4TvaUPmgw5zt/KPl4lYwpjdUxt/yBP2fR8mFog=; fh=D/vO7plpOvMmw2FXjaeP19P8xjgkwaDo+wVuwZ1W0lk=; b=DalkwneleI5/wd35lw5QSgKxBs/56RkaCkl3gqUcMXRoDW8B1L2P9dYRZo+NR/CQBr aS0r2/vsPNRNyL6r8s53XliOJV/1NSLnRVbuqpbkOk4oiA+sq8uoMyup2J6hsjlK+fBX 3YQenO1GFukrOZodqqC3dOpLjkbz9DzgXKqlZHrFbngb3P+VViglG5leDd69vY50HWL6 ArDL/LflExVdsAZktbEMITu+vs4gnTiUhYcfazybZ4iC9Pj2mzpnFycSma/cKl8n9Qqh g8suWi824STMXnNlcvjgvosMDl5c6u5uC1+3C+oe+SvE4I9zCqNJJsNf6CiZz5E7flB7 YHxA==; darn=isar-build.org ARC-Authentication-Results: i=2; gmr-mx.google.com; spf=pass (google.com: domain of akarpovich@ilbers.de designates 85.214.156.166 as permitted sender) smtp.mailfrom=akarpovich@ilbers.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20251104; t=1785151750; x=1785756550; darn=isar-build.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:content-type :x-original-authentication-results:x-original-sender:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from:sender :from:to:cc:subject:date:message-id:reply-to:content-type; bh=dyfKF4TvaUPmgw5zt/KPl4lYwpjdUxt/yBP2fR8mFog=; b=jBCbSixRceWp8GIcNnUQopP6+UgkCiNu9KrHOwoW5vHULX/g3CQQFZ9CoiZIJVyfuR y88aJId1eM27zCxzHxnDnQKicLOLDJfjcHJqVmFW6KUsiBRROpALu8/JfKKoesH8/zqW 3dQ1lxoSFF/SCerc4vgyOvYwEIQI7QVtREC0QoSOXKJlOxKAVL3uEJZvvJtNO4ukOuog GldpJRKzbiD4F2NEyPjd3z+WcgcTZzJfoWAHsmTgSify/H1uRse/ExmwxZNrpX6tAveA 55Lwrr05KpaOTvJUY8OcwLeRc2zx0iB5J+Pnu60urkdYDV2NF+q2rcWU43rNoOPJtEy/ ieoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785151750; x=1785756550; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :content-type:x-original-authentication-results:x-original-sender :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:x-beenthere:x-gm-message-state:sender:from:to:cc:subject:date :message-id:reply-to:content-type; bh=dyfKF4TvaUPmgw5zt/KPl4lYwpjdUxt/yBP2fR8mFog=; b=ZI+Ssw/Er/MKwFNpaRvTy0MM3gd3PlonEhmrELnO5gLcAm6QISokyZC+O3/hE1yBm7 yndhuj3Tr5CXWs9SYfBEJJkNtWHzvJbDVXBtWMpSba3nKqj1Y6SXskblJ1B42wi/0+uy tH3iHN++beywDTzozaZX51RhZoJ0aWohzGs0ltI9tOxB6vyVYY53JS/A/blvB2vT2O0/ Ca+XRPpoelq64dis6rgpie4udkJ5aA4/O9u/pB/ZHNllYtdIghqLNRESO3XKIBFv7WLQ 1Y8eDco3Lu+uE56k7UrYVm+Mc1xv8LcTnO0ItkxViCWGgOrvyDpM+AHOCHlocomZ+iyU v6JQ== Sender: isar-users@googlegroups.com X-Forwarded-Encrypted: i=2; AHgh+Roz8CZJxO5xV9buN4emeP3OpKQTshC3MigNBdzGPTRBq7FDI4NJoq0jU1T/EhQeXsjZkyoo+ec=@isar-build.org X-Gm-Message-State: AOJu0YwBghShQbx2jBtijwLcggURzizyi887OaqXKFnvLzVaG1JB9Tr6 JNQcHcSKq+W0AaI6zeEHEd7suJBcqCguvGe2T3WHL+gDE3oVG3wg8/Tc X-Received: by 2002:a05:600c:e489:20b0:495:6a50:3fb8 with SMTP id 5b1f17b1804b1-496b56da6eemr69194265e9.1.1785151750233; Mon, 27 Jul 2026 04:29:10 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com; h="Aa7YSPTHYf0Xo38QSKKmT5CO9p0f65ukYygPB9PQzx2Mhz96MA==" Received: by 2002:a05:600c:1f92:b0:495:5f00:94cb with SMTP id 5b1f17b1804b1-49572c0fd80ls56825945e9.2.-pod-prod-03-eu; Mon, 27 Jul 2026 04:29:08 -0700 (PDT) X-Received: by 2002:a05:600c:1c05:b0:495:607e:5ed6 with SMTP id 5b1f17b1804b1-496b6a31f1dmr97677805e9.31.1785151748270; Mon, 27 Jul 2026 04:29:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1785151748; cv=none; d=google.com; s=arc-20260327; b=GxgexfnvHKzYAERsyv9uF1YH9E3H1TP8H9e4Vf5nnVrMoogiPZXdBJIi9L4KD7tqLh 7F9twJPsnPwIJ7YGMRC3/oAPwaFd9K27MuCH/mEJ3CpWyXWkwvas4Si6+T5JkHKeJVxR k2gC42XkhB1/rD3odLCBoZDhwXEmKNCzY/rCpCZHUlMAti2t3RBfR2tCFNTonHwq5Unm 5QauaOysNh9D+BMtOkyyeDG0VpuU4wtZbNu+0qV2jV1uDr+rocBEK7n+PamvVKXveRVV FOmpb8lKYM6pdoLB0DAzs75Zd1gco5S+M3K5dEj27M/Yxi2nzTG/w3j6C+fFDw6LnhO9 PeDw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=puEE7G7gloGj1/UNx8UuLB0hJ+yB47t8dCqDPw6tWTI=; fh=u+3kXEMzY4uVhDBiujW2QUo7NnpMLrGEgMQBYpCTRN4=; b=P8NwFfeCHwdChcyR5+0YOEWNXkAPjeIzZU4tbKgzDxssvtb6IMqYsvEKhbpT9BLu0+ cro2Z9Pkqc3U/1heGGYnELFqMruYbA/X8dfyNaSNO9v3TKkw/lT7EFri2vv/yOWowiB7 t6HGWVhDgBGUHaQWYv+m1V6D9upAmXEP1KzW6fwHiHktbkcXuOn/w7+f1i/WfKFKByRW 9/UTo8qyPEvZkjx73IXpvZpTjtCxHTmtDvht5EOYR8X+PaChfGqtWfN+476b6/6QwmSF sL70p+ZFKg7GVG1a88CEu64nIXNHL+J9MH3X373zY9me0lCDZKvJNJtbTx4WZbXHoMEh BtwA==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of akarpovich@ilbers.de designates 85.214.156.166 as permitted sender) smtp.mailfrom=akarpovich@ilbers.de Received: from shymkent.ilbers.de (shymkent.ilbers.de. [85.214.156.166]) by gmr-mx.google.com with ESMTPS id 5b1f17b1804b1-496b4a00860si1352475e9.2.2026.07.27.04.29.08 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Mon, 27 Jul 2026 04:29:08 -0700 (PDT) Received-SPF: pass (google.com: domain of akarpovich@ilbers.de designates 85.214.156.166 as permitted sender) client-ip=85.214.156.166; Received: from akarpovich-Victus-by-HP-Laptop-16-e0xxx.promwad.corp (62.122.174.6.serverel.net [62.122.174.6] (may be forged)) (authenticated bits=0) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8+deb9u1) with ESMTPSA id 66RBSjde000930 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 27 Jul 2026 13:29:07 +0200 From: Aliaksei Karpovich To: isar-users@googlegroups.com Cc: Aliaksei Karpovich Subject: [v8 14/14] debrepo: Add using override for reprepro Date: Mon, 27 Jul 2026 13:26:32 +0200 Message-ID: <20260727112812.2255297-15-akarpovich@ilbers.de> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260727112812.2255297-1-akarpovich@ilbers.de> References: <20260727112812.2255297-1-akarpovich@ilbers.de> MIME-Version: 1.0 X-Spam-Status: No, score=-4.6 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H2, RCVD_IN_RP_CERTIFIED,RCVD_IN_RP_RNBL,RCVD_IN_RP_SAFE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on shymkent.ilbers.de X-Original-Sender: akarpovich@ilbers.de X-Original-Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of akarpovich@ilbers.de designates 85.214.156.166 as permitted sender) smtp.mailfrom=akarpovich@ilbers.de Precedence: list Mailing-list: list isar-users@googlegroups.com; contact isar-users+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: isar-users@googlegroups.com X-Google-Group-Id: 914930254986 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= It fixes an issue when bootstrap image in case of offline build is different than online. It happens because some packages has different Priority field because of override. F.e. libtext-wrapi18n-perl in trixie: - inside deb package: 'Priority: required' - inside Packages from deb repo: 'Priority: optional' Solution: download the override file from repo and pass it to reprepro. Signed-off-by: Aliaksei Karpovich --- scripts/debrepo | 88 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 79 insertions(+), 9 deletions(-) diff --git a/scripts/debrepo b/scripts/debrepo index 81056c3a..4a74be33 100755 --- a/scripts/debrepo +++ b/scripts/debrepo @@ -89,6 +89,8 @@ import shutil import subprocess import pickle import urllib.parse +import urllib.request +import gzip import apt_pkg import apt.progress.base @@ -96,8 +98,38 @@ import apt.progress.base REPREPRO_TIMEOUT = 1200 +def parse_aptsources_list_line(source_list_line): + import re + + s = source_list_line.strip() + + if not s or s.startswith("#"): + return None + + type, s = re.split("\s+", s, maxsplit=1) + if type not in ["deb", "deb-src"]: + return None + + options = "" + options_match = re.match("\[\s*(\S+=\S+(?=\s))*\s*(\S+=\S+)\s*\]\s+", s) + if options_match: + options = options_match.group(0).strip() + s = s[options_match.end():] + + source, s = re.split("\s+", s, maxsplit=1) + + if s.startswith("/"): + suite = "" + else: + suite, s = re.split("\s+", s, maxsplit=1) + + components = " ".join(s.split()) + + return [type, options, source, suite, components] class DebRepo(object): + BOOTSTRAP_LIST = "/etc/apt/sources.list.d/bootstrap.list" + class DebRepoCtx(object): def __init__(self, workdir): self.distro = "debian" @@ -181,9 +213,9 @@ class DebRepo(object): with open(f"{self.workdir}/var/lib/dpkg/status", "w"): pass - os.makedirs(f"{self.workdir}/etc/apt/sources.list.d", exist_ok=True) + srcfile = f"{self.workdir}{self.BOOTSTRAP_LIST}" + os.makedirs(os.path.dirname(srcfile), exist_ok=True) - srcfile = f"{self.workdir}/etc/apt/sources.list.d/bootstrap.list" if aptsrcsfile and os.path.exists(aptsrcsfile): shutil.copy(aptsrcsfile, srcfile) else: @@ -201,13 +233,51 @@ class DebRepo(object): def create_repo_dist(self): conf_dir = f"{self.ctx.repodir}/{self.ctx.distro}/conf" os.makedirs(conf_dir, exist_ok=True) - if not os.path.exists(f"{conf_dir}/distributions"): - with open(f"{conf_dir}/distributions", "w") as f: - f.write(f"Codename: {self.ctx.codename}\n") - f.write( - "Architectures: " - "i386 armhf arm64 amd64 mipsel riscv64 source\n") - f.write("Components: main\n") + override_fname = "override" + self.create_override(f"{conf_dir}/{override_fname}") + with open(f"{conf_dir}/distributions", "w") as f: + f.write(f"Codename: {self.ctx.codename}\n") + f.write( + "Architectures: " + "i386 armhf arm64 amd64 mipsel riscv64 source\n") + f.write("Components: main\n") + f.write(f"DebOverride: {override_fname}\n") + + def create_override(self, override_file): + deb_override_name = f"override.{self.ctx.codename}.main.gz" + deb_override_file = f"{self.workdir}/tmp/{deb_override_name}" + if (not os.path.exists(deb_override_file) or + os.path.getsize(deb_override_file) < 1): + # Extract source URL + srcfile = f"{self.workdir}{self.BOOTSTRAP_LIST}" + with open(srcfile, "r") as f: + for line in f: + entry = parse_aptsources_list_line(line) + if entry: + source_url = entry[2] + # Download deb override file + self.fetch_file(f"{source_url}/indices/{deb_override_name}") + break + + with open(override_file, "w") as f_out: + # Unpack deb override file + with gzip.open(deb_override_file, "rt", encoding="utf-8") as f: + # Convert deb override to reprepro override + for line in f: + fields = line.strip().split() + + if len(fields) < 3: + continue + + package = fields[0] + priority = fields[1] + section = fields[2] + + f_out.write(f"{package} Priority {priority}\n") + f_out.write(f"{package} Section {section}\n") + + if f_out.tell() < 1: + print("WARNING: override file is empty!") def apt_config(self, init, crossbuild): if not init and self.ctx.compatarch: