Migrando repositórios git para um novo servidor

1

Eu quero mirgrar meus repositórios de: RedHat 6.9 (Santiago) com o apache 2.2 e php 5.3

para: Ubuntu 16.04.4 LTS com apache 2.4 e php 7.0

Estou usando o "gitweb / git-http-backend" para armazenar os repositórios por meio de https, portanto, não estou usando o SSH aqui. Outra coisa importante é que eu não vou mudar o nome do VirtualHost Server, então os usuários nem vão notar isso.

Infelizmente, os testes preliminares no meu novo servidor não estão funcionando, ao tentar clonar um repositório existente, recebo um erro 404 não encontrado.

Minha primeira pergunta aqui: para os testes, o nome do servidor original é: my_server.com e, em seguida, para o novo servidor, estou usando my_server_dev.com. Isso é apenas para testes. Depois, substituirei o nome do novo servidor pelo nome do servidor antigo. Preciso alterar o nome do servidor nos repositórios da configuração de teste para poder ver se o git funciona? Eu acho que uma vez que os testes funcionem e não terão que mudar nada nos repositórios, certo?

Isso está funcionando no meu servidor antigo:

<VirtualHost *:443>
  ServerName my_server.com
  AddType application/x-httpd-php .php
  CustomLog "/var/log/httpd/my_server_access.log" common
  RewriteEngine On

  SSLEngine on
  SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
  SSLCertificateFile "/etc/ssl/certs/my_cert.crt"
  SSLCertificateChainFile "/etc/ssl/certs/my_fullchain.crt"
  SSLCertificateKeyFile "/etc/ssl/certs/my_key.priv.key"

  DocumentRoot /var/www/
  <Directory />
    Options FollowSymLinks
    AllowOverride None
  </Directory>

  <Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
  </Directory>

  SetEnv GIT_PROJECT_ROOT /home/git
  SetEnv GIT_HTTP_EXPORT_ALL
  ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
  Alias /git /home/git

  <Location /git>
    AuthType Basic
    AuthName "Git repositories"
    AuthBasicProvider ldap
    AuthzLDAPAuthoritative on

    AuthLDAPURL "ldaps://my_server1.com my_server2.com my_server3.com/ou=users,ou=my_ou,o=my_domain,c=my_country?uid?sub?(objectClass=*)"
    AuthLDAPBindDN "my_bind_dn"
    AuthLDAPBindPassword my_password
    AuthLDAPGroupAttributeIsDN off
    AuthLDAPGroupAttribute memberUid
    require valid-user

    AuthGroupFile /etc/httpd/my_group_file
  </Location>
  <Location /git/my_repo1.git>
        Allow from all
        Order allow,deny
        require group group1 group2
  </Location>
  <Location /git/my_repo2.git>
        Allow from all
        Order allow,deny
        require group group1 group3
  </Location>
  #More repositories here
</VirtualHost>

Então, agora, depois de ter copiado tudo em "/ home / git" do meu antigo servidor para o meu novo servidor, eu tenho:

<VirtualHost *:443>
  ServerName my_server.com

  SSLEngine on
  SSLProtocol ALL -SSLv2 -SSLv3
  SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
  SSLHonorCipherOrder on
  SSLCompression off
  SSLOptions +StrictRequire
  SSLCertificateFile /etc/ssl/certs/my_cert.pem
  SSLCertificateChainFile /etc/ssl/certs/my_fullchain.pem
  SSLCertificateKeyFile /etc/ssl/certs/my_privkey.pem

  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/my_domain_access.log combined
  RewriteEngine On

  DocumentRoot ${APACHE_ROOT}/my_server
  <Directory ${APACHE_ROOT}/my_server>
    Options Indexes FollowSymLinks MultiViews
    Require all granted
    AllowOverride All
  </Directory>

  SetEnv GIT_PROJECT_ROOT /var/www/html/my_server/git
  SetEnv GIT_HTTP_EXPORT_ALL
  ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
  Alias /git /var/www/html/my_server/git

  <Location /git>
    AuthType Basic
    AuthName "Git repositories"
    AuthBasicProvider ldap
    AuthLDAPBindAuthoritative on
    AuthLDAPURL "ldaps://my_server1.com my_server2.com my_server3.com/ou=users,ou=my_ou,o=my_domain,c=my_country?uid?sub?(objectClass=*)"
    AuthLDAPBindDN "my_bind_dn"
    AuthLDAPBindPassword my_password
    AuthLDAPGroupAttributeIsDN off
    AuthLDAPGroupAttribute memberUid
    require valid-user

    AuthGroupFile /etc/apache2/my_group_file
  </Location>
  <Location /git/my_repo1.git>
    require group group1 group2
  </Location>
  <Location /git/my_repo2.git>
    require group group1 group3
  </Location>
  #More repositories here
</VirtualHost>

Se você observar com cuidado, verá que as únicas alterações que eu tenho são:

  1. Removido: "aplicativo AddType / x-httpd-php .php". Isso já está habilitado no Ubuntu apesar de "/ etc / mods-enabled - > php7.0. *"
  2. Os diretórios do apache foram alterados para os do Ubuntu: / etc / apache2, / var / log / apache2 e / var / www / html
  3. O SSLCipherSuite mudou um pouco, mas isso não deve ser um problema
  4. Isso foi alterado:

    Permitir pedido, negar

    permitir de todo

    por:

    Exigir tudo concedido

  5. "/ home / git" foi alterado por: "/ var / www / html / my_domain / git". Para ser honesto, também tentei a primeira opção, mas não funcionou. Tenho visto casos em que outras pastas fora de "/ var / www / html" não funcionam.

  6. "/ usr / libexec / git-core / git-http-backend /" foi alterado por: "/ usr / lib / git-core / git-http-backend /", que é onde este binário reside no Ubuntu .
  7. "AuthzLDAPAuthoritative" foi alterado por: "AuthLDAPBindAuthoritative". A primeira diretiva não existe mais no apache 2.4.
  8. Alterado:

Permitir de todos

Permitir pedido, negar

requer grupo de grupo1

apenas por:

requer grupo de grupo1

Isto parece ser suficiente para o Apache 2.4

O resto da minha configuração é praticamente o mesmo. Eu só agora que o SSL está funcionando e a autenticação LDAP também. Se eu der as credenciais do usuário, isso não é permitido para acessar um repositório, então eu vou ver isso no arquivo de log de erros:

[authz_groupfile:error] [pid 17829] [client xxx.xxx.xxx.xxx:xxxx] AH01666: Authorization of user my_user1 to access /git/my_repo.git failed, reason: user doesn't appear in group file (/etc/apache2/my_group_file).
[authz_core:error] [pid 17829] [client xxx.xxx.xxx.xxx:xxxx] AH01631: user my_user1: authorization failure for "/git/my_repo.git":

Tentar com um usuário que tenha o acesso, passará a autenticação, mas vou ver isso no cliente:

fatal: repository 'https://my_domain.com/git/my_repo.git/' not found

E no log de acesso, de fato, existe um código de erro 404:

xxx.xxx.xxx.xxx - my_user [14/Mar/2018:20:45:29 +0100] "GET /git/my_repo.git/info/refs?service=git-upload-pack HTTP/1.1" 404 596 "-" "git/2.10.0.windows.1"

O que poderia estar errado aqui?

Obrigado em avançado

Atenciosamente Josef

    
por user795630 14.03.2018 / 21:09

1 resposta

0

Ok, eu percebi isso. Acontece que mod_cgi ou mod_cgid são necessários. Aqui está o /etc/apache2/conf-available/gitweb.conf padrão que vem com o pacote binário do Ubuntu:

<IfModule mod_alias.c>
    <IfModule mod_mime.c>
        <IfModule mod_cgi.c>
          Define ENABLE_GITWEB
        </IfModule>
    <IfModule mod_cgid.c>
      Define ENABLE_GITWEB
    </IfModule>
  </IfModule>
</IfModule>

<IfDefine ENABLE_GITWEB>
  Alias /gitweb /usr/share/gitweb

  <Directory /usr/share/gitweb>
    Options +FollowSymLinks +ExecCGI
    AddHandler cgi-script .cgi
  </Directory>
</IfDefine>

Então, se você está trabalhando com o gitweb, você precisa de: mod_alias e mod_mime. Você precisa: mod_cgi ou mod_cgid. No meu caso, eu tive os dois primeiros, mas nenhum dos dois últimos módulos cgi.

Para ativar o mod_cgid você precisa do mpm_worker_module ou do mpm_event_module. Para o mod_cgi, você precisa de: mpm_prefork_module

Eu não sei quais são as diferenças entre os dois cgis, mas como eu já tenho o mpm_prefork_module, decidi ativar o último:

sudo a2enmod cgi

No meu caso, para o servidor de teste eu preciso ir para cada repositório e fazer:

git update-server-info

Os testes iniciais estão funcionando agora.

Atenciosamente Josef

    
por user795630 20.03.2018 / 16:14