Vagrant + Windows static file caching

Oplossing voor het vreemdste probleem van vandaag; Ik heb een Vagrant box draaien in Virtualbox welke via een vm.share_folder een virtuele share maakt tussen bestanden op de pc en de virtuele server. Dit werkte voor dynamische bestanden prima maar bij o.a. CSS & JS files ging het fout.

Als ik het bestand opriep via de browser kreeg ik een oude versie (ongeacht of je er bijvoorbeeld .css?1 van maakte of iets). Gooide ik het bestand weg dan werkte het wel. Alles nagelopen rondom browser en server-side caching maar daar zat het niet.

De dader: Sendfile()

Na wat onderzoek op het grote web kwam ik erachter dat dit komt door de manier waarop statische files worden opgehaald middels de sendfile() call welke in Virtualbox echter niet goed werkt. Hierdoor werd het bestand als het ware éénmalig echt opgehaald en vanaf dat punt kreeg je een versie uit de ‘cache’ terug. De verwarring is groot omdat dit bestand zich niet als gecached gedraagt; de headers zijn goed, er zijn geen opvallende cache-tags te vinden of iets.

De oplossing

Als je op Windows zit is de meest handige oplossing om sendfile uit te schakelen. Dit doe je met de volgende config line voor je Apache;
EnableSendfile off

Voor Mac gebruikers zou ik eerder gaan kijken naar andere manier om de virtual share te maken namelijk NFS: http://docs-v1.vagrantup.com/v1/docs/nfs.html

Dit probleem speelt hier niet en de performance is aanzienlijk beter.

Bash script wat encrypted tars maakt met openssl

Voor het backuppen van bepaalde data had ik een scriptje nodig wat net iets meer veiligheid bood dan een gewone tar met een wachtwoord. Heb toen beetje rondgekeken op het internet en na wat pielen kwam het volgende eruit.

#!/bin/bash

src='/folder'
dst='backup/folder'
 
# enables spaces in folder names
IFS=$'\n'

for dir in `ls "$src/"`
do
  if [ -d "$src/$dir" ]; then
    tar cvzPf - $src/$dir | openssl des3 -salt -k xxxxxxxxxxxxxxxxxxxx | dd of=$dst/$dir.tar.gz
  fi
done

Hoe werkt het?

De vars src en dst geven de bronmap en doelmap aan voor de backup. Hij loopt alle directories in de bronmap door en maakt per directory een {dirname}.tar.gz aan welke encrypted is met openssl met als salting key de waarde die je op de plek van de xxxxxxxxxxxxxxxxxxxx zet.

That it.

Uitpakken

Op de linux machine doe je dit met:
dd if=inputfilename|openssl des3 -d -k xxxxxxxxxxxxxxxxxxxx|tar xvzf –

Wil je deze data op een windows PC weer terughalen dan is dit goed te doen door even de windows versie van openssl voor de command line te downloaden. Daarna kun je via de CMD het volgende commando erop los laten:
C:\OpenSSL-Win32\bin>openssl des3 -d -salt -in input.tar.gz -out target.tar.gz