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?