# This class handles a gitolite installation, with /var/git as the root for # git repositories. class git::gitolite inherits git { # directory for gitolite user and repositories file { "/var/git": ensure => directory, mode => 0755, owner => git, group => git, } # repositories folder file { "/var/git/repositories": ensure => directory, owner => git, group => git, mode => 0755, recurse => false, } # symbolic link file { "/var/cache/git": ensure => "/var/git/repositories", force => true, backup => false, require => File['/var/git/repositories'], } # the needed packages package { "gitolite3": ensure => installed } # make sure this is not installed package { "gitosis": ensure => purged } # ensures that the group exists group { "git": ensure => present, allowdupe => false, require => Package["gitolite3"], } # alters the user's home dir # set '*' on password field to avoid this issue: # https://stackoverflow.com/questions/15664561/ssh-key-asks-for-password/15761971#15761971 user { "git": allowdupe => false, comment => "git repository hosting,,,", ensure => present, home => "/var/git", shell => "/bin/sh", gid => "git", password => '*', groups => [ "puppet" ], require => Group["git"], } # tries to get rid of ugly directory structure file { "/srv/gitolite": ensure => absent, force => true, backup => false, require => User["git"], } # we also don't need /var/lib/gitolite file { "/var/lib/gitolite": ensure => absent, force => true, backup => false, require => User["git"], } file { "/var/git/.gitolite.rc": ensure => present, owner => git, group => git, mode => 0644, source => "puppet:///modules/git/gitolite.rc.${::lsbdistcodename}", require => [ File['/var/git'], User['git'] ], } file { "/var/git/projects.list": ensure => present, owner => git, group => git, mode => 0644, require => [ File['/var/git'], User['git'] ], } # mass update script file { "/usr/local/sbin/git-mass-update-server-info": ensure => present, owner => root, group => root, mode => 0755, source => "puppet:///modules/git/git-mass-update-server-info", } # mass update hourly cron { "/usr/local/sbin/git-mass-update-server-info": command => "/usr/local/sbin/git-mass-update-server-info &> /dev/null", user => root, hour => "*/1", minute => "20", ensure => present, require => File['/usr/local/sbin/git-mass-update-server-info'], } # git-annex integration package { 'git-annex': ensure => present, } # wheezy onwards # http://git-annex.branchable.com/tips/using_gitolite_with_git-annex/ file { [ '/var/git/adc', '/var/git/adc/ua' ]: ensure => $::lsbdistcodename ? { 'squeeze' => absent, default => directory, }, owner => git, group => git, mode => 0755, require => File['/var/git'], } exec { 'git-annex-shell-copier': command => 'cp /usr/share/doc/gitolite/examples/adc/git-annex-shell /var/git/adc/ua/git-annex-shell', user => root, creates => '/var/git/adc/ua/git-annex-shell', onlyif => "test -f /usr/share/doc/gitolite/examples/adc/git-annex-shell", require => [ Package['git-annex'], File['/var/git/adc/ua'] ], } }