A instalação do Gitlab 7.10 não cria a configuração correta do usuário ssh git?

0

Estou configurando uma instância do Gitlab no meu laboratório de VM e estou confuso com a maneira como o SSH é configurado no Gitlab, por isso gostaria de saber se estou fazendo algo errado ou se o Gitlab está usando alguma convenção da qual não conheço .

Acabei de instalar o Gitlab 7.10 CE no CentOS 7 em ESXi 5.5 U2 usando yum install gitlab-ce . Antes de reconfigurar o gitlab pela primeira vez, modifiquei /etc/gitlab/gitlab.rb para usar o banco de dados postgresql externo, o servidor SMTP externo definido, a porta externa e o diretório do repositório git externo (diretório apoiado pelo NFS do meu NAS).

Tudo funciona perfeitamente ( gitlab-ctl reconfigure não gera exceções, gitlab-rake gitlab:check não soluciona erros, posso fazer logon na instância, posso criar projetos e vejo as alterações sendo propagadas para o diretório suportado pelo NFS) - até o momento Eu tento empurrar para o repositório git pela primeira vez usando instruções geradas a partir da página web do projeto (estou usando o msysgit para empurrar para o git repo, se isso for remotamente relevante).

Não há nenhuma outra instância / instalação de git na máquina servidor que não seja aquela incorporada pelo gitlab - as instruções oficiais não mencionaram isso quando necessário e isso parece razoável; Por que eu precisaria de duas instâncias do git? Parece um problema.

Se necessário, postarei a saída gitlab-rake check aqui como uma atualização, mas gostaria de reduzir o tamanho do post inicialmente.

chave ssh do usuário do cliente - > adicionado via Gitlab web UI
caminho do servidor git bin - > /opt/gitlab/embedded/bin/git
git home do servidor git - > /var/opt/gitlab/
shell git do servidor - > sh
grupo de projetos do gitlab - > algorithms

Aqui está a cronologia dos meus esforços:

Ação :

$ git push -u origin master
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Response : adicione a chave autorizada ao git do diretório .ssh do usuário.

Ação :

$ git push -u origin master
sh: git-receive-pack: command not found
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

$ ssh [email protected] echo \$PATH
/usr/local/bin:/usr/bin

Resposta : adicione o arquivo ~git/.profile ao usuário git com o caminho git incorporado exportado. Adicione o arquivo ~git/.ssh/environment com o caminho git incorporado exportado (para o modo shell não interativo). Alterado /etc/ssh/sshd_config para aceitar a nova configuração. Reiniciado sshd .

Ação :

$ ssh [email protected] echo \$PATH
/usr/local/bin:/usr/bin:/opt/gitlab/embedded/bin/

$ git push -u origin master
fatal: 'algorithms/sedgewick-book.git' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Ação (motivada por SO post ): Adicionada a diretiva AllowUsers <...> git explícita a sshd , embora eu não esteja usando uma porta não padrão.

Resposta : nenhuma. Mesma mensagem de erro de antes.

Ação : Estou começando a suspeitar que algo está faltando na URL do SSH, então comecei a usar o caminho completo para meu repositório remoto, mesmo que não precisei fazer isso e o Gitlab não gera durante a configuração inicial do projeto.

$ git push origin master
Counting objects: 6, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (5/5), 520 bytes | 0 bytes/s, done.
Total 5 (delta 0), reused 0 (delta 0)
remote: GitLab: No such user or key
To [email protected]:/mnt/git/repositories/algorithms/sedgewick-book.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to '[email protected]:/mnt/git/repositories/algorithms/sedgewick-book.git'

Resposta : nenhuma. Veja o erro acima.

Neste ponto, devo admitir a derrota. Eu tentei usar o namespace gitlab diferente (ou seja, meu próprio nome de usuário em vez do grupo de projeto), tentei alinhar exatamente meu nome de usuário do gitlab com o nome de usuário usado na chave SSH, tentei criar um confirmar por meio da interface do usuário do Gitlab na origem / mestre e, em seguida, desproteger a ramificação - o resultado final é sempre o mesmo, erro acima.

É altamente suspeito que eu deveria estar especificando o caminho absoluto para o repositório (o cliente deve estar completamente alheio ao local onde o repositório está localizado!) e os grupos do Gitlab não possuem metadados que possam interferir e injetar alguns dados adicionais sob a tabela (eu os vejo como recipientes de conveniência triviais de projetos).

Por fim, este post de SO teve um problema muito semelhante ao mas a solução proposta não faz muito sentido - é como se eu estivesse criando um usuário separado do Gitlab para cada grupo, o que seria completamente maluco, sem mencionar que eu já tentei alinhar o nome do caminho do repositório com o nome de usuário do Gitlab , sem sucesso (vale a pena, que também é realmente questionável, mas eu estava desesperado, então eu dei uma chance).

O erro indica que o Gitlab não sabe como encontrar o usuário (git) que estou usando, mas não sei mais o que tentar - adicionei a chave SSH ao usuário do Gitlab e também tentei alinhar o Nome de usuário do Gitlab com o nome do cliente git (usado na própria chave pública do SSH).

Eu não sei mais o que tentar. Alguma sugestão, por favor?

    
por quantum 27.04.2015 / 21:53

1 resposta

1

Eu consegui fazer esse trabalho - adicionarei a explicação na esperança de que alguém mais possa ser poupado do cabelo que eu passei.

A solução foi trivial, mas o erro relatado é enganoso e a causa subjacente é inesperada. Foi apenas por acidente que me deparei com o link que descreveu precisamente a causa e a solução.

Essencialmente, a raiz do problema é que eu adicionava manualmente a chave SSH autorizada do cliente a ~git/.ssh/authorized_keys . O Gitlab não gosta disso, pois insere algumas informações de metadados adicionais sobre seus repositórios como parte da própria chave - você deve adicionar a chave SSH ao perfil do usuário somente via interface da web.

A razão pela qual eu adicionei manualmente a chave SSH é que eu estava recebendo Permission denied (publickey,gssapi-keyex,gssapi-with-mic) de erros, apesar da chave SSH ter sido definida, então eu fui com o acima.

Indiscutivelmente, isso pode ser uma escolha de design questionável e parece um hack - eu não estou nada convencido de colocar qualquer coisa, mas a chave no authorized_keys é sábio: não parece Ele foi projetado para armazenar informações de metadados (um é essencialmente sobre o propósito do arquivo em si, já que contém "algo mais" além das chaves) e contradiz as melhores práticas existentes em relação à colocação de chaves no arquivo (isto é a primeira vez que eu vi algo assim). Por outro lado, pode-se argumentar que o usuário git do Gitlab é realmente um componente interno do Gitlab e não é necessário nem esperado que ele seja alterado manualmente. Isso pode ser corrigido com documentação aprimorada.

    
por 29.04.2015 / 07:06