VirtualBox: Ubuntu 18.04 Shared folders

Hadde det vert mulig å bruke Adobe programmer i Linux hadde jeg for lengst sluttet å bruke Windows på min datamaskin både på jobb og privat. Men siden jeg liker Adobe sine programmer veldig godt, og det er disse programmene som brukes av designere på jobb er det umulig å samarbeide effektivt hvis ikke jeg også har mulighet til å åpne og bruke filer som er laget på Adobe programmer på min datamaskin.

Løsningen, eller kompromisset er å bruke virtuelle Linux maskiner til å teste og kjøre web applikasjonen på, og ellers gjøre alt annet utvikler arbeid i Windows.

Det fine med virtuelle datamaskiner er at jeg kan teste web applikasjoner i på forskjellige Linux distribusjoner for å simulere ekte servere og hvordan de vil kjøre med min kode og min konfigurasjon. Det gjør at jeg raskt kan avdekke problemer før de lastes opp på produksjons serverne for bruk på internet.

Men for å kunne jobbe på de samme filene i Windows og på den virtuelle Linux maskinen må man sette opp en "shared folder". Denne mappen kan man med litt konfigurasjon sette opp slik at den oppfører seg akkurat som vanlig mappe i virtuelle datamaskinen, med alle fordelene det innebærer.

VirtualBox oppsettet

Start med å åpne settings til den virtuelle datamaskinen inni VirtualBox Manager. Velg shared folders i menyen på venstre siden, og trykk på add share på høyre side av vinduet. Velg en mappe på datamaskinen din som du vil bruke som shared folder, sørg for at read-only og auto-mount IKKE er avkrysset, og skriv inn det mount pointet du ønsker. Til slutt haker du av for make permanent. Hvis den virtuelle maskinen kjører, må du restarte den før du kan gå videre.

Det er fullt mulig å bruke VirtualBox sitt alternativ til å auto mount'e den delte mappen. Men resultatet er at den blir mount'et med root brukeren og vboxsf gruppen eiere. Disse har alle rettigheter, men ingen andre kan se hverken lese, endre eller execute innholdet. Resultatet er at det blir tungvindt å bruke mappen.

Skjermdump fra Virtualbox

[Fig.1] Her åpnes innstillingene til den virtuelle datamaskinen.

Skjermdump fra Virtualbox

[Fig.2] Hvor man må trykke for å legge til en ny shared folder

Ubuntu 18.04 oppsettet

Start opp og logg inn på virtuelle datamaskinen.

Nå må du oppdatere Linux kernelen til den virtuelle maskinen slik at den kan kommunisere med sin hypervisor, VirtualBox. I VirtualBox ligger det en virtuell cd som inneholder et script som automatisk konfigurerer Ubuntu. Start med å laste inn den virtuelle disc'en "Guest additions CD image".

Skermdump fra VirtualBox

[Fig.3] Hvordan man setter inn den virtuelle disc'en med guest additions.

For at du skal kunne kjøre dette scriptet må du lage en mappe i Ubuntu, og mount'e disc'en til den mappen. Så kan du kjøre scriptet. Etter at scriptet er ferdig må den virtuelle datamaskinen restartes.

sudo mkdir /media/cdrom
sudo mount /dev/cdrom /media/cdrom
sudo /media/cdrom/VBoxLinuxAdditions.run
sudo restart now

Når den virtuelle maskinen er i drift igjen kan du teste om Ubuntu finner den delte mappen.

sudo VBoxControl sharedfolder list
Oracle VM VirtualBox Guest Additions Command Line Management Interface Version 5.2.42_Ubuntu
(C) 2008-2020 Oracle Corporation
All rights reserved.

Shared Folder mappings (1):

01 - webdev

Da kan du lage mappen du skal mount't til, og test-mount'e den den delte mappen for å se om den dukker opp som den skal. Siden jeg i dette tilfellet skal lage intranet sider, som skal serves av web serveren Apache, setter jeg at filene i den delte mappen skal eies av brukeren (uid) "www-data" og bruker gruppen (gid) "www-data". Den delte mappen skal brukes i ett utvikler miljø. Derfor settes umask til 000. Noe som resulterer i at alle brukere på den virtuelle maskinen kan lese, endre og execute alt som ligger i den delte mappen.

sudo mkdir /var/lan
sudo mount -t vboxsf webdev /var/lan -o uid=www-data,gid=www-data,umask=000

umask er det inverse av tallverdien du setter med chmod. For at rettigheter på en fil skal være 775 (rwxrwxr-x) må umask settes til 002. Med denne umask'en filtrerer man ut skrive rettighetene til alle andre enn brukeren og gruppen som eier filen.

For å kontrollere at mount'en gikk som forventet kan det være lurt å sjekke innholdet i den delte mappen, og hvilke rettigheter som ble satt

ls -la /var/lan

Hvis alt fungerer som forventet er det nå klart for litt opprydding. I Linux vil alt som ble mount'et av brukere forsvinne når vi restarter maskinen med mindre det blir permanent lagt til. Siden vi ikke lengre trenger mappen som vi mount'et den virtuelle disc'en med "Guest additions CD image", sletter vi den.

sudo rm -R /media/cdrom

Nå er det klart til å ta i bruk den delte mappen. test med å lage en fil, for å så se at den dukker opp i Windows.

touch /var/lan/testfile.txt
Skjermdump fra Windows Explorer

[Fig.4] Widows Explorer brukes til å navigere inn til den delte mappen.

Hvis filen testfile.txt dukket opp i mappen - i Windows - du satte som "Folder Path" i VirtualBox er alt som det skal.

Hvis du vil at symlink's skal fungere i denne mappen må du aktivere dette i windows.

For at du skal slippe å mount'e den delte mappen hver gang den virtuelle maskinen starter lager vi ett kort script som automatiserer dette.

Etter at Ubuntu har kjørt alle oppstart scriptene den normalt kjører ved oppstart av maskinen, kjøres det brukerdefinert scriptet "/etc/rc.local". I Ubuntu 18.04 eksisterer ikke denne filen, derfor må vi opprette den selv:

sudo nano /etc/rc.local

Lim inn følgende i nano: (i Linux terminalen må du bruke Shift+Insert for å lime inn fra utklipstavlen)

rc.local
#!/bin/sh -e
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.

# mount the shared folder from VirtualBox
mount -t vboxsf webdev /var/lan -o uid=www-data,gid=www-data,umask=000

exit 0

Trykk Ctrl+S for å lagre endringene, og Ctrl+X for å avslutte nano. For at det skal kunne kjøres ved oppstart må det legges til execute på buker rettighetene til filen.

sudo chmod u+x /etc/rc.local

Nå kan det være smart å restarte maskinen for å se om den delte mappen automatisk blir mount'et.

Gratulerer! Utvikler miljøet ditt er nå klargjort for å kunne bruke det beste fra windows samtidig som du kan jobbe effektivt med Linux.