Eu tenho um site rodando em Django e Apache (httpd) e dentro de uma visão eu preciso chamar o FFMPEG para converter uma imagem em vídeo. Ele funcionou no Ubuntu 12 por anos, mas agora temos que migrá-lo para CentOS 7 e as coisas se tornaram complicadas. O código é assim:
ffcmd = '/usr/local/bin/ffmpeg -y -loop 1 -i %s -t %d -vf "fade=in:0:5,fade=out:%d:5" -pix_fmt yuv420p -r "30" -c:v libx264 %s %s.mp4 %s' % (##PARAMS##)
import subprocess
p = subprocess.Popen(ffcmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
out, err = p.communicate()
Mas recebo um erro na saída err :
Exception: /bin/sh: /usr/local/bin/ffmpeg: Permission denied
Após alguns testes, descobri que o SELinux está bloqueando e registrando. Quando desativei o SELinux, funcionou, mas tenho que mantê-lo ativado por causa das políticas internas do cliente.
Encontrei alguns comandos que devem ler as regras bloqueadas e desativá-las, usando "audit2allow":
grep httpd /var/log/audit/audit.log | audit2allow -m httpdlocal > httpdlocal.te
Acima para ver as regras no arquivo link . Abaixo para aplicá-las.
grep httpd /var/log/audit/audit.log | audit2allow -M httpdlocal
semodule -i httpdlocal.pp
Mesmo com isso, ainda registrando "Permissão negada" .
Estou no caminho certo ou existe uma maneira melhor de manter o SELinux no modo "enforcing" e desbloquear a execução do FFMPEG sob o Apache?