cygcheck — List system information, check installed packages, or query package database
cygcheck [-v] [-h] PROGRAM cygcheck -c [-d] [PACKAGE] cygcheck -s [-r] [-v] [-h] cygcheck -k cygcheck -f FILE [FILE]... cygcheck -l [PACKAGE]... cygcheck -p REGEXP cygcheck --delete-orphaned-installation-keys cygcheck --enable-unique-object-names Cygwin-DLL cygcheck --disable-unique-object-names Cygwin-DLL cygcheck --show-unique-object-names Cygwin-DLL cygcheck -h
At least one command option or a PROGRAM is required, as shown above. PROGRAM list library (DLL) dependencies of PROGRAM -c, --check-setup show installed version of PACKAGE and verify integrity (or for all installed packages if none specified) -d, --dump-only just list packages, do not verify (with -c) -s, --sysinfo produce diagnostic system information (implies -c -d) -r, --registry also scan registry for Cygwin settings (with -s) -k, --keycheck perform a keyboard check session (must be run from a plain console only, not from a pty/rxvt/xterm) -f, --find-package find the package to which FILE belongs -l, --list-package list contents of PACKAGE (or all packages if none given) -p, --package-query search for REGEXP in the entire cygwin.com package repository (requires internet connectivity) --delete-orphaned-installation-keys Delete installation keys of old, now unused installations from the registry. Requires the right to change the registry. --enable-unique-object-names Cygwin-DLL --disable-unique-object-names Cygwin-DLL --show-unique-object-names Cygwin-DLL Enable, disable, or show the setting of the \"unique object names\" setting in the Cygwin DLL given as argument to this option. The DLL path must be given as valid Windows(!) path. See the users guide for more information. If you don't know what this means, don't change it. -v, --verbose produce more verbose output -h, --help annotate output with explanatory comments when given with another command, otherwise print this help -V, --version print the version of cygcheck and exit Note: -c, -f, and -l only report on packages that are currently installed. To search all official Cygwin packages use -p instead. The -p REGEXP matches package names, descriptions, and names of files/paths within all packages.
The cygcheck program is a diagnostic utility for dealing with Cygwin programs. If you are familiar with dpkg or rpm, cygcheck is similar in many ways. (The major difference is that setup.exe handles installing and uninstalling packages; see the section called “Internet Setup” for more information.)
The -c
option checks the version and status of
installed Cygwin packages. If you specify one or more package names,
cygcheck will limit its output to those packages, or
with no arguments it lists all packages. A package will be marked
Incomplete
if files originally installed are no longer
present. The best thing to do in that situation is reinstall the package
with setup.exe. To see which files are missing, use
the -v
option. If you do not need to know the status
of each package and want cygcheck to run faster, add
the -d
option and cygcheck will
only output the name and version for each package.
If you list one or more programs on the command line,
cygcheck will diagnose the runtime environment of that
program or programs, providing the names of DLL files on which the
program depends. If you specify the -s
option,
cygcheck will give general system information. If you
list one or more programs on the command line and specify
-s
, cygcheck will report on
both.
The -f
option helps you to track down which
package a file came from, and -l
lists all files in a
package. For example, to find out about
/usr/bin/less
and its package:
Example 3.3. Example cygcheck usage
$ cygcheck -f /usr/bin/less less-381-1 $ cygcheck -l less /usr/bin/less.exe /usr/bin/lessecho.exe /usr/bin/lesskey.exe /usr/man/man1/less.1 /usr/man/man1/lesskey.1
The -h
option prints additional helpful messages
in the report, at the beginning of each section. It also adds table
column headings. While this is useful information, it also adds some to
the size of the report, so if you want a compact report or if you know
what everything is already, just leave this out.
The -v
option causes the output to be more
verbose. What this means is that additional information will be reported
which is usually not interesting, such as the internal version numbers of
DLLs, additional information about recursive DLL usage, and if a file in
one directory in the PATH also occurs in other directories on the PATH.
The -r
option causes cygcheck
to search your registry for information that is relevant to Cygwin
programs. These registry entries are the ones that have "Cygwin" in the
name. If you are paranoid about privacy, you may remove information from
this report, but please keep in mind that doing so makes it harder to
diagnose your problems.
In contrast to the other options that search the packages that are
installed on your local system, the -p
option can be
used to search the entire official Cygwin package repository. It takes as
argument a Perl-compatible regular expression which is used to match
package names, package descriptions, and path/filenames of the contents
of packages. This feature requires an active internet connection, since
it must query the cygwin.com
web site. In fact, it is
equivalent to the search that is available on the Cygwin package listing
page.
For example, perhaps you are getting an error because you are missing a certain DLL and you want to know which package includes that file:
Example 3.4. Searching all packages for a file
$ cygcheck -p 'cygintl-2\.dll' Found 1 matches for 'cygintl-2\.dll'. libintl2-0.12.1-3 GNU Internationalization runtime library $ cygcheck -p 'libexpat.*\.a' Found 2 matches for 'libexpat.*\.a'. expat-1.95.7-1 XML parser library written in C expat-1.95.8-1 XML parser library written in C $ cygcheck -p '/ls\.exe' Found 2 matches for '/ls\.exe'. coreutils-5.2.1-5 GNU core utilities (includes fileutils, sh-utils and textutils) coreutils-5.3.0-6 GNU core utilities (includes fileutils, sh-utils and textutils)
Note that this option takes a regular expression, not a glob or
wildcard. This means that you need to use .*
if you
want something similar to the wildcard *
commonly used
in filename globbing. Similarly, to match the period character you should
use \.
since the .
character in a
regexp is a metacharacter that will match any character. Also be aware
that the characters such as \
and *
are shell metacharacters, so they must be either escaped or quoted, as in
the example above.
The third example above illustrates that if you want to match a whole
filename, you should include the /
path seperator. In
the given example this ensures that filenames that happen to end in
ls.exe
such as ncftpls.exe
are not
shown. Note that this use does not mean "look for packages with
ls
in the root directory," since the
/
can match anywhere in the path. It's just there to
anchor the match so that it matches a full filename.
By default the matching is case-sensitive. To get a case insensitive
match, begin your regexp with (?i)
which is a
PCRE-specific feature. For complete documentation on Perl-compatible
regular expression syntax and options, read the perlre
manpage, or one of many websites such as perldoc.com
that document the Perl language.
The cygcheck program should be used to send information about your system for troubleshooting when requested. When asked to run this command save the output so that you can email it, for example:
$
cygcheck -s -v -r -h > cygcheck_output.txt
Each Cygwin DLL stores its path and installation key in the registry. This allows troubleshooting of problems which could be a result of having multiple concurrent Cygwin installations. However, if you're experimenting a lot with different Cygwin installation paths, your registry could accumulate a lot of old Cygwin installation entries for which the installation doesn't exist anymore. To get rid of these orphaned registry entries, use the cygcheck --delete-orphaned-installation-keys command.
Each Cygwin DLL generates a key value from its installation path. This value is not only stored in the registry, it's also used to generate global object names used for interprocess communication. This keeps different Cygwin installations separate. Processes running under a Cygwin DLL installed in C:\cygwin don't see processes running under a Cygwin DLL installed in C:\Program Files\cygwin. This allows running multiple versions of Cygwin DLLs without these versions to interfere with each other, or to run small third-party installations for a specific purpose independently from a Cygwin net distribution.
For debugging purposes it could be desired that the various Cygwin DLLs use the same key, independently from their installation paths. If the DLLs have different versions, trying to run processes under these DLLs concurrently will result in error messages like this one:
*** shared version mismatch detected - 0x8A88009C/0x75BE0074. This problem is probably due to using incompatible versions of the Cygwin DLL. Search for cygwin1.dll using the Windows Start->Find/Search facility and delete all but the most recent version. The most recent version *should* reside in x:\\cygwin\\bin, where 'x' is the drive on which you have installed the cygwin distribution. Rebooting is also suggested if you are unable to find another Cygwin DLL.
To disable the usage of a unique key value of a certain Cygwin DLL,
use the cygcheck --disable-unique-object-names
Cygwin-DLL command. Cygwin-DLL
is the
Windows path (*not* a Cygwin POSIX path) to the DLL for which you want to
disable this feature. Note that you have to stop all Cygwin processes
running under this DLL, before you're allowed to change this setting. For
instance, run cygcheck from a DOS command line for
this purpose.
To re-enable the usage of a unique key, use the cygcheck
--enable-unique-object-names Cygwin-DLL command. This option
has the same characteristics as the
--disable-unique-object-names
option
Finally, you can use cygcheck --show-unique-object-names
Cygwin-DLL to find out if the given Cygwin DLL use unique
object names or not. In contrast to the --disable-...
and --enable-...
options, the
--show-unique-object-names
option also works for
Cygwin DLLs which are currently in use.