2010-05-27 2 views
1

Я создал среду chroot ubuntu (используя debootstrap) и начал openoffice как услугу для преобразования файлов с помощью unoconv. Он работает, но он проводит около 20 секунд, чтобы делать конверсии, которые находятся ниже 1 сек вне тюрьмы chroot. Исчерпывая это, я вижу, что это дополнительное время тратится на некоторые операции сокета, истечение которых заканчивается, те же самые операции, которые хорошо работают без среды chroot. Однако аналогичные операции работают нормально.исполняющий сервис (openoffice headless) в chroot медленный

Любое предложение?


начиная сервер (изолированной):

soffice -invisible -headless -nologo -nodefault "-accept=socket,host=localhost,port=8301;urp;StarOffice.ComponentContext" -env:UserInstallation=ootest2 

назвав его (в изолированной среде тоже): след

strace unoconv -f pdf -p 8300 simple_test.docx 

таймаут:

socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 4 
connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0 
fcntl(4, F_GETFL)      = 0x2 (flags O_RDWR) 
fcntl(4, F_SETFL, O_RDWR|O_NONBLOCK) = 0 
poll([{fd=4, events=POLLOUT}], 1, 0) = 1 ([{fd=4, revents=POLLOUT}]) 
sendto(4, "M#\1\0\0\1\0\0\0\0\0\0\tlocalhost\6(none)\10mo"..., 47, MSG_NOSIGNAL, NULL, 0) = 47 
poll([{fd=4, events=POLLIN}], 1, 5000) = 0 (Timeout) 
close(4)        = 0 

аналогичный след без тайм-аута (то же самое unoconv):

socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 4 
connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0 
fcntl(4, F_GETFL)      = 0x2 (flags O_RDWR) 
fcntl(4, F_SETFL, O_RDWR|O_NONBLOCK) = 0 
poll([{fd=4, events=POLLOUT}], 1, 0) = 1 ([{fd=4, revents=POLLOUT}]) 
sendto(4, "M#\1\0\0\1\0\0\0\0\0\0\tlocalhost\6(none)\10mo"..., 47, MSG_NOSIGNAL, NULL, 0) = 47 
poll([{fd=4, events=POLLIN}], 1, 5000) = 1 ([{fd=4, revents=POLLIN}]) 
ioctl(4, FIONREAD, [47])    = 0 
recvfrom(4, "M#\201\202\0\1\0\0\0\0\0\0\tlocalhost\6(none)\10mo"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [16]) = 47 
close(4)        = 0 

деталь корневая:

  • использования dchroot, чтобы использовать его как обычный пользователь
  • установленного Dev, Proc, и т.д., как (Fstab):

    /TMP/вар/местные/chrootest/tmp
    /dev/var/local/chrootest/dev
    /sys/var/local/chrootest/sys
    proc-chroot/Вар/местный/chrootest/Proc
    devpts-корневой/вар/местный/chrootest/DEV/Очки

+0

Операция сокета, которая не работает, является поиском DNS. В частности, он пытается подключиться к DNS-серверу на уровне 127.0.0.1. У вашей chroot'ed среды есть '/ etc/hosts'? – ZoogieZork

+0

Да, он имеет/etc/hosts и включает в себя строку «127.0.0.1 \t localhost» Я также подумал, что это что-то вроде поиска DNS/DNS, поэтому я поставил простой сервер (требуется «сокет», ставит TCPServer. новый («localhost», 8400) .accept.readline) и простой клиент (требуется «сокет», TCPSocket.new («localhost», 8400) .write («hi \ n»)) в ruby, chrooted и it работал. – Luis

+0

Из-за идей, извините :(Похоже, что-то возможно для OpenOffice. – ZoogieZork

ответ

3

unoconv делает некоторые Вак DNS поиск. Я добавил это на свой/etc/hosts:

127.0.0.1 localhost localhost.(none) 

И это сделало вещи значительно лучше.