14 Ağustos 2018 Salı

Linux watch komutu kullanımı

Linux sunucu yönetiminde hem log dosyalarını hem de sistem kayıtlarını incelerken kullandığımız bir çok yardımcı komut var. Bunların başında dosyaların başını gösteren head komutu, sonunu gösteren tail komutu ve tamamını ekrana basan cat komutu geliyor. Bu komut satırı araçları sayesinde bir çok dosyayı rahatlıkla inceleyebiliyor ve takip edebiliyoruz. Hatta tail -f komutu ile web sunucusu, veritabanı gibi gibi sürekli işlem yapmakta olan daemonların log dosyalarına bağlanıp anlık olarak ekrana çıktı alabiliyoruz. Bu yazımızda ise aynı komutu sürekli olarak çalıştırıp çıktısını ekrandan takip etmek için kullanabileceğimiz watch komutunu inceleyeceğiz.


Watch komutunun kullanımı oldukça basit. watch "çalıştırmak istediğimiz komut" şeklinde sade bir çalışma prensibi var. Bunun dışında -n parametresi ile bu komutu kaç saniyede bir çalıştırmak istediğimiz belirtebiliyoruz.

Örneğin redis sunucumuza bağlı olan ipleri netstat ile çekip görmek istediğimizi düşünelim. redis sunucumuzun portu olan 6379 u "|"  yani linux pipe operatoru ile  grep'e vererek filtreledikten watch komutuna saniyede bir kez çalışacak şekilde gönderiyoruz. 

watch -n1 "netstat -tnp  | grep 6379"

Eğer redis sunucusuna bağlı kullanıcı sayısını görmek istersek grep'in çıktısını da wc -l komutuna pipe ile gönderip satır sayısını alarak o an bağlı olan kullanıcı sayımızı görebiliriz. Özellikle servisleri farklı bir sunucuya taşırken tüm bağlantılar düzgün şekilde yapılandırılmış mı, eski sunucuda kullanıcı kalmış mı gibi sorulara anlık cevap ararken bu komut oldukça yararlı olabiliyor.

watch -n1 "netstat -tnp  | grep 6379 | wc -l"

Farklı bir örnek olarak da bir linux processine ait tüm file descriptorlerin sayısını listeyen alttaki komuta bakabiliriz. Açık olan dosya ve bağlantıların tamamının ortak sayısını bu şekilde görebiliriz. Özellikle sorunlu servislerde fd sayısı sürekli olarak artabiliyor. Bunu anlık olarak takip etmek ve gerektiğinde bu servislere restart atmak watch komutu sayesinde kolaylaşıyor.
watch -n1 "ls /proc/2943/fd |wc -l"

Farklı senaryolar üzerinden watch ile sunucu servisi takibi yapabiliyoruz. Detaylı bilgi için kaynaklar:

redisgreen ile redis performans takibi

NoSQL veritabanları arasında rahat kullanımı, düşük kaynak tüketimi ile dikkat çeken Redis key-value deposunun uygulama geliştiriciler büyük bir dezavantajı var. Performans takibi ve monitoring. MongoDB, couchbase gibi daha büyük dağıtımlarda bu dahili dashboardlar ile sağlanabiliyor. MongoDB bunu ücretsiz cloud monitoring hizmeti ile sağlarken Couchbase ise belki en gelişmiş dahili yönetim panellerinden birine sahip. Redis çok ufak boyutu, inanılmaz hızı ile dağıtık cache sistemlerinin standartı olmuşken (Hazelcast'i lisans ve JVM yüzünden saymıyorum) bu yönetim meselesinde ciddi anlamda dezavantajlı durumda. 

Tabi ki bu redis performans takibi için çözüm yok anlamına gelmiyor. Aslında komut satırından dahili MONITOR ve INFO komutları ile birçok bilgi alabiliyoruz. Bunun araç haline çevrilmiş hali ise dahili olarak rediste yok. Github'da bu işi yapan bir çok proje var. Bunlardan biri LittlePeng/redis-monitor:

Bir diğer çözüm ise redisgreen. Redis green cloud üzerinden çalışan, verdiğimiz bilgilerle bizim redis sunucumuza bağlanıp oldukça detaylı bilgi veren bir servis. Kullanılan bellek, kayıtlı key sayısı gibi temel verilerden tutun da bellek fragmantasyonuna kadar oldukça işe yarar verilere ulaşmamızı sağlıyor



Memory fragmentation değeri 1'in altına düştüğünde belleğin yetersiz kalmaya başladığını ve swapa düşme ihtimaliniz arttığını yani performansın ciddi anlamda düşebileceğini gözlemleyebiliyoruz. 1.0'ın üzerindeki değerler ise redis'in belleği etkin kullanamadığını söylüyor. Böyle bir durumda dump alıp restart atarak 1'e yakın değer elde edebiliyoruz.

Redis green ile alabildiğimiz diğer önemli bir metrik ise cache ve miss değerleri. Sorgularımızın kaçı redisten cevap alabilmiş kaçı yanıtsız kalmış doğrudan redis üzerinden bu değerlere ulaşabiliyoruz. Açıkçası bunu doğrudan nasıl elde ederiz bilmiyorum, redisgreen'i görmeden önce bu tarz bir metriği uygulama tarafında oluşturmaya çalışırdım.


Bunun dışında komut bazlı olarak oldukça işe yarar istatistikler alabiliyoruz:

Bunun dışında yavaş çalışan komutlar gibi verilere de redisgreen üzerinden oluşup buna göre optimizasyon yapmak mümkün.

Daha fazla bilgi için:

3 Ağustos 2018 Cuma

Sunucu performans testi nasıl yapılır


Birçok firma sanal sunucu, vps, vds ve bare metal, dedicated sunucu hizmeti sunuyor. Peki ödediğimiz ücret karşılığını ne alıyoruz. Sunucumuz donanımsal olarak, hat olarak ne kadar hızlı. Şimdi bunu nasıl ölçebiliriz ona bakalım.

Hat hızını ölçmek için speedtest'in komut satırı uygulamasını kullanabiliriz. Python bazlı çalışan bu uygulamayı


ile indirip çalışma için yetkilendirdikten sonra

./speedtest-cli

ile çalıştıyoruz. Ubuntu, CentOS, Debian gibi dağıtımların hepsinde çalışıyor fakat sistemden python yüklü olmalı.


Örnekte Vultr üzerinde çalışan bir sunucunun hat hızını görebiliyoruz. 800mbit simetrik bir hat sorunsuzca çalışıyor.

Speedtest ile sadece hat hızını ölçebiliyoruz ve kendisi en uygun datacenterı seçerek bize bu bilgiyi veriyor. Eğer daha fazla lokasyon için hat hızımızı ölçme ve bunun yanında hdd hızı dahil sistem hakkında daha fazla bilgi almak istersen bench.sh kullanabiliriz.

Bench.sh ile sistem performans testi yapmak için şu komutu  kullanabiliriz:
wget -qO- bench.sh | bash

Ekran çıktısı ise şu şekilde karşımıza çıkıyor:


Görüldüğü gibi sadece hat hızı değil, hdd, ssd performasını ve sistemin kullandığı işlemciden sanallaştırma teknolojisine ve işletim sistemine kadar  bir çok konuda bilgi alabiliyoruz. Ayrıca internet hızını da farklı konumdaki sunucular ile test ettiği için daha sağlıklı bilgi alabiliyoruz. 
Evernote helps you remember everything and get organized effortlessly. Download Evernote.

Upstart ile linux başlangıç servisi yönetimi

Upstart Ubuntu linux dağıtımının yapımcısı olan Canonical Ltd. tarafından geliştirilen, Ubuntu 6'dan 16'ya kadar kullanılmış olan, sistemin yüklenmesi ve başlangıç hizmetlerinin çalıştırılmasından sorumlu init sistemidir.  SysV init ile uyumlu olması kolay anlaşılır yapılandırma dosyaları sayesinde upstart ubuntu dışında da bir kaç linux distrosunda kullanılan bir sistem olmuştu. Ubuntu 16 ile beraber CentOS, Debian, Archlinux gibi birçok dağıtım gibi bir çok dağıtım systemd ye geçti. 

Systemd çok büyük yazılım olması ve işletim sisteminin neredeyse tamamını kontrol etmesi sebebiyle linux caimasında pek sevilmedi. Küçük programların kendilerine özel işleri yaptığı ve bu işlerin birbirine bağlanması mantığına dayalı linux felsefine ters olan systemd'ye geçmek istemiyorsanız desteği 2019 nisana kadar sürecek olan Ubuntu 14.04 ile yola devam edebilirsiniz. Bunun dışında mail-in-a-box gibi bazı büyük uygulama dağıtımları yalnızca upstart destekliyor. Bu gibi dağıtımlarla da çalışacaksanız upstart sizin için hala önemli diyebiliriz.

Upstart scriptleri /etc/init içerisine .conf uzantılı dosyalar yazılıyor. İhtiyacımız olan bir çok özelliği barındıran örnek bir yapılandırma dosyası aşağıdaki gibi oluşturabilirisiniz.

nano /etc/init/ornekservis.conf

description "ornekservis"

env ortamdegiskeni1=deger1
env ortamdegiskeni2=deger2

start on runlevel [2345]
stop on runlevel [!2345]

respawn
post-stop exec sleep 5
limit nofile 65000 65000

setuid root
setgid root

chdir /root/ornekservis
exec /usr/bin/python ornekservis.sh

Servisimiz sistem hazır olduğunda çalışması için start on runlevel [2345] ifadesini kullanıyoruz. respawn ile servis kapatılırsa yeniden başlayacak şekilde tanımlanmış oluyor. Sorunlu bir servisin üst üste kendini çalıştırmayı engellemek için araya post-stop exec sleep ile bekleme süresi koyabiliyoruz. setuid setgid ile uygulamanın hangi kullanıcı ve grup üzerinden çalışacağını upstarta bildirebiliyoruz. Örnekte kullanım rahatlığı olarak root kullanmış olsak da normalde yetkileri sınırlı kullanıcılar kullanmak sistem güvenliği adına daha doğru olacaktır.

lsof +D /var/log/upstart/
komutu ile çalışmakta olan servislerin log dosyalarının konumlarını görebiliriz.

Bu dosyaları anlık takip etmek için tail -f kullanabiliriz
tail -f /var/log/upstart/redis-server.log


upstart servisilerini başlatıp durdurmak için ise service start, service stop, ya da doğrudan start stop komutlarını kullanabiliriz. status ile de servisin çalışıp çalışmadığını kontrol edebiliriz.

service ornekservis start
service ornekservis status
service ornekservis stop

start ornekservis
status ornekservis
stop ornekservis

start, stop, status gibi komutlar arkaplanda initctl kullanıyor. yani start servisadi arkaplanda initctl start servisadi olarak çalışıyor. Bunu status komutunu takip ederek görebiliriz:

çalışan servisleri görmek için ise:
initctl list | grep running

komutunu kullanabiliyoruz.



Evernote helps you remember everything and get organized effortlessly. Download Evernote.

2 Ağustos 2018 Perşembe

Bitcoin ile ödeme kabul eden Bitcoin harcanabilecek yerler

Bitcoin, Ethereum gibi elektronik para birimleri popülerliğini korumaya devam ediyor. Peki bu dijital para sistemleri sadece spekülatif sözde yatırım araçları mı yoksa aynı dolar tl gibi doğrudan harcanabilen para birimleri mi ?

Merkez bankalarının olmadığı, güvenliğin devletler tarafından değil kriptolu protokollerinden alan bu teknolojik paralar için bu tartışmalar uzun süre sürecek. Peki bir yerde internetin para birimi olan bu teknolojileri gerçek hayatta kullanabiliyor muyuz ? Bu yazımda öncelikle bitcoin ve diğer dijital para birimleri ile sanal sunucu ve domain, alan adı hizmeti veren firmaları incelemeye çalışacağım.

Benim için bu firmaların başında cloud vps hizmeti veren vultr geliyor. Amerika, Asya ve Avrupa'da bulunan datecenterlar üzerinden vds, vps hizmeti veren vultr bitcoin ve bitcoin cash ile ödeme kabul ediyor. Ödeme altyapısı olarak bitpay şirketini kullanan vultr son derece kaliteli hizmet veriyor. Uzun süre kullandım ve hizmet kalitesi olarak digitalocean, linode seviyesinde bir firma olduğunu söyleyebilirim. Fiyatları ise 1gb vps aylık 5$ civarından başlıyor. Sunucu performansları oldukça iyi, sunucularınız arası private network ücretsiz ve ücretsiz snapshotlar ile sunucu yedekleme, kopyalama işlemlerine izin veriyor.  



Hizmet kalitesinden ziyade bütçe önemli diyorsanız bitcoin, ethereum ve diğer altcoin sistemleri ile ödeme kabul eden diğer bir çok firmayı lowendbox sitesi üzerinden bulabilirsiniz. Burada listelenen her firma bitcoin benzeri sistemler ile ödeme kabul etmiyor fakat eden firmaları da bulabilirsiniz. Özellikle bitpay'den sonra coinify, coinpayments gibi altcoin destekleyen firmaların da yaygınlaşmasından sonra orta sınıf hosting hizmeti veren bir çok firma bu ödeme yöntemlerini de sistemlerine dahil etmeye başladılar.  




Kısa sürece önce yine lowendtalk sitesindeki sanal sunucu firmalarını incelerken denk geldiğim bir firma supremevps. Sadece Los Angeles'da vps hizmeti veren firma OpenVZ ile sanallaştırma yapıyor. Bu da vultr, digitalocean gibi firmaların bir alt seviyesinde hizmet kalitesi beklememiz anlamına geliyor. Yine de fiyatları inanılmaz cazip olduğu için denemek istedim. 1.5gb ram li ssd li vps si yıllık 14$'a veriyorlar. Şu an için performans, hat hızı gibi konularda sorun yaşamadım. Yine de bu vpsleri kritik önem taşıyan yerlerde kullanmamak gerektiği aklımızın bir köşesinde dursun. Oralarda vultr, digital ocean, linode hatta Amazon web services, Azure vs. düşünülmeli. Bu arada 14$ lık kampanya sitelerinde mevcut değil lowendbox sitesinden gitmeniz gerekiyor:

 

Bitcoin ve diğer altcoin çeşitleri ile ödeme kabul eden bir diğer firma uzun süre kullandığım Kanada merkezli GestionDBI firması. Açıkçası benim için fiyat cazibelerini kaybettikleri için ben diğer firmalara bakmaya başladım. Yine de sorunsuz, ortalama performanslı sunucu hizmeti sağlıyorlar.

SupremeVPS ödeme yöntemi olarak coinpayments kullanırken gestiondbi coinify kullanıyor. Bunlar kredi kartları için skrill, payza neyse dijital paralar için aynı hizmeti sunuyorlar. Firmalara komisyon karşılığı kolay ödeme alma şansı sunuyor. Aşağıda bu aracı firmaların en köklüsü olan Bitpay'in ödeme ekranını görüyoruz. QR kodu telefonla taratarak ya da ekrandaki miktarı ilgili adrese gönderek ödememizi tamamlayabiliyoruz. Bitpay şu an yalnızca bitcoin ve bitcoin cash desteliyor. 

 

Alttaki ekran ise coinpayments'ın ödeme ekranı. Bu ödeme sistemini kullanan firmalara Ethereum, litecoin gibi popüler altcoinler de dahil olmak üzere bir çok dijital para birimiyle ödeme yapabiliyoruz.



Aşağıdaki ekran görüntüsünde ödeme ekranı olan Coinify da CoinPayments gibi bir aracı şirket. O da bir çok altcoini destekliyor. Ödeme miktarının yanındaki BTC logosuna tıklayarka diğer coinleri seçebilir ve onlarla da ödeme yapabilirsiniz.

Coin sistemleri ile ödeme kabul eden aracı sistemler bu şekilde. Bunun dışında domain satışı yapan namecheap ise bitcoin ödemelerini doğrudan kendisi kabul ediyor ve bitcoin transfer ücreti hariç hiçbir harici komisyon ödemeden domain kaydı yapabiliyorsunuz. Alttaki ekran görüntüsünde namecheap için bitcoin ile bakiye yükleme seçeneğini görebilirsiniz.


Bitcoin ile ödeme kabul etmesi sevinç ile karşılanan bir diğer firma da pc dağıtım oyun dünyasının en büyük ismi olan Steam idi. Malesef steam bitcoin fiyat volatilitesini ve işlem ücretlerini bahane ederek geri adım attı.

Bunun dışında yurt dışı alışverişlerde oldukça büyük bir firma olan Newegg'in bitcoin ile ödeme aldığı duyruldu. Şahsen deneme imkanım olmadı fakat NewEgg'in isim yapmış güvenilir bir firma olduğunu düşünürsek yurt dışından alışveriş yapmayı düşünürseniz bir göz atın derim.

Türkiye'de de BTC ile ödeme alan bir firma buldum. Binbirçeşit sipariş ekranında bitcoin ile ödeme seçeneğini bulunduruyor. Fiyatları piyasaya göre biraz yüksek gibi olduğu için deneme şansım olmadı.


Cointurk store'u da doğal olarak BTC ile ödeme kabul ediyor fakat burada ürünler sitenin kendi ürünleri ve genellikle kupa, anahtarlık, hatıra para gibi bitcoin dünyasına meraklılara hitap eden ürünler. 

Şimdilik bulabildiğim bitcoin benzeri ile ödeme kabul eden şirketler bunlar. Sizlerde bildiklerinizi yorumlarda belirtebilirsiniz.

MxToolbox nedir ve nasıl kullanılır ?

Mxtoolbox domain ve dnsler ile bir çok yararlı araç bulunduran bir web sitesidir. Özellikle karmaşık dns yapılandırmalarından sonra ilgili kaydın oluşup oluşmadığını kontrol etmek için kullanılabilir. Ayrıca mail sunucunuzun ip adresinin ve domain adresinin spam olarak işaretlenip işaretlenmediğini de kontrol edebilirsiniz.

DNS kayıtları 2 dakikadan günlere varan cache sürelerinden dolayı yenilendikleri zaman sorun 
çıkartabiliyorlar. A, AAAA, CNAME gibi alan adı yönlendirmelerine yarayan kayıtları her zaman kendi çalışma bilgisayarımızdan bu nedenle kolaylıkla kontrol edemiyoruz. Hem kendi işletim sistemimizin oluşturduğu dns cacheler hem de internet servis sağlacılarının cacheleri gerçek alan adı çözümleme sonuçlarına ulaşmamızı zorlaştırabiliyor. MXToolbox ise tüm bu cache sorunlarını kendi içinde çözmüş ve bize anlık sonuç verebiliyor. 

Kullanım için ise bizlere oldukça basit bir arayüz sunuyor. İstediğimiz kaydı ardından iki nokta üstüste ve domain adını yazarak sonuçlara ulabiliyoruz. Aşağıdaki örnekte blog sentaks'ı google webmaster araçlarına eklemek için kullandığım TXT kaydının başarılı bir şekilde eklenip eklenmediğini kontrol ettim.


Sonuçlarda ilgili dns txt record'unun başarılı bir şekilde eklendiğini görüyoruz.


blacklist: komutu ile ise domain ve ip adresiminizin spam kara listelerine eklenip eklenmediğini kontrol edebiliyoruz:


Görüldüğü gibi hiçbir kara listeye sunucu ve mail alan adımız düşmemiş.



systemd ile linux başlangıçta program çalıştırma

Linux sunucu yönetimine başlayan birçok kişinin zorlandığı konulardan biri sistem başlangıcında komut veya program çalıştırma oluyor. Bunun bir çok sebebi var fakat en bariz olanı farklı linux dağıtımlarının farklı init sistemleri yani windows terimleriyle ifade etmek gerekirse farklı servis, hizmet yöneticileri kullanmasıdır. systemd ise artık hemen hemen her linux dağıtımda standart olan, oldukça kapsamlı bir init sistemi, servis yöneticisidir. Kernel yani işletim sistemimiz çekirdeği yüklendikten sonra systemd devreye girer ver kabuk ortamı yani bash dahil tüm temel başlangıç servislerini, aygıtlarını ve diğer unitleri yükler.


systemd den önce her linux dağıtımı farklı bir init sistemi kullanıyordu. ubuntu14 ve bazı debian sürümlerinde upstart, daha bazı linux sistemlerde init yaygın olarak kullanılan daha basit ve sade sistemlerdi. systemd ise bunlardan çok daha kapsamlı işletim sisteminin her yerine müdehalede bulunan daha büyük bir init sistemi. Sadece başlangıç yönetimi ve servisler ile kalmıyor unit sistemi sayesinde aygıtlardan, dizin bağlantılarına işletim sisteminin bir çok noktasına müdehalede bulunuyor. Bu nedenle ufak programların sadece kendi işlerini yapması üzerine kurulu linux felsefesine uyumlu olmadığı düşünüldüğü için yaygınlaşması zaman aldı. Fakat şu an centos7 den ubuntu16 ya hatta archlinux'e kadar birbirinden oldukça farklı dağıtımlar systemd kullanıyor.


systemd unit mantığı oldukça geniş bunla ilgili uzun uzun yazmaktansa ubuntu'nun sitesine link vermeyi daha faydalı buluyorum. Oldukça güzel çevrilmiş yararlı bir kaynak:

Systemd servislerini ubuntu altında /etc/systemd/system dizinine kaydediyor. Bu dizinde temel 1-2 servis dışında sistem servislerinin yapılandırma dosyaları bulunmuyor. 

nano /etc/system/systemd/denemescript.service

ile gerekli servis dosyamızı oluşturyor ve aşağıdaki gibi yapılandırıyoruz:

[Unit]
Description=denemescript
Requires=local-fs.target network-online.target
After=local-fs.target network-online.target

[Service]
Environment=envdegisken1=deger1
Environment=envdegisken2=deger2
Environment=envdegisken3=deger3
User=root
Group=root
Type=simple
ExecStart=/root/denemescript.sh
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Dosyayı oluşturmak servisin başlangıca yerleşmesi anlamına gelmiyor. Programın başlangıçta çalışması için:

systemctl enable denemescript.service

komutunu kullanıyoruz. Servisi el ile başlatıp durmak içinse

systemctl start denemescript.service
systemctl stop denemescript.service

komutlarını kullanabiliriz.

Dosyanın sonunda .service olması dikkatinizi çekmiştir. Bunun özel bir anlamı var. service tipi systemd unitlerinden sadece biri. Diğer tipler için yukarıdaki ubuntu linkine göz atın derim.  Bu arada .service unit tipi için systemctl de .service ifadesini kullanmadan da işlem yapabiliyoruz. Aşağıdaki komutlar da çalışacaktır.

systemctl enable denemescript
systemctl start denemescript
systemctl stop denemescript

servis hakkında ne kadar süredir çalışıyor, son ekran çıktısı gibi bilgileri almak için:
systemctl status denemescript

Bunun dışında yapılandırma dosyasındaki Requires, After, WantedBy gibi ifadeler servisin diğer systemd unitleri ile olan ilişkilerini belirliyor. Bu haliyle kernelden sonraki çoklu kullanıcı ortamı yüklendikten ve network-online işlemi gerçekleştikten sonra servisimiz çalışacak. Eğer sonlanırsa Restart komutları sayesinde 10 saniye bekleyip tekrardan çalışacak. Bu şekilde bir yapılandırmayı yaygın olarak kullanmamım sebebi birbiriyle ilişkili servislerinin sorunsuzca başlatılabilmesini sağlaması. Örneğin mongodb yi ve mongodb yi kullanan scripti bu şekilde iki ayrı servis olarak eklediğimizi düşünelim. script mongodb den önce çalışırsa bağlantı sağlayamadığından çalışamayacak ve sonlanacak, fakat systemd aynı scripti 10 saniye sonra tekrar çalıştırmayı denediğinde veritabanı uygun olacağından bağlanacaktır.

Systemd logları varsayılan olarak dosyaya kaydetmiyor. Tabi bunu istersek >> operatoru ile execstart'da el ile verebiliriz fakat buna gerek yok. syslog'da tutulan bu loglara journalctl ile erişebiliyoruz. Örneğin

journalctl -u denemescript

ile loglara erişebilir ve:
journalctl -u denemescript -f

ile logları akarken stream olarak izleyebiliriz. Burdaki -u parametresi unit in kısaltmasıdır.

Sistemde şu an çalışan tüm systemd servis unitlerini görnek için şu komutu kullanabilirsiniz:
systemctl list-units --type service --state running

begins python ile programlama'ya giris

Python veya herhangi bir dil ile komut satırı tabanlı basit uygulamalar geliştirken bile yazılımcıları uğraştıran bir takım işlemler var. Python için __name__ bazlı boilterplate kodlar, komut satırı argümanlarına args[...] ile ulaşma, ortam değişkenlerine erişme  bunlardan bazıları. Bunların hepsini harici bir kütüphane kullanmadan çözmek elbet de mümkün fakat begins ile bu işlemleri çok daha kolay yapabiliyoruz.



begins paketini pip ile kurmak tahmin edeceğiniz gibi çok basit:

pip install begins

Ardından kendi kendini açıklayan aşağıdaki örnek koda bakabiliriz:

import begin

@begin.start
def run(ad="Murat", soyad="Yildirim", renk="mavi"):
    print ad, soyad, renk

begin.start decorator'u ile ana fonksiyonumuzu işaretliyoruz. bu fonksiyona geçirdiğimiz parametlere ise artık komut erişebiliriz. örneğin:

python beginsdeneme.py --ad burak --soyad celik --renk kirmizi

ile ektra koda ihtiyaç duymadan bu parametreleri değiştirebiliriz.

benzer şekilde:
import begin

@begin.start(env_prefix="begins_")
def run(ad="Murat", soyad="Yildirim", renk="mavi"):
    print ad, soyad, renk

şeklinde env_prefix'i kullanırsak artık bu değişkenleri işletim sisteminin ortam değişkenlerinden de okutabiliriz. Özellikle upstart ve systemd gibi servis yöneticileri üzerinden bu scriptleri yapılandırmamız gerektiğinde ektra kod kalabalığına gerek duymadan bunu başarabilmek büyük avantaj.

örnek systemd konfigurasyonu şu şekilde olabilir

nano /etc/systemd/system/begins.deneme.service
[Unit]
Description=beginsdeneme
Requires=local-fs.target network-online.target
After=local-fs.target network-online.target


[Service]
Environment=ad=burak
Environment=soyad=yildirim
Environment=renk=turuncu
Type=simple
ExecStart=/usr/bin/python /root/beginsdeneme.py
WorkingDirectory=/root
Restart=always
RestartSec=10
LimitNOFILE=500000
LimitNPROC=500000
 
 

[Install]
WantedBy=multi-user.target

Ubuntu 14 için örnek upstart yapılandırması ise şöyle

nano /etc/init/beginsdeneme.config
description "beginsdeneme"

env ad=berk
env soyad=kacar
env renk=siyah

start on runlevel [2345]
stop on runlevel [!2345]

respawn
post-stop exec sleep 5
limit nofile 65000 65000


setuid root

chdir /root
exec /usr/bin/python beginsdeneme.js

begins in logging dahil bir çok ek özelliği de var. Boyutu oldukça ufak bir kütüphane olan begins'in python ile program geliştirmeye katkısı olduça büyük.

30 Haziran 2018 Cumartesi

Minecraft sunucu kurma, kiralama nasıl yapılır


Çok oyunculu olarak minecraft oynamak istiyorsanız aslında artık harici bir sunucuya ihtiyacınız yok. Minecraft Windows 10 Edition ile beraber arkadaşlarınızı Xbox üzerinden ekleyerek normal açıtğınız minecraft sunucusuna doğrudan bağlanmalarını sağlayabilirsiniz. Tabi bu şekilde açılan sunuculara bağlanabilmeniz için oyunu kuran kişinin sunucuyu açık tutması gerekiyor. Eğer sürekli açık bir minecraft sunucusuna ihtiyacınız varsa ya yüksek ücretli resmi çözüm olan minecraft realm sisteminden faydalanmanız ya da kendi işinizi kendiniz görüp bir linux sunucuya kendiniz minecraft sunucusu gerekiyor.

Öncelikle şunu belirtmek gerekir ki harici sunucularda survival mode oynamayı düşünüyorsanız hayal kırıklığına uğrayacaksınız. Survival mode'da kullanılan harita sunucu tarafında oluşturulduğu için orjinal minecraft haritası kadar detaylı değil ve modsuz olarak sade sunucu kurduğunuzda hayvan, zombie gibi survival mode'un olmazsa olmazları malesef varsayılan olarak yok. Eğer bunlarla uğraşmak istemiyorsanız resmi yollardan minecraft sunucusu satın almayı düşünebilirsiniz. 

Tüm bunlarla uğraşmak istemiyorsanız minecraft sunucu adresleri listeleri içeren bir çok kaynak mevcut. Bunlardan yararlanarak minecraft sunucu ekleme işlemi ile arkadaşlarınız ile birlikte sunucu kurulumu gibi karışık işlemlerle uğraşmadan beraberce minecraft oynayabilirsiniz. 

Bu rehberde Minecraft 1.40 Bedrock edition olarak da bilinen ve hem windows hem telefonlarda çalışan sürüm için kurulum yapımını inceleyeceğiz. Bu sürümü oynasana, durmaplay gibi sitelerden şu an indirimle beraber 6 lira gibi bir fiyata minecraft satın alma kodu yani gift code olarak temin edebilirsiniz. Bedava apk olarak indirdiğiniz sürümlerde de çalışıyor fakat bunların yasal olmadığını belirtmek gerekir.

Devam etmek ve kendiniz kurulum yapmak istiyorsanız minecraft sunucu açma işlemleri şu şekilde:

Öncelikle son sürüm bir ubuntu vps kiralıyoruz. Şu an için bu sürüm ubuntu 18. Ubuntu 14 ve Ubuntu 16 da bu kurulumu denedim ve doğrudan versionla ilgili sorun yaşadım. Bu nedenle mutlaka son sürüm bir ubuntu sunucu kullanın. 

Türkiyedeki sunucular ping açısından daha faydalı olacaktır. Bunun dışında ucuz sunucu bulmak istyorsanız lowendbox sitesini ziyaret edebilirsiniz. Kaliteli avrupa bazlı sunucuları düşünürseniz digitalocean, linode, vultr gibi firmaları önerebilirim. Ubuntu18 kullandığınız sürece kurulumda bir değişiklik olmayacaktır.

Bazı firmalar örneğin vultr minecraft için hazır sunucu hizmeti veriyor bunları kullanamayın, son sürüm  değil ve sorun çıkarıyor. Normal ubuntu 18 sunucu oluşturun ve putty yazılımı ile sunucuya bağlanın.  Aşağıdaki resimdeki gibi hazır minecraft sunucu kiralama seçenekleri düzgün çalışmıyor. 

Putty yazılımını https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html adresinden edinebilirsiniz


Sunucumuza bağlandıktan sonra öncelikle aşağıdaki komutlarla güncel hale getiriyoruz:

apt-get update
apt-get upgrade -y

Minecraft sunucumuz özel bir php üzerinden çalıştığı için pocketmine'a özel php yi aşağıdaki komutlarla sunucumuza indirip açıyoruz:


Ardından sunucunun kendisini aşağıdaki şekilde indiriyoruz.

Son olarak sunucumuzu başlatmak için gerekli ayarları içeren script dosyasını pocketmine ın github hesabından indirip kurulumu başlatıyoruz:


./start.sh komutuyla beraber kurulum işlemi başlayacak. Burada lisansı kabul edip sunucu ismi vs. verdikten sonra sunucumuza ip adresiminizi minecraft üzerinden ekleyerek bağlanabiliriz. Sunucu eklentilerl için ise aşağıdaki adresi kullanabilirsiniz:
https://poggit.pmmp.io/plugins

eğer minecraftı sunucunuzun başlangıçına koymak isterseniz 


nano /etc/systemd/system/minecraft.service

komutu ile metin editörüyle açtığınız dosyaya aşağıdaki servis tanımını girebilirsiniz.

[Unit]
Description=Minecraft
Requires=local-fs.target network-online.target
After=local-fs.target network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/screen -D -m -S "minecraft" -t "minecraft" /root/start.sh

[Install]
WantedBy=multi-user.target


Böylece indirdiğimiz minecraft sunucusu ubuntu 18 uyumlu bir systemd servisi tanımlamış olduk. Bu servisin sunucumuzun başlangıçına yerleştirmek içinse



systemctl enable minecraft

komutunu çalıştıyoruz. Bununla beraber artık teknik bir sorundan dolayı vps sunucumuz kapatılıp tekrar açılırsa minecraft sunucumuz da otomatik açılacaktır.



Minecraft sunucuları hakkında daha fazla kaynak için https://minecraft.gamepedia.com/Bedrock_Edition_server_software adresine bakabilirsiniz.


hmm