Skip to content

Commit fb6476d

Browse files
Update debian support (#1096)
* Support sending source PURLs to purldb Signed-off-by: Ayan Sinha Mahapatra <ayansmahapatra@gmail.com> * Add namespace from distro-id Signed-off-by: Ayan Sinha Mahapatra <ayansmahapatra@gmail.com> --------- Signed-off-by: Ayan Sinha Mahapatra <ayansmahapatra@gmail.com>
1 parent 85b0491 commit fb6476d

File tree

4 files changed

+49
-18
lines changed

4 files changed

+49
-18
lines changed

scanpipe/pipes/purldb.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -285,11 +285,19 @@ def get_unique_unresolved_purls(project):
285285
def populate_purldb_with_discovered_packages(project, logger=logger.info):
286286
"""Add DiscoveredPackage to PurlDB."""
287287
discoveredpackages = project.discoveredpackages.all()
288-
packages = [{"purl": pkg.purl} for pkg in discoveredpackages]
288+
packages_to_populate = []
289+
for pkg in discoveredpackages:
290+
package = {"purl": pkg.purl}
291+
if pkg.source_packages:
292+
package["source_purl"] = pkg.source_packages
293+
packages_to_populate.append(package)
289294

290-
logger(f"Populating PurlDB with {len(packages):,d} PURLs from DiscoveredPackage")
295+
logger(
296+
f"Populating PurlDB with {len(packages_to_populate):,d}"
297+
f" PURLs from DiscoveredPackage"
298+
)
291299
feed_purldb(
292-
packages=packages,
300+
packages=packages_to_populate,
293301
chunk_size=100,
294302
logger=logger,
295303
)

scanpipe/pipes/rootfs.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import fnmatch
2424
import logging
2525
import os
26+
from collections import Counter
2627

2728
from django.core.exceptions import ObjectDoesNotExist
2829
from django.db.models import Q
@@ -263,10 +264,30 @@ def scan_rootfs_for_system_packages(project, rootfs):
263264
logger.info(f"rootfs location: {rootfs.location}")
264265

265266
installed_packages = rootfs.get_installed_packages(package_getter)
267+
268+
created_system_packages = []
269+
seen_namespaces = []
266270
for index, (purl, package) in enumerate(installed_packages):
267271
logger.info(f"Creating package #{index}: {purl}")
272+
created_system_packages.append(package)
273+
seen_namespaces.append(package.namespace)
268274
_create_system_package(project, purl, package)
269275

276+
namespace_counts = Counter(seen_namespaces)
277+
# we overwite namespace only when there are multiple
278+
# namespaces in the packages
279+
if not len(namespace_counts.keys()) > 1:
280+
return
281+
282+
most_seen_namespace = max(namespace_counts)
283+
# if the distro_id is different from the namespace
284+
# most seen in packages, we update all the package
285+
# namespaces to the distro_id
286+
if most_seen_namespace != distro_id:
287+
for package in created_system_packages:
288+
if package.namespace != distro_id:
289+
package.update(namespace=distro_id)
290+
270291

271292
def get_resource_with_md5(project, status):
272293
"""
81 Bytes
Binary file not shown.

scanpipe/tests/data/basic-rootfs_root_filesystems.json

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,24 +31,26 @@
3131
"distro": {
3232
"os": "linux",
3333
"architecture": null,
34-
"name": "Debian GNU/Linux",
35-
"version": "9 (stretch)",
36-
"identifier": "debian",
37-
"id_like": null,
38-
"version_codename": null,
39-
"version_id": "9",
40-
"pretty_name": "Debian GNU/Linux 9 (stretch)",
34+
"name": "Ubuntu",
35+
"version": "22.04.3 LTS (Jammy Jellyfish)",
36+
"identifier": "ubuntu",
37+
"id_like": "debian",
38+
"version_codename": "jammy",
39+
"version_id": "22.04",
40+
"pretty_name": "Ubuntu 22.04.3 LTS",
4141
"cpe_name": null,
42-
"home_url": "https://www.debian.org/",
42+
"home_url": "https://www.ubuntu.com/",
4343
"documentation_url": null,
44-
"support_url": "https://www.debian.org/support",
45-
"bug_report_url": "https://bugs.debian.org/",
46-
"privacy_policy_url": null,
44+
"support_url": "https://help.ubuntu.com/",
45+
"bug_report_url": "https://bugs.launchpad.net/ubuntu/",
46+
"privacy_policy_url": "https://www.ubuntu.com/legal/terms-and-policies/privacy-policy",
4747
"build_id": null,
4848
"variant": null,
4949
"variant_id": null,
5050
"logo": null,
51-
"extra_data": {}
51+
"extra_data": {
52+
"UBUNTU_CODENAME": "jammy"
53+
}
5254
}
5355
}
5456
]
@@ -355,9 +357,9 @@
355357
"status": "ignored-not-interesting",
356358
"tag": "",
357359
"extension": "",
358-
"md5": "8589b473401e7ebcca5d97204405c887",
359-
"sha1": "29420ee3cb176f64209d5beddc5713133fa7c2d4",
360-
"sha256": "aa6ccd5b1ade06c11f679cc781bdd3158f1007266ea391ed98a1bbf365641fd4",
360+
"md5": "fd30c92c61acbdebbd205e33534ac9bc",
361+
"sha1": "46d2cadf740c18ed8a1b30dbd7f5eeee521e1e8f",
362+
"sha256": "4bde2c39f541afb5ac413a03c8e5f57aa99b8fab304a62386dc0b16044cc0e2d",
361363
"sha512": "",
362364
"programming_language": "",
363365
"is_binary": false,

0 commit comments

Comments
 (0)