Index: meson.build
===================================================================
--- meson.build	(revision 2b2783b029e3a8e5966dbd8f1320c9e814dc709e)
+++ meson.build	(revision 1ef3213bed44afc575804996e7f9e120ec63db73)
@@ -9,4 +9,5 @@
     [ 'c', 'cpp' ],
     default_options : ['buildtype=plain', 'c_std=gnu11', 'cpp_std=c++17', 'warning_level=3', 'werror=false', 'b_staticpic=false', 'default_library=shared', 'prefix=/' ],
+    meson_version: '>=0.50.1',
 )
 
@@ -28,4 +29,21 @@
 )
 
+# Tar's arguments make sure that the archive is reproducible.
+tar = [
+	find_program('tar'),
+	'-c',
+	'-f', '@OUTPUT@',
+	'--mtime=1970-01-01 00:00:00Z',
+	'--group=0',
+	'--owner=0',
+	'--numeric-owner',
+	'--mode=go=rX,u+rw,a-s',
+	'--no-acls',
+	'--no-selinux',
+	'--no-xattrs',
+	'--format=ustar',
+	'--transform', 's:@OUTDIR@/::',
+	'@INPUT@',
+]
 
 if get_option('default_library') == 'both'
Index: uspace/app/barber/meson.build
===================================================================
--- uspace/app/barber/meson.build	(revision 2b2783b029e3a8e5966dbd8f1320c9e814dc709e)
+++ uspace/app/barber/meson.build	(revision 1ef3213bed44afc575804996e7f9e120ec63db73)
@@ -34,4 +34,12 @@
 )
 
+_tarball = custom_target('barber_images.tar',
+	input: _images,
+	output: 'barber_images.tar',
+	command: tar,
+)
+
+# TODO
+
 _images_zip = custom_target('barber_images.zip',
 	input : _images,
