From: Alexander Smirnov <asmirnov@ilbers.de>
To: Henning Schild <henning.schild@siemens.com>
Cc: isar-users@googlegroups.com
Subject: Re: [RFC][PATCH 2/3] classes/dsc: Basic Debian .dsc backend implementation
Date: Mon, 23 Apr 2018 19:11:12 +0300 [thread overview]
Message-ID: <e1165d50-d130-7b13-6aae-987a3e202dc2@ilbers.de> (raw)
In-Reply-To: <20180423170457.3e25e51a@mmd1pvb1c.ad001.siemens.net>
On 04/23/2018 06:04 PM, Henning Schild wrote:
> Am Mon, 23 Apr 2018 16:21:45 +0300
> schrieb Alexander Smirnov <asmirnov@ilbers.de>:
>
>> This patch introduces class to work with Debian .dsc files. The
>> main goal is to simplify re-building and customization of original
>> Debian packages.
>>
>> To rebuild package from the upstream the following recipe template
>> could be used:
>>
>> DSC_URI = "http://ftp.de.debian.org/...dsc;md5sum=..."
>> inherit debian-dsc
>>
>> All the remaining information bitbake will derive automatically.
>> This is only first implementation, so there are still several open
>> issues like:
>> - Chose correct upstream package version depending on Debian distro
>> - quilt-3.0 source format support
>> - Cross-recipe dependencies recognition
>>
>> Signed-off-by: Alexander Smirnov <asmirnov@ilbers.de>
>> ---
>> meta/classes/debian-dsc.bbclass | 112
>> ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112
>> insertions(+) create mode 100644 meta/classes/debian-dsc.bbclass
>>
>> diff --git a/meta/classes/debian-dsc.bbclass
>> b/meta/classes/debian-dsc.bbclass new file mode 100644
>> index 0000000..4159e3a
>> --- /dev/null
>> +++ b/meta/classes/debian-dsc.bbclass
>> @@ -0,0 +1,112 @@
>> +# Debian .dsc backend
>> +#
>> +# This software is a part of ISAR.
>> +# Copyright (c) ilbers GmbH, 2018
>> +#
>> +# SPDX-License-Identifier: MIT
>> +
>> +# List of non-standard variables added to package workspace
>> +#
>> +# Set by user:
>> +# * DSC_URI - uri link to .dsc file in upstream apt
>> +#
>> +# Generated automatically:
>> +# * DEBIAN_URI - uri link to Debian patch in upstream apt
>> +
>> +python __anonymous() {
>> + # Fetch .dsc package file
>> + dsc_uri = (d.getVar("DSC_URI", True) or "").split()
>> + if len(dsc_uri) == 0:
>> + return
>
> Can we not use SRC_URI and append more sources as we read .dscs? A
> copy of the fetching code just reminds me of the broken fetch/unpack in
> the early Isar days.
> Because i have got my dscs in tarballs and in git ... and i am behind a
> proxy.
Here I consider only traditional Debian way, when.dsc file is stored
directly in apt with .orig tarball and .debian patch:
http://ftp.de.debian.org/debian/pool/main/h/hello/
So this class intended to work with Debian apts.
>
>> + try:
>> + fetcher = bb.fetch2.Fetch(dsc_uri, d)
>> + fetcher.download()
>> + except bb.fetch2.BBFetchException as e:
>> + raise bb.build.FuncFailed(e)
>> +
>> + # Open .dsc file from downloads
>> + dl_dir = d.getVar("DL_DIR", True)
>> + dsc_file = (dsc_uri[0].split(";")[0]).split("/")[-1]
>> + filepath = dl_dir + "/" + dsc_file
>> +
>> + pv = ""
>> + src_uri = ""
>> +
>> + # Parse .dsc file to get package details
>> + with open(filepath, "r") as file:
>> + line = file.readline()
>> +
>> + while line:
>> + # Get package version and export PV
>> + if line.startswith("Version:") and not pv:
>> + pv = line.split(": ")[-1].rstrip()
>> + d.setVar("PV", pv)
>> +
>> + # Get package and Debian patch arcives names
>> + if line.startswith("Files:") and not src_uri:
>> + line = file.readline()
>> + src = line.split(" ")[-1].rstrip()
>> + src_uri = (dsc_uri[0].rsplit("/", 1))[0] + "/" + src
>> + src_uri = src_uri + ";md5sum=" + line.split("
>> ")[1].rstrip()
>> + d.setVar("SRC_URI", src_uri)
>> +
>> + line = file.readline()
>> + debian = line.split(" ")[-1].rstrip()
>> + debian_uri = (dsc_uri[0].rsplit("/", 1))[0] + "/" +
>> debian
>> + debian_uri = debian_uri + ";md5sum=" + line.split("
>> ")[1].rstrip()
>> + d.setVar("DEBIAN_URI", debian_uri)
>> +
>> + line = file.readline()
>> +
>> + file.close()
>> +
>> + # Set correct path to unpacked sources
>> + pv_orig = (src.split("_")[-1]).split(".orig")[0]
>> + pn = d.getVar("PN", True)
>> + d.setVar("S", pn + "-" + pv_orig)
>> +}
>> +
>> +python do_fetch_append() {
>> + debian_uri = (d.getVar("DEBIAN_URI", True) or "").split()
>> + if len(debian_uri) == 0:
>> + return
>> +
>> + try:
>> + fetcher = bb.fetch2.Fetch(debian_uri, d)
>> + fetcher.download()
>> + except bb.fetch2.BBFetchException as e:
>> + raise bb.build.FuncFailed(e)
>> +}
>
> Wow another fetcher ... same question as above.
Upstream Debian source package contains 3 parts:
- .dsc
- .orig.tar.xz
- .debian.tar.xz
So:
- First you need to fetch .dsc to get information about remaining 2
artifacts.
- .orig.tar.xz is fetched by standard fetcher.
- .debian.tar.xz is fetched here.
>
>> +python do_unpack_append() {
>> + import subprocess
>> +
>> + s = d.getVar("S", True)
>> + workdir = d.getVar("WORKDIR", True)
>> + debian_uri = (d.getVar("DEBIAN_URI", True) or "").split()
>> +
>> + try:
>> + fetcher = bb.fetch2.Fetch(debian_uri, d)
>> + fetcher.unpack(workdir + "/" + s)
>
> fetch^3 this time with unpack
Again:
- .orig.tar.xz is unpacked by standard fetcher
- the content of .debian.tar.xz should be unpacked into the folder
from the .orig.tar.xz archive
So in general, this is an attempt to collect and prepare all the
artifacts to make it usable with dpkg Isar class.
Alex
>
> Henning
>
>> + except bb.fetch2.BBFetchException as e:
>> + raise bb.build.FuncFailed(e)
>> +}
>> +
>> +# NOTE: this is workaround to serve quilt-3.0 package format support.
>> +# To build such package, the original tarball should be placed
>> +# in "../" folder. In general, this should be handled by Isar
>> +# core build classes, but for now this class in the only one
>> user +# for quilt-3.0, so for the first implementation let"s
>> keep it here. +# Open issues:
>> +# - How to identify if package has quilt-3.0 source format?
>> +# - How to avoid copying of tarballs from downloads to working dir?
>> +do_build_prepend() {
>> + dl_dir="${@ d.getVar('DL_DIR', True)}"
>> + workdir="${@ d.getVar('WORKDIR', True)}"
>> + file="${@ ((d.getVar('SRC_URI',
>> True)).split(";")[0]).split("/")[-1]}" +
>> + install -m 644 $dl_dir/$file $workdir
>> +}
>> +
>> +inherit dpkg
>
next prev parent reply other threads:[~2018-04-23 16:11 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-23 13:21 [RFC][PATCH 0/3] Experiments with .dsc backend Alexander Smirnov
2018-04-23 13:21 ` [RFC][PATCH 1/3] buildchroot: Include texinfo to base system Alexander Smirnov
2018-04-23 13:21 ` [RFC][PATCH 2/3] classes/dsc: Basic Debian .dsc backend implementation Alexander Smirnov
2018-04-23 15:04 ` Henning Schild
2018-04-23 16:11 ` Alexander Smirnov [this message]
2018-04-23 17:27 ` Henning Schild
2018-04-25 10:11 ` Jan Kiszka
2018-05-08 17:40 ` Henning Schild
2018-04-23 13:21 ` [RFC][PATCH 3/3] recipes-debian: Add example recipe to test Debian .dsc support Alexander Smirnov
2018-04-23 14:36 ` [RFC][PATCH 0/3] Experiments with .dsc backend Henning Schild
2018-04-23 15:26 ` Alexander Smirnov
2018-04-23 16:03 ` Henning Schild
2018-04-27 15:46 ` Alexander Smirnov
2018-05-02 8:19 ` Henning Schild
2018-05-08 17:37 ` Henning Schild
2018-05-08 18:31 ` Alexander Smirnov
2018-05-09 7:37 ` Henning Schild
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e1165d50-d130-7b13-6aae-987a3e202dc2@ilbers.de \
--to=asmirnov@ilbers.de \
--cc=henning.schild@siemens.com \
--cc=isar-users@googlegroups.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox