From patchwork Fri Sep 4 07:52:53 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aliaksei Karpovich X-Patchwork-Id: 5428 Return-Path: Received: from shymkent.ilbers.de ([unix socket]) by shymkent (Cyrus 2.5.10-Debian-2.5.10-3+deb9u2) with LMTPA; Fri, 04 Sep 2026 09:56:40 +0200 X-Sieve: CMU Sieve 2.4 Received: from mail-lf1-f60.google.com (mail-lf1-f60.google.com [209.85.167.60]) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8+deb9u1) with ESMTPS id 6847uT3h004832 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 4 Sep 2026 09:56:30 +0200 Received: by mail-lf1-f60.google.com with SMTP id 2adb3069b0e04-5b5e279489dsf426742e87.3 for ; Fri, 04 Sep 2026 00:56:30 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1788508584; cv=pass; d=google.com; s=arc-20260327; b=IJOcdMn/LrhDiguE3yieI5bq2pFeVA4jUHEctME7jmIMRZI5qb3fuA8bceCl9mscZa hjtBLVCYhG+pZsMXO5uDh6c4IwbFvnSlSTrw5T1c49/yVVLKUNSSD01l2qWSXd3bNUKO GqnRn0vLNXtktAmh30mtXPqnm3AMPTmgIqtFph7ja1UIIs6jFh0P7wOtfaKXiXoAv8Nm 4DbvXWoN5ntOetlC7Wf21SgwdWOe3lB/3jmwMgq2eLp/g9bGHJFkdXjWv4lb+v/P0CuR qIRqTJpkJ0rg+z8RvQ1rcP2HhFs54qFwUim+NtyDodpfVsNaOmIiO6U4PndKSd1+7DoL mEOw== 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=LNGWt5K3a9kMYyMESppD79RSDI59RISdLWIOLBRzhYU=; fh=9E7H6zJZ8QTktG7YTGAuZIUQt8nLsuOn3o4phpzUaJQ=; b=TxoP3nrsT36GbxJy5kd0xvIlkaZZUtVhzv6MrL/CFigm6AueKCfPhZnr2Skdn2ZX0w J1fmrbM6ED2mzx7vybRGCubTy1cNdO3GSSSNcf1GrzN2eszfILz+P1JojrtW98VsZfu4 wuXS0nkNFdvbyyYrVgMtjxOhLSOGR8QlGtZb6fccefb/IMp+Yse/sUZtl9K23utUS0pQ LCFT1EQNagW6qNZppDH8+ZYssHlZOBowV+NtGBQpSX6fn57Zdqo8t8KD/xEx62PJAKG6 fv3disuzN7j0Lhkflzp6gtAIsUtJQkiJmBv7s8oBsJpbTrEVidaIIIC8q4XE5n0epUED yg0Q==; 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=1788508584; x=1789113384; 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=LNGWt5K3a9kMYyMESppD79RSDI59RISdLWIOLBRzhYU=; b=iUJJZfjkBZkYkuNUEoBI9pypgNxYJH1Z9RhoVA6/xUM0vw7HYHswCGWApiYZmNUSLI 4NxCAa8uuSfdxZxuRzF8J/F0yzghuj9+qiSC6FP4QT7IdCjd0EoE4LgFmTpr5Z90dtoy W+nDxee0T7FMYME9RaLC1ZjWvS+K4OxEd3V7LJpCmbq91GX4znKqXrgNORfiWFrmPJZY 2zapFW7sDioS6RtBEhvbydkhsl5W016p1OBz1c2TTJ686r0PJGWDiPUYZ4en5mFA0dUb hdyZKxbSNXz7Kn7JwJmitddOViOa1HcN4Jx/Ch4T3d/YxyHW44vOVH9vO4T2UHW8DVtj exAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788508584; x=1789113384; 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=LNGWt5K3a9kMYyMESppD79RSDI59RISdLWIOLBRzhYU=; b=Guk/Tuxm3pOfGXoJCN8rMzSXK9bHzMquha/5W1eXqfDE2/IhtDv7VcX0Nu2EKDIeOd nlcGvQm+aABTWResC6uQHCcrPIbBNpOs68hkdYfQth8n4CcVAnrOa/Z8SAAnpaa1IfB3 izuHM2HRlcqJTa9bdpTm1glJPfDyTgzLZ22IOnWF3AiGWPllluVv5zvdeUqpzCd6Qiih C+0/rmU3T5MKooaEZodXyM3ZZ9YRyjaDhJj6ALnI9hJ7jSKgamTwRgpGY+MSchoVGEkc 7linR071xvlamjJo8oZJma7y2zzu3QzNkmbIVvYgTvzdLxmhRKcaqEKpXW8VwGLAUXHn meOw== Sender: isar-users@googlegroups.com X-Forwarded-Encrypted: i=2; AKwUvBxin1sMQxdWnqOKFpfromW7N88jpyM9y1tnNB+Ey/fX6ujEmawji77Z/RRudq73/j3km7Si5M8=@isar-build.org X-Gm-Message-State: AFuF++kwldqlcwaTZe1S2btYKtL9bT7tsxV1BAlyU1gBxAA0m10bVdOJ J7lPt0+8V8kMPlUl1Nk1L8lxZwirHpcEiWZH6YdcL4SgfGIUK1pW6qln X-Received: by 2002:a05:6512:a8b:b0:5b3:e52:a005 with SMTP id 2adb3069b0e04-5b616f020b7mr816457e87.4.1788508584486; Fri, 04 Sep 2026 00:56:24 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com; h="ATskLdf/s25fogI3sLFQxcH4DCMkMGl32TJtVNMXVjlblaIV4g==" Received: by 2002:a05:651c:1690:b0:3a1:e61d:46c6 with SMTP id 38308e7fff4ca-3a372513376ls1825241fa.1.-pod-prod-06-eu; Fri, 04 Sep 2026 00:56:22 -0700 (PDT) X-Received: by 2002:a05:6512:3e17:b0:5b0:1516:8799 with SMTP id 2adb3069b0e04-5b6170524a4mr767024e87.17.1788508581984; Fri, 04 Sep 2026 00:56:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1788508581; cv=none; d=google.com; s=arc-20260327; b=EnY0JmOyg63wJ6MXiXoj01t3p5VXydpDT5KmVmDNDp+w6VvukatDuawzJptOH3xx60 U0LvKiu0bLyspk2IAwmFTlFh6xfgP6V/wmXxFhCJaVzEy9w81dl6FHkoC/DJTK1mge/r y7cmAGqPSogF7ppVhX2layDpEQDRgxfzhWftv2unE/yrs3jJI5ORHbKq0CMBlFhQrnZU 9Q6VTzgUre26D2O4WiN+ipGtnXrQz+ETMUcD36E8d5c/GUuWqvsy2iUMU6ieXeDgpfhT EsRvDHtMDZLQgXqDXHh7VeMfXPpQg0NKSER6dQAqasA3Dg7Dfujxblb+FXv4/+T0+6a+ 1/3w== 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=fXV59MW+wfucag7p9lyuoIU9KCdjvsnT1Rffr5ejkLk=; fh=u+3kXEMzY4uVhDBiujW2QUo7NnpMLrGEgMQBYpCTRN4=; b=HOFgRm9/Dp/wbFeeK1tFE9Jmg83dvionDwIcSuMS5NnjhbfmeVSoLP4dwnbGQwW1kx 5VdjXgctM09UBCzWBK4NvDxh+CB3qCgF1sslASWI90PyvBSAnjvJHwaP+5r01zFj5OJv W1g2Cc5TcmrQfl40UqjULVBlQz6q2HLm8BTgaeHI3aBjMOd7+rpE+uEbuVNY2vVpHoIh IKZ66A17L4I3CVGAsSU104vH47WgCoB3JG4YBSFmaUuM25ACfZYMWn5LqIC0724UmMHq rjvzz2Q51URnlBoqvamjS/E/n8QcaHXRQ1r/5gncYct4pqYC/LFmidzvcf0fsIGjCcOL 0aVg==; 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 2adb3069b0e04-5b6166cb2cfsi35889e87.8.2026.09.04.00.56.21 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 04 Sep 2026 00:56:21 -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 6847tRSL004124 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 4 Sep 2026 09:56:20 +0200 From: Aliaksei Karpovich To: isar-users@googlegroups.com Cc: Aliaksei Karpovich Subject: [v10 11/12] debrepo: Add override for reprepro Date: Fri, 4 Sep 2026 09:52:53 +0200 Message-ID: <20260904075515.25962-12-akarpovich@ilbers.de> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260904075515.25962-1-akarpovich@ilbers.de> References: <20260904075515.25962-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/deb-repo | 97 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 88 insertions(+), 9 deletions(-) diff --git a/scripts/deb-repo b/scripts/deb-repo index 23de0461..99913fb4 100755 --- a/scripts/deb-repo +++ b/scripts/deb-repo @@ -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(r"\s+", s, maxsplit=1) + if type not in ["deb", "deb-src"]: + return None + + options = "" + options_match = re.match(r"\[\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(r"\s+", s, maxsplit=1) + + if s.startswith("/"): + suite = "" + else: + suite, s = re.split(r"\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,60 @@ 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" + 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 override file + self.fetch_file(f"{source_url}/indices/{deb_override_name}") + if (os.path.exists(deb_override_file) and + os.path.getsize(deb_override_file) > 1): + break + # Download packet override file + self.fetch_file(f"{source_url}/indices/{deb_override_name}.gz") + # Unpack override file + with gzip.open(f"{deb_override_file}.gz", "r") as f_in, open(deb_override_file, "wb") as f_out: + for line in f_in: + f_out.write(line) + break + + with open(override_file, "w") as f_out: + # Unpack deb override file + with open(deb_override_file, "r") 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: