Eu tenho uma VM vagante sendo provisionada via Puppet. Estou testando isso em dois Ubuntus diferentes, 12.04 e 13.10, ambos usando a caixa "padrão" precis32. O aplicativo que estou testando é um aplicativo Django sendo instalado usando o setuptools do Python (fazendo pip install /vagrant
). Usando 13.10 como o host, a VM parece provisionar muito bem.
No entanto, no dia 12.04, algumas regras posteriores do Puppet começam a falhar, dependendo do meu script 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'
Então parece que em todas as minhas coisas eu posso remover o pkg_resources
import e código em torno disso, mas eu odeio deixar o sistema em um estado onde tudo o que é preciso é uma importação para travar um aplicativo. O que parece é que tudo que o setuptools instala, exceto os arquivos *.pyc
, não tem permissões de leitura para que usuários sem privilégios possam usá-los.
Eu tentei descartar algumas coisas:
pip install
algo as permissões são definidas como seria de esperar, então parece que tem algo a ver com Puppet ou Vagrant. Alguma opinião sobre isso? Não será relevante em breve, já que estaremos mudando para 14,04 em alguns meses, mas seria bom se funcionasse nesse meio tempo.
Aqui está a regra que instala o aplicativo (e dependências):
exec{'buffet::install library':
path => "/usr/bin",
command => "pip install /vagrant",
notify => [
Exec['buffet::collect static'],
Exec['buffet::generate hookenv'],
Service['uwsgi'],
],
}
Tags puppet pip vagrant setuptools