| 1 |
What is Cygserver? |
| 2 |
|
| 3 |
Cygserver is a program which is designed to run as a background service. |
| 4 |
It provides Cygwin applications with services which require security |
| 5 |
arbitration or which need to persist while no other cygwin application |
| 6 |
is running. |
| 7 |
|
| 8 |
The implemented services so far are: |
| 9 |
|
| 10 |
- Control slave tty/pty handle dispersal from tty owner to other |
| 11 |
processes without compromising the owner processes' security. |
| 12 |
- XSI IPC Message Queues. |
| 13 |
- XSI IPC Semaphores. |
| 14 |
- XSI IPC Shared Memory. |
| 15 |
- Allows non-privileged users to store obfuscated passwords in the |
| 16 |
registry to be used for setuid(2) to create user tokens with network |
| 17 |
credentials. This service is used by `passwd -R'. Using the stored |
| 18 |
passwords in setuid(2) does not require running cygserver. The |
| 19 |
registry storage is the same as Windows uses to store passwords for |
| 20 |
accounts running Windows services. |
| 21 |
|
| 22 |
|
| 23 |
Cygserver command line options: |
| 24 |
|
| 25 |
Options to Cygserver take the normal UNIX-style `-X' or `--longoption' form. |
| 26 |
Nearly all options have a counterpart in the configuration file (see below) |
| 27 |
so setting them on the command line isn't really necessary. Command line |
| 28 |
options override settings from the Cygserver configuration file. |
| 29 |
|
| 30 |
The one-character options are prepended by a single dash, the long variants |
| 31 |
are prepended with two dashes. Arguments to options are marked in angle |
| 32 |
brackets below. These are not part of the actual syntax but are used only to |
| 33 |
denote the arguments. Note that all arguments are required. Cygserver |
| 34 |
has no options with optional arguments. |
| 35 |
|
| 36 |
The options recognized are: |
| 37 |
|
| 38 |
-f, --config-file <file> |
| 39 |
|
| 40 |
Use <file> as configuration file instead of the default configuration |
| 41 |
line. The default configuration file is /etc/cygserver.conf, typically. |
| 42 |
The --help and --version options will print the default configuration |
| 43 |
pathname. |
| 44 |
|
| 45 |
This option has no counterpart in the configuration file, for obvious |
| 46 |
reasons. |
| 47 |
|
| 48 |
-c, --cleanup-threads <num> |
| 49 |
|
| 50 |
Number of threads started to perform cleanup tasks. Default is 2. |
| 51 |
Configuration file option: kern.srv.cleanup_threads |
| 52 |
|
| 53 |
-r, --request-threads <num> |
| 54 |
|
| 55 |
Number of threads started to serve application requests. Default is 10. |
| 56 |
The -c and -r options can be used to play with Cygserver's performance |
| 57 |
under heavy load conditions or on slow machines. |
| 58 |
Configuration file option: kern.srv.request_threads |
| 59 |
|
| 60 |
-p, --process-cache <num> |
| 61 |
|
| 62 |
Number of processes which can connect concurrently to cygserver. |
| 63 |
Default is 62. Each process connected to cygserver is a synchronization |
| 64 |
object which has to be maintained. The data structure to maintain these |
| 65 |
processes is the so-called "process cache". In theory, an arbitrary |
| 66 |
number of processes could connect to cygserver, but due to the need to |
| 67 |
synchronize, the higher the number of connected processes, the more |
| 68 |
synchronization overhead exists. By using this option, you can set an |
| 69 |
upper limit to the synchronization effort. If more than 62 processes |
| 70 |
try to connect to cygserver concurrently, two additional synchronization |
| 71 |
threads are necessary, and one for each further 62 concurrent |
| 72 |
processes. So, useful values for the --process-cache option are 62, 124, |
| 73 |
186, 248, 310. 310 is the maximum value. |
| 74 |
Configuration file option: kern.srv.process_cache_size |
| 75 |
|
| 76 |
NOTE: The number of child processes of a single parent process is limited |
| 77 |
to 256. So in case of taking advantage of a process cache size beyond 256, |
| 78 |
keep in mind that not all of these processes can be child processes of one |
| 79 |
single parent process. |
| 80 |
|
| 81 |
-d, --debug |
| 82 |
|
| 83 |
Log debug messages to stderr. These will clutter your stderr output with |
| 84 |
a lot of information, typically only useful to developers. |
| 85 |
|
| 86 |
-e, --stderr |
| 87 |
|
| 88 |
Force logging to stderr. This is the default if stderr is connected to |
| 89 |
a tty. Otherwise, the default is logging to the system log. By using |
| 90 |
the -e, -E, -y, -Y options (or the appropriate settings in the |
| 91 |
configuration file), you can explicitely set the logging output as you |
| 92 |
like, even to both, stderr and syslog. |
| 93 |
Configuration file option: kern.log.stderr |
| 94 |
|
| 95 |
-E, --no-stderr |
| 96 |
|
| 97 |
Don't log to stderr. Configuration file option: kern.log.stderr |
| 98 |
|
| 99 |
-y, --syslog |
| 100 |
|
| 101 |
Force logging to the system log. This is the default, if stderr is not |
| 102 |
connected to a tty, e. g. redirected to a file. |
| 103 |
|
| 104 |
-Y, --no-syslog |
| 105 |
|
| 106 |
Don't log to syslog. Configuration file option: kern.log.syslog |
| 107 |
|
| 108 |
-l, --log-level <level> |
| 109 |
|
| 110 |
Set the verbosity level of the logging output. Valid values are between |
| 111 |
1 and 7. The default level is 6, which is relatively chatty. If you set |
| 112 |
it to 1, you will get only messages which are printed under severe conditions, |
| 113 |
which will result in stopping Cygserver itself. |
| 114 |
Configuration file option: kern.log.level |
| 115 |
|
| 116 |
-m, --no-sharedmem |
| 117 |
|
| 118 |
Don't start XSI IPC Shared Memory support. If you don't need XSI IPC |
| 119 |
Shared Memory support, you can switch it off here. |
| 120 |
Configuration file option: kern.srv.sharedmem |
| 121 |
|
| 122 |
-q, --no-msgqueues |
| 123 |
|
| 124 |
Don't start XSI IPC Message Queues. |
| 125 |
Configuration file option: kern.srv.msgqueues |
| 126 |
|
| 127 |
-s, --no-semaphores |
| 128 |
|
| 129 |
Don't start XSI IPC Semaphores. |
| 130 |
Configuration file option: kern.srv.semaphores |
| 131 |
|
| 132 |
-S, --shutdown |
| 133 |
|
| 134 |
Shutdown a running daemon and exit. Other methods are sending a SIGHUP |
| 135 |
to the Cygserver PID or, if running as service under NT, calling |
| 136 |
`net stop cygserver' or `cygrunsrv -E cygserver'. |
| 137 |
|
| 138 |
-h, --help |
| 139 |
|
| 140 |
Output usage information and exit. |
| 141 |
|
| 142 |
-v, --version |
| 143 |
|
| 144 |
Output version information and exit. |
| 145 |
|
| 146 |
|
| 147 |
How to start Cygserver: |
| 148 |
|
| 149 |
Before you run Cygserver for the first time, you should run the |
| 150 |
/usr/bin/cygserver-config script once. It creates the default |
| 151 |
configuration file and, upon request, installs Cygserver as service |
| 152 |
when running under NT. The script only performs a default install, |
| 153 |
with no further options given to Cygserver when running as service. |
| 154 |
Due to the wide configurability by changing the configuration file, |
| 155 |
that's typically not necessary. |
| 156 |
|
| 157 |
It's best practice to run Cygserver as a service under LocalSystem |
| 158 |
account. This is the way it is installed for you by the |
| 159 |
/usr/bin/cygserver-config script. |
| 160 |
|
| 161 |
|
| 162 |
The Cygserver configuration file: |
| 163 |
|
| 164 |
Cygserver has many options, which allow to customize the server |
| 165 |
to your needs. Customization is accomplished by editing the configuration |
| 166 |
file, which is by default /etc/cygserver.conf. This file is read only |
| 167 |
once on startup of Cygserver. There's no option to re-read the file on |
| 168 |
runtime by, say, sending a signal to Cygserver. |
| 169 |
|
| 170 |
The configuration file determines how Cygserver operates. There are |
| 171 |
options which set the number of threads running in parallel, options |
| 172 |
for setting how and what to log and options to set various maximum |
| 173 |
values for the IPC services. |
| 174 |
|
| 175 |
The default configuration file delivered with Cygserver is installed |
| 176 |
to /etc/defaults/etc. The /usr/bin/cygserver-config script copies it to |
| 177 |
/etc, giving you the option to overwrite an already existing file or to |
| 178 |
leave it alone. Therefore, the /etc file is safe to be changed by you, |
| 179 |
since it will not be overwritten by a later update installation. |
| 180 |
|
| 181 |
The default configuration file contains many comments which describe |
| 182 |
everything needed to understand the settings. A comment at the start of the |
| 183 |
file describes the syntax rules for the file. The default options are shown |
| 184 |
in the file but are commented out. |
| 185 |
|
| 186 |
It is generally a good idea to uncomment only options which you intend to |
| 187 |
change from the default values. Since reading the options file on Cygserver |
| 188 |
startup doesn't take much time, it's also considered good practice to keep |
| 189 |
all other comments in the file. This keeps you from searching for clues |
| 190 |
in other sources. |
| 191 |
|
| 192 |
|
| 193 |
If you have problems with Cygserver, or you have found a bug, or you |
| 194 |
think you have found a bug, or you don't understand configuration file |
| 195 |
options, the mailing list <cygwin@cygwin.com> is the right place to ask |
| 196 |
questions. |
| 197 |
|
| 198 |
Have fun! |