From patchwork Fri Oct 2 07:01:14 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: akarpovich X-Patchwork-Id: 5523 Return-Path: Received: from shymkent.ilbers.de ([unix socket]) by shymkent (Cyrus 2.5.10-Debian-2.5.10-3+deb9u2) with LMTPA; Fri, 02 Oct 2026 09:05:13 +0200 X-Sieve: CMU Sieve 2.4 Received: from mail-lj1-f189.google.com (mail-lj1-f189.google.com [209.85.208.189]) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8+deb9u1) with ESMTPS id 69275CrI004202 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 2 Oct 2026 09:05:12 +0200 Received: by mail-lj1-f189.google.com with SMTP id 38308e7fff4ca-3a46cc236d2sf4451931fa.2 for ; Fri, 02 Oct 2026 00:05:12 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1790924707; cv=pass; d=google.com; s=arc-20260327; b=sHoOuOPI/V+PwpzMDW56JNXECCm0RVfIxZ9CtBJeRu3f7Y7UvUry5Fky0RTKxEDgCz fiBCj+ejGdH3vOBDDcgEgeaTe89U/udKQFNwGXl4nY6QqM9RLKqrDBNFfng96a0aIzKy HNn7EmigkamKIN1UumOozeZHzQlOx5VHbQDp/UtvTMYHolODsLvz/v/W7GnTf0xrEiZf hudN0jOchDgjlo08qJWMLsw4KA6RE7sMWTADRMoGhh7jojCl7gb612pWxj3X5Oje0neP qUPvAzG627cBEX8CKzrA2fkPA96FZ4bVmC+VvRE4HkivRERuzecBmxknYeqv5a4/00ZN 6qFw== 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=yIpwCR/ijoFVO9gCHFrI2puMvUZbZUDOi1NV5qsBTVc=; fh=ZyMp8RiiSDF2yp9QM11dUIgh86S6zj5gd3K8//2OdOc=; b=pWnRpKrJXOdGQhA6kx+0eB0GRBymcjsRb60WaD1Sb9XhsXY+VS3r4cvIMW6XoUbSIZ VRUf8FA37l8/jj+4tN0DLHTyvToop8THYKcv1glfZlMvYuCthkqxlm43EaI56nw1VXgB 6mMH8rUNP0KLeF4JoVx6O91WTR6kxtHBGWxr4zN6V4NdalglI0TP9l2jhhshemX7aDzA Do2Q5Vls6h2mSN7rftyjDJTFkqhTtZov0kToKK8cmjhkiH8Gm6gMsgWKvHSr+RQ5DrvA n/JLrgEmtAFqWnkg5rAxNWhS0fe4aE/ZDREzc9UJ67ylzTNAyPs3SO4KR76ARJWRtO3R dDQg==; 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=1790924707; x=1791529507; 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=yIpwCR/ijoFVO9gCHFrI2puMvUZbZUDOi1NV5qsBTVc=; b=CTH4WG4WbeyIclJ1jYWRq2jQU7bLmnVaVqp6VEodINoT6hMEDSYfcmuBkIgARsKPkD Y73zej4AOv8QjIO9H+B1C1hEVd6/1xo8BCWHaaWDXggXwjLteMX3JJI+ASdgW1VeAwYa EynzcQawGW4gx6xNU5EdOwx3MauMYXnLRa100MmAZzwCx5pgp2nENMF0fLv56FHgQefy z++ag3sR3gFYVEnfMgjllo7nbLYJSUehGUpIi610wEJqpT9hMmq5UTPOTSm+V7rFCux6 hXq9zQuzBG1+vbxtDgIpN/5TIShdisa6iYRptzL4wbzp7/cjrC9v/TLAFsJ/jf31J2mh pnwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790924707; x=1791529507; 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=yIpwCR/ijoFVO9gCHFrI2puMvUZbZUDOi1NV5qsBTVc=; b=fqOB8NNf1WMPs3+MGP3EjtGdINBqq0Cc26Rs48XOEV7O5ip9Joh7ZX8UhP1lZrPCf5 u3KxOeQQxq6bCvuuAqroPIRqJsFxJqYuorxwCz39Kyh0EHc4MPdabi0lC8BDEtVNkY+G gxBgfttTHx5jMCio1IEHmTb6iYhCSAbnkm+U1HmuA5sEbS3xIQo9XfR+nUMg9C/XSGGw NT/whGK4awmFnJFLgo1n6DQN9udyTT+6Z1raxOUCm2a4WXqe5tJ9omdeBiCcfgCP1ucv lfd613rx6mykxRjNShv0+AV/0YWReUPYk9ALNhGC2mzHBXji0vnwysbk5oZbe/uLN+uu g8yg== Sender: isar-users@googlegroups.com X-Forwarded-Encrypted: i=2; AKwUvBz/nX7BrPlH02ckM28iydJKjGXkMAJIyUe9dIcpWHg0s510NBiYbuJYTXra0jO1VDCcQuw4Tr8=@isar-build.org X-Gm-Message-State: AFq9FYLWHqN8Mdn74iLduAjosNI1MXmcI35IjAU/Y9lpmBrStYY3g0OW Af0T0fzPEuoKwX8GWFZRvdF793ISLzzSI1pJhHhIOb5FaBKtlLsHB9qm X-Received: by 2002:a05:651c:1b84:b0:3a6:629e:447c with SMTP id 38308e7fff4ca-3a8827de31amr3189791fa.1.1790924706865; Fri, 02 Oct 2026 00:05:06 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com; h="ATskLdfS9remxdMpfolQ+SsUihCTw8FH9BcfXVL9+KngO/qb6w==" Received: by 2002:a2e:9dd7:0:b0:3a6:4926:b36c with SMTP id 38308e7fff4ca-3a8a31cfb9fls1276041fa.0.-pod-prod-09-eu; Fri, 02 Oct 2026 00:05:04 -0700 (PDT) X-Received: by 2002:a2e:b88b:0:b0:3a7:69bd:80ad with SMTP id 38308e7fff4ca-3a8877e829fmr3863981fa.6.1790924704431; Fri, 02 Oct 2026 00:05:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1790924704; cv=none; d=google.com; s=arc-20260327; b=Udng/A3n+91xN0/wNWFEGQgaPV/Py/SLGDlL0uFwTWRsOVvevQPwJus7KVHKS1j46g GtDyM0Hgk1yRbnNgiUCBgWXBJHVI5G2HLmy66n01NGhDlbiqbjozOLaAmj3qShPww5Jl uy3yA+ArSu7Ucq9NVZViJs3C/WDFuwtrxMtbv4D30jKOpZMu55cj+dI1YxWnqrNWObDU TsdR/zp9DBcKxYjX4b795S6ySKOUtJwdEi5oGTRzF9Rvi1v0lBBxex2AC6B0h+AEhVOW l8EZIIuwDiP72iO46c0WbYwrOUSXtv7yu7Br/FHUs/oD99dRNfnuk6+h3FDzvSCbC9tB 1Wrw== 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=uoNsvHCWo0EqXpjLKWpWuF6AtgPN7r4tHaHy/IoTbAI=; fh=u+3kXEMzY4uVhDBiujW2QUo7NnpMLrGEgMQBYpCTRN4=; b=BhvIZklSe76V/3PqC0f1tKXGdBIwwNrOAFZb9+R7Xw1aMo3OtSg/lX2c0TDts9vciJ 9TWQyqx9aX8aG5E6r3t336xGj4Eg2uoFo4g/1ZsSVGsF3M11sk3HtpAV2dwVivA7n44O MRdZrkK+rn4yBh6WpF8w90zSRdO8V2XFzKwOrt2okiYOiiSYSEnUaUVwUo2ldskyTMuA oLEmSlribOSGZJ5luo9ThGspyD+/PZxV1HQF18ulNqAMHC90dm46zuvHAIq6MVXeHy3i 550GDGsuLnuVFd8YsBcKJo50UEtTMPeb6z1rBCwfrNcokR7y1i5vxO3rTdm6+n5jh3bB FAgw==; 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 38308e7fff4ca-3a87e339376si264021fa.8.2026.10.02.00.05.04 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 02 Oct 2026 00:05:04 -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 laptop-0xxx (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 69274a1q003799 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 2 Oct 2026 09:05:03 +0200 From: akarpovich To: isar-users@googlegroups.com Cc: Aliaksei Karpovich Subject: [v11 11/12] debrepo: Add override for reprepro Date: Fri, 2 Oct 2026 09:01:14 +0200 Message-ID: <20261002070335.26526-12-akarpovich@ilbers.de> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20261002070335.26526-1-akarpovich@ilbers.de> References: <20261002070335.26526-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?= From: Aliaksei Karpovich 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: