Provided by: squashfs-tools-ng_1.3.2-1_amd64 bug

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 specified 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, parallel data compressor, this
              option can be used to set the number of compressor threads. If not set, the default is the  number
              of available 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 directories.  The following values
              can be set:
              ┌───────────────┬────────────────────────────────────────┐
              │ OptionDefault                                │
              ├───────────────┼────────────────────────────────────────┤
              │ 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 │
       │            │ image. Can be put in  quotes  if  some │
       │            │ components contain spaces.             │
       ├────────────┼────────────────────────────────────────┤
       │ <location> │ Optional  location  of the input file. │
       │            │ Can be specified  relative  to  either │
       │            │ the   description  file  or  the  pack │
       │            │ directory. 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 specified to control the  behavior  of
       the glob command:

       ┌─────────────────┬────────────────────────────────────────────────────┐
       │ OptionDescription                                        │
       ├─────────────────┼────────────────────────────────────────────────────┤
       │ -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 │
       │                 │ command.                                           │
       │                 │                                                    │
       │                 │ Possible   values   are   b   (block  devices),  c │
       │                 │ (character 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 │
       │                 │ directories, 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  directory  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 option.  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 #. Filenames  can  be  wrapped  can  be
       wrapped  in  quotation  marks  ("...")  if necessary, 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:

       ┌──────────────────┬───────────────────────────────────────┐
       │ FlagDescription                           │
       ├──────────────────┼───────────────────────────────────────┤
       │ 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 always be  matched  by  an │
       │                  │ explicit slash.                       │
       ├──────────────────┼───────────────────────────────────────┤
       │ glob_no_path     │ Same   as  glob,  but  disables  path │
       │                  │ globbing. Wild cards are  allowed  to │
       │                  │ match slashes.                        │
       ├──────────────────┼───────────────────────────────────────┤
       │ align            │ Force  device  block alignment 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 deduplication on the │
       │                  │ matched files. If they are packed and │
       │                  │ the  data  blocks  or  the  tail  end │
       │                  │ happens  to match a previously 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 environment variables.

SEE ALSO

       rdsquashfs(1), tar2sqfs(1)

AUTHOR

       Written by David Oberhollenzer.

COPYRIGHT

       Copyright    ©    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)