Kontext: Ich erstelle einen Gitolite3-Hook für ein bestimmtes Repo, das einige Logik- und CSS-Foo meiner Website enthält.
Was also im Wesentlichen passiert, ist
Der Inhalt darunter /var/www/nginx/
sieht folgendermaßen aus:
drwxrwxr-x. nginx git system_u:object_r:httpd_sys_content_t:s0 foo
.git
ist besonders:
drwxrwxr-x. git git system_u:object_r:httpd_sys_content_t:s0 .git
Um sicherzustellen, dass alle Unterverzeichnisse über die richtigen Zugriffsrechte verfügen, habe ich Folgendes verwendet:
chown nginx:git -Rf ./webfoo
chmod g+rw -Rf ./webfoo
chown git:git -Rf ./webfoo/.git
[Dies ist nur ein Bonus, Sie können dies überspringen.]
Der Gitolite3-Hook
#!/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
enthält keine Zugriffsverweigerungen.
Aktualisieren:Auch die lokale Anmeldung git
funktioniert nicht. Das ist also wahrscheinlichnicht im Zusammenhang mit SELinux/Dateisicherheitskontext.
Warum funktioniert das nicht wie erwartet?
Antwort1
Einige Gründe, warum es nicht funktioniert hat:
- Benutzer
git
sollte Mitglied sein vonGruppegit
- nicht als anderer Benutzer ziehen/rebase, der
.git/*
Besitzer könnte sich ändern, dies gilt insbesondere, wenn Sie angemeldet sind alsroot
Eine elegantere Lösung besteht darin monit
, das Repository unter (als Benutzer git
) zu überwachen ~/repositories
, sodass ich auch neu starten kann nginx
, uwsgi
wenn sich eine ausführbare Webanwendung/Datei geändert hat.