kup man page

kup — kernel.org upload utility

Synopsis

kup [global options] command [-- command...]

Description

This utility is used to upload files to kernel.org and other systems using the same upload system (kup-server).  Each upload is required to have a PGP signature, and the server will generate multiple compressed formats if the content uploaded is intended to be compressed.

Additionally, if the user has content from a git(1) tree already on server, it is possible to reproduce the content server-side, thereby reducing bandwidth needs.  The user still has to generate the content locally and sign it.

Global Options

-b, --batch

Instead of connecting to a remote host, output the protocol content to standard output.  The output from an arbitrary number of kup invocations can be concatenated into a single batchfile and then sent  to the server as a single session, e.g.:

cat batchfile | ssh -a -x -k -T [user@]host
-e, --rsh, --ssh command

Override the default command used to connect to the server.  The default is set by the environment variable KUP_RSH or if that is not set, ssh -a -x -k -T.

-H, --host [user@]host

Override the default user and host to which to connect.  The default is set by the environment variable KUP_HOST or if that is not set, kup.kernel.org.

-c, --subcmd subcommand

After establishing the ssh connection, issue a subcommand in case the remote server is used in conjunction with an AuthZ tool like gitolite. Can also be set using the env variable KUP_SUBCMD or if not set, no subcommand will be used (default kup-server behavior).

Commands

A series of commands can be specified on a single command line, separated by a double dash argument (--).

In all cases, PGP signatures are detached signature files corresponding to the uncompressed content.  If a remote_path ends in .gz then gzip, bzip2 and xz compressed files are generated on the server; otherwise the content is stored uncompressed.

put local_file signature_file remote_path

Upload the file local_file signed with signature_file.  local_file can be compressed with gzip, bzip2 or xz; this may reduce upload time.  The content will be stored compressed or uncompressed depending solely on the extension of remote_path.

put --tar [--prefix=] remote_tree ref signature_file remote_path

Generate a tar archive file from ref ref of git tree remote_tree (using git archive --format=tar) with signature signature_file generated locally, and place it in remote_path.

git archive has been found to be relatively stable, so this command is relatively robust to git version changes. The --prefix is passed to git archive verbatim.

put --diff remote_tree ref1 ref2 signature_file remote_path

Generate a patch file between refs ref1 and ref2 of git tree remote_tree (using git diff-tree -p) with signature signature_file generated locally, and place it in remote_path.

The output of git diff-tree has been found to vary between git versions, so successful use of this command may require the same version of git locally as on the server in order to produce a valid signature.

mkdir remote_path

Create a new directory on the server.

mv|move old_path new_path

Move the file or directory old_path to new_path.  For a file, the .sign files are also moved, and for compressed files, all the compression formats are moved together.

ln|link old_path new_path

Hard link the file or directory old_path to new_path.  For a file, the .sign files are also linked, and for compressed files, all the compression formats are linked together.

rm|del|delete old_path

Delete the file or directory old_path.  For a file, the .sign files are also deleted, and for compressed files, all the compression formats are deleted together.

ls|dir path...

Lists back the contents of one or more directories on the server.

Pathname Handling

Remote (server) pathnames all need to be absolute paths, starting with a slash (/).  The sole exception is new_path for the mv and link commands, which if it is not absolute is taken to be relative to the old_path minus the final component.  Similarly, if new_path ends in a slash then the final component of old_path will be appended.

For the put command, except when --tar or --diff is specified, if the remote_path ends in a slash then the final (filename) component of local_file will be appended to the final pathname.

Config File

Kup checks the presence of $HOME/.kuprc and can load the host and rsh parameters from the config file. The environment variables KUP_HOST and KUP_RSH will override the values set in this config file.

SAMPLE $HOME/.kuprc:

host = user@kup.kernel.org
rsh  = /usr/bin/ssh -a -x -k -T

Examples

Generate a tarball locally, sign it, compress it, and upload it into /pub/foolib on the server:

git archive --format=tar --prefix=foolib-1.0/ -o foolib-1.0.tar v1.0
gpg --detach-sign --armor foolib-1.0.tar
bzip2 -9 foolib-1.0.tar
kup put foolib-1.0.tar.bz2 foolib-1.0.tar.asc /pub/foolib/foolib-1.0.tar.bz2

Generate a tarball locally, sign it, then tell kup-server to generate an identical tarball on the server, verify the signature, and put the compressed results in /pub/foolib:

git archive --format=tar --prefix=foolib-1.0/ -o foolib-1.0.tar v1.0
gpg --detach-sign --armor foolib-1.0.tar
kup put --tar --prefix=foolib-1.0/ /repos/foolib.git v1.0 foolib-1.0.tar.asc /pub/foolib/foolib-1.0.tar.gz

Author

Written by H. Peter Anvin <hpa@zytor.com>.

See Also

git(1), ssh(1), gzip(1), bzip2(1), xz(1).

Referenced By

kup-server(1).

2011 kernel.org upload utility