Lukas Fleischer | e241625 | 2014-01-08 19:45:29 +0100 | [diff] [blame] | 1 | cgit - CGI for Git |
| 2 | ================== |
Lars Hjemli | 25105d7 | 2006-12-10 22:31:36 +0100 | [diff] [blame] | 3 | |
Lukas Fleischer | e241625 | 2014-01-08 19:45:29 +0100 | [diff] [blame] | 4 | This is an attempt to create a fast web interface for the Git SCM, using a |
| 5 | built-in cache to decrease server I/O pressure. |
Lars Hjemli | 25105d7 | 2006-12-10 22:31:36 +0100 | [diff] [blame] | 6 | |
Lars Hjemli | 66414b6 | 2007-01-28 13:18:23 +0100 | [diff] [blame] | 7 | Installation |
Lukas Fleischer | e241625 | 2014-01-08 19:45:29 +0100 | [diff] [blame] | 8 | ------------ |
Lars Hjemli | 66414b6 | 2007-01-28 13:18:23 +0100 | [diff] [blame] | 9 | |
Lukas Fleischer | e241625 | 2014-01-08 19:45:29 +0100 | [diff] [blame] | 10 | Building cgit involves building a proper version of Git. How to do this |
Lars Hjemli | bd8e8a3 | 2007-09-04 11:49:40 +0200 | [diff] [blame] | 11 | depends on how you obtained the cgit sources: |
| 12 | |
| 13 | a) If you're working in a cloned cgit repository, you first need to |
Lukas Fleischer | e241625 | 2014-01-08 19:45:29 +0100 | [diff] [blame] | 14 | initialize and update the Git submodule: |
Lars Hjemli | bd8e8a3 | 2007-09-04 11:49:40 +0200 | [diff] [blame] | 15 | |
Lukas Fleischer | e241625 | 2014-01-08 19:45:29 +0100 | [diff] [blame] | 16 | $ git submodule init # register the Git submodule in .git/config |
| 17 | $ $EDITOR .git/config # if you want to specify a different url for git |
| 18 | $ git submodule update # clone/fetch and checkout correct git version |
Lars Hjemli | bd8e8a3 | 2007-09-04 11:49:40 +0200 | [diff] [blame] | 19 | |
| 20 | b) If you're building from a cgit tarball, you can download a proper git |
| 21 | version like this: |
| 22 | |
Lukas Fleischer | e241625 | 2014-01-08 19:45:29 +0100 | [diff] [blame] | 23 | $ make get-git |
Lars Hjemli | bd8e8a3 | 2007-09-04 11:49:40 +0200 | [diff] [blame] | 24 | |
| 25 | When either a) or b) has been performed, you can build and install cgit like |
| 26 | this: |
| 27 | |
Lukas Fleischer | e241625 | 2014-01-08 19:45:29 +0100 | [diff] [blame] | 28 | $ make |
| 29 | $ sudo make install |
Lars Hjemli | 5a217ed | 2007-05-11 12:13:15 +0200 | [diff] [blame] | 30 | |
Lukas Fleischer | e241625 | 2014-01-08 19:45:29 +0100 | [diff] [blame] | 31 | This will install `cgit.cgi` and `cgit.css` into `/var/www/htdocs/cgit`. You |
| 32 | can configure this location (and a few other things) by providing a `cgit.conf` |
Lars Hjemli | bd8e8a3 | 2007-09-04 11:49:40 +0200 | [diff] [blame] | 33 | file (see the Makefile for details). |
Lars Hjemli | 66414b6 | 2007-01-28 13:18:23 +0100 | [diff] [blame] | 34 | |
Jason A. Donenfeld | 027e88a | 2014-01-14 03:48:23 +0100 | [diff] [blame] | 35 | If you'd like to compile without Lua support, you may use: |
| 36 | |
| 37 | $ make NO_LUA=1 |
| 38 | |
| 39 | And if you'd like to specify a Lua implementation, you may use: |
| 40 | |
Natanael Copa | 44ccae4 | 2014-01-22 13:15:08 +0100 | [diff] [blame] | 41 | $ make LUA_PKGCONFIG=lua5.1 |
Jason A. Donenfeld | 027e88a | 2014-01-14 03:48:23 +0100 | [diff] [blame] | 42 | |
Natanael Copa | 44ccae4 | 2014-01-22 13:15:08 +0100 | [diff] [blame] | 43 | If this is not specified, the Lua implementation will be auto-detected, |
| 44 | preferring LuaJIT if many are present. Acceptable values are generally "lua", |
| 45 | "luajit", "lua5.1", and "lua5.2". |
Jason A. Donenfeld | 027e88a | 2014-01-14 03:48:23 +0100 | [diff] [blame] | 46 | |
| 47 | |
Lukas Fleischer | e241625 | 2014-01-08 19:45:29 +0100 | [diff] [blame] | 48 | Dependencies |
| 49 | ------------ |
Lars Hjemli | c52e841 | 2007-02-04 23:57:34 +0100 | [diff] [blame] | 50 | |
Lukas Fleischer | d523dac | 2014-01-09 19:44:27 +0100 | [diff] [blame] | 51 | * libzip |
| 52 | * libcrypto (OpenSSL) |
| 53 | * libssl (OpenSSL) |
Jason A. Donenfeld | ea7210b | 2014-01-18 00:45:01 +0100 | [diff] [blame] | 54 | * optional: luajit or lua, most reliably used when pkg-config is available |
Lars Hjemli | 5a217ed | 2007-05-11 12:13:15 +0200 | [diff] [blame] | 55 | |
| 56 | Apache configuration |
Lukas Fleischer | e241625 | 2014-01-08 19:45:29 +0100 | [diff] [blame] | 57 | -------------------- |
Lars Hjemli | 5a217ed | 2007-05-11 12:13:15 +0200 | [diff] [blame] | 58 | |
Lukas Fleischer | e241625 | 2014-01-08 19:45:29 +0100 | [diff] [blame] | 59 | A new `Directory` section must probably be added for cgit, possibly something |
Lars Hjemli | 5a217ed | 2007-05-11 12:13:15 +0200 | [diff] [blame] | 60 | like this: |
Lars Hjemli | c52e841 | 2007-02-04 23:57:34 +0100 | [diff] [blame] | 61 | |
Lukas Fleischer | e241625 | 2014-01-08 19:45:29 +0100 | [diff] [blame] | 62 | <Directory "/var/www/htdocs/cgit/"> |
| 63 | AllowOverride None |
| 64 | Options +ExecCGI |
| 65 | Order allow,deny |
| 66 | Allow from all |
| 67 | </Directory> |
Lars Hjemli | 66414b6 | 2007-01-28 13:18:23 +0100 | [diff] [blame] | 68 | |
| 69 | |
| 70 | Runtime configuration |
Lukas Fleischer | e241625 | 2014-01-08 19:45:29 +0100 | [diff] [blame] | 71 | --------------------- |
Lars Hjemli | 66414b6 | 2007-01-28 13:18:23 +0100 | [diff] [blame] | 72 | |
Lukas Fleischer | e241625 | 2014-01-08 19:45:29 +0100 | [diff] [blame] | 73 | The file `/etc/cgitrc` is read by cgit before handling a request. In addition |
Lars Hjemli | 2a0c9dc | 2011-06-13 13:24:46 +0000 | [diff] [blame] | 74 | to runtime parameters, this file may also contain a list of repositories |
Lukas Fleischer | e241625 | 2014-01-08 19:45:29 +0100 | [diff] [blame] | 75 | displayed by cgit (see `cgitrc.5.txt` for further details). |
Lars Hjemli | 66414b6 | 2007-01-28 13:18:23 +0100 | [diff] [blame] | 76 | |
| 77 | The cache |
Lukas Fleischer | e241625 | 2014-01-08 19:45:29 +0100 | [diff] [blame] | 78 | --------- |
Lars Hjemli | 66414b6 | 2007-01-28 13:18:23 +0100 | [diff] [blame] | 79 | |
Lukas Fleischer | e241625 | 2014-01-08 19:45:29 +0100 | [diff] [blame] | 80 | When cgit is invoked it looks for a cache file matching the request and |
| 81 | returns it to the client. If no such cache file exists (or if it has expired), |
| 82 | the content for the request is written into the proper cache file before the |
Lars Hjemli | 66414b6 | 2007-01-28 13:18:23 +0100 | [diff] [blame] | 83 | file is returned. |
| 84 | |
Lukas Fleischer | e241625 | 2014-01-08 19:45:29 +0100 | [diff] [blame] | 85 | If the cache file has expired but cgit is unable to obtain a lock for it, the |
| 86 | stale cache file is returned to the client. This is done to favour page |
Lars Hjemli | dcef257 | 2006-12-13 02:06:29 +0100 | [diff] [blame] | 87 | throughput over page freshness. |
Lars Hjemli | 25105d7 | 2006-12-10 22:31:36 +0100 | [diff] [blame] | 88 | |
Lars Hjemli | 66414b6 | 2007-01-28 13:18:23 +0100 | [diff] [blame] | 89 | The generated content contains the complete response to the client, including |
Lukas Fleischer | e241625 | 2014-01-08 19:45:29 +0100 | [diff] [blame] | 90 | the HTTP headers `Modified` and `Expires`. |
Lars Hjemli | 5a217ed | 2007-05-11 12:13:15 +0200 | [diff] [blame] | 91 | |
Lars Hjemli | 2a0c9dc | 2011-06-13 13:24:46 +0000 | [diff] [blame] | 92 | Online presence |
Lukas Fleischer | e241625 | 2014-01-08 19:45:29 +0100 | [diff] [blame] | 93 | --------------- |
Lars Hjemli | 5a217ed | 2007-05-11 12:13:15 +0200 | [diff] [blame] | 94 | |
Jason A. Donenfeld | d88ec84 | 2016-02-24 18:01:42 +0100 | [diff] [blame] | 95 | * The cgit homepage is hosted by cgit at <https://git.zx2c4.com/cgit/about/> |
Lars Hjemli | 5a217ed | 2007-05-11 12:13:15 +0200 | [diff] [blame] | 96 | |
Lukas Fleischer | e241625 | 2014-01-08 19:45:29 +0100 | [diff] [blame] | 97 | * Patches, bug reports, discussions and support should go to the cgit |
Christian Hesse | b431282 | 2014-04-17 11:55:46 +0200 | [diff] [blame] | 98 | mailing list: <cgit@lists.zx2c4.com>. To sign up, visit |
Jason A. Donenfeld | d88ec84 | 2016-02-24 18:01:42 +0100 | [diff] [blame] | 99 | <https://lists.zx2c4.com/mailman/listinfo/cgit> |