ALPM-MTREEV1(5)
๐ ALPM-MTREE ๐
from the File Formats Manual, section 5 โ welcome bestie, this is the whole vibe of the package directory hierarchy description format โจ
๐ธ NAME ๐ธ
ALPM-MTREE โ the package directory hierarchy description format, and it's lowkey the blueprint for how a packageโs files are laid out, no cap ๐
๐ฆ DESCRIPTION ๐ฆ
Okay so the mtree format is literally a textual format that describes the hierarchy and metadata of files inside a directory ๐๏ธโจ
Itโs a well-known format that can, for example, be used for installation instructions or to verify metadata of files and the hierarchy of a directory. Itโs giving โreceipts but for your filesystemโ ๐งพ
The ALPM-MTREE format adheres to the official mtree specification. But โ and this is the important part โ .MTREE files used in the context of ALPM packages only use a subset of the official mtree format that makes sense in the scope of packaging. So itโs not the whole mtree menu, just the parts that actually matter for packaging ๐
โจ Properties โจ
.MTREE files thatโre generated by makepkg only contain the following properties:
typeuidgidmodetimesizemd5sha256link
.MTREE files are used in the scope of ALPM based packages and usually relate to files inside of those respective packages. Because of this, all paths provided in an ALPM-MTREE must be relative to the package root, with the exception of link destinations, which may also represent absolute paths. So no random absolute paths in your main entries, bestie โ thatโs not the vibe ๐ซ๐
๐ Path Type Property ๐
Unlike all available types in mtree, ALPM-MTREE only allows three file types:
dirโ A directoryfileโ A filelinkโ A symbolic link
โ ๏ธ Other file types must not be used, as they represent hardware specific, or ad hoc types, that should not be included in a package. So donโt try it, bestie โ thatโs a no from the packaging committee ๐
๐ง Required Fields by File Type ๐ง
ALPM-MTREE requires specific values to be set for certain file types, which is something mtree doesnโt enforce by specification. So yeah, itโs stricter than the original โ it ate and left no crumbs ๐
The dir path type requires the following properties to be set:
pathuidgidmodetime
The file path type requires the following properties to be set:
pathuidgidmodesizemd5digestsha256digesttime
The link path type requires the following properties to be set:
pathuidgidmodelinktime
๐ Usage in Pacman ๐
In Pacman, ALPM-MTREE files are solely used to verify that installed files are identical to the original files without having to keep the original package around. So itโs literally the โreceiptโ that says โyep, this file is exactly what we shippedโ ๐งพโ
.MTREE files are implicitly generated and included when creating packages via makepkg. The gzip-compressed .MTREE file is located in the root of ALPM based packages. So itโs just there, doing its thing, no extra steps required ๐ซถ
๐ Versioning ๐
The ALPM-MTREE format exists in multiple versions. The information in this document is for version 1, which is outdated. The ALPM-MTREE version 1 format has been introduced with the release of pacman 4.6.0 on 2012-04-30. So yeah, version 1 is giving โthrowbackโ, but itโs still the one documented here โ periodt ๐
โจ
๐ฅ EXAMPLES ๐ฅ
#mtree
/set type=file uid=0 gid=0 mode=644
./.BUILDINFO time=1696727741.0 size=5574 md5digest=04a85103d4780101c710a297aae33837 sha256digest=708be566788a6a2712bcd40425d93761569ede07371781374edb1f22e2a3eb96
./.PKGINFO time=1696727741.0 size=830 md5digest=bde30355e5b95a86c59afbd149cc28da sha256digest=3aa17bec02b34c157e7c739c62e0e37a9d19f1459d404d7c6f2c14c6008127cd
set mode=755 type=dir
./usr time=1731613789.0
./usr/bin time=1731613789.0
./usr/bin/resolvconf time=1731613789.0 mode=777 type=link link=resolvectl
๐ Generation ๐
ALPMโs mtree files are generated by calling:
bsdtar \
--format=mtree \
--options='!all,use-set,type,uid,gid,mode,time,size,md5,sha256,link' \
$folder
Thatโs the exact incantation, bestie โ donโt change a single character or the vibe check fails ๐คโจ
๐ Usages ๐
In the context of ALPM and pacman, the mtree fileโs main purpose is to provide a performant way of getting a packageโs file metadata without having to extract and read the whole package. So itโs fast, itโs efficient, itโs iconic ๐
This data is then used to verify installed files on the target system against the original files from the package. Take a look at pacmanโs query check functionality for more detail. Iykyk ๐
๐ SEE ALSO ๐
Signed, sealed, delivered: section 5 of the File Formats Manual, no date in the footer but you already know the vibes. Stay slay, verify your files, and donโt use hardware-specific types in packages ๐ ๐ซถโจ
๐ฆ where this page comes from
- arch rolling: alpm-mtree 0.4.0-1 ยท Apache-2.0 OR MIT AND CC-BY-SA-4.0
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms