У меня есть бродячая виртуальная машина, которая настраивается через Puppet. Я тестирую это на двух разных Ubuntus, 12.04 и 13.10, оба с использованием «стандартного» блока precision32. Приложение, которое я тестирую, представляет собой приложение Django, устанавливаемое с помощью инструментов настройки Python (путем выполнения pip install /vagrant
). Используя 13.10 в качестве хоста, виртуальная машина, похоже, отлично справляется.
Однако 12.04 некоторые более поздние правила Puppet начинают давать сбой, что зависит от моего скрипта manage.py:
vagrant@precise32:~$ sudo -u buffet ~buffet/project/manage.py collectstatic
Traceback (most recent call last):
File "/home/buffet/project/manage.py", line 11, in <module>
import settings
File "/home/buffet/project/settings.py", line 3, in <module>
import pkg_resources
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2727, in <module>
add_activation_listener(lambda dist: dist.activate())
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 700, in subscribe
callback(dist)
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2727, in <lambda>
add_activation_listener(lambda dist: dist.activate())
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2227, in activate
self.insert_on(path)
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2334, in insert_on
self.check_version_conflict()
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2373, in check_version_conflict
for modname in self._get_metadata('top_level.txt'):
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2221, in _get_metadata
for line in self.get_metadata_lines(name):
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 1209, in get_metadata_lines
return yield_lines(self.get_metadata(name))
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 1201, in get_metadata
return self._get(self._fn(self.egg_info,name))
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 1316, in _get
stream = open(path, 'rb')
IOError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/Pygments-1.6.egg-info/top_level.txt'
Похоже, что во всех моих материалах я могу удалить pkg_resources
import и код вокруг этого, но я ненавижу оставлять систему в состоянии, когда все, что требуется, - это импорт, чтобы вывести приложение из строя. Похоже, что все установки setuptools, кроме *.pyc
files, не имеет разрешений на чтение, поэтому их могут использовать непривилегированные пользователи.
Я пытался исключить несколько вещей:
pip install
что-то разрешения установлены так, как я ожидал, поэтому похоже, что это как-то связано либо с Puppet, либо с Vagrant.Есть мысли по этому поводу? Это не будет актуально в ближайшее время, так как через несколько месяцев мы перейдем на 14.04, но было бы неплохо, если бы тем временем он работал.
Вот правило, устанавливающее приложение (и зависимости):
exec{'buffet::install library':
path => "/usr/bin",
command => "pip install /vagrant",
notify => [
Exec['buffet::collect static'],
Exec['buffet::generate hookenv'],
Service['uwsgi'],
],
}