Objavljeno:

Ali je mogoča namestitev OS X El Capitan v VirtualBox na Ubuntu?

Virtualizacijsko orodje VirtualBox že nekaj časa ponuja možnosti za poganjanje OS X v svojih virtualnih strojih. Na spletu je mogoče najti vodiče za namestitev virtualnega računalnika z OS X v VirtualBox, ki teče na fizičnem Mac računalniku ter v okolju Windows (za to je na voljo celo več vodičev). Bi šlo tudi na Ubuntu Linuxu?

V tokratnem prispevku si bomo torej ogledali kako bi bilo mogoče namestiti Macov OS X (El Capitan, 10.11) na virtualni računalnik, ki teče v okolju VirtualBox na operacijskem sistemu Ubuntu Linux, oziroma, kako bi lahko naredili svoj virtualni Hackintosh. Več o tem, zakaj opisanih postopkov ni priporočljivo izvajati si lahko preberete na dnu tega prispevka.

Zahteve

Za projekt bi potrebovali:

  • Ubuntu računalnik na Intel arhitekturi z 4 ali več procesorskimi jedri (vsaj 2 jedri bomo namenili OS X);
  • vsaj 4Gb pomnilnika RAM (vsaj 2Gb bomo namenili OS X);
  • trdi disk (za OS X bomo namenili vsaj 15 do 40 Gb prostora);
  • Oraclov VirtualBox 5 (uporabili smo različico 5.0.18) nameščen na Ubuntu računalnik;
  • namestitveni paket za OS X El Capitan.

Priprava namestitvenega DVD-ja

Na Mac računalniku iz App Store prenesemo (“download“, ne “install“) aplikacijo “Install OS X El Capitan.app“. Ko se aplikacija prenese (velika je okrog 7,1 Gb) jo najdemo v mapi /Applications. Seveda pri tem ni odveč poudariti, da to lahko naredimo samo, če si legalno lastimo Mac računalnik.

Na Mac računalniku odpremo terminal in ustvarimo datoteko ECISO.tool:

nano ECISO.tool

Vanjo skopiramo naslednje ukaze:

#!/bin/bash

# Mount the Installer image
hdiutil attach /Applications/Install\ OS\ X\ El\ Capitan.app/Contents/SharedSupport/InstallESD.dmg -noverify -nobrowse -mountpoint /Volumes/install_app

# Create El Capitan sparseimage of 7316mb with a Single Partition - Apple Partition Map
hdiutil create -o /tmp/ElCapitan -size 7316m -layout SPUD -fs HFS+J -type SPARSE

# Mount the El Capitan sparseimage
hdiutil attach /tmp/ElCapitan.sparseimage -noverify -nobrowse -mountpoint /Volumes/install_build

# Restore the Base System into the El Capitan Blank sparseimage
asr restore -source /Volumes/install_app/BaseSystem.dmg -target /Volumes/install_build -noprompt -noverify -erase

# Remove Packages link and replace with actual files
rm /Volumes/OS\ X\ Base\ System/System/Installation/Packages
cp -rp /Volumes/install_app/Packages /Volumes/OS\ X\ Base\ System/System/Installation/

# Copy El Capitan installer dependencies
cp -rp /Volumes/install_app/BaseSystem.chunklist /Volumes/OS\ X\ Base\ System/BaseSystem.chunklist
cp -rp /Volumes/install_app/BaseSystem.dmg /Volumes/OS\ X\ Base\ System/BaseSystem.dmg

# Unmount the installer image
hdiutil detach /Volumes/install_app

# Unmount the Base System image
hdiutil detach /Volumes/OS\ X\ Base\ System/

# Optimise Sparseimage Size
hdiutil compact /tmp/ElCapitan.sparseimage
hdiutil resize -size min /tmp/ElCapitan.sparseimage

# Convert the ElCapitan spareseimage to ISO/CD master
hdiutil convert /tmp/ElCapitan.sparseimage -format UDTO -o /tmp/ElCapitan.iso

# Move ElCapitan ISO image to the desktop
mv /tmp/ElCapitan.iso.cdr ~/Desktop/'ElCapitan.iso'

# Delete ElCapitan.sparseimage file
rm -f /tmp/ElCapitan.sparseimage

Nastavimo, da je datoteka izvršilna in jo zaženemo:

chmod +x ECISO.tool
./ECISO.tool

Zagon in izvajanje skripte traja nekaj časa, na disku pa potrebujemo okrog 16 Gb prostora. Ko se skripta izvede, se na našem namizju znajde datoteka ElCapitan.iso – gre za ISO sliko namestitvenega DVDja OS X El Capitan, ki ga lahko uporabimo za nameščanje OS X na Mac računalnikih, ki nimajo dostopa do interneta.

Priprava virtualnega stroja

Na Ubuntu računalniku v VirtualBoxu ustvarimo virtualni stroj, ki ga poimenujemo “Rain Coat”:

  1. V VirtualBoxu kliknemo na gumb “New/Nov” (čarovnik za ustvarjanje novega virtualnega stroja).
  2. Določimo ime stroja (npr. “Rain Coat”), vrsto (Mac OS X) in različico (Mac OS X 10.11 El Capitan (64 -bit)).
  3. V naslednjem koraku virtualnemu stroju določimo vsaj 2048 Mb pomnilnika RAM.
  4. Nato ustvarimo virtualni trdi disk. Kot tip diska izberemo VDI (VirtualBox Disk Image) ali VMDK (tega lahko uporabljamo tudi z VMWare). Določimo, da je disk dinamično dodeljena pomnilniška naprava (ang. Dynamically allocated). To je sicer privzeta vrednost, pomeni pa, da datoteka z vsebino virtualnega diska ne bo zavzela celotne velikosti diska že ob začetku, pač pa bo dinamično rasla skupaj z napolnjenostjo virtualnega diska. Velikost diska naj bo vsaj 15 Gb (za osnovno namestitev), še bolje pa je vsaj 40 Gb (za udobno namestitev).

Virtualni stroj je sedaj ustvarjen. Pred zagonom pa je potrebno nastaviti še nekaj “malenkosti”. Kliknemo gumb z nastavitvami (v glavnem meniju).

  1. Na Sistem – Matična plošča / System – Motherboard v razdelku Vrstni red zagona / Boot Order odstranimo disketo / Floppy Drive.
  2. Na Sistem – Procesor / System – Processor število dodeljenih jeder nastavimo na vsaj 2.
  3. Na Zaslon / Display nastavimo Grafični pomnilnik / Video Memory na 128Mb.
  4. Na Pomnilniške naprave / Storage kliknemo na ikono DVD-ja in izberemo datoteko navideznega optičnega diska / Choose Virtual Optical Disk File.

V naslednjem koraku je potrebno nastaviti še DMI BIOS nastavitve virtualnega stroja. Na Ubuntu sistem odpremo ukazno vrstico in vpisujemo naslednje ukaze. Pred tem zapremo aplikacijo VirtualBox.

Najprej nastavimo tip Mac računalnika.

Primer za Macmini6,2:

VBoxManage setextradata "Rain Coat" "VBoxInternal/Devices/efi/0/Config/DmiSystemProduct" "Macmini6,2"
VBoxManage setextradata "Rain Coat" "VBoxInternal/Devices/efi/0/Config/DmiSystemVersion" "1.0"
VBoxManage setextradata "Rain Coatn" "VBoxInternal/Devices/efi/0/Config/DmiBoardProduct" "Mac-F65AE981FFA204ED"
VBoxManage setextradata "Rain Coat" "VBoxInternal/Devices/smc/0/Config/DeviceKey" "ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc"
VBoxManage setextradata "Rain Coat" "VBoxInternal/Devices/smc/0/Config/GetKeyFromRealSMC" 1

Primer za iMac11,3:

VBoxManage setextradata "Rain Coat" "VBoxInternal/Devices/efi/0/Config/DmiSystemProduct" "iMac11,3"
VBoxManage setextradata "Rain Coat" "VBoxInternal/Devices/efi/0/Config/DmiSystemVersion" "1.0"
VBoxManage setextradata "Rain Coat" "VBoxInternal/Devices/efi/0/Config/DmiBoardProduct" "Mac-F2238BAE"
VBoxManage setextradata "Rain Coat" "VBoxInternal/Devices/smc/0/Config/DeviceKey" "ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc"
VBoxManage setextradata "Rain Coat" "VBoxInternal/Devices/smc/0/Config/GetKeyFromRealSMC" 1

Primer za MacBookPro11,3:

VBoxManage setextradata "Rain Coat" "VBoxInternal/Devices/efi/0/Config/DmiSystemProduct" "MacBookPro11,3"
VBoxManage setextradata "Rain Coat" "VBoxInternal/Devices/efi/0/Config/DmiSystemVersion" "1.0"
VBoxManage setextradata "Rain Coat" "VBoxInternal/Devices/efi/0/Config/DmiBoardProduct" "Mac-2BD1B31983FE1663"
VBoxManage setextradata "Rain Coat" "VBoxInternal/Devices/smc/0/Config/DeviceKey" "ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc"
VBoxManage setextradata "Rain Coat" "VBoxInternal/Devices/smc/0/Config/GetKeyFromRealSMC" 1

V nekaterih primerih (če se pojavi napaka v VirtualBoxu oz. če želimo, da OS X prepozna procesor v VirtualBoxu), je potrebno “ponarediti” oz. pravilno emulirati virtualni procesor.

Primer emuliranja procesorja IvyBridge i7-3770 (MacBookPro8,2) – OS X ga bo prepoznal kot Intel Core 2 Duo:

VBoxManage modifyvm "Rain Coat" --cpuidset 00000001 000006fb 00000800 80000209 078bfbff

Primer emuliranja procesorja Lynnfield i5 750:

VBoxManage modifyvm "Rain Coat" --cpuidset 00000001 000106e5 06100800 0098e3fd bfebfbff

Primer emuliranja procesorja IvyBridge:

VBoxManage modifyvm "Rain Coat" --cpuidset 00000001 000306a9 04100800 7fbae3ff bfebfbff

ali

VBoxManage modifyvm "Rain Coat" --cpuidset 00000001 000306a9 00020800 80000201 178bfbff

Dodajanje serijskih številk in ostalih SMBIOS podatkov

V ukazno vrstico vpišemo naslednje ukaze (serijske številke – spodaj so zapisane v odebeljeni pisavi – seveda ustrezno spremenimo):

VBoxManage setextradata "Rain Coat" "VBoxInternal/Devices/efi/0/Config/DmiSystemSerial" "W8CAFEB0YB6"
VBoxManage setextradata "Rain Coat" "VBoxInternal/Devices/efi/0/Config/DmiBoardSerial" "W8CAFFEBABE1A"
VBoxManage setextradata "Rain Coat" "VBoxInternal/Devices/efi/0/Config/DmiSystemVendor" "Apple Inc."
VBoxManage setextradata "Rain Coat" "VBoxInternal/Devices/efi/0/Config/DmiSystemFamily" "iMac"
VBoxManage setextradata "Rain Coat" "VBoxInternal/Devices/efi/0/Config/DmiBIOSVersion" "IM112.0057.03B"

Vse dodatne podatke virtualnega stroja sicer lahko pogledamo z ukazom:

VBoxManage getextradata "Rain Coat" enumerate

Namestitev OS X El Capitan

Sedaj lahko zaženemo virtualni stroj. Le-ta bi ob zagonu samodejno zagnal namestitveni ISO DVD. Tega seveda ne bomo storili, saj to ni v skladu z Applovimi splošnimi pogoji uporabe OS X.

Zato si bomo raje ogledali kako OS X namestimo na Mac računalnik z zamenjanim (novim) trdim diskom.

Ko se OS X zažene na računalniku z novim diskom, je potrebno najprej formatirati trdi disk, sicer OS X sistema nanj ni  mogoče namestiti. Iz menija Utilities izberemo Disk Utility, izberemo trdi disk ter ga izbrišemo ter formatiramo. Celotnemu disku določimo en sam razdelek (particijo), in sicer tipa “GUID Mac OS X Extended“. Disk poljubno poimenujemo, npr. “Macintosh HD“.

Disk Utility zapremo in nadaljujemo z namestitvijo na “Macintosh HD“. Celotna namestitev traja med 15 minut do pol ure. Po uspešni namestitvi sistem ponovno zaženemo, pred tem odstranimo DVD.

Sedaj dokončamo OS X namestitev (izberemo državo, tipkovnico, časovni pas,… priporočljivo je, da onemogočimo pošiljanje kakršnihkoli podatkov Applu (location services, diagnostics and usage data,…). Ustvarimo še svoj uporabniški račun. S tem je namestitev v grobem končana.

Optimizacija virtualnega stroja

Optimizacijo virtualnega stroja vedno izvajamo ob ugasnjenem virtualnem stroju.

Nastavitev ustrezne ločljivosti zaslona

Privzeta ločljivost zaslona je 1024 x 768. Le-to lahko (za katerikoli virtualni stroj brez tim. Dodatkov za gosta) spremenimo z naslednjim ukazom:

VBoxManage setextradata "Rain Coat" "VBoxInternal2/EfiGopMode" N

Namesto “N” vpišemo številko od 0 do 5, pri čemer se posamezna številka nanaša na eno izmed možnih ločljivosti zaslona:

  • 0: 640 x 480
  • 1: 800 x 600
  • 2: 1024 x 768
  • 3: 1280 x 1024
  • 4: 1440 x 900
  • 5: 1920 x 1200

Če torej želimo uporabiti ločljivost 1440 x 900 vpišemo ukaz:

VBoxManage setextradata "Rain Coat" "VBoxInternal2/EfiGopMode" 4

Deljenje diska z Ubuntu računalnikom

V VirtualBoxu gremo v nastavitve virtualnega stroja, izberemo Omrežje / Network ter dodamo dodaten omrežni vmesnik. Le-ta naj bo tipa Vmesnik samo za gostitelja / Host-only Adapter. S tem virtualnemu stroju omogočimo dostop do virtualnega omrežja, ki je “povezano” z omrežnim vmesnikom vboxnet0.

Le-ta ima v Ubuntu sistemu najverjetneje IP številko 192.168.56.1. Njegov IP sicer lahko pogledamo z ukazom:

ifconfig vboxnet0

Dobimo približno takle izpis:

vboxnet0 Link encap:Ethernet HWaddr 0a:00:27:00:00:00 
inet addr:192.168.56.1 Bcast:192.168.56.255 Mask:255.255.255.0
inet6 addr: fe80::800:27ff:fe00:0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:986 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000 
RX bytes:0 (0.0 B) TX bytes:218936 (218.9 KB)

Ta virtualni omrežni vmesnik bomo virtualnem stroju sedaj uporabili za povezovanje do gostiteljskega sistema (Ubuntu) preko Samba protokola. Omrežnemu vmesniku v OS X bomo nastavili fiksni IP naslov in sicer 192.168.56.2 (preko System Preferences / Network).

Na Ubuntu sistemu najprej odpremo požarni zid:

sudo ufw allow from 192.168.56.2 to any port 139 proto tcp
sudo ufw allow from 192.168.56.2 to any port 445 proto tcp

Nato nastavimo Samba uporabnika in geslo zanj:

sudo smbpasswd -a matej

Vpišemo geslo:

New SMB password:
Retype new SMB password:
Added user matej.

Omogočimo Samba uporabnika:

sudo smbpasswd -e matej
Enabled user matej.

Sedaj na Ubuntu sistemu izberemo mapo, ki jo želimo dati v skupno rabo, nanjo kliknemo z desnim miškinim gumbom ter v zavihku Lastnosti – Souporaba krajevnega omrežja, mapo damo v souporabo.

V OS X (ki ima v tem primeru dva omrežna vmesnika!) preko System PreferencesNetwork, drugemu omrežnemu vmesniku določimo fiksni IP (“Manually“) 192.168.56.2.

Nato v Finderju izberemo Go – Connect to Server in izberemo mesto “smb://192.168.56.1“. Vpišemo Samba uporabniško ime in geslo (lahko tudi nastavimo, da si ga sistem shrani v Keychain-u oz. si ga zapomni) in iz OS X imamo dostop do skupne deljene mape na Ubuntu računalniku.

Seveda je potrebno poudariti, da opisani postopek deljenja diska deluje tudi kadar uporabljamo dva fizična računalnika (Mac in Ubuntu) na istem omrežju in nikakor ni uporaben samo pri virtualizaciji.

Optimizacija tipkovnice

Mac računalniki uporabljajo svojo tipkovnico, ki je uporabniki Linux in Windows sistemov niso najbolj vajeni. Navadno težavo predstavljajo nekateri “posebni” znaki, kot na primer “afna” (znak @). Le-ta je v OS X s slovensko tipkovnico dosegljiva preko pritiskov na gumbe Shift-Alt-2.

Na srečo je preslikava tipkovnice precej enostavna. Najprej v OS X izberemo slovensko tipkovnico. V System Preferences – Keyboard – Input sources dodamo “slovenian keyboard“. Nato v OS X namestimo brezplačno aplikacijo Karabiner.

Karabiner v OS X.

Karabiner v OS X.

Po namestitvi aplikacije med nastavitvami vključimo spremembo QWERTY v QWERTZ razporeditev ter preslikavo najpomembnejših znakov za slovensko tipkovnico.

Postopek lahko uporabimo predvsem takrat, kadar fizično Mac tipkovnico zamenjamo s PC tipkovnico.

Nekatere zaključne nastavitve OS X

Za lažje upravljanje Mac računalnika se splača omogočiti oddaljeno upravljanje preko SSH, če želimo pa tudi preko VNC. To nam omogoča, da se na Mac računalnik iz Ubuntu sistema povežemo na OS X preko ukaza:

ssh uporabnik@192.168.56.2

Iz ukazne vrstice v OS X lahko postorimo marsikaj, na hitro si bomo samo ogledali, kako nastavimo ime računalnika:

sudo scutil --set ComputerName "ElCapitan"
sudo scutil --set LocalHostName "ElCapitan"
sudo scutil --set HostName "ElCapitan"
dscacheutil -flushcache

Zaradi težav s spanjem računalnika v VirtualBoxu (prihaja do sesutja sistema), se v OS X tudi splača nastaviti, naj računalnik nikoli ne gre v spanje (System Preferences – Energy Saver – Computer sleep: never).

Ali je torej mogoče?

Namestitev virtualnega stroja z OS X na Ubuntu sistem bi bila torej mogoča, res pa je, da bi bila v tem primeru integracija obeh sistemov nekoliko pomanjkljiva. Po pričevanjih se tipično pojavljajo težave z zvokom (je popačen), seveda ne deluje tudi deljenje odložišča (ang. clipboard), saj za OS X ni na voljo VirtualBoxovih Dodatkov za gosta.

Razlog je v tem, da Apple ne dovoljuje nameščanja OS X na strojno opremo drugih proizvajalcev (uporaba piratskega OS X pa seveda sploh ni dovoljena). Postopek izdelave fizičnega ali virtualnega Hackintosha zato ni povsem legalen oziroma je v nasprotju z Applovimi splošnimi pogoji. Pa čeprav Oracle v VirtualBoxu ponuja možnost nameščanja OS X gostov.

Je pa po drugi strani res, da OS X gosta lahko povsem legalno namestimo na VirtualBox, ki teče na fizičnem Mac računalniku (torej uporabljamo virtualni Mac znotraj fizičnega Maca). Tam bi bili vsi opisani postopki povsem zakoniti.

Zato izvajanja opisanih postopkov nikakor ne priporočamo. Opisani postopki so nastali na podlagi informacij iz interneta ter ob našem poznavanju Linux in OS X sistemov ter internega delovanja VirtualBoxa. Zato ob preskušanju opisanih postopkov kakšna podrobnost morda ne bo delovala. Opisanega početja se torej lotevate izključno na lastno odgovornost.

Konec koncev pa se je potrebno vprašati zakaj sploh potrebujemo virtualni OS X, ko vendar že imamo povsem delujoč Ubuntu, ki je veliko bolj odprt, nastavljiv, povezljiv, hitrejši, varnejši in konec koncev bolj uporaben kot Mac (razen za kakšne res specifične naloge).

Hmm, morda pa zato, ker se ob pogledu na konkurenco vedno lahko razveselimo vrnitve nazaj na Ubuntu Linux… 🙂

Kategorije: Informacijska tehnologija
Ključne besede: Hackintosh, OS X, virtualizacija