Lighttpd quebrado ao servir da pasta compartilhada do Virtualbox [closed]

1

Eu tenho um servidor web lighttpd configurado em um convidado do Debian 6 no Virtualbox 4. Eu tenho o diretório www em uma pasta compartilhada virtualbox, para que eu possa desenvolver um site no host do Windows.

Meu problema é que dois arquivos idênticos criados por diferentes editores de texto são exibidos de forma diferente pelo lighttpd. O Vim funciona como deveria, mas a criação de arquivos com echo (ou qualquer outro editor) produz arquivos que ficam bem no disco, mas ficam corrompidos quando o lighttpd os serve. Esse problema está presente apenas quando a raiz do documento está em uma pasta compartilhada virtualbox. Pode ser mais fácil mostrar esse problema do que explicá-lo, então fiz um teste abaixo.

EDIT: Este é um tipo de problema de armazenamento em cache, executando echo 3 > /proc/sys/vm/drop_caches antes que o arquivo baixado funcione corretamente. Ainda não explica porque o vim não é afetado embora ...

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??
    
por KJ Tsanaktsidis 25.02.2011 / 01:46

2 respostas

2

Tudo bem, consertei. Aparentemente é porque sendfile() das pastas compartilhadas do virtualbox está quebrado. Você pode fazer o lighttpd usar o syscall de gravação para enviar arquivos, adicionando a diretiva server.network-backend = "writev" . Já que isso é apenas para desenvolvimento, não é grande coisa.

Fonte:

link

link

    
por 25.02.2011 / 02:37
0

Eu também tive alguns problemas com a exibição de arquivos de uma pasta compartilhada do VBox. No meu caso, eu edito os arquivos na máquina host, mas as alterações não são refletidas na VM.

Para contornar isso, eu tenho que umount e mount da pasta compartilhada dentro da VM para conseguir ver os novos arquivos. Talvez algo semelhante esteja acontecendo aqui e talvez seja necessário sync ou forçar um flush por umount e mount da pasta compartilhada também.

Se isso funcionar, talvez haja uma opção para fazer isso automaticamente.

    
por 25.02.2011 / 02:01