OSX telepítés virtualbox alá

Ha az ember olyan programot ír, ami több platformon is működik, akkor jó eséllyel hibákat is fog kapni ezen platformokról. Kedvenc hobbi projektem miatt égetően szükségem lett egy osx-re, hogy egy két dolgot meg tudjak nézni. Már egy ideje virtualbox-ban használom a linuxot, gondoltam próbát teszek az OS X-el is, hátha.

Találtam egy cikket a lifehacker-en, ami alapján úgy tűnt, hogy van esély működésre bírni egy OS X-et a virtuális gépben… Ezen felbuzdulva le is töltöttem egy jónak tűnő OS X telepítőt, aminek a leírásában szerepelt a hacked, meg a virtualbox szó… 🙂

Első próbálkozásom hatalmas kernel pánikok, fagyások jellemezték… Itt kétségbeestem, és próbálkoztam mindenfélével, pl. az iBoot-al amivel el is indult a telepítő, hogy a végén jól szétfagyjon.

Aztán ráakadtam egy blog bejegyzésre, ami alapján úgy tűnt, hogy életre lehet kelteni a mac-at iBoot nélkül is, csak el kell hitetni az OS X-el, hogy amin fut, az egy mac. Ezt azért egy virtuális gépen nem is olyan nehéz megtenni, a 6. pont a lényeg.

<ExtraDataItem name="VBoxInternal2/SmcDeviceKey"
   value="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc"/>
<ExtraDataItem name="VBoxInternal2/EfiGopMode" value="2"/>

Valamint még a <Firmware type=”EFI”/> átírtam  <Firmware type=”EFI64″/> -re.

Szerencsére a virtualbox konfigurációs fájl egy xml (csak a kiterjesztése .vbox), szóval nem is variáltam, beleírtam mindent, és láss csodát:

Screenshot 2014-05-26 13.53.41

 

 

Virtuális gépen picit lassúak az animációk, azokat érdemes kikapcsolni. Erre található ehhez egy jó leírás, ami alapján én az alábbi dolgokat kapcsoltam ki:

sudo defaults write NSGlobalDomain NSAutomaticWindowAnimationsEnabled -bool NO
sudo defaults write com.apple.dock expose-animation-duration -int 0
sudo defaults write com.apple.dock springboard-show-duration -int 0
sudo defaults write com.apple.dock springboard-hide-duration -int 0

És már csak a hálózati kapcsolat volt hátra… Ehhez a default gateway-t kellett megtudni:

route -n get default

ami a gazda gép ip címe a natolt hálózaton. Ehhez csatlakozva már elérhetőek a windows megosztások:

Finder -> Go -> Connect to server: smb://10.0.2.2

Öröm boldogság…

 

Ui: XCode 5-höz OS X 10.8.4 kell, nekem pedig 10.8.0 van, nem akartam szenvedni az upgrade-el, maradtam a 4.6.3 verziónál, de ez az apróság már csak a letöltés, és a telepítés után derül ki…

A a java fejlesztéshez szükséges eszközök terén is volt egy kis kavar, de ezen már meg se lepődök, viszont ennek kapcsán elég sokat futott az osx (böngészés, futtatás, konfigurálgatás), és eddig hibátlanul működik.

Microsoft féle network monitoring

Hálózati forgalom vizsgálata során adódik, hogy az ember wireshark-ot használ. Ennek több oka is van, minthogy multiplatform, ingyenes, és nagyon jól működik. Az egyetlen hátránya viszont, hogy ő csak hálózati kártya szinten működik, tehát amennyiben egy adott process hálózati forgalmát szeretnénk nézni, akkor azért kell trükközni egy kicsit.

Windows 7-től ellenben jó alternatíva lehet a Microsoft megoldása, a Microsoft Network Monitor ami szintén ingyenes, ellenben process szinten csoportosítva írja ki a hálózati forgalmat (a csomagok szűrése, parsolása itt is szépen megoldott).

winnetmon

Sed a barátunk

Hasznos sed példa, mielőtt elfelejtem 🙂

in:
99 Területen kívüli szervezet

out:
99;Területen kívüli szervezet

cat agazatok.txt | sed ‘s/^\([0-9][0-9]\) /\1;/’

Photoshop bekaphatja

Van pár olyan cég, akinek a termékeit akkor sem használnám, ha kivételesen jók lennének (de rendszerint nem azok)… A borland ilyen (nincs az a büntetés amit a pascal világra és oktatási intézményekre szabadított borzalmai miatt érdemelnének), és ide tartozik az Adobe cég is, a flash-től kezdve a photoshopig…

http://www.coffeemonk.com/2009/05/photoshop-guides-and-pixel-precise-alignment/

Ez egy 2009-es cikk, azóta is fel feltűnik a ‘Snap Guides to Pixel Grid’ opció mit a kárhozatra ítélt grafikusok utolsó reménysugara… Eltelt azóta több mint 10 év, és… Természetesen nem történt semmi az ügyben.

Adobe én így szeretlek!

Oracle 11g 64 bit telepítése ubuntu 12.04 64 bit alá

Az Oracle céget és piacvezető alkalmazásukat elég jól jellemzi, hogy az ubuntu és minden más normális linux disztribúció támogatása kimerül abban, hogy tedd redhat-ra mert az a supportált. Oracle adatbázis miatt redhat-et telepíteni pedig több mint nevetséges.

Az ubuntura történő telepítés nem is olyan bonyolult, csak rá kell jönni a telepítő (és a borzasztó oracle telepítést végző script halom) működésére.

A telepítő két dolgot csinál valójában:

  1. kimásolja az oracle fájlokat
  2. sok make fájlal, és elképzelhetetlenül sok (és értelmetlen) változó segítségével lefordítja a bináris dolgokat

Az első lépésen viszonylag könnyen felül lehet emelkedni, a neten megvan hozzá minden, én csak kigyűjtöttem egy helyre.

Kell egy kevés dependencia, hogy egyáltalán elinduljon a telepítés:

sudo apt-get install ksh less lesstif2 lesstif2-dev lib32z1 libaio1 libaio-dev \
libc6-dev libc6-dev-i386 libc6-i386 libelf-dev libltdl-dev libmotif4 \
libodbcinstq4-1 libodbcinstq4-1:i386 libpth-dev libpthread-stubs0 \
libpthread-stubs0-dev lsb-cxx make openssh-server pdksh rlwrap rpm \
sysstat unixodbc unixodbc-dev unzip x11-utils zlibc gcc-multilib \
ia32-libs libstdc++5 libstdc++5:i386

Egy két extra link, hogy minden ott legyen, ahol a telepítő keresi:

sudo ln -s /usr/bin/basename /bin/basename
sudo ln -sf /bin/bash /bin/sh
sudo ln -s /usr/bin/rpm /bin/rpm
sudo ln -s /usr/bin/awk /bin/awk
sudo mkdir /usr/lib64
sudo ln -s /usr/lib/x86_64-linux-gnu/libc_nonshared.a /usr/lib64/
sudo ln -s /usr/lib/x86_64-linux-gnu/libpthread_nonshared.a /usr/lib64/
sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/lib64/
sudo ln -s /lib/x86_64-linux-gnu/libgcc_s.so.1 /lib64
sudo ln -s /usr/lib/i386-linux-gnu/libpthread_nonshared.a /usr/lib/libpthread_nonshared.a
sudo ln -s /bin/lib/libgcc_s.so.1 /lib/libgcc_s.so
sudo ln -s /usr/lib/libstdc++.so.6.0.13 /usr/lib/libstdc++.so.5

Egy user, és pár group a telepítőnek, és az oracle példánynak:

 sudo groupadd oinstall
sudo groupadd dba
sudo groupadd nobody
sudo useradd -m oracle -g oinstall -G dba
sudo passwd oracle

Kell még egy pár kernel paraméter:

sudo nano /etc/sysctl.conf

Ide az alábbi dolgokat kell felvenni:

kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000

Ha a módosításokkal megvagyunk, olvastassuk fel újra a kernelparamétereket:

sudo /sbin/sysctl -p

A limits-eket is érdemes módosítani:

sudo nano /etc/security/limits.conf

ide fel kell még venni az alábbi sorokat:

* soft nproc 2047
* hard nproc 16384
* soft nofile 1024
* hard nofile 65536

És kell még egy ál-redhat release is, hogy a telepítő megnyugodjon:

sudo nano /etc/redhat-release

A fájl tartalma pedig:

Red Hat Enterprise Linux AS release 3 (Taroon)

Ha mindent default módon telepítünk, akkor érdemes még felvenni, az alábbi környezeti változókat, hogy az életünk könnyebb legyen már a telepítés alatt is:

#oracle exports
export ORACLE_BASE=/home/oracle
export ORACLE_HOME=$ORACLE_BASE/app/oracle/product/11.2.0/dbhome_1
export ORACLE_SID=orcl11
export PATH=$PATH:$ORACLE_HOME/bin

Ha ezzel megvagyunk, akkor jöhet a telepítő kitömörítése, és indítása (oracle userként).

xhost +
sudo su oracle
~/oracle_install/runInstaller

A fájlok másolása ha nem rontottunk el semmit, akkor hiba nélkül megtörténik, az érdekes rész ezután jön. Amikor elkezd fordítani az oracle, jó eséllyel látunk majd egy két hibát. Gondolom meg kell indokolni Oracle-nál, hogy mire kell azt a nagyon sok support költséget fizetni (hogy nem normális telepítő írására, az biztos). A hibák az alábbi főbb problémákra vezethetőek vissza:

  1. Ubuntu alatt a gcc picit szigorúbban fordít, és meg kell enyhíteni a lelkét, amin a „-Wl,–no-as-needed” paraéterpáros általában szokott segíteni.
  2. Hiányoznak a fordításhoz referenciák, amit a gcc általában –l(lib) formában kap meg.

Itt fontos megjegyezni, hogy a –lagtsh az valójában libagtsh.so-t jelent, azt érdemes keresni. Másik hasznos utasítás az nm parancs, aminek a segítségével megnézhetjük, hogy egy adott függvény, amit épp a make nem talál, milyen so fájlokban van benne. Pl:

nm -A $ORACLE_HOME/lib/*.so | grep procr_get_ctx

Ahol U van, ott az so fájl használja a szolgáltatást, ahol T ott implementálva van.

A neten sok problémára van megoldás, de nem mindre (én kettőre nem találtam). A tapasztalatom szerint ilyen esetekben érdemesebb picit beleásni a dolgokba, és megérteni, mit és miért csinálunk, mert az az esetek nagy részében célravezetőbb mint mindenféle misztikus sed-et, és egyéb utasításokat kiadni, hátha valami működik.

Az részletes fordítás alatt jelentkező (make) hibákat az alábbi módon érdemes nézni:

tail -f $ORACLE_HOME/install/make.log

Vegyük sorra, hogy nálam milyen problémák adódtak, és mi volt a megoldásuk:

– libagtsh.so: undefined reference to `nnfyboot’ in make: rdbms/lib/dg4odbc]

Ez egy elég ravasz hiba, a probléma az, hogy nincs még meg az a fájl, ami a fordításhoz szükséges. A megoldást az internet szállítja: fordítsunk magunknak egyet:

ln -s $ORACLE_HOME/lib/libclient11.a $ORACLE_HOME/lib/libagtsh.a
$ORACLE_HOME/bin/genagtsh $ORACLE_HOME/lib/libagtsh.so 1.0

 

– libnnz11.so: could not read symbols: Invalid operation /sysman/lib/ins_emagent.mk

Kis keresgetés után lehet látni, hogy a hívás a $ORACLE_HOME/sysman/lib/ins_emagent.mk fájlból indul, és egy olyan szolgáltatásra hivatkozik, ami a libnnz11.so-ben van benne. Ezt pótoljuk oly módon, hogy a dependenciát is kapja meg meg a gcc:

$ORACLE_HOME/sysman/lib/ins_emagent.mk

régi:

$(MK_EMAGENT_NMECTL)

új:

$(MK_EMAGENT_NMECTL) -lnnz11

– genorasdksh: Failed to link liborasdk.so.11.1

Szintén egy dependencia probléma, amikor a teljes oracle sdk-t próbálja lefordítani, akkor nagyon sok dolgot nem talál hirtelen. A megoldás hasonló az előző esethez, a megnézzük a szolgáltatásokat, azonnal feltűnik, hogy a libagtsh.so és a  liborasdkbase.so hiányzik neki nagyon. Értessük meg vele:

$ORACLE_HOME/bin/genorasdksh

Régi:

OLIBS="$LCLIENT $LSQL $LVSN $LNETWORK $LCLIENT \
$LCOMMON $LGENERIC $LMM $XAONDY $LNETWORK $LCLIENT $LCOMMON \
$LGENERIC $LTRACE $LNNET_ON $LSKGXP"

Új:

OLIBS="$LCLIENT $LSQL $LVSN $LNETWORK $LCLIENT \
$LCOMMON $LGENERIC $LMM $XAONDY $LNETWORK $LCLIENT $LCOMMON \
$LGENERIC $LTRACE $LNNET_ON $LSKGXP -lagtsh -lorasdkbase"

– getcrshome – libhashgen11 missing reference

Itt ha megnézzük, akkor az a szolgáltatás amit keres, megtalálható az .so fájlban, ami meg is van adva. Itt a hiányzó extra paraméter a gond. Kis keresgetés után erre is rá lehet találni. A megoldás:

$ORACLE_HOME/srvm/lib/env_srvm.mk

Régi:

LDOBJSZ=-m64

Új:

LDOBJSZ=-m64 -Wl,--no-as-needed

És láss csodát, hiba nélkül működik az oracle ubuntun. Szerencsére csak az oracle build script-jeit láttam, a forrását nem, de ha azt is olyanok írták, mint ezeket a scripteket, akkor jobb is ez így…