Libreoffice --headless отказывается конвертировать, если не root, не будет работать с PHP скрипт
Запуск безголового сервера Ubuntu 12.что-то.
root @server: chown www-data /my/path/ -R
root @server: chgrp www-data /my/path/ -R
root @server: chmod 755 /my/path/ -R
root @server: libreoffice --headless --convert-to pdf:writer_pdf_Export /my/path/foo.ppt --outdir /my/path
convert /my/path/foo.ppt -> /my/path/foo.pdf
Работает как шарм.
root @server: sudo -i -u www-data
$libreoffice --headless --convert-to pdf:writer_pdf_Export /my/path/foo.ppt --outdir /my/path
convert /my/path/foo.ppt -> /my/path/foo.pdf
Error: Please reverify input parameters...
Блин.
root @server: sudo -i -u someotheruser
$libreoffice --headless --convert-to pdf:writer_pdf_Export /my/path/foo.ppt --outdir /my/path
convert /my/path/foo.ppt -> /my/path/foo.pdf
Error: Please reverify input parameters...
Блин.
У кого-нибудь есть идея? Попытка исследовать это только смутила меня больше. Возможно, это ошибка или какая-то зависимость?
Ответы
Ответ 1
Наконец-то я нашел ответ на этот вопрос...
Добавить:
export HOME=/tmp &&
в начало, поэтому:
export HOME=/tmp && libreoffice --headless --convert-to pdf:writer_pdf_Export /my/path/foo.ppt --outdir /my/path
Это сработало для меня на CentOS 6.5 и как shell_exec() в PHP.
Ответ 2
Мы столкнулись с той же проблемой при запуске soffice
двоичного безголового (LibreOffice 5.0.5.2) в контейнере CloudFoundry (Diego) в составе приложения NodeJS.
Кажется, что более новые версии libreoffice
не ожидают записываемого HOME
, но попытайтесь записать в TMPDIR
.
strace
показал:
8349 mkdir("app/tmp", 0777) = -1 ENOENT (No such file or directory)
8349 open("app/tmp/lu8349pzgegi.tmp", O_RDWR|O_CREAT|O_EXCL, 0600) = -1 ENOENT (No such file or directory)
с TMPDIR=app/tmp
Мы исправили его, установив TMPDIR
в каталог, который можно записать пользователем приложения, т.е. TMPDIR=/tmp
в CloudFoundry:
process.env.TMPDIR = "/tmp";
Ответ 3
У меня была такая же ошибка, но проблема была не в корневом доступе. Команда была неправильной.
Это сработало для меня, получив текст из документа в LibreOffice 4.2.:
soffice --headless --convert-to txt:Text file_to_convert.odt
(http://ask.libreoffice.org/en/question/14130/how-do-i-install-filters-for-the-soffice-command/)
Ответ 4
Как сказал Яцек в своем комментарии, сделайте пользователя, которым вы пытаетесь выполнить команду, как sudoer без пароля. Затем измените команду libreoffice на
sudo libreoffice <rest of command>
Работал для меня. У меня была такая же проблема.
Ответ 5
Все, что вам нужно сделать - создать папку "/var/www/.config". Когда вы пытаетесь преобразовать какой-либо файл в www-data, пользователю libreoffice требуется ".config" dir в домашнем каталоге пользователя. Но у libreoffice нет прав на создание такой папки. Домашний каталог пользователя www-data по умолчанию - "/var/www". Так что просто запустите команды:
sudo mkdir /var/www/.config
sudo chmod 700 /var/www/.config
sudo chown www-data /var/www/.config
Ответ 6
Я смог преодолеть эту проблему, сначала удалив файл, а затем запустив файл конвертирования. Похоже, перезапись файла не удалась из-за проблем с владельцем файла.
Ответ 7
Я бы посмотрел на
http://dag.wieers.com/home-made/unoconv/
Этот инструмент должен быть более подходящим для правильного преобразования ваших файлов. Он доступен в репозиториях ubuntu, поэтому проблем с установкой не должно быть.
Ответ 8
Вы не можете запустить libreoffice soffice двоичный с пользователем www-data. Вместо этого используйте пользователя с привилегиями sudo. Проверьте мой Gist https://gist.github.com/nathanielvarona/423bda9e4a8a4f0f9bbf#file-soffice-listener-sh
И так как вы собираетесь использовать это в PHP. Просто попробуйте PHP-FPM. Установите его, а затем измените файл /etc/php 5/fpm/pool.d/www.conf.
Из
user = www-data
group = www-data
To:
user = ubuntu
group = ubuntu
Я успешно запускаю это в AWS EC2, а также с моими виртуальными машинами VBox.