feat: add Debian archive (.deb) file cataloger (#3704)

* feat: add Debian archive (.deb) file cataloger

Add a cataloger that parses Debian package (.deb) archive files directly,
allowing Syft to discover packages from .deb files without requiring
them to be installed on the system. This implements issue #3315.

Key features:
- Parse .deb AR archives to extract package metadata
- Support for gzip, xz, and zstd compressed control files
- Extract package metadata from control files
- Process file information from md5sums files
- Mark configuration files from conffiles entries
- Handle trailing slashes in archive member names

Signed-off-by: Alan Pope <alan.pope@anchore.com>

* chore: run go mod tidy to fix failing workflow

Signed-off-by: Alan Pope <alan.pope@anchore.com>

* add license processing to dpkg archive cataloger + add tests

Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com>

* update json schema with dpkg archive type

Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com>

* update comments

Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com>

---------

Signed-off-by: Alan Pope <alan.pope@anchore.com>
Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com>
Co-authored-by: Alex Goodman <wagoodman@users.noreply.github.com>
This commit is contained in:
Alan Pope
2025-03-19 20:03:21 +00:00
committed by GitHub
co-authored by Alex Goodman
parent be0959cabf
commit 5fa8e9c6e9
19 changed files with 3506 additions and 12 deletions
File diff suppressed because it is too large Load Diff
+64 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "anchore.io/schema/syft/json/16.0.22/document",
"$id": "anchore.io/schema/syft/json/16.0.23/document",
"$ref": "#/$defs/Document",
"$defs": {
"AlpmDbEntry": {
@@ -586,6 +586,66 @@
"productVersion"
]
},
"DpkgArchiveEntry": {
"properties": {
"package": {
"type": "string"
},
"source": {
"type": "string"
},
"version": {
"type": "string"
},
"sourceVersion": {
"type": "string"
},
"architecture": {
"type": "string"
},
"maintainer": {
"type": "string"
},
"installedSize": {
"type": "integer"
},
"provides": {
"items": {
"type": "string"
},
"type": "array"
},
"depends": {
"items": {
"type": "string"
},
"type": "array"
},
"preDepends": {
"items": {
"type": "string"
},
"type": "array"
},
"files": {
"items": {
"$ref": "#/$defs/DpkgFileRecord"
},
"type": "array"
}
},
"type": "object",
"required": [
"package",
"source",
"version",
"sourceVersion",
"architecture",
"maintainer",
"installedSize",
"files"
]
},
"DpkgDbEntry": {
"properties": {
"package": {
@@ -1721,6 +1781,9 @@
{
"$ref": "#/$defs/DotnetPortableExecutableEntry"
},
{
"$ref": "#/$defs/DpkgArchiveEntry"
},
{
"$ref": "#/$defs/DpkgDbEntry"
},