kup1
Kernel.org upload utility
Usage
kup [global
options]
command
[--
command ...]
Overview
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.
Options
-
-b, --batch -
Instead of connecting to a remote host, output the protocol content to standard output. The output from an arbitrary number of
kupinvocations 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_RSHor 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_HOSTor 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_SUBCMDor 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,bzip2orxz; 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
gitversions, so successful use of this command may require the same version ofgitlocally 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 = [email protected] 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
Releases
7 releases since Debian 7 (Wheezy); the text changed 3 times.
--subcmd since Debian 8 (Jessie);
-c since Debian 8 (Jessie).