[File] [PATCH] Add magic for Gentoo GLEP 78 (GPKG) binary packages

Michał Górny mgorny at gentoo.org
Mon Sep 5 11:47:27 UTC 2022


Add the basic magic for the new Gentoo binary package format introduced
via GLEP 78.  The format uses an uncompressed .tar container that
can easily be recognized by its first member being a file named
"<directory>/gpkg-1".  The check additionally reports the compression
used for the binary package members by looking at the second member's
name.

The check currently works only if "-e tar" is used.  I would like to
look into adding an appropriate logic for detecting the format
in is_tar() and forcing the fallback to magic rules explicitly
in the future.

An interesting extension would also be to add support for tar-style
octal numbers in offset expressions, as that would make it possible
to determine the offset of the second member metadata, and therefore
determine whether the binary package is signed.
---
 magic/Magdir/archive | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/magic/Magdir/archive b/magic/Magdir/archive
index df78791c..2aaa7310 100644
--- a/magic/Magdir/archive
+++ b/magic/Magdir/archive
@@ -32,6 +32,9 @@
 >>>>>>>>0	regex		\^[0-9]{2,4}[.](png|jpg|jpeg|tif|tiff|gif|bmp)
 #foo
 >>>>>>>>>0	use	tar-cbt
+# GPKG starts with <directory>/gpkg-1 file
+>>>>>>>>0	search/100		/gpkg-1\0
+>>>>>>>>>0	use	tar-gpkg
 # if 1st member name without digits and without used image suffix then it is a TAR archive
 >>>>>>>>0	default		x
 >>>>>>>>>0	use	tar-file
@@ -169,6 +172,25 @@
 # or maybe like ComicInfo.xml
 >0	string		>\0		\b, 1st image %-.60s
 
+# Summary:	Gentoo GLEP 78 binary package
+# URL:		https://www.gentoo.org/glep/glep-0078.html
+# Note:		assumes the strict format
+0	name		tar-gpkg
+>0	string		x		Gentoo GLEP 78 (GPKG) binary package
+!:mime	application/x-tar
+!:ext	tar
+# the logic below requires the gpkg-1 file to be empty
+>>124	string	00000000000\0
+# determine the compression used by looking at the second member name
+>>>512	search/100	.tar.
+>>>>&0	string		gz\0		using gzip compression
+>>>>&0	string		bz2\0		using bzip2 compression
+>>>>&0	string		lz\0		using lzip compression
+>>>>&0	string		lz4\0		using lz4 compression
+>>>>&0	string		lzo\0		using lzo compression
+>>>>&0	string		xz\0		using xz compression
+>>>>&0	string		zst\0		using zstd compression
+
 # Incremental snapshot gnu-tar format from:
 # https://www.gnu.org/software/tar/manual/html_node/Snapshot-Files.html
 0	string		GNU\ tar-	GNU tar incremental snapshot data
-- 
2.37.3



More information about the File mailing list