jordansissel/fpm · error · FPM::InvalidPackageConfiguration
Unknown compression type '#{compression}' for data.tar in de
Error message
Unknown compression type '#{compression}' for data.tar in deb source package #{package} What it means
Same code path as the control.tar variant, but for the payload member while extracting files from a .deb: the suffix of the first ar member matching data.tar must be one of gz, bzip2, xz, zst or plain tar. Anything else raises FPM::InvalidPackageConfiguration with the unrecognized compression value for data.tar.
Source
Thrown at lib/fpm/package/deb.rb:490
when "gz"
datatar = "data.tar.gz"
compression = "-z"
when "bzip2","bz2"
datatar = "data.tar.bz2"
compression = "-j"
when "xz"
datatar = "data.tar.xz"
compression = "-J"
when "zst"
datatar = "data.tar.zst"
compression = "--use-compress-program 'zstd -d'"
when 'tar'
datatar = "data.tar"
compression = ""
when nil
raise FPM::InvalidPackageConfiguration, "Missing data.tar in deb source package #{package}"
else
raise FPM::InvalidPackageConfiguration,
"Unknown compression type '#{compression}' for data.tar in deb source package #{package}"
end
# unpack the data.tar.{gz,bz2,xz} from the deb package into staging_path
safesystem(ar_cmd[0] + " p #{package} #{datatar} | tar #{compression} -xf - -C #{staging_path}")
end # def extract_files
def output(output_path)
self.provides = self.provides.collect { |p| fix_provides(p) }
self.provides.each do |provide|
if !valid_provides_field?(provide)
raise FPM::InvalidPackageConfiguration, "Found invalid Provides field values (#{provide.inspect}). This is not valid in a Debian package."
end
end
output_check(output_path)
# Abort if the target path already exists.
View on GitHub (pinned to b6d77ba72a)
Solutions
- List members with ar t package.deb and check the exact data.tar.* suffix
- Repack with a supported compression: dpkg-deb -R package.deb tmp && dpkg-deb -b -Zxz tmp fixed.deb, then convert fixed.deb
- Change the producing tool to use gz/xz/zst for both control and data members
Example fix
# before fpm -s deb -t rpm old.deb # data.tar.lzma # after dpkg-deb -R old.deb /tmp/old dpkg-deb -b -Zxz /tmp/old /tmp/old-fixed.deb fpm -s deb -t rpm /tmp/old-fixed.deb
Defensive patterns
Strategy: validation
Validate before calling
SUPPORTED = %w[gz bz2 xz zst tar]
members = `ar t #{Shellwords.escape(path)}`.split("\n")
dat = members.find { |m| m.start_with?('data.tar') }
suffix = dat && dat.split('.').last
abort "unsupported data.tar compression '.#{suffix}' -- repack with dpkg-deb -Zxz" unless SUPPORTED.include?(suffix) Type guard
def supported_data_member?(ar_member)
%w[gz bz2 xz zst tar].include?(ar_member.split('.').last)
end Try / catch
begin
pkg.input(path)
rescue FPM::InvalidPackageConfiguration => e
raise unless e.message =~ /Unknown compression type .* data\.tar/
system("dpkg-deb -R #{path} /tmp/repack && dpkg-deb -b -Zxz /tmp/repack #{path}")
retry
end Prevention
- Forbid lzma/lz4 member compression in your deb-producing toolchain
- Repack with dpkg-deb -R + dpkg-deb -b -Zxz as the standard remediation step before conversion
- Automate the ar t suffix whitelist check in conversion CI
When it happens
Trigger: Converting a deb containing data.tar.lzma or another unsupported compression for its payload, or an ar member name whose derived suffix string does not match any known case (mangled names, stray whitespace).
Common situations: Legacy/embedded tooling emitting lzma-compressed payloads; debs repacked by scripts that rename or recompress members; toolchain drift in conversion pipelines.
Related errors
- Unknown compression type '#{compression}' for control.tar in
- deb compression value of '#{value}' is invalid. Must be one
- Missing control.tar in deb source package #{package}
- Unsupported version string '#{parse.call("Version")}'
- Missing data.tar in deb source package #{package}
AI-assisted analysis of jordansissel/fpm@b6d77ba72a (2026-08-21).
Data as JSON: /api/errors/9b201a10b2278aa1.
Report an issue: GitHub.