Category Archives: Linux

Intel CPU’lar için Optimize Tensorflow Derlemek

Makine Öğrenmesi, Derin Öğrenme çalışmalarımı Linux (Ubuntu 16.04) dizüstü bilgisayarımda Anaconda üzerinde Python ile yapıyorum. Intel ve Google’ın yakın zamanda yayınladıkları güncellemeler sayesinde Tensorflow CPU’lar üzerinde çok daha hızlı çalışabiliyor. (bkz. https://software.intel.com/en-us/articles/tensorflow-optimizations-on-modern-intel-architecture) Tensorflow’un güncel kodlarını çekip derlemek için aşağıdaki adımları uyguladım.

 

 

 

 

Öncelikle yeni bir Anaconda’yı güncelledim:

$conda create -n

Yeni bir Anaconda ortamı yarattım:

$conda create -n tensorflow35cpu python=3.5 anaconda

Yeni yarattığım ortama geçiş yaptım:

$source activate tensorflow35cpu

Tensorflow’u derlerken kullanacağım Bazel yüklü olmadığı için öncelikle onu yüklemem gerekti

echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -

sudo apt-get update && sudo apt-get install bazel

sudo apt-get upgrade bazel

Github’dan Tensorflow’un kaynak kodlarını indirdim:

$git clone https://github.com/tensorflow/tensorflow

Bu klasöre girip ayarları başlattım. Bu aşamada Intel MKL kullanma seçeneği seçilmeli, configure betiği güncel Makine Öğrenmesi için Intel MKL kütüphanesini tensorflow/third_party/mkl/mklml klasörüne indirecek. Diğer seçenekleri ön tanımlı halleriyle bıraktım:

$cd tensorflow
$ ./configure

Optimize Tensorflow pip paketini oluşturdum:

$bazel build --config=mkl --copt="-DEIGEN_USE_VML" -c opt //tensorflow/tools/pip_package:build_pip_package

Ve son olarak bu paketi yükledim:

$bazel-bin/tensorflow/tools/pip_package/build_pip_package ~/path_to_save_wheel
pip install --upgrade --user ~/path_to_save_wheel /wheel_name.whl
Tagged

Bütün Docker Container’larını Durdurmak ve Kaldırmak

List all containers (only IDs)

docker ps -aq

Stop all running containers

docker stop $(docker ps -aq)

Remove all containers

docker rm $(docker ps -aq)

Remove all images

docker rmi $(docker images -q)
Tagged

Ubuntu üzerinde MQTT (Mosquitto)

MQTT IoT uygulamalarında çok yaygın kullanılan bir iletişim protokolüdür. HTTP’den farklı olarak istemci-sunucu (client-server) mekanizmasıyla değil, abone-yayınlayıcı (subscribe-publish) mekanizmasıyla çalışır. Veri göndermek isteyen cihazlar bu veriyi bir konu adıyla broker’a gönderirler. Broker da bu veriyi daha önce bu konuya abone olmuş cihazlara dağıtır (yayınlar).

Ubuntu üzerinde açık kodlu MQTT broker’ı Mosquitto’yu yüklemek için aşağıdaki adımlar uygulanabilir.

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential libwrap0-dev libssl-dev libc-ares-dev uuid-dev xsltproc

## Broker yüklemek için
sudo adduser mosquitto
sudo apt-get install mosquitto
sudo service mosquitto status

## İstemci yüklemek için
sudo apt-get install libmosquitto-dev
sudo apt-get install mosquitto-clients

## Test
# Abone olmak için
mosquitto_sub -h localhost -t "sicaklik" -v

# Mesaj yayınlamak için
mosquitto_pub -h localhost -t "sicaklik" -m "Sensor verisi: 1,5"

 

 

Tagged ,

Bitbake ile Intel Edison için Yocto İmajı Hazırlamak

Intel Edison Yocto Linux yüklü gelmektedir. Edison için Yocto imajını Intel’in sitesinden indirmek mümkün olduğu gibi kendimiz de yeni imaj hazırlayabiliriz. Bunun için Bitbake kullanılır.

Continue reading

Tagged , , , ,

Git deposuna farklı bir porttan bağlanmak

Git deposuna (varsayılan port 22’de) farklı bir port üzerinden bağlanmanız gerekiyorsa şöyle yapabilirsiniz:

git clone ssh:[email protected]:1234/myproject/myproject.git

 

Bütün OpenWrt paketlerini tek komutta güncellemek

opkg list-upgradable | awk -F ' - ' '{print $1}' | xargs opkg upgrade

 

   _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M

Systemctl ile Systemd Servislerini Yönetmek

Bir ilklendirme sisteminin (init system) amacı Linux kerneli ayağa kalktıktan (boot ettikten) sonra başlatılması gereken bileşenleri ilklendirmektir. İlklendirme sistemi, sistem başladıktan sonra herhangi br zamanda servisleri ve arka planda çalışan programları (daemon) kontrol etmek için de kullanılır.

systemd Linux dağıtımları arasında hızla yaygınlaşan bir ilklendirme sistemi ve sistem yöneticisidir. Ubuntu da 16.04 versiyonunda eskiden kullandığı Upstart’ı systemd ile değiştirdi. systemctl komutu ise systemd’yi kontrol etmeye yarayan temel komuttur.

Continue reading

Linux Patch (Yama) Komutu Kullanımı

Linux’ta yüklediğiniz bir programın yeni versiyonu çıktığında apt-get veya yum gibi bir paket yöneticisi ile güncelleme yapabiliyoruz. Ama bir programı kaynak kodundan derleyerek yüklersek yama olarak yayınlanan güncellemeyi de kaynak koduna uygulamamız gerekir. Veya birisine gönderdiğimiz bir kaynak kodun üzerindeki değişiklikleri de yama dosyası olarak gönderebiliriz, alan kişinin bu yamayı uygulaması gerekir. Linux’ta bu işleri yapabileceğimiz komut: patch.

patch komutunun nasıl kullanıldığını örneklerle açıklayayım.

Continue reading

Gigabyte IoT Gateway BIOS Güncelleme

Gigabyte BXBT-3825 IoT Gateway cihazında Wind River 7 işletim sistemini çalıştıramıyordum. WR Linux yüklü USB diskten boot etmek istediğimde “reboot and select proper boot device or insert boot media in selected boot device and press a key” hatası alıyordum.

Denemelerden sonra bu cihaz üzerinde Windows 7 ve Debian çalıştırabildiğimi gördüm ve cihazda donanım sıkıntısı olmadığından emin oldum. Üstelik, Gigabyte’da boot etmeyen WR Linux imajı Advantech UTX-3115 cihazında çalışıyordu.

BIOS versiyonu F1 görünüyordu. Gigabyte’ın destek sitesinde F1’in 32bit; F3’ün 64bit işletim sistemlerini desteklediğini öğrendim. F3 BIOS yazılımını indirdim ve Windows içinden çalıştırmaya çalıştım. Bu sefer de “bu program DOS modunda çalıştırılabilir” hatası aldım.

Bunun üzerine Rufus‘u kullanarak boot edilebilir bir FreeDOS USB disk hazırladım. İçine Gigabyte’ın sitesinden indirdiğim BIOS yazılımını kopyaladım. Cihazı bu diskten çalıştırdım ve Flash.bat komutunu çalıştırdım.

 

Güncelleme:

Şurada da farklı bir BIOS güncelleme tekniği buldum:

https://software.intel.com/en-us/node/629035

https://software.intel.com/en-us/node/674961

Cloudflare API’ına Konsoldan Erişmek

Cloudflare neredeyse bütün fonksiyonlarını kontrol edebileceğiniz bir API sunuyor. Bunu PHP, Perl, Java, Python vs. çeşitli dillerde yazdığınız programlarda kullanabilirsiniz. Ayrıntılı döküman şurada: https://www.cloudflare.com/docs/client-api.html

Daha önce Apache loglarını inceleyip XMLRPC saldırısı yapan IP’leri belirleyen bir betik yazmıştım. Tespit ettiği IP’leri bana eposta ile bana gönderiyordu. Şimdi bunu güncelleyip, otomatik olarak Cloudflare Firewall’undan engelleyen bir hale çevirdim. Son hali şöyle oldu:

 

#!/bin/bash
if [ "$#" -ne 1 ];
then
  LIMIT=100
else
  LIMIT=$1
fi
 
MY_EMAIL=""
CLOUDFLARE_API_KEY=""
DATE=`date`
LIST="\nMore than $LIMIT:"
WARNING="\nMore than $LIMIT:\n"
IPTABLES="\niptables command:"
TOTAL=0
 
echo -e "### xmlrpc Attack Detection ###\n$DATE\n"
 
for IP in $(grep "POST /xmlrpc.php" /var/log/apache2/access*log | awk '{print $1}' | awk -F ':' '{print $2}' | sort | uniq)
do
  COUNT=`grep $IP /var/log/apache2/*.log | grep xmlrpc.php | wc -l`
 
  if [[ "$COUNT" -gt $LIMIT ]];
  then
    CLOUDFLARE=`curl -s https://www.cloudflare.com/api_json.html \
      -d 'a=ban' \
      -d 'key='$IP \
      -d 'tkn='$CLOUDFLARE_API_KEY \
      -d 'email='$MY_EMAIL`
 
    echo "IP: $IP count: $COUNT"
    LIST="$LIST\n$IP"
    WARNING="$WARNING\n$IP     => count: $COUNT\n$CLOUDFLARE\n"
    IPTABLES="$IPTABLES\niptables -I INPUT 1 -s $IP -j DROP"
    ((TOTAL=$TOTAL+1))
  fi
done
echo "Total: $TOTAL IP addresses"
 
echo -e $LIST
echo -e $IPTABLES
 
if [[ "$TOTAL" -gt 0 ]];
  then
  echo -e $WARNING |mail -s "xmlrpc attack warning" $MY_EMAIL
fi