From d3a825d19821ff9318615ac022de89a328c41ccd Mon Sep 17 00:00:00 2001 From: mh Date: Fri, 9 Jan 2009 00:27:37 +0000 Subject: added gitwebrepo share possibility for lighttpd --- files/web/gitweb.conf | 23 +++ files/web/lighttpd-gitweb-defaults.conf | 10 + files/web/lighttpd.conf | 328 ++++++++++++++++++++++++++++++++ manifests/defines.pp | 46 +++++ manifests/init.pp | 2 +- manifests/web.pp | 12 ++ manifests/web/lighttpd.pp | 26 +++ manifests/web/lighttpd/base.pp | 7 + templates/web/config | 30 +++ templates/web/lighttpd | 6 + 10 files changed, 489 insertions(+), 1 deletion(-) create mode 100644 files/web/gitweb.conf create mode 100644 files/web/lighttpd-gitweb-defaults.conf create mode 100644 files/web/lighttpd.conf create mode 100644 manifests/defines.pp create mode 100644 manifests/web/lighttpd.pp create mode 100644 manifests/web/lighttpd/base.pp create mode 100644 templates/web/config create mode 100644 templates/web/lighttpd diff --git a/files/web/gitweb.conf b/files/web/gitweb.conf new file mode 100644 index 0000000..ffd5762 --- /dev/null +++ b/files/web/gitweb.conf @@ -0,0 +1,23 @@ +# path to git projects (.git) +# $projectroot = "/var/cache/git"; + +# directory to use for temp files +$git_temp = "/tmp"; + +# target of the home link on top of all pages +#$home_link = $my_uri || "/"; + +# html text to include at home page +$home_text = "indextext.html"; + +# file with project list; by default, simply scan the projectroot dir. +$projects_list = $projectroot; + +# stylesheet to use +$stylesheet = "/gitweb.css"; + +# logo to use +$logo = "/git-logo.png"; + +# the 'favicon' +$favicon = "/git-favicon.png"; diff --git a/files/web/lighttpd-gitweb-defaults.conf b/files/web/lighttpd-gitweb-defaults.conf new file mode 100644 index 0000000..f653838 --- /dev/null +++ b/files/web/lighttpd-gitweb-defaults.conf @@ -0,0 +1,10 @@ +url.redirect += ( + "^$" => "/", +) + +alias.url += ( + "/" => "/var/www/git/gitweb.cgi", + "/gitweb.css" => "/var/www/git/gitweb.css", + "/git-logo.png" => "/var/www/git/git-logo.png", + "/git-favicon.png" => "/var/www/git/git-favicon.png", +) diff --git a/files/web/lighttpd.conf b/files/web/lighttpd.conf new file mode 100644 index 0000000..582f4e7 --- /dev/null +++ b/files/web/lighttpd.conf @@ -0,0 +1,328 @@ +# lighttpd configuration file +# +# use it as a base for lighttpd 1.0.0 and above +# +# $Id: lighttpd.conf,v 1.7 2004/11/03 22:26:05 weigon Exp $ + +############ Options you really have to take care of #################### + +## modules to load +# at least mod_access and mod_accesslog should be loaded +# all other module should only be loaded if really neccesary +# - saves some time +# - saves memory +server.modules = ( + "mod_rewrite", +# "mod_redirect", + "mod_alias", +# "mod_access", +# "mod_cml", +# "mod_trigger_b4_dl", +# "mod_auth", +# "mod_status", + "mod_setenv", +# "mod_fastcgi", +# "mod_proxy", +# "mod_simple_vhost", +# "mod_evhost", +# "mod_userdir", + "mod_cgi", +# "mod_compress", +# "mod_ssi", +# "mod_usertrack", +# "mod_expire", +# "mod_secdownload", +# "mod_rrdtool", + "mod_accesslog" ) + +## a static document-root, for virtual-hosting take look at the +## server.virtual-* options +server.document-root = "/srv/www/lighttpd/" + +## where to send error-messages to +server.errorlog = "/var/log/lighttpd/error.log" + +# files to check for if .../ is requested +index-file.names = ( "index.php", "index.html", + "index.htm", "default.htm" ) + +## set the event-handler (read the performance section in the manual) +# server.event-handler = "freebsd-kqueue" # needed on OS X + +# mimetype mapping +mimetype.assign = ( + ".rpm" => "application/x-rpm", + ".pdf" => "application/pdf", + ".sig" => "application/pgp-signature", + ".spl" => "application/futuresplash", + ".class" => "application/octet-stream", + ".ps" => "application/postscript", + ".torrent" => "application/x-bittorrent", + ".dvi" => "application/x-dvi", + ".gz" => "application/x-gzip", + ".pac" => "application/x-ns-proxy-autoconfig", + ".swf" => "application/x-shockwave-flash", + ".tar.gz" => "application/x-tgz", + ".tgz" => "application/x-tgz", + ".tar" => "application/x-tar", + ".zip" => "application/zip", + ".mp3" => "audio/mpeg", + ".m3u" => "audio/x-mpegurl", + ".wma" => "audio/x-ms-wma", + ".wax" => "audio/x-ms-wax", + ".ogg" => "application/ogg", + ".wav" => "audio/x-wav", + ".gif" => "image/gif", + ".jpg" => "image/jpeg", + ".jpeg" => "image/jpeg", + ".png" => "image/png", + ".xbm" => "image/x-xbitmap", + ".xpm" => "image/x-xpixmap", + ".xwd" => "image/x-xwindowdump", + ".css" => "text/css", + ".html" => "text/html", + ".htm" => "text/html", + ".js" => "text/javascript", + ".asc" => "text/plain", + ".c" => "text/plain", + ".cpp" => "text/plain", + ".log" => "text/plain", + ".conf" => "text/plain", + ".text" => "text/plain", + ".txt" => "text/plain", + ".dtd" => "text/xml", + ".xml" => "text/xml", + ".mpeg" => "video/mpeg", + ".mpg" => "video/mpeg", + ".mov" => "video/quicktime", + ".qt" => "video/quicktime", + ".avi" => "video/x-msvideo", + ".asf" => "video/x-ms-asf", + ".asx" => "video/x-ms-asf", + ".wmv" => "video/x-ms-wmv", + ".bz2" => "application/x-bzip", + ".tbz" => "application/x-bzip-compressed-tar", + ".tar.bz2" => "application/x-bzip-compressed-tar", + # default mime type + "" => "application/octet-stream", + ) + +# Use the "Content-Type" extended attribute to obtain mime type if possible +#mimetype.use-xattr = "enable" + + +## send a different Server: header +## be nice and keep it at lighttpd +# server.tag = "lighttpd" + +#### accesslog module +accesslog.filename = "/var/log/lighttpd/access.log" + +## deny access the file-extensions +# +# ~ is for backupfiles from vi, emacs, joe, ... +# .inc is often used for code includes which should in general not be part +# of the document-root +url.access-deny = ( "~", ".inc" ) + +$HTTP["url"] =~ "\.pdf$" { + server.range-requests = "disable" +} + +## +# which extensions should not be handle via static-file transfer +# +# .php, .pl, .fcgi are most often handled by mod_fastcgi or mod_cgi +static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" ) + +######### Options that are good to be but not neccesary to be changed ####### + +## bind to port (default: 80) +#server.port = 81 + +## bind to localhost (default: all interfaces) +#server.bind = "127.0.0.1" + +## error-handler for status 404 +#server.error-handler-404 = "/error-handler.html" +#server.error-handler-404 = "/error-handler.php" + +## to help the rc.scripts +server.pid-file = "/var/run/lighttpd.pid" + + +###### virtual hosts +## +## If you want name-based virtual hosting add the next three settings and load +## mod_simple_vhost +## +## document-root = +## virtual-server-root + virtual-server-default-host + virtual-server-docroot +## or +## virtual-server-root + http-host + virtual-server-docroot +## +#simple-vhost.server-root = "/srv/www/vhosts/" +#simple-vhost.default-host = "www.example.org" +#simple-vhost.document-root = "/htdocs/" + + +## +## Format: .html +## -> ..../status-404.html for 'File not found' +#server.errorfile-prefix = "/usr/share/lighttpd/errors/status-" +#server.errorfile-prefix = "/srv/www/errors/status-" + +## virtual directory listings +#dir-listing.activate = "enable" + +## enable debugging +#debug.log-request-header = "enable" +#debug.log-response-header = "enable" +#debug.log-request-handling = "enable" +#debug.log-file-not-found = "enable" + +### only root can use these options +# +# chroot() to directory (default: no chroot() ) +#server.chroot = "/" + +## change uid to (default: don't care) +server.username = "lighttpd" + +## change uid to (default: don't care) +server.groupname = "lighttpd" + +#### compress module +#compress.cache-dir = "/var/cache/lighttpd/compress/" +#compress.filetype = ("text/plain", "text/html") + +#### proxy module +## read proxy.txt for more info +#proxy.server = ( ".php" => +# ( "localhost" => +# ( +# "host" => "192.168.0.101", +# "port" => 80 +# ) +# ) +# ) + +#### fastcgi module +## read fastcgi.txt for more info +## for PHP don't forget to set cgi.fix_pathinfo = 1 in the php.ini +#fastcgi.server = ( ".php" => +# ( "localhost" => +# ( +# "socket" => "/var/run/lighttpd/php-fastcgi.socket", +# "bin-path" => "/usr/bin/php-cgi" +# ) +# ) +# ) + +#### CGI module +#cgi.assign = ( ".pl" => "/usr/bin/perl", +# ".cgi" => "/usr/bin/perl" ) +# + +#### SSL engine +#ssl.engine = "enable" +#ssl.pemfile = "/etc/ssl/private/lighttpd.pem" + +#### status module +#status.status-url = "/server-status" +#status.config-url = "/server-config" + +#### auth module +## read authentication.txt for more info +#auth.backend = "plain" +#auth.backend.plain.userfile = "lighttpd.user" +#auth.backend.plain.groupfile = "lighttpd.group" + +#auth.backend.ldap.hostname = "localhost" +#auth.backend.ldap.base-dn = "dc=my-domain,dc=com" +#auth.backend.ldap.filter = "(uid=$)" + +#auth.require = ( "/server-status" => +# ( +# "method" => "digest", +# "realm" => "download archiv", +# "require" => "user=jan" +# ), +# "/server-config" => +# ( +# "method" => "digest", +# "realm" => "download archiv", +# "require" => "valid-user" +# ) +# ) + +#### url handling modules (rewrite, redirect, access) +#url.rewrite = ( "^/$" => "/server-status" ) +#url.redirect = ( "^/wishlist/(.+)" => "http://www.123.org/$1" ) +#### both rewrite/redirect support back reference to regex conditional using %n +#$HTTP["host"] =~ "^www\.(.*)" { +# url.redirect = ( "^/(.*)" => "http://%1/$1" ) +#} + +# +# define a pattern for the host url finding +# %% => % sign +# %0 => domain name + tld +# %1 => tld +# %2 => domain name without tld +# %3 => subdomain 1 name +# %4 => subdomain 2 name +# +#evhost.path-pattern = "/srv/www/vhosts/%3/htdocs/" + +#### expire module +#expire.url = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes") + +#### ssi +#ssi.extension = ( ".shtml" ) + +#### rrdtool +#rrdtool.binary = "/usr/bin/rrdtool" +#rrdtool.db-name = "/var/lib/lighttpd/lighttpd.rrd" + +#### setenv +#setenv.add-request-header = ( "TRAV_ENV" => "mysql://user@host/db" ) +#setenv.add-response-header = ( "X-Secret-Message" => "42" ) + +## for mod_trigger_b4_dl +# trigger-before-download.gdbm-filename = "/var/lib/lighttpd/trigger.db" +# trigger-before-download.memcache-hosts = ( "127.0.0.1:11211" ) +# trigger-before-download.trigger-url = "^/trigger/" +# trigger-before-download.download-url = "^/download/" +# trigger-before-download.deny-url = "http://127.0.0.1/index.html" +# trigger-before-download.trigger-timeout = 10 + +## for mod_cml +## don't forget to add index.cml to server.indexfiles +# cml.extension = ".cml" +# cml.memcache-hosts = ( "127.0.0.1:11211" ) + +#### variable usage: +## variable name without "." is auto prefixed by "var." and becomes "var.bar" +#bar = 1 +#var.mystring = "foo" + +## integer add +#bar += 1 +## string concat, with integer cast as string, result: "www.foo1.com" +#server.name = "www." + mystring + var.bar + ".com" +## array merge +#index-file.names = (foo + ".php") + index-file.names +#index-file.names += (foo + ".php") + +#### include +#include /etc/lighttpd/lighttpd-inc.conf +## same as above if you run: "lighttpd -f /etc/lighttpd/lighttpd.conf" +#include "lighttpd-inc.conf" +include /etc/lighttpd/lighttpd-gitweb-defaults.conf +include /etc/lighttpd/lighttpd-gitweb.conf + +#### include_shell +#include_shell "echo var.a=1" +## the above is same as: +#var.a=1 diff --git a/manifests/defines.pp b/manifests/defines.pp new file mode 100644 index 0000000..93853e1 --- /dev/null +++ b/manifests/defines.pp @@ -0,0 +1,46 @@ +# domain: the domain under which this repo will be avaiable +# projectroot: where the git repos are listened +# projects_list: which repos to export +define git::web::repo( + $gitwebconfig, + $projectroot, + $projects_list +){ + include git::web + $gitweb_url = $name + file{"/etc/gitweb.d/${name}.conf": + content => template("git/web/config") + } + case $gitweb_webserver { + 'lighttpd': { + git::web::repo::lighttpd{$name: + gitwebconfig => $gitwebconfig, + gitweb_url => $gitweb_url, + projectroot => $projectroot, + project_list => $projects_list, + } + } + default: { fail("no supported \$gitweb_webserver defined on ${fqdn}, so can't do git::web::repo: ${name}") } + } + +} + +define git::web::repo::lighttpd( + $gitwebconfig, + $gitweb_url, + $projectroot, + $projects_list +){ + include git::web::lighttpd + file{"/etc/lighttpd/gitweb.d/${name}.conf": + content => template("git/web/lighttpd"), + notify => Service['lighttpd'], + owner => root, group => 0, mode => 0644; + } + line{"add_include_of_gitwebrepo_${name}": + line => "Include /etc/lighttpd/gitweb.d/${name}.conf", + file => "/etc/lighttpd/lighttpd-gitweb.conf", + require => File['/etc/lighttpd/lighttpd-gitweb.conf'], + notify => Service['lighttpd'], + } +} diff --git a/manifests/init.pp b/manifests/init.pp index e006126..ba0acb8 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -11,7 +11,7 @@ # the Free Software Foundation. # -# modules_dir { \"git\": } +import 'defines.pp' class git { include git::base diff --git a/manifests/web.pp b/manifests/web.pp index 5ca5019..dd9b022 100644 --- a/manifests/web.pp +++ b/manifests/web.pp @@ -4,4 +4,16 @@ class git::web { ensure => present, require => Package['git'], } + + file{'/etc/gitweb.d': + ensure => directory, + owner => root, group => 0, mode => 0755; + } + file{'/etc/gitweb.conf': + source => [ "puppet://$server/files/git/web/${fqdn}/gitweb.conf", + "puppet://$server/files/git/web/gitweb.conf", + "puppet://$server/git/web/gitweb.conf" ], + require => Package['gitweb'], + owner => root, group => 0, mode => 0644; + } } diff --git a/manifests/web/lighttpd.pp b/manifests/web/lighttpd.pp new file mode 100644 index 0000000..5784244 --- /dev/null +++ b/manifests/web/lighttpd.pp @@ -0,0 +1,26 @@ +class git::web::lighttpd inherits lighttpd { + include git::web::lighttpd::base + + file{'/etc/lighttpd/lighttpd-gitweb-defaults.conf': + source => [ "puppet://$server/files/git/web/${fqdn}/lighttpd-gitweb-defaults.conf", + "puppet://$server/files/git/web/lighttpd-gitweb-defaults.conf", + "puppet://$server/git/web/lighttpd-gitweb-defaults.conf" ], + require => Package['lighttpd'], + notify => Service['lighttpd'], + owner => root, group => 0, mode => 0644; + } + + + file{'/etc/lighttpd/lighttpd-gitweb.conf': + ensure => present, + require => Package['lighttpd'], + notify => Service['lighttpd'], + owner => root, group => 0, mode => 0644; + } + + file{'/etc/lighttpd/gitweb.d': + ensure => directory, + require => Package['lighttpd'], + owner => root, group => 0, mode => 0755; + } +} diff --git a/manifests/web/lighttpd/base.pp b/manifests/web/lighttpd/base.pp new file mode 100644 index 0000000..26fd225 --- /dev/null +++ b/manifests/web/lighttpd/base.pp @@ -0,0 +1,7 @@ +class git::web::lighttpd::base { + File['/etc/lighttpd/lighttpd.conf']{ + source => [ "puppet://$server/files/git/web/${fqdn}/lighttpd.conf", + "puppet://$server/files/git/web/lighttpd.conf", + "puppet://$server/git/web/lighttpd.conf" ], + } +} diff --git a/templates/web/config b/templates/web/config new file mode 100644 index 0000000..9bcaac0 --- /dev/null +++ b/templates/web/config @@ -0,0 +1,30 @@ +# Include the global configuration, if found. +do "/etc/gitweb.conf" if -e "/etc/gitweb.conf"; + +# Point to projects.list file generated by gitosis. +# Here gitosis manages the user "git", who has a +# home directory of /srv/example.com/git +$projects_list = "<%= _projects_list %>"; + +# Where the actual repositories are located. +$projectroot = "<%= projectroot %>"; + +# By default, gitweb will happily let people browse any repository +# they guess the name of. This may or may not be what you wanted. I +# choose to allow gitweb to show only repositories that git-daemon +# is already sharing anonymously. +$export_ok = "git-daemon-export-ok"; + +# Alternatively, you could set these, to allow exactly the things in +# projects.list, which in this case is the repos with gitweb=yes +# in gitosis.conf. This means you don't need daemon=yes, but you +# can't have repositories hidden but browsable if you know the name. +# And note gitweb already allows downloading the full repository, +# so you might as well serve git-daemon too. +# $export_ok = ""; +# $strict_export = "true"; + +# A list of base urls where all the repositories can be cloned from. +# Easier than having per-repository cloneurl files. +@git_base_url_list = ('git://<%= gitweb_url %>'); + diff --git a/templates/web/lighttpd b/templates/web/lighttpd new file mode 100644 index 0000000..c7a5130 --- /dev/null +++ b/templates/web/lighttpd @@ -0,0 +1,6 @@ +$HTTP["host"] == "<%= $gitweb_url %>" { + setenv.add-environment = ( + "GITWEB_CONFIG" => "/etc/gitweb.d/${name}.conf", + ) + cgi.assign = ( "" => "" ) +} -- cgit v1.2.3