Get that Linux feeling - on Windows
Uploading Packages to cygwin.com
If you are a package maintainer you will need to request sftp upload privileges to the Cygwin distro. This page documents how to request the privileges and upload packages to cygwin.com.
Requesting upload privileges
Send your public ssh key to the cygwin-apps mailing list using this format:
Subject: SSH key for upload access Name: Your Name Package: The name of one (and only one) of the packages that you are responsible for ---- BEGIN SSH2 PUBLIC KEY ---- encoded public ssh key here ---- END SSH2 PUBLIC KEY ----
When specifying your name, use your exact name as shown at http://cygwin.com/cygwin-pkg-maint.
Specifying one package provides you with the ability to upload any of your packages from http://cygwin.com/cygwin-pkg-maint.
The SSH key above should be generated from one of your public keys, e.g.:
ssh-keygen -e -f ~/.ssh/id_rsa.pub
The format of this email is not optional. It is read by a program so please do not deviate from the above. In particular, don't indent, don't add multiple packages, and do use your name as recorded in http://cygwin.com/cygwin-pkg-maint.
Note: Send email in this format if you need to update your ssh key.
Requests are handled manually and are acknowledged publicly in response to email to the cygwin-apps mailing list.
Connecting to cygwin.com
Once the ssh key has been installed you'll have limited sftp access to cygwin.com, where you will be able to upload packages. You may connect for example by sftp email@example.com, or using lftp as in the example below. When connecting, make sure that you use the user cygwin with no password, and that you are using the same ssh key as the one that you specified previously.
The first time you connect, you should verify that the host key fingerprint matches one of the following hashes:
- SHA256 (OpenSSH 6.8 or later): SHA256:MFNiczzfX8/nvLSRZwR3CxMyycKtMan64Zm4C373FeM
- MD5 (OpenSSH pre-6.8): 1d:1e:46:7f:4d:73:8d:10:20:c3:4c:5a:34:14:44:23
There are two ways to upload finished packages to cygwin.com.
If you have a cygport build script for your packages, the easiest way to upload your finished packages is just to run:
cygport pkg.cygport up
That will upload your finished packages, taking care of all of the details described in the manual method below.
You may also upload files directly, using an sftp client such as sftp or lftp. An upload directory on cygwin.com will look like this:
Your Name # directory is currently your full name (you won't actually see this) !packages # read-only file containing package names you are permitted to upload x86 x86_64 noarch # arch directory release release release # release directory pkg # package directory pkg-debuginfo # package subdirectories
Example using lftp to upload packages:
% lftp sftp://firstname.lastname@example.org cd ok, cwd=/ lftp cygwin.com:/> ls -rw-rw-r-- 1 root cygstage 179 Sep 1 05:12 !packages drwxrwsr-x 4 root cygstage 4096 Sep 1 05:16 . drwxrwxr-x 61 cygwin root 4096 Sep 1 05:12 .. drwxrwsr-x. 3 cygwin cygstage 4096 May 9 19:00 noarch drwxrwsr-x 3 cygwin cygstage 4096 Oct 12 19:35 x86 drwxrwsr-x 3 cygwin cygstage 4096 Aug 10 19:04 x86_64 lftp cygwin.com:/> cd x86/release cd ok, cwd=/x86/release lftp cygwin.com:/x86/release> ls drwxrwsr-x 3 cygwin cygstage 4096 Oct 12 18:28 . drwxrwsr-x 3 cygwin cygstage 4096 Oct 12 19:35 .. drwxrwsr-x 3 cygwin cygstage 4096 Oct 12 19:36 grep lftp cygwin.com:/x86/release> mirror -eR grep Total: 2 directories, 3 files, 0 symlinks New: 3 files, 0 symlinks 2311396 bytes transferred in 14 seconds (166.2K/s) lftp cygwin.com:/x86/release> ls grep drwxrwsr-x 3 cygwin cygstage 4096 Oct 12 19:47 . drwxrwsr-x 3 cygwin cygstage 4096 Oct 12 18:28 .. -rw-r--r-- 1 cygwin cygstage 1204708 Oct 12 19:46 grep-2.14-3-src.tar.xz -rw-r--r-- 1 cygwin cygstage 229284 Oct 12 19:47 grep-2.14-3.tar.xz drwxrwsr-x 2 cygwin cygstage 4096 Oct 12 19:47 grep-debuginfo -rw-r--r-- 1 cygwin cygstage 356 Oct 12 19:47 setup.hint lftp cygwin.com:/x86/release> ls grep/grep-debuginfo drwxrwsr-x 2 cygwin cygstage 4096 Oct 12 19:47 . drwxrwsr-x 3 cygwin cygstage 4096 Oct 12 19:47 .. -rw-r--r-- 1 cygwin cygstage 877404 Oct 12 19:47 grep-debuginfo-2.14-3.tar.xz -rw-r--r-- 1 cygwin cygstage 356 Oct 12 19:47 setup.hint lftp cygwin.com:/x86/release> put /dev/null -o !ready
Example lftp upload command line
# command line to upload the time packages cd wherever lftp -c 'connect sftp://email@example.com/; cd x86/release; mirror -eR time; put /dev/null -o !ready'
The package directories should exactly mirror what is currently in the release directory. So, it should be a hierarchy containing .tar.xz files and setup.hint files.
The !ready file is used to tell calm (the script which creates setup.ini) that any files older than this file in or under the given directory should be processed. The intent is that you create !ready when you have finished uploading everything that you plan on uploading.
Note: !ready files should not be created in the root of your upload directory, i.e. they should be in the architecture directories x86, x86_64 and noarch or in the package directories themselves.
calm will periodically scan the upload directories for packages that are ready, and, if there are no errors, move the packages into the real release area. New directories in the release area will be created as needed. If there are errors then setup.ini will not be updated and the release area will remain pristine.
You can also create a !mail (or !email) file which contains a list of email address (one per line) where any calm reports on your packages should be sent. If that isn't specified then you won't get email when calm finds issues with what was uploaded. This file must be in the root of your upload directory.
Removing files from the Cygwin distribution
Removing files is not normally needed, as old versions which aren't referenced by setup.ini, and are thus are no longer installable, will be removed periodically.
However, if you do need to remove a file from the distribution, upload an empty file with the name of the file that you want deleted, prefixed with a "-".
For example, if you want to delete the file foo-1.2-1.tar.xz then upload an empty file named -foo-1.2-1.tar.xz
Note that files are not actually deleted; they are moved to a vault where they will be removed after some indeterminate amount of time.
Frequently Asked Questions
Q) Why aren't my files being transferred to the release area? I've waited several days and don't see any movement.
A) The package updater runs twice every hour, at 10 and 40 minutes past the hour so, if you don't see any movement at, e.g., 20 minutes past the next hour, then your package is not going to be updated.
The main reason that this could happen is if you uploaded a package that you are not actually responsible for. The updater only knows what you are responsible for based on http://cygwin.com/cygwin-pkg-maint so if you aren't listed as an owner there your packages won't be updated.
Q) Why can't I login via sftp?
A) There are two likely reasons for login failures:
- You're not using the ssh key provided when you set up your account.
- You are not logging in as the cygwin user. You need to login as user cygwin with no password.