Я перешел с Ubuntu на CentOS, и теперь у меня проблема с запуском adb
из PHP.
Я пытаюсь выполнить shell_exec("/path/to/adb devices");
и я получаю:
ADB server didn't ACK
failed to start daemon
error cannot connect to daemon
daemon not running. starting it now on port 5037
Конечно adb
не может запуститься, потому что он уже запущен и прослушивает порт 5037, и если я попытаюсь запустить adb devices
как root или как обычный пользователь из командной строки возвращает все подключенные устройства.
Эта конфигурация ранее работала с Ubuntu.
В чем разница? Какие-либо предложения?
Я собираюсь сказать, что с вероятностью 90% это связано с SELinux. Вы можете подтвердить это, просмотрев записи в /var/log/audit/audit.log
.
В CentOS по умолчанию включен SELinux.
Когда ты бежишь adb
из вашего PHP-скрипта, он, скорее всего, работает под httpd
контекст безопасности, который не разрешает исходящие сетевые подключения.
В быстрый исправить это позволить httpd
для исходящих сетевых подключений:
setsebool -P httpd_can_network_connect on
Имейте в виду, что это позволит исходящие соединения куда угодно.
В безопасный исправить - написать локальную политику, ограничивающую adb
и позволяя ему подключаться к порту 5037, получать доступ к USB-устройствам и т. д., но это много работы ...