Annotation of mandoc/man.cgi.8, Revision 1.4
1.4 ! schwarze 1: .\" $Id: man.cgi.8,v 1.3 2014/07/12 23:41:04 schwarze Exp $
1.1 schwarze 2: .\"
3: .\" Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>
4: .\"
5: .\" Permission to use, copy, modify, and distribute this software for any
6: .\" purpose with or without fee is hereby granted, provided that the above
7: .\" copyright notice and this permission notice appear in all copies.
8: .\"
9: .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10: .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11: .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12: .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13: .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14: .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15: .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16: .\"
1.4 ! schwarze 17: .Dd $Mdocdate: July 12 2014 $
1.1 schwarze 18: .Dt MAN.CGI 8
19: .Os
20: .Sh NAME
21: .Nm man.cgi
22: .Nd CGI program to search and display manual pages
23: .Sh DESCRIPTION
24: The
25: .Nm
26: CGI program searches for manual pages on a WWW server
27: and displays them to HTTP clients,
28: providing functionality equivalent to the
29: .Xr apropos 1
30: and
31: .Xr man 1
32: utilities.
33: It can use multiple manual trees in parallel.
34: .Ss HTML search interface
35: At the top of each generated HTML page,
36: .Nm
37: displays a search form containing these elements:
38: .Bl -enum
39: .It
1.4 ! schwarze 40: An input box for search queries, expecting
! 41: either a name of a manual page or an
1.1 schwarze 42: .Ar expression
43: using the syntax described in the
44: .Xr apropos 1
45: manual; filling this in is required for each search.
46: .It
1.4 ! schwarze 47: A
! 48: .Dq Submit
! 49: button to send a search request from the client to the server.
! 50: .It
! 51: A
! 52: .Dq Reset
! 53: button to undo any changes to the input boxes and the dropdown menus
! 54: and reset them to the values contained in the
! 55: .Ev QUERY_STRING .
! 56: .It
! 57: Radio buttons to select pages either by name like in
! 58: .Xr man 1
! 59: or using
! 60: .Xr apropos 1
! 61: queries.
! 62: .It
! 63: A dropdown menu to optionally select a manual section.
1.1 schwarze 64: If one is provided, it has the same effect as the
1.4 ! schwarze 65: .Xr man 1
! 66: and
1.1 schwarze 67: .Xr apropos 1
68: .Fl s
69: option.
70: Otherwise, pages from all sections are shown.
71: .It
1.4 ! schwarze 72: A dropdown menu to optionally select an architecture.
1.1 schwarze 73: If one is provided, it has the same effect as the
1.4 ! schwarze 74: .Xr man 1
! 75: and
1.1 schwarze 76: .Xr apropos 1
77: .Fl S
78: option.
79: By default, pages for all architectures are shown.
80: .It
81: A dropdown menu to select a manual tree.
82: If the configuration file
83: .Pa /var/www/man/manpath.conf
84: contains only one manpath, the dropdown menu is not shown.
85: By default, the first manpath given in the file is used.
86: .El
87: .Ss Program output
88: The
89: .Nm
90: program generates five kinds of output pages:
91: .Bl -tag -width Ds
92: .It The index page.
93: This is returned when calling
94: .Nm
95: without
96: .Ev PATH_INFO
97: and without a
98: .Ev QUERY_STRING .
99: It serves as a starting point for using the program
100: and shows the search form only.
101: .It A list page.
102: Lists are returned when searches match more than one manual page.
103: The first column shows the names and section numbers of manuals
104: as clickable links.
105: The second column shows the one-line descriptions of the manuals.
106: .It A manual page.
107: This output format is used when a search matches exactly one
108: manual page, or when a link on a list page or an
109: .Ic \&Xr
110: link on another manual page is followed.
111: .It A no-result page.
112: This is shown when a search request returns no results -
113: eiher because it violates the query syntax, or because
114: the search does not match any manual pages.
115: .It \&An error page.
116: This cannot happen by merely clicking the
117: .Dq Search
118: button, but only by manually entering an invalid URI.
119: It does not show the search form, but only an error message
120: and a link back to the index page.
121: .El
122: .Ss Setup
123: For each manual tree, create one first-level subdirectory below
124: .Pa /var/www/man .
125: The name of one of these directories is called a
126: .Dq manpath
127: in the context of
128: .Nm .
129: Create a single ASCII text file
130: .Pa /var/www/man/manpath.conf
131: containing the names of these directories, one per line.
132: The directory given first is used as the default manpath.
133: .Pp
134: Inside each of these directories, use the same directory and file
135: structure as found below
136: .Pa /usr/share/man ,
137: that is, second-level subdirectories
138: .Pa /var/www/man/*/man1 , /var/www/man/*/man2
139: etc. containing source
140: .Xr mdoc 7
141: and
142: .Xr man 7
143: manuals with file name extensions matching the section numbers,
144: second-level subdirectories
145: .Pa /var/www/man/*/cat1 , /var/www/man/*/cat2
146: etc. containing preformatted manuals with the file name extension
147: .Sq 0 ,
148: and optional third-level subdirectories for architectures.
149: Use
150: .Xr makewhatis 8
151: to create a
152: .Xr mandoc.db 5
153: database inside each manpath.
154: .Pp
155: Configure your web server to execute CGI programs located in
156: .Pa /cgi-bin .
157: When using
158: .Xr nginx 8 ,
159: the
160: .Xr slowcgi 8
161: proxy daemon is needed to translate FastCGI requests to plain old CGI.
162: .Ss URI interface
163: .Nm
164: uniform resource identifiers are not needed for interactive use,
165: but can be useful for deep linking.
166: They consist of:
167: .Bl -enum
168: .It
169: The
170: .Cm http://
171: protocol specifier.
172: .It
173: The host name and a following slash.
174: .It
175: The path to the program, normally
176: .Pa cgi-bin/man.cgi/ .
177: .It
1.4 ! schwarze 178: To show a single page, a slash, the manpath, another slash,
1.1 schwarze 179: and the name of the requested file, for example
180: .Pa /OpenBSD-current/man1/mandoc.1 .
181: .It
1.4 ! schwarze 182: For searches, a query string starting with a question mark
1.1 schwarze 183: and consisting of
184: .Ar key Ns = Ns Ar value
185: pairs, separated by ampersands, for example
1.4 ! schwarze 186: .Pa ?manpath=OpenBSD-current&query=mandoc .
1.1 schwarze 187: Supported keys are
188: .Cm manpath ,
1.4 ! schwarze 189: .Cm query ,
1.1 schwarze 190: .Cm sec ,
191: .Cm arch ,
192: corresponding to
193: .Xr apropos 1
194: .Fl M ,
195: .Ar expression ,
196: .Fl s ,
197: .Fl S ,
1.4 ! schwarze 198: respectively, and
! 199: .Cm apropos ,
! 200: which is a boolean parameter to select or deselect the
! 201: .Xr apropos 1
! 202: query mode.
1.1 schwarze 203: For backward compatibility with the traditional
204: .Nm ,
1.4 ! schwarze 205: .Cm sektion
1.1 schwarze 206: is supported as an alias for
207: .Cm sec .
208: .El
209: .Sh ENVIRONMENT
210: The web server may pass the following CGI variables to
211: .Nm :
212: .Bl -tag -width Ds
213: .It Ev HTTP_HOST
214: The FQDN of the (possibly virtual) host the HTTP server is running on.
215: This is used for
216: .Ic Location:
217: headers in HTTP 303 responses.
218: .It Ev PATH_INFO
219: The final part of the URI path passed from the client to the server,
220: starting after the
221: .Ev SCRIPT_NAME
222: and ending before the
223: .Ev QUERY_STRING .
224: It is used by the
225: .Cm show
226: page to aquire the manpath and filename it needs.
227: .It Ev QUERY_STRING
228: The HTTP query string passed from the client to the server.
229: It is the final part of the URI, after the question mark.
230: It is used by the
231: .Cm search
232: page to acquire the named parameters it needs.
233: .It Ev SCRIPT_NAME
234: The path to the
235: .Nm
236: binary relative to the server root, usually
237: .Pa /cgi-bin/man.cgi .
238: This is used for generating URIs to be embedded
239: in generated HTML code and HTTP headers.
240: .El
241: .Sh FILES
242: .Bl -tag -width Ds
243: .It Pa /var/www
244: Default web server
245: .Xr chroot 2
246: directory.
247: All the following paths are specified relative to this directory.
248: .It Pa /cgi-bin/man.cgi
249: The path to the
250: .Nm
251: program relative to the server root.
252: Can be overridden by
253: .Ev SCRIPT_NAME .
254: .It Pa /htdocs
255: The path to the server document root relative to the server root.
256: This is part of the web server configuration and not specific to
257: .Nm .
258: .It Pa /htdocs/man-cgi.css
259: A style sheet for general
260: .Nm
261: styling, referenced from each generated HTML page.
262: .It Pa /htdocs/man.css
263: A style sheet for
264: .Xr mandoc 1
265: HTML styling, referenced from each generated HTML page after
266: .Pa man-cgi.css .
267: .It Pa /man
268: Default
269: .Nm
270: data directory containing all the manual trees.
271: Can be overridden by
272: .Ev MAN_DIR .
273: .It Pa /man/manpath.conf
274: The list of available manpaths, one per line.
275: .It Pa /man/OpenBSD-current/man1/mandoc.1
276: An example
277: .Xr mdoc 7
278: source file located below the
279: .Dq OpenBSD-current
280: manpath.
281: .El
1.4 ! schwarze 282: .Sh COMPILE-TIME DEFINES
! 283: .Bl -tag -width Ds
! 284: .It Ev CSS_DIR
! 285: An optional path to the directory containing the CSS files,
! 286: to be specified relative to the server's document root,
! 287: and to be specified without a trailing slash.
! 288: When not specified, the CSS files
! 289: are assumed to be in the document root.
! 290: This is used in generated HTML code.
! 291: .It Ev MAN_DIR
! 292: A path to the
! 293: .Nm
! 294: data directory to be used instead of
! 295: .Pa /var/www/man ,
! 296: relative to the web server
! 297: .Xr chroot 2
! 298: directory, to be specified without a trailing slash.
! 299: This is prepended to the manpath when opening
! 300: .Xr mandoc.db 5
! 301: and manual page files.
! 302: .El
1.1 schwarze 303: .Sh COMPATIBILITY
304: The
305: .Nm
306: CGI program is call-compatible with queries from the traditional
307: .Pa man.cgi
308: script by Wolfram Schneider.
1.4 ! schwarze 309: However, the output may not be quite the same.
1.1 schwarze 310: .Sh SEE ALSO
311: .Xr apropos 1 ,
312: .Xr mandoc.db 5 ,
313: .Xr makewhatis 8 ,
314: .Xr slowcgi 8
1.2 schwarze 315: .Sh HISTORY
316: A version of
317: .Nm
318: based on
319: .Xr mandoc 1
320: first appeared in mdocml-1.12.1 (March 2012).
321: The current SQLite3-based version first appeared in
322: .Ox 5.6 .
1.1 schwarze 323: .Sh AUTHORS
324: .An -nosplit
325: The
326: .Nm
327: program was written by
328: .An Kristaps Dzonsons Aq Mt kristaps@bsd.lv
329: and ported to the SQLite3-based
330: .Xr mandoc.db 5
331: backend by
332: .An Ingo Schwarze Aq Mt schwarze@openbsd.org .
CVSweb