как запустить svn update через svn post-commit hook - PullRequest
0 голосов
/ 03 декабря 2010

Цель: обновить /var/www с последним на SVN коммит.

Ubuntu Server 10.10, последняя версия apache2, последняя версия svn, местоположение: /var/svn/[projectname]

Для этого я создал простой сценарий пост-фиксации:

#!/bin/bash

#tests if www-data user runs this script on commit (which it does)
touch /tmp/test.log

#works when run from the command line (sudo ./post-commit) but not when run by www-data
sudo /usr/bin/svn update /var/www

Исправитьвопрос о второй команде, не работающей как www-данные, я попытался ...

Редактирование: sudo visudo и добавил (в конце): www-data ALL=(ALL) NOPASSWD:ALL

Чаунинг: /var/wwwwww-data:www-data

Chmoding: все от /var/www до 777

Все еще не повезло ... есть идеи?

Ответы [ 2 ]

1 голос
/ 03 декабря 2010

Что если вы запустите это:

  su - www-data -c '/usr/bin/svn update /var/www'

(sudo не требуется, если / var / www / имеет значение 777 и принадлежит www-data ..)

Как пользователь root? (затем suid() s как www-data и выполните команду). Он должен дать больше информации о том, что на самом деле терпит неудачу.

Или вы можете попытаться зарегистрировать вывод svn update из ловушки после фиксации:

/usr/bin/svn update /var/www &> /tmp/my-svn-update.log

Я думаю, что эти два теста должны дать вам больше информации о том, что произошло.

ПОБОЧНОЕ ПРИМЕЧАНИЕ: Я не уверен, что вы действительно хотите рискнуть, если www-data сможет выполнить любую команду от имени пользователя root. Если вам абсолютно необходимо, чтобы она запускалась svn as root (я не вижу в этом смысла, но это может быть так), просто используйте это в вашем / etc / sudoers:

www-data ALL=NOPASSWD: /usr/bin/svn
0 голосов
/ 03 декабря 2010

Я пошел первым с предложенным вами механизмом регистрации, и это помогло это исправить!Спасибо!

Выведенная ошибка была связана с именем файла в репро, которое не удалось преобразовать в UTF-8.Я удалил файл, и он работал.Но почему это сработало при непосредственном вызове post-commit ... Понятия не имею.

Кстати, я ошибался, потому что это bash (это был sh), поэтому мне пришлось изменить &> на 2>

Кроме того, я удалил извлеченные файлы, сбросил разрешения и владельца в нормальное состояние на / var / www, а затем снова их проверил.

моя последняя строка sudoers:

www-data ALL=NOPASSWD:/usr/bin/svn update /var/www

Большое спасибо за помощь!

...