Contexto: estoy creando un gancho gitolite3 para un repositorio específico, que contiene algo de lógica y CSS de mi sitio web.
entonces lo que esencialmente sucede es
El contenido a continuación /var/www/nginx/
se ve así:
drwxrwxr-x. nginx git system_u:object_r:httpd_sys_content_t:s0 foo
.git
es especial:
drwxrwxr-x. git git system_u:object_r:httpd_sys_content_t:s0 .git
Para asegurarme de que todos los subdirectorios tengan los derechos de acceso adecuados, utilicé:
chown nginx:git -Rf ./webfoo
chmod g+rw -Rf ./webfoo
chown git:git -Rf ./webfoo/.git
[Esto es solo una ventaja, puedes omitirlo.]
El anzuelo gitolite3
#!/bin/bash
cd /var/www/nginx/webfoo || exit
unset GIT_DIR
echo "where: $(pwd)"
git pull -f origin deploy-me-branch
remote: where: /var/www/nginx/webfoo
remote: From /home/gitolite/repositories/webfoo
remote: c092ee2..07274a6 master -> origin/master
remote: error: unable to unlink old '.gitignore' (Permission denied)
remote: error: unable to unlink old 'templates/fancypost.html' (Permission denied)
remote: error: unable to unlink old 'templates/layout.html' (Permission denied)
/var/log/audit/audit.log
no contiene ningún acceso denegado.
Actualizar:Incluso iniciar sesión git
localmente tampoco funciona. Entonces esto es probablementeno relacionado con SELinux/contexto de seguridad de archivos.
¿Por qué esto no funciona como esperaba?
Respuesta1
Algunas razones por las que no funcionó:
- usuario
git
debe ser miembro degrupogit
- no extraiga/rebase como un usuario diferente,
.git/*
podría cambiar de propietario, esto es especialmente cuando se inicia sesión comoroot
Una solución más elegante es usar monit
, monitorear el repositorio en (como usuario git
) ~/repositories
para poder reiniciar también nginx
y uwsgi
si una aplicación web/archivo ejecutable cambió.