|
|
| |
GENSQUASHFS(1) |
User Commands |
GENSQUASHFS(1) |
gensquashfs - generate squashfs images
gensquashfs [OPTIONS] <squashfs-file>
Generate a SquashFS image.
- --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.
- --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:
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.
- --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.
- --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.
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. |
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:
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 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.
# 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
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.
rdsquashfs(1), tar2sqfs(1)
Written by David Oberhollenzer.
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.
Visit the GSP FreeBSD Man Page Interface. Output converted with ManDoc. |