Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
GENSQUASHFS(1)			  User Commands 		  GENSQUASHFS(1)

NAME
     gensquashfs - generate squashfs images

SYNOPSIS
     gensquashfs [OPTIONS] <squashfs-file>

DESCRIPTION
     Generate a SquashFS image.

OPTIONS
     --pack-file, -F <file>
	    Use a gen_init_cpio style description file. The file format is spec-
	    ified below. If --pack-dir is used, input file paths are relative to
	    the pack directory, otherwise they are relative to the directory the
	    pack file is in.

     --pack-dir, -D <directory>
	    If	--pack-file  is used, this is the root path relative to which to
	    read files. If no pack file is specified, pack the contents  of  the
	    given  directory  into  a  SquashFS image. The directory becomes the
	    root of the file system.

     --sort-file, -S <file>
	    Specify a file that can override the order in which input files  are
	    packed,  or  affect  packing  behaviour (e.g. disable compression or
	    fragmentation for certain files).

     --compressor, -c <name>
	    Select the compressor to use.  Run gensquashfs --help to get a  list
	    of all available compressors and the default selection.

     --comp-extra, -X <options>
	    A comma separated list of extra options for the selected compressor.
	    Specify help to get a list of available options.

     --num-jobs, -j <count>
	    If	libsquashfs was compiled with a built in thread pool based, par-
	    allel data compressor, this option can be used to set the number  of
	    compressor	threads. If not set, the default is the number of avail-
	    able CPU cores.

     --queue-backlog, -Q <count>
	    Maximum number of data blocks in the thread worker queue before  the
	    packer  starts  waiting for the block processors to catch up. Higher
	    values result in higher memory consumption. Defaults to 10 times the
	    number of workers.

     --block-size, -b <size>
	    Block size to use for Squashfs image.  Defaults to 131072.

     --dev-block-size, -B <size>
	    Device block size to padd the image to.  Defaults to 4096.

     --keep-time, -k
	    When using --pack-dir only, use the timestamps from the input  files
	    instead  of  setting defaults on all input paths. The root inode and
	    the modification time on the SquashFS image itself will still be set
	    to defaults.

     --one-file-system, -o
	    When using --pack-dir only, stay in the local filesystem and do  not
	    cross mount points.

     --defaults, -d <options>
	    A  comma separated list of default values for implicitly created di-
	    rectories.	The following values can be set:
	    +---------------+----------------------------------------+
	    | Option	    | Default				     |
	    +---------------+----------------------------------------+
	    | uid=<value>   | 0 				     |
	    +---------------+----------------------------------------+
	    | gid=<value>   | 0 				     |
	    +---------------+----------------------------------------+
	    | mode=<value>  | 0755				     |
	    +---------------+----------------------------------------+
	    | mtime=<value> | $SOURCE_DATE_EPOCH if set, 0 otherwise |
	    +---------------+----------------------------------------+

     --set-uid, -u <number>
	    Force the owners user ID for ALL inodes to	this  value,  no  matter
	    what the pack file or directory entries actually specify.

     --set-gid, -g <number>
	    Force  the	owners	group ID for ALL inodes to this value, no matter
	    what the pack file or directory entries actually specify.

     --all-root
	    A short hand for `--set-uid 0 --set-gid 0`.

     --selinux, -s <file>
	    If built with SELinux support, use the given SELinux label	file  to
	    add context labels to the elements packed into the SquashFS image.

     --xattr-file, -A <file>
	    Read  extended  attributes	from  a file. The format for the file is
	    identical to the output generated by `getfattr --dump`.

     --exportable, -e
	    Generate an export table for NFS support.

     --no-tail-packing, -T
	    Do not perform tail end packing on files that are  larger  than  the
	    specified block size.

     --no-pad
	    Do	not  pad the resulting image to device block size. May result in
	    an image that cannot be loop mounted.

     --force, -f
	    Overwrite the output file if it exists.

     --quiet, -q
	    Do not print out progress reports.

     --help, -h
	    Print help text and exit.

     --version, -V
	    Print version information and exit.

PACK FILE FORMAT
     The input file contains a simple, newline separated list that describe  the
     files to be included in the squashfs image:

	 # a comment
	 file <path> <mode> <uid> <gid> [<location>]
	 dir <path> <mode> <uid> <gid>
	 nod <path> <mode> <uid> <gid> <dev_type> <maj> <min>
	 slink <path> <mode> <uid> <gid> <target>
	 link <path> <dummy> <dummy> <dummy> <target>
	 pipe <path> <mode> <uid> <gid>
	 sock <path> <mode> <uid> <gid>
	 glob <path> <mode|*> <uid|*> <gid|*> [OPTIONS...] <location>

     +------------+----------------------------------------+
     | <path>	  | Absolute  path of the entry in the im- |
     |		  | age. Can be put in quotes if some com- |
     |		  | ponents contain spaces.		   |
     +------------+----------------------------------------+
     | <location> | Optional location of the  input  file. |
     |		  | Can  be  specified	relative to either |
     |		  | the description file or the  pack  di- |
     |		  | rectory. If omitted, the image path is |
     |		  | used as a relative path.		   |
     +------------+----------------------------------------+
     | <target>   | Symlink or hardlink target. 	   |
     +------------+----------------------------------------+
     | <mode>	  | Mode/permissions of the entry.	   |
     +------------+----------------------------------------+
     | <uid>	  | Numeric user id.			   |
     +------------+----------------------------------------+
     | <gid>	  | Numeric group id.			   |
     +------------+----------------------------------------+
     | <dev_type> | Device type (b=block, c=character).    |
     +------------+----------------------------------------+
     | <maj>	  | Major number of a device special file. |
     +------------+----------------------------------------+
     | <min>	  | Minor number of a device special file. |
     +------------+----------------------------------------+

   File Globbing
     The  glob	command requires an input location which is interpreted relative
     to the pack directory (or the input file if no  directory	was  specified).
     This  location  is  scanned  recursively  and the contents are added to the
     specified virtual path.

     The specified mode, uid and gid are applied to all new entries added by the
     glob. They can alternatively be set to the special value * to use the value
     from the input directory.

     In front of the source location, several additional options can  be  speci-
     fied to control the behavior of the glob command:

     +-----------------+----------------------------------------------------+
     | Option	       | Description					    |
     +-----------------+----------------------------------------------------+
     | -type	       | Followed by a single space and a single, lowercase |
     |		       | character  describing	the  inode  type to accept. |
     |		       | Works similar to the -type option of the find com- |
     |		       | mand.						    |
     |		       |						    |
     |		       | Possible values are b (block devices), c  (charac- |
     |		       | ter devices), d (directories), p (named pipes),  f |
     |		       | (regular files), l (symlinks) and s (sockets).     |
     |		       |						    |
     |		       | If  -type is not used, all are accepted. The first |
     |		       | use clamps the selection down to a single type and |
     |		       | subsequent uses allow additional types.	    |
     +-----------------+----------------------------------------------------+
     | -xdev	       | Do not cross mount points during a recursive glob. |
     +-----------------+----------------------------------------------------+
     | -mount	       | An alias for -xdev				    |
     +-----------------+----------------------------------------------------+
     | -keeptime       | Use the time stamps from the scanned files.	    |
     +-----------------+----------------------------------------------------+
     | -nonrecursive   | Do not descend into directories.		    |
     |		       |						    |
     |		       | Even if the type argument does not include  direc- |
     |		       | tories, it is still possible to recursively scan a |
     |		       | hierarchy. In that case, the scanning will not add |
     |		       | new  directory nodes, but still recurse into a di- |
     |		       | rectory if a coresponding node  already  exist  in |
     |		       | the virtual filesystem tree.			    |
     |		       |						    |
     |		       | So a typicall use case might be to first scan only |
     |		       | the  directories,  and  then  do  several narrower |
     |		       | globs to fill them.				    |
     +-----------------+----------------------------------------------------+
     | -name <pattern> | Only add entries if their  name  matches  a  shell |
     |		       | glob pattern.					    |
     |		       |						    |
     |		       | If  the  pattern is supposed to contain spaces, it |
     |		       | can  be  wrapped  in  quotation  marks  ("..."  or |
     |		       | '...').					    |
     +-----------------+----------------------------------------------------+
     | -path <pattern> | Only  add  entries if their full resulting path in |
     |		       | the SquashFS image matches a shell  glob  pattern. |
     |		       | Slashes  in  the  path  are  only  matched against |
     |		       | slashes in the pattern and will never match a wild |
     |		       | card character or a bracket expression  containing |
     |		       | a slash.					    |
     |		       |						    |
     |		       | The path is normalized, so it won't have a leading |
     |		       | or trailing slash.				    |
     +-----------------+----------------------------------------------------+

     Any  other,  unknown string starting with - will be rejected as unknown op-
     tion.  If the input path starts with -, the sequence -- can be used to stop
     argument parsing, similar to many command line tools.

   Example
     # A simple squashfs image
     dir /dev 0755 0 0
     nod /dev/console 0600 0 0 c 5 1
     dir /root 0700 0 0
     dir /sbin 0755 0 0

     # Add a file. Input is relative to pack dir or listing path
     file /sbin/init 0755 0 0 ../init/sbin/init

     # Read from ./bin/bash relative to pack dir or listing path
     # /bin is created implicitly with default attributes.
     file /bin/bash 0755 0 0

     # file name with a space in it and a "special" name
     file "/opt/my app/\"special\"/data" 0600 0 0

     # collect the contents of ./lib and put it under /usr/lib
     # mode and uid/gid are explictly set. First we collect the directory tree,
     # then all so files, then all symlinks that don't end in ".so"
     glob /usr/lib 0755 0 0 -type d ./lib
     glob /usr/lib 0755 0 0 -type f -name "*.so.*" ./lib
     glob /usr/lib 0777 0 0 -type l -name "*.so.*" ./lib

SORT FILE FORMAT
     The sort file is has one entry per line, consisting of a  numeric	priority
     and  a  filename.	The  name  and the priority are separated by one or more
     space character (including tabs) and the line can be intended. Any  leeding
     or preceeding spaces are dropped.

     The  priority  is	a 64 bit number and can be negative. Files not listed in
     the sort file receive a default priority of 0. After  processing  the  sort
     file,  before packing the input files, the file list is sorted by priority,
     with lower values preceeding larger ones.

     The given filename is matched against the actual path of the  file  in  the
     SquashFS  file  in the resulting image. It is not matched against the input
     path, which may differ. Any file is allowed to match only once.  The  first
     match encountered in the sort file will be used.

     Lines  can be empty or contain a single line comment, started with #. File-
     names can be wrapped can be wrapped in quotation marks  ("...")  if  neces-
     sary, with \ serving as an escape character for quotation marks or itself.

     To  control the packing behavior, an optional list of flags can be inserted
     between the priority and the filename. The flags are wrappe in brackets and
     comma separated, e.g. [flag1,flag2,...]. The following flags are supported:

     +------------------+-----------------------------+
     | Flag		| Description		      |
     +------------------+-----------------------------+
     | glob		| Interpret the filename as a |
     |			| shell  glob	pattern   and |
     |			| match  all  files  that the |
     |			| pattern  applies  to.  This |
     |			| performs   path   globbing, |
     |			| i.e. a wild card  character |
     |			| (* or ?) or a bracket range |
     |			| ([])	cannot	match  a path |
     |			| separator. A slash must al- |
     |			| ways be matched by  an  ex- |
     |			| plicit slash. 	      |
     +------------------+-----------------------------+
     | glob_no_path	| Same	as glob, but disables |
     |			| path globbing.  Wild	cards |
     |			| are	 allowed   to	match |
     |			| slashes.		      |
     +------------------+-----------------------------+
     | align		| Force device	block  align- |
     |			| ment	of the matched files, |
     |			| i.e. the compressed  output |
     |			| always starts at a multiple |
     |			| of  the  device block size. |
     |			| Padding is inserted  before |
     |			| and after.		      |
     +------------------+-----------------------------+
     | dont_fragment	| Do   not  perform  tail-end |
     |			| packing  for	the   matched |
     |			| files,  always  generate  a |
     |			| sequence   of   independent |
     |			| blocks.		      |
     +------------------+-----------------------------+
     | dont_compress	| Do not compress the matched |
     |			| files.  Note	that if tail- |
     |			| end packing  is  performed, |
     |			| the  entire  fragment block |
     |			| is left uncompressed.       |
     +------------------+-----------------------------+
     | dont_deduplicate | Do not  perform  deduplica- |
     |			| tion	on the matched files. |
     |			| If they are packed and  the |
     |			| data blocks or the tail end |
     |			| happens  to  match a previ- |
     |			| ously  packed  file,	 keep |
     |			| them anyway.		      |
     +------------------+-----------------------------+
     | nosparse 	| Do  not perform sparse file |
     |			| detection.  If  a   matched |
     |			| file contians block of zero |
     |			| bytes, pack them as-is.     |
     +------------------+-----------------------------+

   Example
     # Specify a packing order with file globbing
     -8000  [glob]	    bin/*
     -5000  [glob]	    lib/*

     # glob_no_path means * is allowed to match /
     -1000  [glob_no_path]  share/*

     # Our boot loader needs this
     -100000  [dont_compress,dont_fragment,nosparse]  boot/vmlinuz

     # For demonstration, a quoted filename and no flags
     1337  "usr/share/my \"special\" file  "

XATTR FILE FORMAT
     The format for xattr files tries to be identical to the output of getfattr.

     Attributes are listed as key-value pairs with an = sign in between.

     If a line starts with `# file: `, the rest of the line is interpreted as an
     absolute path that the following xattrs are applied to.

     Plain  text  values are wrapped in quotation marks ("...") and support some
     escape sequences.	Currently supported are \", \\ and \0<octal-sequence>.

     Raw binary values can encoded as hexadecimal or  base64,  by  starting  the
     value with a 0x or 0s prefix respectively.

   Example
     # file: dev/
     security.selinux="system_u:object_r:device_t:s0"
     user.beverage_preference=0xCAFECAFEDECAFBAD

     # file: dev/rfkill
     security.selinux="system_u:object_r:wireless_device_t:s0"
     system.posix_acl_access=0sSGVsbG8gdGhlcmUgOi0pCg==

ENVIRONMENT
     If  the  command  line switch --defaults is not used or no default mtime is
     specified, the value of the environment variable SOURCE_DATE_EPOCH is  used
     for all file and filesystem timestamps.

     If  SOURCE_DATE_EPOCH  is	not  set,  not a parsable number or it is out of
     range, the timestamps default to 0.

     Environment variables are only used if no explicit  command  line	switches
     are set. Explicit command line switches are always preferred over the envi-
     ronment variables.

SEE ALSO
     rdsquashfs(1), tar2sqfs(1)

AUTHOR
     Written by David Oberhollenzer.

COPYRIGHT
     Copyright (C) 2019 David Oberhollenzer License GPLv3+: GNU GPL version 3 or
     later <https://gnu.org/licenses/gpl.html>.
     This  is  free software: you are free to change and redistribute it.  There
     is NO WARRANTY, to the extent permitted by law.

generate squashfs images	  November 2021 		  GENSQUASHFS(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=gensquashfs&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help