Ubuntu sunucuda headless firefox kullanmak

Linux sunucularda genelde olmayan, kullanılmayan hatta gerek dahi duyulmayan yegane şey;  grafik arayüzdür. Sebebi ise basittir. Suncu verilen görevi yerine getirmek için sağlıklı, güvenli ve hızlı çalışmak zorundadır. Özellikle de “Güvenlik”. Linux sistem yöneticileri herşeyi konsoldan yapmanın bir yolunu muhakkak bulur. Grafik arayüzlü bir sistemde ise çok daha fazla açık oluşabileceği hassasiyetinden dolayı böyle bir sistem kullanmayı reddederler. Ancak işler bir yerde grafik işleme kabiliyeti gerektirebilir.

Örneğin “Selenium” denilen beowser emülatörü kullanımı için illa ki grafik işleme kabiliyeti lazım. Yine de, bu durumda “Selenium”u Linux sunucuda kullanmak imkansızdeğildir. Çünkü her ne kadar grafik bir arayüz olmasa da, gerekli kütüphaneleri ekledikten sonra sunucuyu bu kabiliyete eriştirebilirsiniz.

Selenium’un neden sunucunun grafik işleme kabiliyetine ihtiyacı olduğu sorusu ise kullandığı “webdriver” tabir edilen nesnelerin aslıdna normalde masaüstünde kullandığımız browserların bir “instance”ını çalıştırması gerekliliğinden kaynaklı. Bu durumda sunucuda bir Firefox browser çalıştırmak için illaki masaüstü olması gerekmiyor. Sadece Firefox’u biraz kandırarak ekranı olan bir makinede çalıştığına ikna edebiliriz. Bunu yapmak için ubuntu suncuda öncelikle firefox kurmak gerek.


 

sudo apt-get update
sudo apt-get install firefox

apt-get install firefox
Reading package lists… Done
Building dependency tree
Reading state information… Done
The following extra packages will be installed:
aptdaemon consolekit libasound2 libcanberra0 libck-connector0 libdbusmenu-glib4 libdbusmenu-gtk4 libogg0 libpam-ck-connector libpolkit-agent-1-0 libpolkit-backend-1-0 libstartup-notification0 libtdb1 libvorbis0a libvorbisfile3 libx11-xcb1
libxcb-util0 libxt6 policykit-1 python-aptdaemon python-defer sound-theme-freedesktop xul-ext-ubufox
Suggested packages:
ttf-lyx libasound2-plugins libasound2-python libcanberra-gtk0 libcanberra-pulse
The following NEW packages will be installed:
aptdaemon consolekit firefox libasound2 libcanberra0 libck-connector0 libdbusmenu-glib4 libdbusmenu-gtk4 libogg0 libpam-ck-connector libpolkit-agent-1-0 libpolkit-backend-1-0 libstartup-notification0 libtdb1 libvorbis0a libvorbisfile3
libx11-xcb1 libxcb-util0 libxt6 policykit-1 python-aptdaemon python-defer sound-theme-freedesktop xul-ext-ubufox
0 upgraded, 24 newly installed, 0 to remove and 2 not upgraded.
Need to get 37.8 MB of archives.
After this operation, 88.0 MB of additional disk space will be used.
Do you want to continue [Y/n]?

Bu komut ile birlikte suncunuza Firefox’un depoda bulunan son sürümünü ve yanında bağımlılığı olan birkaç paket ve kütüphaneyi kurmuş bulunacaksınız. Bu işlemden sonra Firefox’u çalıştırmaya kalmanız hiçbir sonuç vermez. Çünkü browseri kandıracak ortamı henüz yaratmadık. Ortamı yaratmak için Xvfb paketini kurmamız lazım (X Virtual FrameBuffer). Xvfb, ekranı olmayan makinelerde X-Server’i framebuffer aracılığı ile sanal bellek kullanarak emüle eder. paketi kurmak için aşağıdaki komutu kullanınız:

sudo apt-get install xvfb

apt-get install xvfb
Reading package lists… Done
Building dependency tree
Reading state information… Done
The following extra packages will be installed:
libfontenc1 libgl1-mesa-dri libllvm3.0 libxaw7 libxfont1 libxkbfile1 libxmu6 libxpm4 x11-xkb-utils xfonts-base xfonts-encodings xfonts-utils xserver-common
Suggested packages:
libglide3 xfs xserver
The following NEW packages will be installed:
libfontenc1 libgl1-mesa-dri libllvm3.0 libxaw7 libxfont1 libxkbfile1 libxmu6 libxpm4 x11-xkb-utils xfonts-base xfonts-encodings xfonts-utils xserver-common xvfb
0 upgraded, 14 newly installed, 0 to remove and 2 not upgraded.
Need to get 19.0 MB of archives.
After this operation, 53.7 MB of additional disk space will be used.
Do you want to continue [Y/n]?

 

Paketi kurduktan sonra sunucudaki işletim sistemine farz-ı misal numarası 10 olan bir display yarattıracağız.

sudo Xvfb :10 -ac

“-ac” anahtarı xvfb’yi erişim kontrolü kapalı olarak çalışmasını bildirir. Böylece bilinen bir güvenlik açığı oluşturmamış oluruz. An itibariyle 10 numaralı bir sanal görüntü uç birimimiz var. Tabi herşey bu uç birimi yaratmak ile bitmiyor. Mevcut oturum bu uç birimden habersiz. O yüzden borwseri çalıştırmanız halen bir işe yaramayacak. Öncelikle bulunuğunuz oturuma bu durumu izah etmelisiniz. Bunun için aşağıdaki komutu veriyoruz:

export DISPLAY=:10

 

Artık hazırız. normal “firefox” komutu vererek Firefox’u ekranı olan bir makinada çalıştığına ikna edebiliriz. Ancak tabi biz ekranda firefox’un log çıktı yığınından başka birşey göremeyeceğiz. Sonuç itibariyle çalışan  headless firefox.

firefox

5 XSELINUXs still allocated at reset
SCREEN: 0 objects of 168 bytes = 0 total bytes 0 private allocs
DEVICE: 4 objects of 96 bytes = 384 total bytes 0 private allocs
CLIENT: 0 objects of 152 bytes = 0 total bytes 0 private allocs
WINDOW: 0 objects of 32 bytes = 0 total bytes 0 private allocs
PIXMAP: 1 objects of 16 bytes = 16 total bytes 0 private allocs
GC: 0 objects of 56 bytes = 0 total bytes 0 private allocs
CURSOR: 0 objects of 8 bytes = 0 total bytes 0 private allocs
CURSOR_BITS: 0 objects of 8 bytes = 0 total bytes 0 private allocs
DBE_WINDOW: 0 objects of 24 bytes = 0 total bytes 0 private allocs
TOTAL: 5 objects, 400 bytes, 0 allocs
4 DEVICEs still allocated at reset
DEVICE: 4 objects of 96 bytes = 384 total bytes 0 private allocs
CLIENT: 0 objects of 152 bytes = 0 total bytes 0 private allocs
WINDOW: 0 objects of 32 bytes = 0 total bytes 0 private allocs
PIXMAP: 1 objects of 16 bytes = 16 total bytes 0 private allocs
GC: 0 objects of 56 bytes = 0 total bytes 0 private allocs
CURSOR: 0 objects of 8 bytes = 0 total bytes 0 private allocs
CURSOR_BITS: 0 objects of 8 bytes = 0 total bytes 0 private allocs
DBE_WINDOW: 0 objects of 24 bytes = 0 total bytes 0 private allocs
TOTAL: 5 objects, 400 bytes, 0 allocs
1 PIXMAPs still allocated at reset
PIXMAP: 1 objects of 16 bytes = 16 total bytes 0 private allocs
GC: 0 objects of 56 bytes = 0 total bytes 0 private allocs
CURSOR: 0 objects of 8 bytes = 0 total bytes 0 private allocs
CURSOR_BITS: 0 objects of 8 bytes = 0 total bytes 0 private allocs
DBE_WINDOW: 0 objects of 24 bytes = 0 total bytes 0 private allocs
TOTAL: 1 objects, 16 bytes, 0 allocs……

…..

Gördüğünüz üzere tomarla log çıktısı ekranı kapladı. Şu an Firefox sunucuda çalışmakta. Çalışmasını durdurmak için “ctrl+c” tuş kombinasyonu ile firefoxu öldürebilirsiniz.

Eğer firefox’u “&” ile (çalıştır ve arkaplana at) çalıştırırsanız öldürmek için process id’ini “ps” komutu ile öğrenip “kill” komutu ile öldürmeniz gerekir. Artık “Selenium IDE” ile hazırladığımız “test_case”leri sunucuda deneyebilirsiniz.