NAME¶
cow-shell - Start a copy-on-write session and invoke a shell.
SYNOPSIS¶
cow-shell [commandline]
DESCRIPTION¶
cow-shell Executes specified command with
cowdancer or a shell if
no command-line option is given.
Inside the cowdancer session, files under the current directory are protected in
a way so that a write operation to an i-node which existed at the point of
running cow-shell is not modified.
Useful for managing hard-linked source-trees and scratch-filesystems.
EXAMPLES¶
- cp -al cowdancer/ cowdancer.new && cd
cowdancer.new && cow-shell
- Create a hardlinked tree, and cd into the newly created
tree. After invoking cow-shell inside that tree, a write operation against
a file that is hardlinked with the original tree will be copied to a new
file before write.
- cp -al cowdancer/ cowdancer.new && cd
cowdancer.new && cow-shell debuild
- Tries to run dpkg-buildpackage on the new tree, to avoid
damage to the original tree.
Configure debuild to ignore .ilist files, through -i or
-I option.
FILES¶
- .ilist
- Generated dynamically in the current directory. The file
contains the list of i-node numbers that should be protected from write
operation.
- /usr/lib/cowdancer/libcowdancer.so
- The shared library used internally that overrides some
functions that potentially write to files. This library implements the COW
feature and is preloaded with LD_PRELOAD.
- /bin/cp
- Used for copying. Requires GNU option -a to be
functional.
ENVIRONMENT¶
- COWDANCER_ILISTFILE
- The path to the current .ilist file.
- COWDANCER_IGNORE
- Used internally to work around infinite loops. It will be
unset.
- LD_PRELOAD
- Utilized to preload libcowdancer.so
- COWDANCER_DEBUG
- Debugging option. Enables debug messages. cowdancer will
give verbose debug messages in standard error output.
- COWDANCER_SO
- Debugging option. Specifies a different path for
libcowdancer.so.
- COWDANCER_REUSE=yes
- Enables reuse of cowdancer .ilist file found for
consecutive runs of cow-shell.
RETURN VALUE¶
The functions that are overridden with cowdancer will give an errno value of
ENOMEM when there is a problem.
System isn't really out of memory, but this error code is chosen because this
error is usually handled gracefully by applications.
RESTRICTIONS¶
Can only support directories that are scanned by
cow-shell command.
The operation is not semantically correct when files are originally hardlinked,
hardlinks are always broken.
Does not support anything when LD_PRELOAD trick does not work.
Does not work unless hardlinks are supported on the filesystem.
Not very user-friendly.
Leaves
.ilist file around.
AUTHOR¶
Junichi Uekawa (dancer@debian.org)
Upstream page is available at
http://www.netfort.gr.jp/~dancer/software/cowdancer.html
SEE ALSO¶
cowdancer-ilistcreate (1
)