Complete Yocto mirror with license table for TQMa6UL (2038-compliance)

- 264 license table entries with exact download URLs (224/264 resolved)
- Complete sources/ directory with all BitBake recipes
- Build configuration: tqma6ul-multi-mba6ulx, spaetzle (musl)
- Full traceability for Softwarefreigabeantrag
- GCC 13.4.0, Linux 6.6.102, U-Boot 2023.04, musl 1.2.4
- License distribution: GPL-2.0 (24), MIT (23), GPL-2.0+ (18), BSD-3 (16)
This commit is contained in:
Siggi (OpenClaw Agent)
2026-03-01 20:58:18 +00:00
commit 16accb6b24
15086 changed files with 1292356 additions and 0 deletions

View File

@@ -0,0 +1,100 @@
From 8a18a6c1dea7cce6669d0eeb4230e85aa88d8e44 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Fri, 23 Nov 2018 17:03:58 +0800
Subject: [PATCH 02/11] run_program support timeout
Upstream-Status: Pending
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
blivet/util.py | 70 +++++++++++++++++++++++++++++---------------------
1 file changed, 41 insertions(+), 29 deletions(-)
diff --git a/blivet/util.py b/blivet/util.py
index f8a8f88..a5da7b6 100644
--- a/blivet/util.py
+++ b/blivet/util.py
@@ -171,6 +171,30 @@ class Path(str):
def __hash__(self):
return self._path.__hash__()
+def timeout_command(argv, timeout, *args, **kwargs):
+ """call shell-command and either return its output or kill it
+ if it doesn't normally exit within timeout seconds and return None"""
+ import subprocess, datetime, os, time, signal
+ start = datetime.datetime.now()
+
+ try:
+ proc = subprocess.Popen(argv, *args, **kwargs)
+ while proc.poll() is None:
+ time.sleep(0.1)
+ now = datetime.datetime.now()
+ if (now - start).seconds> timeout:
+ os.kill(proc.pid, signal.SIGKILL)
+ os.waitpid(-1, os.WNOHANG)
+ program_log.debug("%d seconds timeout" % timeout)
+ return (-1, None)
+
+
+ except OSError as e:
+ program_log.error("Error running %s: %s", argv[0], e.strerror)
+ raise
+
+ program_log.debug("Return code: %d", proc.returncode)
+ return (proc.returncode, proc.stdout.read())
def _run_program(argv, root='/', stdin=None, env_prune=None, stderr_to_stdout=False, binary_output=False):
if env_prune is None:
@@ -193,35 +217,23 @@ def _run_program(argv, root='/', stdin=None, env_prune=None, stderr_to_stdout=Fa
stderr_dir = subprocess.STDOUT
else:
stderr_dir = subprocess.PIPE
- try:
- proc = subprocess.Popen(argv, # pylint: disable=subprocess-popen-preexec-fn
- stdin=stdin,
- stdout=subprocess.PIPE,
- stderr=stderr_dir,
- close_fds=True,
- preexec_fn=chroot, cwd=root, env=env)
-
- out, err = proc.communicate()
- if not binary_output and six.PY3:
- out = out.decode("utf-8")
- if out:
- if not stderr_to_stdout:
- program_log.info("stdout:")
- for line in out.splitlines():
- program_log.info("%s", line)
-
- if not stderr_to_stdout and err:
- program_log.info("stderr:")
- for line in err.splitlines():
- program_log.info("%s", line)
-
- except OSError as e:
- program_log.error("Error running %s: %s", argv[0], e.strerror)
- raise
-
- program_log.debug("Return code: %d", proc.returncode)
-
- return (proc.returncode, out)
+
+ res, out = timeout_command(argv, 10,
+ stdin=stdin,
+ stdout=subprocess.PIPE,
+ stderr=stderr_dir,
+ close_fds=True,
+ preexec_fn=chroot, cwd=root, env=env)
+ if not binary_output and six.PY3:
+ out = out.decode("utf-8")
+ if out:
+ if not stderr_to_stdout:
+ program_log.info("stdout:")
+ for line in out.splitlines():
+ program_log.info("%s", line)
+
+ return (res, out)
+
def run_program(*args, **kwargs):

View File

@@ -0,0 +1,63 @@
From 112b825541f498762f373cfc9918e444dda74095 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Mon, 8 May 2017 16:18:02 +0800
Subject: [PATCH 03/11] support infinit timeout
Upstream-Status: Pending
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
blivet/util.py | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/blivet/util.py b/blivet/util.py
index a5da7b6..58117ae 100644
--- a/blivet/util.py
+++ b/blivet/util.py
@@ -171,6 +171,7 @@ class Path(str):
def __hash__(self):
return self._path.__hash__()
+# timeout = -1 means infinite timeout, always wait.
def timeout_command(argv, timeout, *args, **kwargs):
"""call shell-command and either return its output or kill it
if it doesn't normally exit within timeout seconds and return None"""
@@ -182,7 +183,7 @@ def timeout_command(argv, timeout, *args, **kwargs):
while proc.poll() is None:
time.sleep(0.1)
now = datetime.datetime.now()
- if (now - start).seconds> timeout:
+ if timeout != -1 and (now - start).seconds> timeout:
os.kill(proc.pid, signal.SIGKILL)
os.waitpid(-1, os.WNOHANG)
program_log.debug("%d seconds timeout" % timeout)
@@ -196,7 +197,7 @@ def timeout_command(argv, timeout, *args, **kwargs):
program_log.debug("Return code: %d", proc.returncode)
return (proc.returncode, proc.stdout.read())
-def _run_program(argv, root='/', stdin=None, env_prune=None, stderr_to_stdout=False, binary_output=False):
+def _run_program(argv, root='/', stdin=None, env_prune=None, stderr_to_stdout=False, binary_output=False, timeout=10):
if env_prune is None:
env_prune = []
@@ -205,7 +206,10 @@ def _run_program(argv, root='/', stdin=None, env_prune=None, stderr_to_stdout=Fa
os.chroot(root)
with program_log_lock: # pylint: disable=not-context-manager
- program_log.info("Running... %s", " ".join(argv))
+ if timeout != -1:
+ program_log.info("Running... %s", " ".join(argv))
+ else:
+ program_log.info("Running... %s ...infinite timeout", " ".join(argv))
env = os.environ.copy()
env.update({"LC_ALL": "C",
@@ -218,7 +222,7 @@ def _run_program(argv, root='/', stdin=None, env_prune=None, stderr_to_stdout=Fa
else:
stderr_dir = subprocess.PIPE
- res, out = timeout_command(argv, 10,
+ res, out = timeout_command(argv, timeout,
stdin=stdin,
stdout=subprocess.PIPE,
stderr=stderr_dir,

View File

@@ -0,0 +1,45 @@
From c645c83628b2290855cbd225e13c038ab75a7f74 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Fri, 26 Aug 2016 02:02:49 -0400
Subject: [PATCH 05/11] fix incorrect timeout while system time changed
While system time changed by NTP, invoking timeout_command
breaks with incorrect timeout.
--------
|05:40:55,872 INFO program: Running... mount -t ext2 -o
defaults,ro /dev/sda2 /mnt/sysimage
|01:40:55,086 DEBUG program: 10 seconds timeout
--------
Use numbert count to replace current time count could workaround
the issue.
Upstream-Status: Pending
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
blivet/util.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/blivet/util.py b/blivet/util.py
index 58117ae..5bc5804 100644
--- a/blivet/util.py
+++ b/blivet/util.py
@@ -176,14 +176,14 @@ def timeout_command(argv, timeout, *args, **kwargs):
"""call shell-command and either return its output or kill it
if it doesn't normally exit within timeout seconds and return None"""
import subprocess, datetime, os, time, signal
- start = datetime.datetime.now()
+ count = 0
try:
proc = subprocess.Popen(argv, *args, **kwargs)
while proc.poll() is None:
time.sleep(0.1)
- now = datetime.datetime.now()
- if timeout != -1 and (now - start).seconds> timeout:
+ count += 1
+ if timeout != -1 and count > timeout*10:
os.kill(proc.pid, signal.SIGKILL)
os.waitpid(-1, os.WNOHANG)
program_log.debug("%d seconds timeout" % timeout)

View File

@@ -0,0 +1,42 @@
From b55b1023f8f1ad3121928eb9d0ee9902f5474752 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Mon, 8 May 2017 16:33:15 +0800
Subject: [PATCH] tweak btrfs packages
In oe-cre/yocto, we name btrfs package with btrfs-tools,
rather than btrfs-progs.
Upstream-Status: Inappropriate [oe specific]
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
blivet/devices/btrfs.py | 2 +-
blivet/formats/fs.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/blivet/devices/btrfs.py b/blivet/devices/btrfs.py
index c446e7e..37c183e 100644
--- a/blivet/devices/btrfs.py
+++ b/blivet/devices/btrfs.py
@@ -58,7 +58,7 @@ class BTRFSDevice(StorageDevice):
""" Base class for BTRFS volume and sub-volume devices. """
_type = "btrfs"
- _packages = ["btrfs-progs"]
+ _packages = ["btrfs-tools"]
_external_dependencies = [availability.BLOCKDEV_BTRFS_PLUGIN]
def __init__(self, *args, **kwargs):
diff --git a/blivet/formats/fs.py b/blivet/formats/fs.py
index 1e102b6..f16941e 100644
--- a/blivet/formats/fs.py
+++ b/blivet/formats/fs.py
@@ -1050,7 +1050,7 @@ class BTRFS(FS):
_formattable = True
_linux_native = True
_supported = True
- _packages = ["btrfs-progs"]
+ _packages = ["btrfs-tools"]
_min_size = Size("256 MiB")
_max_size = Size("16 EiB")
_mkfs_class = fsmkfs.BTRFSMkfs

View File

@@ -0,0 +1,28 @@
From f159d71d742ace5640c7810bcc27365f8fde95a3 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Fri, 23 Nov 2018 17:07:22 +0800
Subject: [PATCH 07/11] invoking mount with infinite timeout
This large timeout is needed when running on machines with
lots of disks, or with slow disks.
Upstream-Status: Pending
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
blivet/util.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/blivet/util.py b/blivet/util.py
index 5bc5804..9de77e1 100644
--- a/blivet/util.py
+++ b/blivet/util.py
@@ -271,7 +271,7 @@ def mount(device, mountpoint, fstype, options=None):
makedirs(mountpoint)
argv = ["mount", "-t", fstype, "-o", options, device, mountpoint]
- return run_program(argv)
+ return run_program(argv, timeout=-1)
def umount(mountpoint):

View File

@@ -0,0 +1,35 @@
From 6a85945c060154581f5a129a6a946258bf9333c4 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Mon, 8 May 2017 03:54:12 -0400
Subject: [PATCH 08/11] use oe variable to replace hardcoded dir
Upstream-Status: Pending
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
Rebase for python3-blivet 3.4.0.
Signed-off-by: Kai Kang <kai.kang@windriver.com>
---
setup.py | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/setup.py b/setup.py
index e6bb3f3..700085b 100644
--- a/setup.py
+++ b/setup.py
@@ -73,10 +73,10 @@ class blivet_sdist(sdist):
data_files = [
- ('/etc/dbus-1/system.d', ['dbus/blivet.conf']),
- ('/usr/share/dbus-1/system-services', ['dbus/com.redhat.Blivet0.service']),
- ('/usr/libexec', ['dbus/blivetd']),
- ('/usr/lib/systemd/system', ['dbus/blivet.service'])
+ (os.environ.get('sysconfdir')+'/dbus-1/system.d', ['dbus/blivet.conf']),
+ (os.environ.get('datadir')+'/dbus-1/system-services', ['dbus/com.redhat.Blivet0.service']),
+ (os.environ.get('libexecdir'), ['dbus/blivetd']),
+ (os.environ.get('systemd_system_unitdir'), ['dbus/blivet.service'])
]

View File

@@ -0,0 +1,31 @@
From 9624b6d0dda40aaecbaf9530be819943575a2ec6 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Thu, 1 Jun 2017 16:05:27 +0800
Subject: [PATCH 09/11] invoking fsck with infinite timeout
This large timeout is needed when running on machines with
lots of disks, or with slow disks.
Upstream-Status: Pending
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
blivet/tasks/fsck.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/blivet/tasks/fsck.py b/blivet/tasks/fsck.py
index 5274f13..6e074c4 100644
--- a/blivet/tasks/fsck.py
+++ b/blivet/tasks/fsck.py
@@ -77,7 +77,7 @@ class FSCK(task.BasicApplication, fstask.FSTask):
raise FSError("\n".join(error_msgs))
try:
- rc = util.run_program(self._fsck_command)
+ rc = util.run_program(self._fsck_command, timeout=-1)
except OSError as e:
raise FSError("filesystem check failed: %s" % e)
--
2.7.4

View File

@@ -0,0 +1,32 @@
From abadd821acffd5dbc870f86dad3c3a6bf3f2f74f Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Fri, 16 Jun 2017 15:43:00 +0800
Subject: [PATCH 10/11] invoking mkfs with infinite timeout
This large timeout is needed when running on machines with
lots of disks, or with slow disks.
Upstream-Status: Pending
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
Rebase for python3-blivet 3.4.0.
Signed-off-by: Kai Kang <kai.kang@windriver.com>
---
blivet/tasks/fsmkfs.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/blivet/tasks/fsmkfs.py b/blivet/tasks/fsmkfs.py
index e9daa9e..2174cc3 100644
--- a/blivet/tasks/fsmkfs.py
+++ b/blivet/tasks/fsmkfs.py
@@ -207,7 +207,7 @@ class FSMkfs(task.BasicApplication, FSMkfsTask):
options = options or []
cmd = self._mkfs_command(options, label, set_uuid, nodiscard)
try:
- ret = util.run_program(cmd)
+ ret = util.run_program(cmd, timeout=-1)
except OSError as e:
raise FSError(e)

View File

@@ -0,0 +1,28 @@
From 5ee527fab06f9d33b162a6cd0c068d7b3ac2ecb0 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Tue, 6 Mar 2018 17:28:56 +0800
Subject: [PATCH] invoking dd with infinite timeout
This large timeout is needed when running on machines with
lots of disks, or with slow disks.
Upstream-Status: Pending
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
blivet/devices/partition.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/blivet/devices/partition.py b/blivet/devices/partition.py
index 2d67be8..a4cf9a0 100644
--- a/blivet/devices/partition.py
+++ b/blivet/devices/partition.py
@@ -677,7 +677,7 @@ class PartitionDevice(StorageDevice):
cmd = ["dd", "if=/dev/zero", "of=%s" % device, "bs=%d" % bs,
"seek=%d" % start, "count=%d" % count]
try:
- util.run_program(cmd)
+ util.run_program(cmd, timeout=-1)
except OSError as e:
log.error(str(e))
finally:

View File

@@ -0,0 +1,36 @@
DESCRIPTION = "A python module for system storage configuration"
HOMEPAGE = "http://fedoraproject.org/wiki/blivet"
LICENSE = "LGPL-2.0-or-later"
SECTION = "devel/python"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
SRC_URI += "\
file://0002-run_program-support-timeout.patch \
file://0003-support-infinit-timeout.patch \
file://0005-fix-incorrect-timeout-while-system-time-changed.patch \
file://0006-tweak-btrfs-packages.patch \
file://0007-invoking-mount-with-infinite-timeout.patch \
file://0008-use-oe-variable-to-replace-hardcoded-dir.patch \
file://0009-invoking-fsck-with-infinite-timeout.patch \
file://0010-invoking-mkfs-with-infinite-timeout.patch \
file://0011-invoking-dd-with-infinite-timeout.patch \
"
SRC_URI[sha256sum] = "9d97e37ebba01db28a1e6155cbd71c54fb55e9c2be5921982dc85bed316d8cfe"
inherit pypi features_check systemd setuptools3_legacy
REQUIRED_DISTRO_FEATURES = "systemd"
RDEPENDS:${PN} += "python3-pykickstart python3-pyudev \
parted python3-pyparted multipath-tools \
lsof cryptsetup libblockdev \
libbytesize \
"
FILES:${PN} += " \
${datadir}/dbus-1/system-services \
"
SYSTEMD_AUTO_ENABLE = "disable"
SYSTEMD_SERVICE:${PN} = "blivet.service"

View File

@@ -0,0 +1,21 @@
DESCRIPTION = "GUI tool for storage configuration using blivet library"
HOMEPAGE = "https://github.com/rhinstaller/blivet-gui"
LICENSE = "GPL-2.0-or-later"
SECTION = "devel/python"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
SRC_URI = "git://github.com/storaged-project/blivet-gui.git;branch=main;protocol=https"
SRCREV = "626b44610a30ad26734dd20642538caab5a9178a"
S = "${WORKDIR}/git"
inherit features_check setuptools3
REQUIRED_DISTRO_FEATURES = "x11 systemd gobject-introspection-data"
RDEPENDS:${PN} = "python3-pygobject python3 \
python3-blivet gtk+3 \
python3-pid libreport \
"
FILES:${PN} += "${datadir}/*"

View File

@@ -0,0 +1,40 @@
From 0d0ffab004306b1379f247016200ade381d1d181 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Wed, 8 Feb 2023 23:03:47 -0800
Subject: [PATCH] setup.py: Do not poke at git describe to find version
OE uses git snapshot and git describe --tags will emit a string which is
not PEP440 compliant version scheme. setuptools 67+ is strict about it
and fails to build. Therefore inject a static version.py from OE
environment and use that for version number based on PV
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
setup.py | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)
diff --git a/setup.py b/setup.py
index a77138f..df675cd 100644
--- a/setup.py
+++ b/setup.py
@@ -28,14 +28,8 @@ def main():
# Also, when git is not available (PyPi package), use stored version.py.
version_py = os.path.join(os.path.dirname(__file__), 'version.py')
- try:
- if sys.version_info < (2, 7) or (3,) <= sys.version_info < (3, 2):
- version_git = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE).communicate()[0]
- else:
- version_git = subprocess.check_output(["git", "describe", "--tags"]).rstrip()
- except:
- with open(version_py, 'r') as fh:
- version_git = open(version_py).read().strip().split('=')[-1].replace('"','')
+ with open(version_py, 'r') as fh:
+ version_git = open(version_py).read().strip().split('=')[-1].replace('"','')
version_msg = "# Do not edit this file, pipeline versioning is governed by git tags"
with open(version_py, 'w') as fh:
--
2.39.1

View File

@@ -0,0 +1,26 @@
# Copyright (C) 2015 Khem Raj <raj.khem@gmail.com>
# Released under the MIT license (see COPYING.MIT for the terms)
DESCRIPTION = "Python library for CSON (schema-compressed JSON)"
HOMEPAGE = "https://github.com/gt3389b/python-cson/"
LICENSE = "MIT"
SECTION = "devel/python"
LIC_FILES_CHKSUM = "file://LICENSE;md5=7709d2635e63ab96973055a23c2a4cac"
PV = "1.0.9+1.0.10"
SRCREV = "69090778bccc5ed124342ba288597fbb2bfa9f39"
SRC_URI = "git://github.com/gt3389b/python-cson.git;branch=master;protocol=https \
file://0001-setup.py-Do-not-poke-at-git-describe-to-find-version.patch"
S = "${WORKDIR}/git"
RDEPENDS:${PN} = "python3-json"
inherit setuptools3
do_configure:prepend() {
echo "__version__=${PV}" > ${S}/version.py
}
BBCLASSEXTEND = "native"

View File

@@ -0,0 +1,16 @@
SUMMARY = "A python library for handling exceptions"
DESCRIPTION = "The python-meh package is a python library for handling, saving, and reporting \
exceptions."
HOMEPAGE = "https://github.com/rhinstaller/python-meh"
LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
inherit setuptools3_legacy
S = "${WORKDIR}/git"
SRC_URI = "git://github.com/rhinstaller/python-meh.git;protocol=https;branch=master"
SRCREV = "eb5d4adc3b838704b6a68f0f77ada2063a11ab1b"
FILES:${PN} += "${datadir}/python-meh"

View File

@@ -0,0 +1,16 @@
SUMMARY = "PyEphem astronomical calculations"
HOMEPAGE = "http://rhodesmill.org/pyephem/"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=9c930b395b435b00bb13ec83b0c99f40"
SRC_URI[sha256sum] = "0c64a8aa401574c75942045b9af70d1656e14c5366151c0cbb400cbeedc2362a"
PYPI_PACKAGE = "ephem"
inherit pypi setuptools3
RDEPENDS:${PN} += "\
python3-datetime \
python3-math \
"

View File

@@ -0,0 +1,146 @@
From 3540ddcc7448dc784b65c74424c8a25132cb8534 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Tue, 31 Jul 2018 17:24:47 +0800
Subject: [PATCH] support authentication for kickstart
While download kickstart file from web server,
we support basic/digest authentication.
Add KickstartAuthError to report authentication failure,
which the invoker could parse this specific error.
Upstream-Status: Inappropriate [oe specific]
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
pykickstart/errors.py | 17 +++++++++++++++++
pykickstart/load.py | 32 +++++++++++++++++++++++++++-----
pykickstart/parser.py | 4 ++--
3 files changed, 46 insertions(+), 7 deletions(-)
diff --git a/pykickstart/errors.py b/pykickstart/errors.py
index 8294f59..3d20bf8 100644
--- a/pykickstart/errors.py
+++ b/pykickstart/errors.py
@@ -32,6 +32,9 @@ This module exports several exception classes:
KickstartVersionError - An exception for errors relating to unsupported
syntax versions.
+ KickstartAuthError - An exception for errors relating to authentication
+ failed while downloading kickstart from web server
+
And some warning classes:
KickstartWarning - A generic warning class.
@@ -125,3 +128,17 @@ class KickstartDeprecationWarning(KickstartParseWarning, DeprecationWarning):
"""A class for warnings occurring during parsing related to using deprecated
commands and options.
"""
+
+class KickstartAuthError(KickstartError):
+ """An exception for errors relating to authentication failed while
+ downloading kickstart from web server
+ """
+ def __init__(self, msg):
+ """Create a new KickstartAuthError exception instance with the
+ descriptive message val. val should be the return value of
+ formatErrorMsg.
+ """
+ KickstartError.__init__(self, msg)
+
+ def __str__(self):
+ return self.value
diff --git a/pykickstart/load.py b/pykickstart/load.py
index eb76b65..f51cf08 100644
--- a/pykickstart/load.py
+++ b/pykickstart/load.py
@@ -18,9 +18,11 @@
# with the express permission of Red Hat, Inc.
#
import requests
+from requests.auth import HTTPDigestAuth
+from requests.auth import HTTPBasicAuth
import shutil
-from pykickstart.errors import KickstartError
+from pykickstart.errors import KickstartError, KickstartAuthError
from pykickstart.i18n import _
from requests.exceptions import SSLError, RequestException
@@ -28,7 +30,7 @@ is_url = lambda location: '://' in location # RFC 3986
SSL_VERIFY = True
-def load_to_str(location):
+def load_to_str(location, user=None, passwd=None):
'''Load a destination URL or file into a string.
Type of input is inferred automatically.
@@ -39,7 +41,7 @@ def load_to_str(location):
Raises: KickstartError on error reading'''
if is_url(location):
- return _load_url(location)
+ return _load_url(location, user=user, passwd=passwd)
else:
return _load_file(location)
@@ -69,11 +71,31 @@ def load_to_file(location, destination):
_copy_file(location, destination)
return destination
-def _load_url(location):
+def _get_auth(location, user=None, passwd=None):
+
+ auth = None
+ request = requests.get(location, verify=SSL_VERIFY)
+ if request.status_code == requests.codes.unauthorized:
+ if user is None or passwd is None:
+ log.info("Require Authentication")
+ raise KickstartAuthError("Require Authentication.\nAppend 'ksuser=<username> kspasswd=<password>' to boot command")
+
+ reasons = request.headers.get("WWW-Authenticate", "").split()
+ if reasons:
+ auth_type = reasons[0]
+ if auth_type == "Basic":
+ auth = HTTPBasicAuth(user, passwd)
+ elif auth_type == "Digest":
+ auth=HTTPDigestAuth(user, passwd)
+
+ return auth
+
+def _load_url(location, user=None, passwd=None):
'''Load a location (URL or filename) and return contents as string'''
+ auth = _get_auth(location, user=user, passwd=passwd)
try:
- request = requests.get(location, verify=SSL_VERIFY)
+ request = requests.get(location, verify=SSL_VERIFY, auth=auth)
except SSLError as e:
raise KickstartError(_('Error securely accessing URL "%s"') % location + ': {e}'.format(e=str(e)))
except RequestException as e:
diff --git a/pykickstart/parser.py b/pykickstart/parser.py
index 7edf8aa..46c5299 100644
--- a/pykickstart/parser.py
+++ b/pykickstart/parser.py
@@ -790,7 +790,7 @@ class KickstartParser(object):
i = PutBackIterator(s.splitlines(True) + [""])
self._stateMachine(i)
- def readKickstart(self, f, reset=True):
+ def readKickstart(self, f, reset=True, username=None, password=None):
"""Process a kickstart file, given by the filename f."""
if reset:
self._reset()
@@ -811,7 +811,7 @@ class KickstartParser(object):
self.currentdir[self._includeDepth] = cd
try:
- s = load_to_str(f)
+ s = load_to_str(f, user=username, passwd=password)
except KickstartError as e:
raise KickstartError(_("Unable to open input kickstart file: %s") % str(e), lineno=0)
--
2.34.1

View File

@@ -0,0 +1,71 @@
From 62fdead139edb0f29b2f222efcb8f39be15b057e Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Mon, 30 Jul 2018 15:47:13 +0800
Subject: [PATCH 2/4] pykickstart/parser.py: add lock for readKickstart and
support https without certification
- Add lock for readKickstart to fix race issue
- Support to download kickstart file through https without certification
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
Signed-off-by: Wang Mingyu <wangmy@fujitsu.com>
---
Upstream-Status: Pending
pykickstart/load.py | 2 +-
pykickstart/parser.py | 18 ++++++++++++++++++
2 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/pykickstart/load.py b/pykickstart/load.py
index 8da8051..e856c8d 100644
--- a/pykickstart/load.py
+++ b/pykickstart/load.py
@@ -32,7 +32,7 @@ log = logging.getLogger("anaconda.main")
is_url = lambda location: '://' in location # RFC 3986
-SSL_VERIFY = True
+SSL_VERIFY = False
def load_to_str(location, user=None, passwd=None):
'''Load a destination URL or file into a string.
diff --git a/pykickstart/parser.py b/pykickstart/parser.py
index b95ba90..a55a9a3 100644
--- a/pykickstart/parser.py
+++ b/pykickstart/parser.py
@@ -51,6 +51,20 @@ from pykickstart.i18n import _
STATE_END = "end"
STATE_COMMANDS = "commands"
+import threading
+_private_ks_lock = threading.RLock()
+
+class KsLock(object):
+ def __enter__(self):
+ _private_ks_lock.acquire()
+ return _private_ks_lock
+
+ def __exit__(self, exc_type, exc_val, exc_tb):
+ _private_ks_lock.release()
+
+
+_ks_lock = KsLock()
+
def _preprocessStateMachine(lineIter):
l = None
lineno = 0
@@ -791,6 +805,10 @@ class KickstartParser(object):
self._stateMachine(i)
def readKickstart(self, f, reset=True, username=None, password=None):
+ with _ks_lock:
+ self._readKickstart(f, reset=reset, username=username, password=password)
+
+ def _readKickstart(self, f, reset=True, username=None, password=None):
"""Process a kickstart file, given by the filename f."""
if reset:
self._reset()
--
2.34.1

View File

@@ -0,0 +1,48 @@
From 44226393812399c61de9ca9281efa002ad4f4c01 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Thu, 1 Jun 2017 15:15:15 +0800
Subject: [PATCH 3/4] comment out sections shutdown and environment in
generated kickstart file
Both of them is disabled by default.
Upstream-Status: Inappropriate [oe specific]
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
fixup! add comments of shutdown for user
---
pykickstart/commands/reboot.py | 3 +++
pykickstart/parser.py | 2 +-
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/pykickstart/commands/reboot.py b/pykickstart/commands/reboot.py
index 75a6d916..edfe83ff 100644
--- a/pykickstart/commands/reboot.py
+++ b/pykickstart/commands/reboot.py
@@ -43,6 +43,9 @@ class FC3_Reboot(KickstartCommand):
elif self.action == KS_SHUTDOWN:
retval += "# Shutdown after installation\nshutdown"
retval += self._getArgsAsStr() + "\n"
+ else:
+ retval += "# Shutdown after installation\n#shutdown"
+ retval += self._getArgsAsStr() + "\n"
return retval
diff --git a/pykickstart/parser.py b/pykickstart/parser.py
index bc59131b..b2d09d45 100644
--- a/pykickstart/parser.py
+++ b/pykickstart/parser.py
@@ -428,7 +428,7 @@ class Packages(KickstartObject):
if not self.default:
if self.environment:
- pkgs += "@^%s\n" % self.environment
+ pkgs += "#@^%s\n" % self.environment
grps = self.groupList
grps.sort()
--
2.7.4

View File

@@ -0,0 +1,82 @@
From 737e9a7c11233183f48ce6c83d38b504c8ffed12 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Mon, 30 Jul 2018 15:52:21 +0800
Subject: [PATCH] load.py: retry to invoke request with timeout
While networkless, use request to fetch kickstart file from
network, it failed and wait 300s to break, we should retry
to invoke request with timeout explicitly. So if it the
network is up, the fetch works.
Upstream-Status: Inappropriate [oe specific]
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
pykickstart/load.py | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/pykickstart/load.py b/pykickstart/load.py
index 58faba6..e856c8d 100644
--- a/pykickstart/load.py
+++ b/pykickstart/load.py
@@ -20,12 +20,16 @@
import requests
from requests.auth import HTTPDigestAuth
from requests.auth import HTTPBasicAuth
+import time
import shutil
from pykickstart.errors import KickstartError, KickstartAuthError
from pykickstart.i18n import _
from requests.exceptions import SSLError, RequestException
+import logging
+log = logging.getLogger("anaconda.main")
+
is_url = lambda location: '://' in location # RFC 3986
SSL_VERIFY = False
@@ -71,6 +75,29 @@ def load_to_file(location, destination):
_copy_file(location, destination)
return destination
+def _access_url(location):
+ status = False
+
+ # Retry 45 times, wait 45s~135s
+ i = 0
+ while i < 45:
+
+ try:
+ request = requests.get(location, verify=SSL_VERIFY, timeout=2)
+ except RequestException as e:
+ log.info("Try '%s' %d times, %s" % (location, i, str(e)))
+ status = False
+ i += 1
+ time.sleep(1)
+ continue
+
+ else:
+ status = True
+ return status
+
+ return status
+
+
def _get_auth(location, user=None, passwd=None):
auth = None
@@ -92,6 +119,10 @@ def _get_auth(location, user=None, passwd=None):
def _load_url(location, user=None, passwd=None):
'''Load a location (URL or filename) and return contents as string'''
+
+ if not _access_url(location):
+ raise KickstartError(_("Connection %s failed" % location))
+
auth = _get_auth(location, user=user, passwd=passwd)
try:
--
2.34.1

View File

@@ -0,0 +1,25 @@
DESCRIPTION = "A python library for manipulating kickstart files"
HOMEPAGE = "http://fedoraproject.org/wiki/pykickstart"
LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b"
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
DEPENDS = "python3"
RDEPENDS:${PN} = "python3 \
python3-requests \
python3-six \
"
S = "${WORKDIR}/git"
SRC_URI = "git://github.com/rhinstaller/pykickstart.git;protocol=https;branch=master \
file://0001-support-authentication-for-kickstart.patch \
file://0002-pykickstart-parser.py-add-lock-for-readKickstart-and.patch \
file://0003-comment-out-sections-shutdown-and-environment-in-gen.patch \
file://0004-load.py-retry-to-invoke-request-with-timeout.patch \
"
SRCREV = "fa6c80c0e5c6bee29d089899a10d26e6f7f8afd8"
UPSTREAM_CHECK_GITTAGREGEX = "r(?P<pver>\d+(\.\d+)+(-\d+)*)"
inherit setuptools3

View File

@@ -0,0 +1,27 @@
DESCRIPTION = "pyparted is a set of Python modules that provide Python programmers \
an interface to libparted, the GNU parted library for disk partitioning and \
filesystem manipulation."
SUMMARY = "Python bindings for libparted"
HOMEPAGE = "https://github.com/rhinstaller/pyparted"
LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "\
file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b \
file://src/_pedmodule.c;beginline=10;endline=22;md5=9e53304db812b80d0939e11bb69dcab2 \
"
SRC_URI[sha256sum] = "da985e116beb733371feb605b174db9eec8bd0eedffc8f739f8e603f51b521e7"
inherit pkgconfig pypi setuptools3
DEPENDS += "parted"
RDEPENDS:${PN}:class-target += " \
parted (>= 2.3) \
python3-codecs \
python3-math \
python3-numbers \
python3-stringold \
"
RDEPENDS:${PN}:class-native = ""
BBCLASSEXTEND = "native"

View File

@@ -0,0 +1,15 @@
SUMMARY = "Rich is a Python library for rich text and beautiful formatting in the terminal"
DESCRIPTION = "The Rich API makes it easy to add color and style to terminal output. \
Rich can also render pretty tables, progress bars, markdown, syntax highlighted source code, \
tracebacks, and more."
HOMEPAGE="https://github.com/Textualize/rich"
SECTION = "devel/python"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=b5f0b94fbc94f5ad9ae4efcf8a778303"
SRC_URI[sha256sum] = "5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa"
inherit pypi python_poetry_core
RDEPENDS:${PN} = "python3-pygments"

View File

@@ -0,0 +1,3 @@
#!/bin/sh
pytest --automake

View File

@@ -0,0 +1,36 @@
SUMMARY = "Cross-platform locking library"
DESCRIPTION = "Portalocker is a library to provide an easy API to file locking"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=152634da660a374ca18c0734ed07c63c"
SRC_URI[sha256sum] = "2b035aa7828e46c58e9b31390ee1f169b98e1066ab10b9a6a861fe7e25ee4f33"
DEPENDS += "python3-setuptools-scm-native"
inherit pypi python_setuptools_build_meta ptest
SRC_URI += " \
file://run-ptest \
"
RDEPENDS:${PN}-ptest += " \
python3-multiprocessing \
python3-pytest \
python3-redis \
python3-unittest-automake-output \
redis \
"
do_install_ptest() {
install -d ${D}${PTEST_PATH}/tests
cp -rf ${S}/portalocker_tests/* ${D}${PTEST_PATH}/tests/
rm -rf ${D}${PTEST_PATH}/tests/test_combined.py
}
RDEPENDS:${PN} += " \
python3-fcntl \
python3-logging \
"
BBCLASSEXTEND = "native nativesdk"

View File

@@ -0,0 +1,11 @@
SUMMARY = "pydot is is an interface to Graphviz."
HOMEPAGE = "https://github.com/pydot/pydot"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=3f6fa041dfcc7ff7747cfceaa34a3180"
SRC_URI[sha256sum] = "60246af215123fa062f21cd791be67dda23a6f280df09f68919e637a1e4f3235"
inherit pypi setuptools3
RDEPENDS:${PN} = "graphviz python3-pyparsing"

View File

@@ -0,0 +1,51 @@
SUMMARY = "Python WBEM Client and Provider Interface"
DESCRIPTION = "\
A Python library for making CIM (Common Information Model) operations over \
HTTP using the WBEM CIM-XML protocol. It is based on the idea that a good \
WBEM client should be easy to use and not necessarily require a large amount \
of programming knowledge. It is suitable for a large range of tasks from \
simply poking around to writing web and GUI applications. \
\
WBEM, or Web Based Enterprise Management is a manageability protocol, like \
SNMP, standardised by the Distributed Management Task Force (DMTF) available \
at http://www.dmtf.org/standards/wbem. \
\
It also provides a Python provider interface, and is the fastest and easiest \
way to write providers on the planet."
HOMEPAGE = "http://pywbem.github.io"
LICENSE = "LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=fbc093901857fcd118f065f900982c24"
SRC_URI[sha256sum] = "dc3b785840017f5fcb6381c56682598cebbfc8451851768f85e2318a84e06b68"
inherit pypi setuptools3 update-alternatives
DEPENDS += " \
python3-ply-native \
python3-pyyaml-native \
python3-six-native \
python3-wheel-native \
"
RDEPENDS:${PN} += "\
python3-datetime \
python3-io \
python3-logging \
python3-netclient \
python3-nocasedict \
python3-nocaselist \
python3-ply \
python3-pyyaml \
python3-requests \
python3-six \
python3-stringold \
python3-threading \
python3-unixadmin \
python3-xml \
python3-yamlloader \
"
ALTERNATIVE:${PN} = "mof_compiler"
ALTERNATIVE_TARGET[mof_compiler] = "${bindir}/mof_compiler"
ALTERNATIVE_PRIORITY = "60"

View File

@@ -0,0 +1,32 @@
SUMMARY = "A set of tools using pywbem"
DESCRIPTION = "A set of tools using pywbem to communicate with WBEM servers"
HOMEPAGE = "https://pywbemtools.readthedocs.io/en/stable/"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=e23fadd6ceef8c618fc1c65191d846fa"
SRC_URI[sha256sum] = "9d0162b74c0b34d4500c099dddfe518cadc295a1a7bfb0abefa740a134d80fea"
inherit pypi setuptools3
RDEPENDS:${PN}:class-target += "\
python3-ply \
python3-pyyaml \
python3-six \
python3-pywbem \
python3-click \
python3-requests \
python3-prompt-toolkit \
python3-mock \
python3-packaging \
python3-nocasedict \
python3-yamlloader \
python3-click-repl \
python3-click-spinner \
python3-asciitree \
python3-tabulate \
python3-pydicti \
python3-nocaselist \
python3-custom-inherit \
"
BBCLASSEXTEND = "native"

View File

@@ -0,0 +1,14 @@
SUMMARY = "Send file to trash natively under Mac OS X, Windows and Linux"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=05faa35ba1ca10b723f19d286c9d5237"
inherit pypi python_setuptools_build_meta
SRC_URI[sha256sum] = "b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf"
PYPI_PACKAGE = "Send2Trash"
RDEPENDS:${PN} += "\
python3-io \
python3-datetime \
"

View File

@@ -0,0 +1,24 @@
SUMMARY = "cui/gui tool for tuning of running processes"
HOMEPAGE = "https://rt.wiki.kernel.org/index.php/Tuna"
LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6"
SRC_URI = "git://git.kernel.org/pub/scm/utils/tuna/tuna.git;branch=main"
SRCREV = "b972b8ce386c29bcbcd45029a617db3db9e5b6ca"
S = "${WORKDIR}/git"
RDEPENDS:${PN} += " \
python3-io \
python3-linux-procfs \
python3-logging \
python3-six \
"
inherit setuptools3
do_install:append() {
install -m 0755 -d ${D}${bindir}
install -m 0755 ${S}/tuna-cmd.py ${D}${bindir}/tuna
}