Lighttpd не работает при обслуживании из общей папки Virtualbox
У меня настроен веб-сервер lighttpd на гостевой системе Debian 6 в Virtualbox 4. У меня есть каталог www в общей папке virtualbox, чтобы я мог разработать веб-сайт на хосте Windows.
Моя проблема в том, что lighttpd по-разному обслуживает два идентичных файла, созданные разными текстовыми редакторами. Vim работает должным образом, но создание файлов с помощью echo (или любого другого редактора) создает файлы, которые отлично выглядят на диске, но становятся поврежденными, когда lighttpd обслуживает их. Эта проблема возникает только в том случае, если корень документа находится в общей папке virtualbox. Может быть, проще показать эту проблему, чем объяснить, поэтому я сделал тестовый пример ниже.
РЕДАКТИРОВАТЬ: Это какая-то проблема кеширования, работает echo 3 > /proc/sys/vm/drop_caches
до того, как wget заставит загруженный файл работать нормально. Тем не менее, не объясняет, почему на vim это не влияет...
root@Apricots:/var/www/xxx.org/http# vim vim.txt
(I type 'Line 1' into vim, on one line)
root@Apricots:/var/www/xxx.org/http# echo 'Line 1' >> echo.txt
root@Apricots:/var/www/xxx.org/http# md5sum vim.txt echo.txt
376cbf50d47a30459adca22b15964912 vim.txt
376cbf50d47a30459adca22b15964912 echo.txt
root@Apricots:/var/www/xxxt.org/http# cd ~
root@Apricots:~# wget xxx.org/vim.txt xxx.org/echo.txt
(The two files download OK)
root@Apricots:~# md5sum vim.txt echo.txt
376cbf50d47a30459adca22b15964912 vim.txt
376cbf50d47a30459adca22b15964912 echo.txt
root@Apricots:~# cat vim.txt
Line 1
root@Apricots:~# cat echo.txt
Line 1
root@Apricots:~# cd /var/www/xxx.org/http/
root@Apricots:/var/www/xxx.org/http# vim vim.txt
(I type 'Line 2' in a second line in vim)
root@Apricots:/var/www/xxx.org/http# echo 'Line 2' >> echo.txt
root@Apricots:/var/www/xxx.org/http# md5sum vim.txt echo.txt
ef3095884e8daf72dc4d2ea71306caa7 vim.txt
ef3095884e8daf72dc4d2ea71306caa7 echo.txt
root@Apricots:/var/www/xxx.org/http# cat vim.txt
Line 1
Line 2
root@Apricots:/var/www/xxx.org/http# cat echo.txt
Line 1
Line 2
root@Apricots:/var/www/xxx.org/http# cd ~
root@Apricots:~# rm vim.txt echo.txt
root@Apricots:~# wget xxx.org/vim.txt xxx.org/echo.txt
(They both download fine again)
root@Apricots:~# md5sum vim.txt echo.txt
ef3095884e8daf72dc4d2ea71306caa7 vim.txt
0b8835dcb6bb73c7a4eb25301101699a echo.txt
root@Apricots:~# cat vim.txt
Line 1
Line 2
root@Apricots:~# cat echo.txt
Line 1
root@Apricots:~# hexdump vim.txt
0000000 694c 656e 3120 4c0a 6e69 2065 0a32
000000e
root@Apricots:~# hexdump echo.txt
0000000 694c 656e 3120 000a 0000 0000 0000
000000e
root@Apricots:~# echo "what the hell just happened there??"
what the hell just happened there??
2 ответа
Хорошо, исправил это. Видимо это потому что sendfile()
из виртуальных папок общие папки не работают. Вы можете заставить lighttpd использовать системный вызов write для отправки файлов, добавив директиву server.network-backend = "writev"
, Так как это только для развития, не имеет большого значения.
Источник:
http://forums.virtualbox.org/viewtopic.php?f=6&t=38973
http://forums.virtualbox.org/viewtopic.php?f=8&t=24905&p=129089&hilit=vboxsf+web+server
У меня также были некоторые проблемы с обслуживанием файлов из общей папки VBox. В моем случае я редактирую файлы на хост-машине, но изменения не отражаются в виртуальной машине.
Чтобы обойти это, я должен umount
а также mount
общая папка внутри виртуальной машины, чтобы увидеть новые файлы. Может быть, что-то подобное происходит здесь, и вам может понадобиться sync
это или заставить флеш umount
а также mount
общая папка тоже.
Если это работает, возможно, есть возможность сделать это автоматически.