Hacer VirtualMin git Module SMART

Utilicé el module git de VirtualMin para configurar un git privado sobre http en uno de mis serveres. Tengo otros serveres con git sobre ssh, pero este fue mi primer bash de configurarlo en http y con VirtualMin.

Desafortunadamente, en las últimas horas descubro que el module por defecto de VirtualMin no utiliza el modo http inteligente y el relé en DAV para empujar se compromete con el server. Lo que no me gusta.

También intenté mover mis repos viejos a este server y no puedo utilizarlos porque no hay / info / file ref. (También escuché que el uso de modo inteligente http no necesito este file)

En consecuencia, intenté encontrar un documento sobre la installation de http inteligente y encontré mucho. Pero no creo que ninguno de ellos es compatible con VirtualMin o su module git por defecto,

¿Alguno de ustedes sabe cómo necesito personalizar la installation de mi git y la configuration de Apache para usar el protocolo http inteligente con poco daño a VirtualMin y también ser compatible con VirtualMin?

Realmente no quiero que mis ajustes y configuraciones para eliminar después de una actualización de VirtualMin o el process de recreación de la configuration que normalmente hacen estos paneles de control.

Por favor comparta sus pensamientos sobre este asunto conmigo. Gracias

Sistema operativo: CentOs 6.5 x64

Tomado de Configurar Smart HTTP para Git en Virtualmin .


A partir de aquí la solución era cambiar de HTTP normal a Smart HTTP usando el ejecutable git-http-backend, que podría ejecutar todos los ganchos y supuestamente mucho más rápido también.

  1. Copie el ejecutable git-httpd-backend en el directory / home / domain / cgi-bin / y establezca los permissions en domain: domain. Esto es para evitar problemas de suexec.

    $ cp /usr/libexec/git-core/git-http-backend /home/domain/cgi-bin $ chown domain:domain /home/domain/cgi-bin/git-http-backend 
  2. En /etc/httpd/conf/httpd.conf , agregue esto al VirtualHost para el dominio:

     [...] ServerName domain.com [...] # Set the root directory where git repositories reside SetEnv GIT_PROJECT_ROOT /home/domain/public_html/git # By default, the git-http-backend allows push for authenticated # users and this directive tells the backend when a user is authenticated. SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER # Export all repositories SetEnv GIT_HTTP_EXPORT_ALL ScriptAlias /dev/ /home/domain/cgi-bin/git-http-backend/ [...] # Add this if it's not already there DAV on AuthType Basic AuthName domain.com AuthUserFile /home/domain/etc/git.basic.passwd Require valid-user Satisfy All RedirectMatch ^/git(/+)$ /git/gitweb.cgi RewriteEngine off AddHandler cgi-script .cgi [...] 
  3. A continuación, reinicie Apache. Ahora todos los repos están ahora disponibles en http://gituser@domain.com/dev/git/* , eg, http://gituser@domain.com/dev/git/reponame.git , y todos los hooks se ejecutarán como se esperaba.

En el futuro, cuando cree un nuevo repository a través de Virtualmin, deberá realizar estos pasos manuales:

  1. Cree un file vacío /home/domain/public_html/git/reponame.git/git-daemon-export-ok .

  2. Crea esto como /home/domain/public_html/git/reponame.git/hooks/post-receive y /home/domain/public_html/git/reponame.git/hooks/post-receive ejecutable por todos, y es propiedad de apache: domain:

     #!/bin/sh # # An example hook script for the "post-receive" event. # # The "post-receive" script is run after receive-pack has accepted a pack # and the repository has been updated. It is passed arguments in through # stdin in the form # # For example: # aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master # # see contrib/hooks/ for a sample, or uncomment the next line and # rename the file to "post-receive". # Echo to the client that you're sending the mail now echo "Sending notification email..." . /usr/share/git-core/contrib/hooks/post-receive-email # Make sure to update the git repo info on the server for pulls by other clients git update-server-info echo "Updated server info." 
  3. De acuerdo con este enlace , establezca los permissions del directory git de la siguiente manera para evitar un problema de permissions de escritura al empujar nuevos files en commits (asegurándose de que el script gitweb.cgi sólo puede ser escrito por el propietario para evitar errores suexec que aparecen en /etc/httpd/logs/suexec.log):

     $ cd /home/domain/public_html/git/ $ chmod -R g+ws * $ chgrp -R domain * $ chmod -R gw gitweb.cgi $ chmod -R gs gitweb.cgi 
  4. Actualice /home/domain/public_html/git/reponame.git/config para que coincida con lo siguiente:

     [core] repositoryformatversion = 0 filemode = true bare = true [hooks] mailinglist = email1@domain.com, email2@domain.com envelopesender = git-commits@domain.com emailprefix = "[REPONAME] "