{"record":{"id":"96dcd5c09f7517ef","repo":"jordansissel/fpm","slug":"unknown-compression-type-compression-for-cont","errorCode":null,"errorMessage":"Unknown compression type '#{compression}' for control.tar in deb source package #{package}","messagePattern":"Unknown compression type '#(.+?)' for control\\.tar in deb source package #(.+?)","errorType":"validation","errorClass":"FPM::InvalidPackageConfiguration","httpStatus":null,"severity":"error","filePath":"lib/fpm/package/deb.rb","lineNumber":365,"sourceCode":"      when \"gz\"\n        controltar = \"control.tar.gz\"\n        compression = \"-z\"\n      when \"bzip2\",\"bz2\"\n        controltar = \"control.tar.bz2\"\n        compression = \"-j\"\n      when \"xz\"\n        controltar = \"control.tar.xz\"\n        compression = \"-J\"\n      when \"zst\"\n        controltar = \"control.tar.zst\"\n        compression = \"--use-compress-program 'zstd -d'\"\n      when 'tar'\n        controltar = \"control.tar\"\n        compression = \"\"\n      when nil\n        raise FPM::InvalidPackageConfiguration, \"Missing control.tar in deb source package #{package}\"\n      else\n        raise FPM::InvalidPackageConfiguration,\n          \"Unknown compression type '#{compression}' for control.tar in deb source package #{package}\"\n    end\n\n    build_path(\"control\").tap do |path|\n      FileUtils.mkdir(path) if !File.directory?(path)\n      # unpack the control.tar.{,gz,bz2,xz,zst} from the deb package into staging_path\n      # Unpack the control tarball\n      safesystem(ar_cmd[0] + \" p #{package} #{controltar} | tar #{compression} -xf - -C #{path}\")\n\n      control = File.read(File.join(path, \"control\"))\n\n      parse = lambda do |field|\n        value = control[/^#{field.capitalize}: .*/]\n        if value.nil?\n          return nil\n        else\n          logger.info(\"deb field\", field => value.split(\": \", 2).last)\n          return value.split(\": \",2).last","sourceCodeStart":347,"sourceCodeEnd":383,"githubUrl":"https://github.com/jordansissel/fpm/blob/b6d77ba72a560b687723376a0e5115c3a92634ad/lib/fpm/package/deb.rb#L347-L383","documentation":"While reading a .deb, fpm derives the compression suffix of the control.tar member from the ar listing and only understands gz, bzip2, xz, zst and plain tar. Any other suffix falls into the else branch and raises FPM::InvalidPackageConfiguration naming the unrecognized compression type.","triggerScenarios":"Converting a deb that contains control.tar.lzma or another exotic member (historically produced by some embedded/legacy tooling), or an ar member name with trailing characters (e.g. carriage returns from a mangled listing) so the extracted suffix string does not match any known case.","commonSituations":"Debs produced by old mkdebian/openembedded-style tooling using lzma compression; debs re-packed by scripts that rename members; conversion pipelines on unusual platforms where ar output formatting differs.","solutions":["Inspect the member: ar t package.deb to see the exact control.tar.* name and suffix","Repack the deb with a supported compression: dpkg-deb -R package.deb tmp && dpkg-deb -b -Zxz tmp fixed.deb, then convert fixed.deb","If the producer can be changed, build control.tar with gz/xz/zst to stay compatible"],"exampleFix":"# before\nfpm -s deb -t rpm tool.deb        # contains control.tar.lzma\n\n# after\ndpkg-deb -R tool.deb /tmp/tool\nfpm -s dir ... # or repack compressed:\ndpkg-deb -b -Zxz /tmp/tool /tmp/tool-fixed.deb\nfpm -s deb -t rpm /tmp/tool-fixed.deb","handlingStrategy":"validation","validationCode":"SUPPORTED = %w[gz bz2 xz zst tar]   # suffixes fpm understands on control.tar\nmembers = `ar t #{Shellwords.escape(path)}`.split(\"\\n\")\nctl = members.find { |m| m.start_with?('control.tar') }\nsuffix = ctl && ctl.split('.').last\nabort \"unsupported control.tar compression '.#{suffix}' -- repack with dpkg-deb -Zxz\" unless SUPPORTED.include?(suffix)","typeGuard":"def supported_control_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 .* control\\.tar/\n  system(\"dpkg-deb -R #{path} /tmp/repack && dpkg-deb -b -Zxz /tmp/repack #{path}\")\n  retry   # convert the repacked deb\nend","preventionTips":["Standardize internal tooling on gz/xz/zst for deb members so fpm can always convert them","Add an ar t + suffix whitelist gate at the start of conversion pipelines","Repack exotic debs with dpkg-deb -R/-b before feeding them to fpm -s deb"],"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"}