From patchwork Thu Aug 20 13:29:27 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aliaksei Karpovich X-Patchwork-Id: 5399 Return-Path: Received: from shymkent.ilbers.de ([unix socket]) by shymkent (Cyrus 2.5.10-Debian-2.5.10-3+deb9u2) with LMTPA; Thu, 20 Aug 2026 15:42:19 +0200 X-Sieve: CMU Sieve 2.4 Received: from mail-lj1-f186.google.com (mail-lj1-f186.google.com [209.85.208.186]) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8+deb9u1) with ESMTPS id 67KDgIr2014334 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 20 Aug 2026 15:42:18 +0200 Received: by mail-lj1-f186.google.com with SMTP id 38308e7fff4ca-39dba2e8dccsf9092831fa.2 for ; Thu, 20 Aug 2026 06:42:18 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1787233333; cv=pass; d=google.com; s=arc-20260327; b=sIWfbIqTto/vVT4tOP+luQd/efpfDJ9jSJkMeLWDp4aRdfE9xsoKIOXxdwhtvju7ds 1IQC/H3oqBeyQGuMufqurZYuMrIucFARgaCP2WjPEIzUr1hHDlOxQgos8/E035J0hGZQ KZQyaW/6gkBZM3DSOeR0vTkz5eKNsnYNQJbDy6QqdQn89XBqLDbODN7Te/3cMoS2Q8Kl 8twwNGxN/xvW2ojK57ygiHk2c8cdsicLbUOVPYk4KZf8IuWO8qKyDJqCt6JBQuF3uDzU aP4Un6F28HtkxfksCpYrWhuJ0zlTNoBJ6yo9l5iqPqWsu6B+gz85C4Lktf94MbiuY5K4 wN9Q== 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=lz/7MwgXGsmgw8pMzsbqE/8L1uY6ZguZZkvzG7jQfJk=; fh=vP2MWICz3WcTKIgMMPsNABZGumFdxOkIRjyS0V3W/xo=; b=GuqGcMBY+oBcTtv1BxB7oW3YsNh65E1anLTTU+sySVazErLSvlq8PBbZIURA8It/Zu BNualg4TGAiQvWX1vM4ZUB2n+/qnAiMSULHfhzF4qnBVTS8hHqEtF28QiBx16rRO+wcy Gt2k9tVJeKhkfVV3pRO6qQXoNsX6vvtpXHlyl/2fMJpVcvf6jHxIK5TE7if1hdpGa/yI aGHIdHDH6Kkux1KVNj3mcp5gGTReGTW/SZp3Z1s4lWjIH1LMbszyqlq4FroNRBcCSe0F y/GB2m2vEcM54sGRwQbGWCrKf2rGkH4QVsLtxABtENSH19riQx9P3L/IUgS0ljPlRJeg NqUQ==; 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=1787233333; x=1787838133; 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=lz/7MwgXGsmgw8pMzsbqE/8L1uY6ZguZZkvzG7jQfJk=; b=c5C+jgEqECgqScMreDxu9+4lC/xL7i8oomHJPkVmYTq67JaFl/Aq0aEfEgvOHgwmSJ cSIJZOfFduM1z1uVlJ4NDDumPsc3rEwveXnLI99KU5H8/f1B7sBldacjI2paBeTX2Wga LmCj9bw/H7p5aOKyZASAtr3baDL9CAZM+bQhtkvaHppvxTVubm3MCVeh4UzJ9yALMPHE bbHY5hpKKTVbwY0eKp+jQ933Y54Y/VAPaehNMymTuDRm2FpSwoX7vF3tv8zWkew6KjJW aWviIgHq6HCVh02EaZ3umMLTDscMCqimcw3YPcrdoJZAa7q+sxEscluaSRKcKDxK++e8 /6LQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787233333; x=1787838133; 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=lz/7MwgXGsmgw8pMzsbqE/8L1uY6ZguZZkvzG7jQfJk=; b=HR+8Jtt+/vGTcTFc8oP/KGwbDn+Z7Q0xmDSu+BqoLwq4JDCm72JqapR0qbGd3jph+k UzxW4PP2t7t6Pjj1/yKWo39dTrVHlu0Msa9Qgux1iRwXNag7q4sU/79/Fl5imoyI+onG xRiQHuUF6jj+Ddq0/n34IK453QUwK91KgJdW596YVj37mlIPzv591upPyQNm8G8zBpbR L4cZrQXWZWJzydXsuBK067d6vg27z5e3fvCs406t77G/wCAJnsT8IvaQo34gZIt9bOe6 bP3uruzkfJyvyYxfeu2x8b14jmngqrA1duWwGEyNZahXRks0mr/R7cVVl3CiznuO2Pzy BxIg== Sender: isar-users@googlegroups.com X-Forwarded-Encrypted: i=2; AHgh+Rp4RgvzR9NJna74VEW/wHydwncwB/CVTiBN2itszJwEDvWXEsGW5P7tbD9I3sMAG/+iSerg2vg=@isar-build.org X-Gm-Message-State: AOJu0YzA/MorOEfKejOTyLYkOrjzPvi26vDABiqIFunpADlt9Ipj72Gc Re7TtXksUJU+mcsmR9HjSK9fYua0UKRYZokJ9nIdNFIDZF6ynS2OMbMF X-Received: by 2002:a05:651c:199f:b0:3a1:1d3b:67f1 with SMTP id 38308e7fff4ca-3a1896d9d67mr27275841fa.7.1787233331740; Thu, 20 Aug 2026 06:42:11 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com; h="ATskLddGAINbVX7laIT2MK+rshcGmpu0PsnwNdC1Z8EVJFLCuw==" Received: by 2002:a2e:9ec9:0:b0:3a1:7b4d:5835 with SMTP id 38308e7fff4ca-3a1964217eals3657311fa.2.-pod-prod-02-eu; Thu, 20 Aug 2026 06:42:09 -0700 (PDT) X-Received: by 2002:a05:651c:a20c:10b0:3a1:8dd6:aad9 with SMTP id 38308e7fff4ca-3a18dd6add5mr21035851fa.2.1787233329491; Thu, 20 Aug 2026 06:42:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1787233329; cv=none; d=google.com; s=arc-20260327; b=Nk8E9dRU0whLW7teaPvPCw9Srfq9jEqyrInxl6UWf8bZ7tfCKJ6aisXA5FB/jTnsDc Ya8yyi9H07SagliVs/InHJsGaqQ/YMTj7jqQVpv3tw0Hxl7u68NfBEpY/O9BCS5WjUek urUl2H81nwSXCjfK5+w2tJ4at7orH0xOGV9KA0VmytiGwZNLxVlgKDmbfSu01YNXet95 OOnwPEYOoZ4Xi1N+XI2RKdI44hqxvu31D6wkvWY+kEO7QmsC4vZS0YJ2pq/QISqQu16L 847A7mFoJqRhxj/AmWzEuGeUxdFxSj3a82OYstz0Vdl2Qc+FoNdnVlCGTPWrYmMyQ4YH ngvg== 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=Op2qzlb1vH+QuCE9u3RkneMRN0pne9B4yofFGKgZT0PJGjUliUwk9dZDuUwzcoznrz BGtup0ITv4Bc+cvkoSn4/2li70EmAWc+CuFdPacgjo1KvN+JnALHrU7KrC/5T+AqTcNB j6NNoBUFZZ/CT3+KlN8Zo76Zp7QVeRVhXqB09T3cVJHL4fz1/ZGOJ951+ykXeg8GJopw FxX2mPr8AmKPdMMjMG0akMhcO29t1a2+TuEhKH2OtpRIOlrBJMX5hQY74Y6ypGb6oGsR eF7cwZEMCPpF9gvlebvaBFHh/iWp3FZAv1rAHecnIyifzM7wKe/nlDaSfKG+DiXieXxU gnyw==; 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-3a189e3ba41si898601fa.5.2026.08.20.06.42.09 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 20 Aug 2026 06:42:09 -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 67KDf8lZ013513 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 20 Aug 2026 15:42:07 +0200 From: Aliaksei Karpovich To: isar-users@googlegroups.com Cc: Aliaksei Karpovich Subject: [v9 12/13] debrepo: Add override for reprepro Date: Thu, 20 Aug 2026 15:29:27 +0200 Message-ID: <20260820133934.383231-13-akarpovich@ilbers.de> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260820133934.383231-1-akarpovich@ilbers.de> References: <20260820133934.383231-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: