Estou fazendo um painel do qual você pode instalar aplicativos como o owncloud & complexo em seu servidor. Eu criei vários scripts bash que instalam e removem software. Eu testei todos eles do shell, tudo funciona como deveria. No entanto, quando eu executo os scripts do php como root usando o sudo no ubuntu 15.10, o apt-get & O dpkg não está funcionando como deveria.
Em visudo eu tenho:
seedbox ALL = (root) NOPASSWD: /bin/appinstaller
o appinstaller é um script bash que executa os scripts bash dos aplicativos de instalação / desinstalação (por exemplo, appinstaller plex)
Exemplo de script plex:
dpkg --configure -a
cd /tmp
wget https://downloads.plex.tv/plex-media-server/0.9.15.6.1714-7be11e1/plexmediaserver_0.9.15.6.1714-7be11e1_amd64.deb
dpkg -i plexmediaserver_0.9.15.6.1714-7be11e1_amd64.deb
Quando executo o appinstaller diretamente do bash, tudo funciona perfeitamente.
Quando executo o appinstaller do php usando (confirmei que o script está sendo executado como root):
exec("sudo /bin/appinstaller plex > /home/installer.log 2>&1 &");
Funciona, mas eu consigo apt & erros de dpkg quando tento instalar outros aplicativos como:
E: The package plexmediaserver needs to be reinstalled, but I can't find an archive for it. (even though it's installed and working)
E também dpkg --configure -a
retorna um erro.
O plex está funcionando bem, mas parece que o apt não conclui o processo de instalação e fica preso em algum lugar, também executa comandos após o apt-get install
/ dpkg
não ser executado a partir do php, mas será executado a partir do bash. Eu tentei executar o script também do cron & systemctl e eu recebo o mesmo problema.
Vale a pena notar que alguns aplicativos estão instalando / desinstalando sem problemas.
O que poderia estar fazendo a diferença entre executar o script de php / cron / systemctl ou diretamente do shell? Posso emular a sessão bash normal?