{"record":{"id":"9b201a10b2278aa1","repo":"jordansissel/fpm","slug":"unknown-compression-type-compression-for-data","errorCode":null,"errorMessage":"Unknown compression type '#{compression}' for data.tar in deb source package #{package}","messagePattern":"Unknown compression type '#(.+?)' for data\\.tar in deb source package #(.+?)","errorType":"validation","errorClass":"FPM::InvalidPackageConfiguration","httpStatus":null,"severity":"error","filePath":"lib/fpm/package/deb.rb","lineNumber":490,"sourceCode":"      when \"gz\"\n        datatar = \"data.tar.gz\"\n        compression = \"-z\"\n      when \"bzip2\",\"bz2\"\n        datatar = \"data.tar.bz2\"\n        compression = \"-j\"\n      when \"xz\"\n        datatar = \"data.tar.xz\"\n        compression = \"-J\"\n      when \"zst\"\n        datatar = \"data.tar.zst\"\n        compression = \"--use-compress-program 'zstd -d'\"\n      when 'tar'\n        datatar = \"data.tar\"\n        compression = \"\"\n      when nil\n        raise FPM::InvalidPackageConfiguration, \"Missing data.tar in deb source package #{package}\"\n      else\n        raise FPM::InvalidPackageConfiguration,\n          \"Unknown compression type '#{compression}' for data.tar in deb source package #{package}\"\n    end\n\n    # unpack the data.tar.{gz,bz2,xz} from the deb package into staging_path\n    safesystem(ar_cmd[0] + \" p #{package} #{datatar} | tar #{compression} -xf - -C #{staging_path}\")\n  end # def extract_files\n\n  def output(output_path)\n    self.provides = self.provides.collect { |p| fix_provides(p) }\n\n    self.provides.each do |provide|\n      if !valid_provides_field?(provide)\n        raise FPM::InvalidPackageConfiguration, \"Found invalid Provides field values (#{provide.inspect}). This is not valid in a Debian package.\"\n      end\n    end\n    output_check(output_path)\n    # Abort if the target path already exists.\n","sourceCodeStart":472,"sourceCodeEnd":508,"githubUrl":"https://github.com/jordansissel/fpm/blob/b6d77ba72a560b687723376a0e5115c3a92634ad/lib/fpm/package/deb.rb#L472-L508","documentation":"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.","triggerScenarios":"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).","commonSituations":"Legacy/embedded tooling emitting lzma-compressed payloads; debs repacked by scripts that rename or recompress members; toolchain drift in conversion pipelines.","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"],"exampleFix":"# before\nfpm -s deb -t rpm old.deb          # data.tar.lzma\n\n# after\ndpkg-deb -R old.deb /tmp/old\ndpkg-deb -b -Zxz /tmp/old /tmp/old-fixed.deb\nfpm -s deb -t rpm /tmp/old-fixed.deb","handlingStrategy":"validation","validationCode":"SUPPORTED = %w[gz bz2 xz zst tar]\nmembers = `ar t #{Shellwords.escape(path)}`.split(\"\\n\")\ndat = members.find { |m| m.start_with?('data.tar') }\nsuffix = dat && dat.split('.').last\nabort \"unsupported data.tar compression '.#{suffix}' -- repack with dpkg-deb -Zxz\" unless SUPPORTED.include?(suffix)","typeGuard":"def supported_data_member?(ar_member)\n  %w[gz bz2 xz zst tar].include?(ar_member.split('.').last)\nend","tryCatchPattern":"begin\n  pkg.input(path)\nrescue FPM::InvalidPackageConfiguration => e\n  raise unless e.message =~ /Unknown compression type .* data\\.tar/\n  system(\"dpkg-deb -R #{path} /tmp/repack && dpkg-deb -b -Zxz /tmp/repack #{path}\")\n  retry\nend","preventionTips":["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"],"tags":["fpm","deb","compression","input","packaging"],"backgroundTag":"unsupported-compression-format","analyzedSha":"b6d77ba72a560b687723376a0e5115c3a92634ad","analyzedAt":"2026-08-21T16:39:02.570Z","schemaVersion":2},"datasetVersion":"2026-08-21T18:17:14.833Z"}