Hücresel Otonomlar ile Yordamsal Zindan / Mağara / Harita Üretimi

Hücresel otonomlar  ile yardımı ile bir mahzen oluşturma hedefindeydik. Hücresel otonomlar, N boyutlu bir matriste, kesikli zaman aralıkları ile yürütülen hesaplamalar ile her bir matris hücresinin sonlu sayıdaki değer kümesi içinden değer alabildiği ve matris hücresinin bir sonraki iterasyondaki değerinin, komşularının mevcut değerleri üzerinden belli kurallara göre belirlendiği matematiksel yapı olarak tanımlanabilir [1][2][3]

Otonomlar N boyutlu matrislerde tanımlanabiliyor olsalar da, bizim ihtiyacımız olan 2 boyutlu ve yaşamvari olan otonomlar. Dolayısı ile aşağıdaki bölüm konumuzla direk ilgili değil, labirent üretmek isteyenler bir sonraki bölüme atlayabilirler.

Basit (Tek Boyutlu) Hücresel Otonomlar

Basit hücresel otonomlarda, bir hücrenin bir sonraki adımdaki durumunun hesaplanmasında yalnızca soldaki hücrenin, kendisinin ve sağdaki hücrenin durumları (ki bu durumlar 0 / 1 olabilirler ancak) kullanılıyor.

Üç hücrenin her birinin ancak iki farklı durumu olabileceğinden olası tüm kombinasyonlarının sayısı: 23 = 8 dir.

111 110 101 100 011 010 001 000

Bu 8 farklı kombinasyon için de hücrenin yeni durumu iki farklı değeri içerebilir. Bu durumda tek boyutlu otonomlar için üretilebilecek tüm kuralların sayısı ise 28 = 256’dır.

Kuralların genel gösterimi ise şu şekildedir.

Mevcut Durum 111 110 101 100 011 010 001 000
Hücrenin Yeni Değeri 0 1 1 0 1 1 1 0

Alttaki satırın ikili sistemden onluk sisteme dönülmesi ile de kuralın numarası belirlenmiş olur. 011011102 = 110[4][5].

Web üzerinde tüm kuralların çalışmasını gösteren bir çok javascript uygulaması var. Bunlardan yalnızca bir tanesi : https://dl.dropboxusercontent.com/u/676174/html/eca/main.html#demo

Tek boyutlu otonomları ilginç kılan unsurlar ise rassal sayı üretimi  ve şifreleme (kural 30), fiziksel gerçeklerin modellenmesi, trafik akışı gibi parçacık modellenmesi (kural 184), evrensel hesaplayıcı / turing complete (kural 110) vb. çalışmalara konu olmaları.

İki Boyutlu Yaşamvari Hücresel Otonomlar

Hücresel otonomların yaşamvari olarak tanımlanabilmeleri için[1] :

  • İki boyutlu olmaları
  • Hücrelerin yalnızca iki durumu olmalı (0: Ölü / 1: canlı)
  • Komşuları sayılırken köşeden değen komşular da sayılmalı (toplamda 8 komşu)
  • Bir sonraki iterasyondaki hücre değeri, canlı komşuları ile kendi durumunun bir fonksiyonu olarak ifade edilebilinmeli

Bir önceki yazımda belirttiğim üzere yaşamvari hücrresel otonomların en bilinen örneği Conway’in Yaşam Oyunudur. Bu tarz otonomların yaşam kurallarının metinsel olarak ifade edielbilinmesi amacı ile S/B notasyonu geliştirilmiştir.[1]

  • S (Survival) : Canlı bir hücrenin canlı kalabilmesi için gerekli canlı komşu hücreleri tanımlar.
  • B (Birth) Ölü bir hücrenin canlanması için gerekli canlı hücreleri tanımlar.

Bu notasyona göre Conway’in algoritması şu şekilde ifade edilebilinir: 23/3 : Yani, bir canlı hücrenin 2 veya 3 canlı hücresi varsa yaşar, aksi takdirde ölür, bir ölü hücrenin 3 canlı komşusu varsa o hücre canlanır.

Mahzen ve labirent üretmek içinse en uygun kuralların

  • 12345/3[1]
  • 45678/5678[7]
  • 1267/17[6]
  • 345678/5678[8]

Oldukları söyleniyor. Şimdi bu kuralları rahatça test edebilmek adına github’daki projeyi, kuralların girebileceği şekilde yeniden düzenledim.

Kuralı girip, adım adım işletebiliyoruz simülasyonu

Bundan sonraki adım ise, kuralları, ilk doğurganlık oranı ile test ederek en fazla 4 adımda mağara / mahzen benzeri bir yapıya ulaşıp ulaşamadığımızı test etmek ve kurallar içerisinden en çok içimize sineni seçmek.

12345/3 – % 45

Bu ayar bize daha çok labirentsi bir yapı verdi :

45678/5678 – %45

Bu ayar da sanki arazi / dünya haritası gibi bir sonuç üretti. Canlı hücrelerin mi yoksa ölü hücrelerin mi deniz olacağı konusu ise size kalmış.

1267/17 – % 45

Daha çok labirente benzedi sanki..

345678/5678 – % 45

En iyi sonuçları bu kuraldan aldığımı düşünüyorum. 2 veya 3 iterasyon sonucunda gayet mantıklı gözüken haritalara ulaşabiliyoruz.

İlk Durum Çok karışık gözüküyor…
1. İterasyon sonu. Birden bire biraz mahzeni andırmaya başladı.
2. iterasyon: Her adım yapı biraz daha köşesiz hale geliyor.

Bu noktadan sonra yapılması gerekenler ise :

  1. Floodfill algoritması ile mağaranın büyüklüğünü tespit etmek ve uygun boyutta olup olmadığına karar vermek, uygun değğilse yeni bir harita üretmek.
  2. Arada kalan boşlukları doldurmak veya boşluklar çok büyükse koridorlar ile birbirine bağlayan bir algoritma geliştirmek.

Şimdiki hedefim bu iki nokta üzerinde çalışmaya başlamak…

Kaynaklar

  1. http://www.conwaylife.com/wiki/Cellular_automaton
  2. http://en.wikipedia.org/wiki/Cellular_automaton
  3. http://natureofcode.com/book/chapter-7-cellular-automata/
  4. http://mathworld.wolfram.com/ElementaryCellularAutomaton.html
  5. http://en.wikipedia.org/wiki/Elementary_cellular_automaton
  6. http://gamedev.stackexchange.com/questions/79049/generating-tile-map
  7. http://www.roguebasin.com/index.php?title=Cellular_Automata_Method_for_Generating_Random_Cave-Like_Levels
  8. http://gamedevelopment.tutsplus.com/tutorials/cave-levels-cellular-automata–gamedev-9664
  9. http://pixelenvy.ca/wa/ca_cave.html

Diğer İlgili Linkler

Hayat Oyunu – Ilgın’ın Macerası

Kızım için, onunla beraber çok uzun zamandır bir oyun yazmayı planlıyordum, geçen 1 mayıs tatilinde ailece yaptığımız Eskişehir gezisi sonrasında Aizanoi antik kentinin de atmosferi ile konu gene alevlendi. Ilgın’ın hayalindeki oyununun hikayesini beraberce kurgulamaya başladık.

ilgin_zeus
Ilgın Zeus Tapınağı’nda
Zeus Tapınağı

Ilgın’ın hikayesinin kahramanı, çeşitli tehlikeli görevleri başardıktan sonra, büyücünün kara kitabına ulaşıp, ülkeyi esir alan büyüyü kaldıracaktır. Yalnız yine Ilgın’ın kurgusuna göre, oyunun başında oyuncu ana karakterin özelliklerini (cinsiyet, büyü gücü, dövüş gücü vs..) belirleyecek ki bu da oyunu biraz adventure biraz da rpg temelli hale getiriyor.

Ilgın’ın her oynadığında farklı bir oyun oynuyormuş hissini alması için, her seviyenin (Ilgın’a göre her görevin) farklı bir harita üzerinde geçmesini hedefledim (Eh bu da işin içine rogue-like oyunu sokuyor). Aynı seviyenin her oynanışında farklı bir haritada geçmesi ise işleme dayalı harita üretimi (procedural map generation) anlamına geliyor.

Peki, her seferinde rassal olarak üretilen ama mantıklı görünen bir haritayı / zindanı nasıl oluşturabiliriz şeklindeki araştırmalarım beni hücresel otomatlara (cellular automaton) kadar götürdü. Hücresel otomatların belki de en bilineni Conway‘in Hayat Oyunu.

Bu oyunda kurallar çok basit aslında,

  • Bir canlı hücrenin, iki’den daha az canlı komşusu varsa “yalnızlık nedeniyle” ölür
  • Bir canlı hücrenin, üç’ten daha fazla canlı komşusu varsa “kalabalıklaşma nedeniyle” ölür
  • Bir canlı hücrenin, iki ya da üç canlı komşusu varsa değişmeden bir sonraki nesile kalır
  • Bir ölü hücrenin tam olarak üç canlı komşusu varsa canlanır.

Her ne kadar bu algoritmanın bir çok uygulaması varsa da, bizim baba-kız oyunumuzda kullanacağım harita üretim algoritmasını anlayarak geliştirebilme adına bir tane de ben yazdım.

Hayat Oyunu
Hayat Oyunu

Uygulama Python 3 ile geliştirildi, sonraki aşamalarda testi kolaylaştırmak adına grid üzerinde canlı / ölü hücre ekleme ve hem başlangıç durumunu hem de mevcut durumu kaydedip, yükleme özelliğine sahip.

Kaynak kodlarına https://github.com/ctengiz/pygol adresinden ulaşabilirsiniz.

Hala daha hem Ilgın’ın hem de benim yapacak çok işimiz var. Ilgın hikayeyi tamamlayacak, ben de kodlayacağım. Gelişmeleri paylaşmaya devam edeceğiz…

Filtrelenmeden, Engellenmeden, İzlenmeden SSH Socks Proxy ile Internette Gezinin

Bir önceki yazımda, yurt dışında kiraladığımız sunucu üzerinde DNS sunucusu çalıştırmıştık. Şimdi yine aynı sunucuyu kullanarak, tüm Internet çıkışınızı o sunucuya yönlendirecek ve bulunduğunuz coğrafyaya / networke ait tüm filtreleri ve izlemeleri by-pass ederek özgürce internette dolaşabileceksiniz.

Bunun için linux / macosx tabanlı makinelerde herhangi bir ek uygulamaya ihtiyacınız yok kondsoldan ssh uygulamasını, windows bazlı makinelerde ise putty ile beraber gelen plink uygulamasını çalıştıracağız.

MacOsX / Linux

Bu işletim sistemleri için terminalden aşağıdaki komutu vermemiz yeterlidir:

ssh -ND 9999 root@sunucunuzun.ip.adresi

Bu komut ile yurt dışındaki sunucunuz ile kendi bilgisayarınız arasında güvenli / şifrelenmiş bir tünel oluşturursunuz.

Şifreyi girdikten sonra herhangi bir geri bildirim beklemeyin (-N anahtarı <no prompt> anlamına geliyor),  eğer şifrenizi yanlış girdiyseniz zaten hata mesajını alacaksınız zaten.

Sıradaki adımımız ise, web gezinme taleplerimizin bu oluşturduğumuz tünele yönlendirilmesi. Bunun için sisteminizde proxy ayarlarını yapmanız gerekiyor. Mac için,  System Preferences > Network ayarlarına girdiğinizde öncelikle Gelişmiş ayarlar kısmından,

Proxies kısmına geçmeli ve aşağıda işaretlediğim şekilde ayarlarınızı yapmalısınız.

Bu ayarların ardından, bilgisayarınız tüm yaptığınız web gezinme taleplerinizi, yurt dışındaki sunucunuza güvenli bir şekilde iletilecek, sunucunuzdan gelen cevaplar yine kimse tarafından izlenmeden sizin bilgisayarınıza dolayıs ile web tarayıcınıza aktarılacaktır.

Normal gezintinize dönmek için, proxy ayarlarınızı eski haline getirmeniz ve konsolda çalıştırdığınız ssh komutunu sonlandırmanız yeterlidir.

Windows

Öncelikle plink programını indirin, ardından plink’in indiği klasörde bir terminal açın ve şu komutu verin :

plink -D 9999 -N root@sunucunuzun.ip.adresi

Ardından Windows’un proxy ayarlarını yapmanız gerekiyor. Bunun için Denetim Masası > Internet Seçeneklerini açarak aşağıdaki görsellerdeki adımları izleyin :

 

Kendi DNS Sunucunuzu Kurun

Gelişen koşullar sonucunda kendi DNS sunucunuzu kurmak isteyebilirsiz. Örneğin kullandığınız DNS sunucusuna güvenmiyor olabilir veya kullandığınız sunucuya erişim engellenmiş olabilir.

Veya kullandığınız dns sunucusuna yaptığınız sorguların loglandığından ve ileride aleyhinize kullanılacağından şüpheleniyor olabilirsiniz.

Bu tip durumların önüne geçmenin en kolaya yolu yurt dışında kendi DNS sunucunuzu oluşturmaktır. Özgürlüğünüzün ve şahsi güvenliğinizin bedeline için ne kadar bütçe ayıracağınıza bağlı olarak yurt dışında bir çok vps hostin seçeneği mevcut.

Ben yıllık 60$ ı bu iş haracayabileceğim kanaatine vararak Digital Ocean‘ı (bundan sonra kısaca DO diyorum) seçtim. DO’da hesap açma ve VPS oluşturma işlemleri oldukça kolay. Hesap oluşturduktans sonra sanal sunucunuzu (ki kendileri ona droplet diyorlar) oluşturmaya başlayabilirsiniz :

Sunucunun yeri konusunda pek yapabileceğiniz bir şey yok, kendisi otomatik seçiyor zaten :

Son olarak sunucunun işletim sistemini ve üzerinde ön tanımlı olarak kurulu olacakları seçmeniz gerekiyor. Bu yazıya göre kurulum yapacaksanız  yalnızca Debian seçeneğini seçmeniz yeterli :

Ardından DO yaklaşık 60 sn içererisinde sanal sunucunuzu hazır edecektir :

Bu esnada DO, kayıt olurken verdiğiniz email hesabınıza root şifresini (roor linux sunucularda en yetkili hesaptır) gönderecektir. Bu şifreyi sisteme girerken kullanacağız. Güvenli bir yere not edin. Hesap oluşturmanın ardından DO bize yönetim ekranını getirecek:

Console Access butonu ile sanal suncumuzun konsoluna erişebiliriz :

Kullanıcı adı olarak root, şifre kısmına ise mail ile gelen şifreyi yazın. Yalnız, şifreyi girerken linux sistemlerde imlecin hareket  etmesini beklemeyin. Olduğu yerde durur ama karakterleri kabul eder.

Eğer şirenizi doğru girdiyseniz aşağıdaki gibi bir ekranla karşılacaksınız :

passwd komutu ile size atanan şifrenizi, daha kolay hatıralayabileceğiniz bir şifre ile değiştirebilirsiniz (yeni şifrenizi iki kere girmeniz gerekiyor):

Şimdi kendimize ait özel DNS sunucusu kurulumuna başlayabiliriz. Sırasıyla vereceğimiz komutlar :

apt-get update

apt-get install bind9

Bu verdiğimiz komut ile DNS sunucumuzu kurduk. Şimdi gerekli konfigürasyonu yapmamız gerekiyor. Web üzerinden bağlandığımız konsolda / karakterini basan tuş bulunmadığı için (en azından benim kulladığım browserda yoktu ama normal ssh ile bağlanınca klavye yerleşminde herhangi bir sorun yok), aşağıdaki komutları sıra ile vermemiz gerekiyor :

cd..
cd etc
cd bind
nano named.conf.options

Karşımıza çıkan konifigürasyon dosyasının işaretlediğim kısmını

şu şekilde değiştiriyoruz :

ardından Ctrl+O tuş kombinasyonu ile kaydedip, Ctrl+X tuş kombinasyonu ile düzenleyiciden çıkıyoruz. Ardından sunucumuzu yeniden başlatıyoruz.

reboot

Tekrar login ekranımızı gördüğümüzde, DNS sunucumuz hazır demektir. Sunucumuzun IP’si, bilgisayarımızdaki DNS sunucuları kısmına yazmamız yeterli. Bu son kısım ile ilgili internette oldukça bol kaynak var.

Bir sonraki yazımda bu kurduğumuz sunucumuzu proxy olarak kullanıp hiç bir filtreye takılmadan güvenli Internet gezintisini yazmayı planlıyorum.

Subversion – Apache behind Nginx on Debian

I assume that you are already using Nginx as web server. So this guide covers hosting svn access through Nginx proxy with Apache.

Install required packages :

apt-get install apache2 subversion libapache2-svn apache2-utils

Create svn folder for repositories :

mkdir /var/svn
chown www-data.www-data /var/svn/

Modify your apache /etc/apache2/ports.conf file to listen for a different port than 80. Because port 80 is already used by Nginx.

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 81

<IfModule ssl_module>
        Listen 443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 443
</IfModule>

If you plan to use Apache only for svn http access then you can modify /etc/apache2/sites-available/000-default.conf directly, otherwise you shoul create a virtual host file in /etc/apache2/sites-available and enable it via a2ensite.

Apache virtual host configuration file :

<VirtualHost *:81>
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Enable needed apache modules :

a2enmod dav_svn auth_basic authz_svn authn_file

Edit configuration file for dav_svn /etc/apache2/mods-available/dav_svn.conf

<Location /svn>
  DAV svn
  SVNParentPath /var/svn

  # We are giving repository-wide auth to users
  AuthType Basic 
  AuthName "Goltas SVN"
  AuthUserFile /etc/apache2/dav_svn.passwd

  #Here we define repository based auth settings file
  <IfModule mod_authz_svn.c>
    AuthzSVNAccessFile /etc/apache2/dav_svn.authz
  </IfModule>

  Require valid-user
  Satisfy Any

</Location>

Create svn repository auth settings file, and a basic config sample :

nano /etc/apache2/dav_svn.authz
[groups]

[/]
#cagatay will access all repositories with read and write grants:
cagatay = rw 

[/sample_poject]
#auser will only have read access for only "sample_project" :
auser = r 

Create a password file and add user “cagatay” to it :

htpasswd -c /etc/apache2/dav_svn.passwd cagatay

To add another user to password file :

htpasswd /etc/apache2/dav_svn.passwd anotherusername

Finally, restart apache :

/etc/init.d/apache restart

Configure Nginx as proxy pass for apache svn :

nano /etc/nginx/sites-available/svn
upstream svnapache  {
      server 127.0.0.1:81;
}

server {
    server_name  svn.yourdomain.com;
    listen       :80;

	client_max_body_size 500M;

    root   /var/www;
    index  index.html index.htm;

    access_log  /var/log/nginx/svn.access.log;
    error_log   /var/log/nginx/svn.error.log;

    location / {
     proxy_pass  http://svnapache;
     proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
     proxy_redirect off;
     proxy_buffering off;
     proxy_set_header        Host            $host;
     proxy_set_header        X-Real-IP       $remote_addr;
     proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
   }
}

Symlink to enable it :

ln -s /etc/nginx/sites-available/svn /etc/nginx/sites-enabled/svn

Restart nginx :

/etc/init.d/ngix restart

To create a new sv repository :

cd /var/svn
svnadmin create a_new_project_name
chown -R www-data:www-data ./a_new_project_name

Bottlepy + Nginx + Uwsgi + Python3 with Virtualenv on Debian

Bottle is my favorite micro web framework for  python.  It is well designed, allows quick prototyping and also developing web based applications.

My preferred web application stack is bottle + nginx + uwsgi + firebird + debian.

So this is my brief tutorial for this stack :

Install required packages :

apt-get update
apt-get install nginx nginx-extras python3 python3-pip python-virtualenv uwsgi uwsgi-plugin-python3

Prepare web files directory structure for nginx :

mkdir -p /var/www/bottledemo
chown -R www-data:www-data /var/www/bottledemo
chmod 755 /var/www

Let’s create our virtualenv for our applications. I prefer placing my virtaulenvs in opt directory :

mkdir /opt/venv
virtualenv /opt/venv/bottle -p python3

Time to activate our virtualenv and install bottle :

source /opt/venv/bottle/bin/activate
pip install bottle

To create our simple demo application :

nano /var/www/bottledemo/myapp.py

And code of our simple demo application :

#!/usr/bin/env python
from bottle import route, run, default_app
@route('/')
def index():
    return "Hello from bottle with Python3 !"

if __name__ == "__main__":
    run(host="localhost", port=8081)
else:
    application = default_app()

Let’s check if everything is working so far :

python /var/www/bottledemo/myapp.py

If your output is similar to below output then everything is well so far. When you locate to http://localhost:8081, your browser should say “hello” to you.

Bottle v0.12.4 server starting up (using WSGIRefServer())...
Listening on http://localhost:8081/
Hit Ctrl-C to quit.

Now we can safely deactivate our virtualenv,

deactivate

and start nginx configuration, first we have to create a virtual host file for nginx :

nano /etc/nginx/sites-available/bottledemo

content of the nginx virtualhost is :

server {
        server_name bottledemo.mydomain.com; ## -> DO NOT FORGET TO CHANGE THIS LINE ACCORDING TO YOUR DOMAIN

        listen   80; ## listen for ipv4; this line is default and implied
        listen   [::]:80 default ipv6only=on; ## listen for ipv6

        root /var/www/bottledemo;

        access_log /var/log/nginx/bottledemo.access.log;
        error_log /var/log/nginx/bottledemo.error.log;

        location / {
                uwsgi_pass unix:/tmp/uwsgi.bottledemo.socket; #--> This is referenced in uwsgi app ini file
                include uwsgi_params;
        }

}

to activate our virtualhost we symlink it to sites-enabled directory :

ln -s /etc/nginx/sites-available/bottledemo /etc/nginx/sites-enabled/bottledemo

Now it is time to configure our uwsgi. First we create our uswgi appliaction configuration file :

nano /etc/uwsgi/apps-available/bottledemo.ini

bottledemo.ini content

[uwsgi]
plugins = python3
socket = /tmp/uwsgi.bottledemo.socket

virtualenv = /opt/venv/bottle
pythonpath = /var/www/bootledemo
chdir =  /var/www/bottledemo
file = myapp.py

# like ngnix, uwsgi should be www-data.
uid = www-data
gid = www-data

and symlink to enabled applications :

ln -s /etc/uwsgi/apps-available/bottledemo.ini /etc/uwsgi/apps-enabled/bottledemo.ini

last touches :

/etc/init.d/nginx restart
/etc/init.d/uwsgi restart

Debian Wheezy Java Kurulumu

Oracle Ağustos 2011’de aldığı bir kararla, DLJ (Operating System Distributor License for Java – Java işletim Sistemi Dağıtımı Lisansı) yi emekli etti. Gerekçe olarak da artık OpenJDK’nın yeterince olgunlaştığını belirttiler.

Bu durumdan doğal olarak Debian Wheezy de etkilendi ve artık dağıtım depolarında sun-java* paketleri yok.

Belki de artık OpenJDK kullanmanın gerçekten zamanı gelmiş olabilir. Eğer illa da Oracle Java kullanacağım diyorsanız yine de bir çözümünüz var.

Öncelikle Oracle’ın sitesinden Java’yı indirmeniz gerekiyor.

32 Bit İçin :

wget --no-cookies --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com" \
"http://download.oracle.com/otn-pub/java/jdk/7u25-b15/jdk-7u25-linux-i586.tar.gz" -O /tmp/jdk-7u25-linux-i586.tar.gz --no-check-certificate

64 Bit İçin :

wget --no-cookies --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com" \
"http://download.oracle.com/otn-pub/java/jdk/7u25-b15/jdk-7u25-linux-x64.tar.gz" -O /tmp/jdk-7u25-linux-x64.tar.gz --no-check-certificate

Sonrasında root olarak java-package’i kuralım :

apt-get update
apt-get install java-package

Artık normal kullanıcı olarak javayı apt paketi haline getirebiliriz :

32 Bit İçin :

make-jpkg /tmp/jdk-7u25-linux-i586.tar.gz

64 Bit İçin :

make-jpkg /tmp/jjdk-7u25-linux-x64.tar.gz

Artık root olarak kurulumu yapabiliriz:

32 Bit:
sudo dpkg -i oracle-java7-jdk_7u25_i586.deb

64 Bit:
sudo dpkg -i oracle-java7-jdk_7u25_amd64.deb

Eğer birden fazla java sisteminizde yüklü ise update-alternatives ile ön tanımlı hangi olarak hangi java sürümünün kullanıabileceğini belirleyebilirsiniz.

update-alternatives --config java

Sisteminizde ön tanımlı kullandığınız java versiyonunu öğrenmek içinse :

java -version