Linux Tabanlı İşletim Sistemlerinde SSH Üzerinden Dizin Boyutlarını Öğrenme

Merhaba değerli dizinlerin ve dosya boyutlarını öğrenmeye çalışan dostum,

Bugün linux’da ssh işlemleri yaparken işimize yarayacak bir komutu paylaşacağım. Bu komutu ben genelde dosya boyutu büyük olan klasörleri bulmakta kullanıyorum.

du -sh -- *

Yukarıdaki komutu Centos 7 işletim sisteminde kök dizinde uyguladığımızda aşağıdaki resimde görülen çıktıya benzer bir çıktı alıyoruz. Bulunduğumuz klasöre ve klasörlerin boyutlarına göre çıktı tabiki değişiklik gösterebilir.

Konu ile ilgili olarak ilerleyen dönemde aklıma geldikçe, ihtiyacım olan konuları sizlerle de paylaşacağım.

Kaynak : Stack Exchange

RTMP Modülü ile Nginx Kurulumu (Centos 7)

Bu nasıl yapılır makalesi nginx’in sıfırdan rtmp modülü ile nasıl derleneceğini anlatmaktadır. Nginx bildiğiniz üzere web server ancak farklı kullanım alanlarıda mevcut. Bunlardan biri de localden uzağa yayın basmak için yada uzaktaki kayıtlı dosyalarımızı izleyicilerimize ulaştırmak için kullanacağız. Kısaca özetleyecek olursak bu makale sonunda ses ve video yayınlama işlemini nginx üzerinden nasıl gerçekleştireceğiz onu anlatacağım.

Nginx RTMP Modülü ile neler yapabilirsiniz onları inceleyelim:
– RTMP/HLS/MPEG-DASH Canlı yayınları
– RTMP video on demand (VOD) (İstediğiniz zaman istediğiniz videoyu izleyebileceğiniz bir sistem. Bu özellik sayesinde sunucudaki yerel bir dosyayı yada http yayınını dilediğiniz zaman dilediğiniz yerinden izleyebilirsiniz.
– Çoklu FLV yayınlarını kaydetme.
– H264/AAC desteği.
– FFmpeg ile anlık transcoding.
– HTTP geri bildirimleri ( Yayınla / Oynat / Kayıt et / Güncelle gibi)
– Wirecast, FMS, Wowza, JWPlayer, FlowPlayer, StrobeMediaPlayback, ffmpeg, avconv, rtmpdump, flvstreamer gibi uygulamalarla çalışabilme, daha detaylı bilgi için nginx rtmp module sayfasını ziyaret edebilirsiniz.

Öncelikli olarak ihtiyacınız olan root erişimi olan Centos 7 kurulu bir sunucu yada VM. Temiz bir kurulum ile işlemleri gerçekleştirmek her zaman daha sağlıklı olacaktır. Kurulu bir nginx’iniz var ise bu dökümanda bulunan yönergeleri direkt olarak uygulamayınız.

Kurulum aşamalarına geçelim, ilk aşamada aşağıdaki komut ile sistemimizi güncelleyelim.
yum update -y

Güncelledikten sonra sunucumuzu reboot edelim ve bazı gerekli paketleri yükleyelim. Aşağıdaki komut ile geliştirici araçları yüklenecektir.

yum -y groupinstall 'Development Tools'

Geliştirici araçlarını yükledikten sonra epel deposunu (repo) yükleyelim.

yum -y install epel-release

Epel reposuda yüklendikten sonra bazı ek paketlere ihtiyacımız olacak bunları yüklemek için aşağıdaki komutu uygulamanız yeterli olacaktır.

yum install -y wget git unzip perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel pcre-devel GeoIP GeoIP-devel

Evet, yukarıdaki işlemleri yaptıktan sonra nginx kurulumu için ön hazırlıklarımızı tamamlamış oluyoruz.

Nginx, rtmp ve bazı modüllerin indirilmesi

İşlemleri /usr/local/src klasöründe gerçekleştirelim. Farklı bir dizinde olabilir, tercih sizindir.

cd /usr/local/src

Nginx’in son sürümünü indirelim. Bu makale yazılırken güncel sürüm 1.17.1’di, siz bu makaleyi okurken yeni sürüm gelmiş olabilir. Dilerseniz yeni sürümü de nginx’in web sitesini ziyaret ederek indirebilirsiniz.

wget https://nginx.org/download/nginx-1.17.1.tar.gz

Ardından Nginx’imizi klasöre çıkartalım.

tar -zxvf nginx*

Kurulum esnasında ihtiyaç duyacağımız uygulamalardan biriside pcre indirmek için aşağıdaki komutu uygulayınız.

wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz

pcre’yi de aşağıdaki komut ile klasöre çıkartalım

tar -zxvf pcre*

Bir diğer ihtiyaç duyacağımız paket ise zlib paketi, bu paketi indirmek için ise aşağıdaki komutu uygulayalım.

wget https://www.zlib.net/zlib-1.2.11.tar.gz

zlib paketini açmak için ise aşağıdaki komutu uygulayacağız.

tar -zxvf zlib*

İhtiyaç duyacağımız ek bir paket ise openssl. openssl’i indirmek için aşağıdaki komutu uygulayacağız.

wget https://www.openssl.org/source/openssl-1.0.2s.tar.gz

openssl paketini açmak için ise aşağıdaki komutu uygulayalım.

tar -zxvf openssl*

Son olarak rtmp modülümüzü indireceğiz. Rtmp modülünü indirmek için aşağıdaki komutu uygulamamız yeterli olacaktır.

git clone https://github.com/sergey-dryabzhinsky/nginx-rtmp-module.git

Yukarıdaki işlemleri tamamladığımızda tüm gerekli paketlerimizi indirip açmış oluyoruz. Nginx indirilirken belirttiğim versiyon farkı diğer tüm paketlerde de söz konusu olabilir. Bunun için en sağlıklı kontrol tek tek sitelerin ziyaret edilip ilgili paketlerin son sürümlerinin kontrol edilip ona göre indirme yapılması daha uygun olacaktır.

Nginx’i indirdiğimiz paketlerle birlikte derleyip yükleyelim

Aşağıdaki komut ile nginx klasörümüzün içerisine girelim.

cd nginx*

Nginx’i aşağıdaki kod dizimi ile konfig etmeye başlayalım.

./configure --prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib64/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--user=nginx \
--group=nginx \
--build=CentOS \
--builddir=nginx-1.14.0 \
--with-select_module \
--with-poll_module \
--with-threads \
--with-file-aio \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module=dynamic \
--with-http_image_filter_module=dynamic \
--with-http_geoip_module=dynamic \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_auth_request_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_slice_module \
--with-http_stub_status_module \
--http-log-path=/var/log/nginx/access.log \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--with-mail=dynamic \
--with-mail_ssl_module \
--with-stream=dynamic \
--with-stream_ssl_module \
--with-stream_realip_module \
--with-stream_geoip_module=dynamic \
--with-stream_ssl_preread_module \
--with-compat \
--with-pcre=../pcre-8.43 \
--with-pcre-jit \
--with-zlib=../zlib-1.2.11 \
--with-openssl=../openssl-1.0.2s \
--with-openssl-opt=no-nextprotoneg \
--add-module=../nginx-rtmp-module \
--with-debug

Bu işlem tamamlandıktan sonra aşağıdaki komut ile kurulum işlemini tamamlayalım.

make && make install

Yukarıdaki işlemler esnasında her hangi bir hata alırsanız, yorum olarak yazdığınız takdir de çözüm için elimden geleni yapacağımdan şüpheniz olmasın.

Nginx kurulumunun tamalanmasının ardından konfigurasyon dosyalarımızın bulunduğu klasöre module klasörünün sembolik linkini oluşturalım.

ln -s /usr/lib64/nginx/modules /etc/nginx/modules

Nginx için bir kullanıcı ve grup oluşturalım.

useradd -r -d /var/cache/nginx/ -s /sbin/nologin -U nginx

Yeni bir klasör oluşturalım.

mkdir -p /var/cache/nginx/

Oluşturduğumuz klasörün izinlerini oluşturduğumuz nginx kullanıcısına verelim.

chown -R nginx:nginx /var/cache/nginx/

Son olarak kurduğumuz nginx’i test edelim.

nginx -t

Aşağıdaki gibi bir çıktı alacağız.

nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Yukarıdaki mesajıda aldığımıza göre nginx kurulumumuz tamamlanmış demektir.

Nginx’i Servis Olarak Çalıştırma

Nginx kurulumumuzun servis olarak çalışmasını ayarlayalım. Öncelikli olarak servis dosyamızın yer alacağı dizine geçelim.

cd /lib/systemd/system/

Ardından nginx.service adında bir dosya oluşturalım.

nano nginx.service

nano ile oluşturduğumuz nginx.service dosyamızın içerisine aşağıdaki tanımlamaları yapalım.

[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target

CTRL + X tuşu ile kaydedip text editörümüzden çıkış yapalım. System servislerini aşağıdaki komut ile tekrardan yükleyelim.

systemctl daemon-reload

Son olarak nginx servisimizi sunucu her başladığında açılacak şekilde ayarlayalım.

systemctl enable nginx

Nginx’i kurulumdan sonra başlatmak için ise aşağıdaki komutu kullanmamız yeterli olacaktır.

systemctl start nginx

RTMP için konfigurasyon dosyası oluşturma

Artık nginx serverimiz tüm modüllerle birlikte çalışır durumda, sırada nginxi rtmp ile yapılandırmaya geldi. Bu işlemi gerçekleştirmek için nginx kurulumunu gerçekleştirdiğimiz dizine dönelim.

cd /etc/nginx

nginx.conf dosyamızın yedeğini alalım, daha sonraları incelemek için faydalı oluyor.

mv nginx.conf nginx.conf.BACKUP

Tekrardan boş bir nginx.conf dosyası oluşturalım.

nano nginx.conf

Yeni oluşturduğumuz nginx.conf dosyamızın içeriğini aşağıdaki nginx kod dizimi ile dolduralım.

worker_processes auto;
events {
worker_connections 1024;
}

# RTMP configuration
rtmp {
server {
listen 1935; # Listen on standard RTMP port
chunk_size 4000;

# Define the Application
application show {
live on;
# Turn on HLS
hls on;
hls_path /mnt/hls/;
hls_fragment 3;
hls_playlist_length 60;
# disable consuming the stream from nginx as rtmp
deny play all;
}

}
}

http {
sendfile off;
tcp_nopush on;
aio on;
directio 512;
default_type application/octet-stream;

server {
listen 8080;

location / {
# Disable cache
add_header 'Cache-Control' 'no-cache';

# CORS setup
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length';

# allow CORS preflight requests
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}

types {
application/dash+xml mpd;
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}

root /mnt/;
}
}
}

CTRL + X ile konfigurasyon dosyamızı kaydettikten sonra RTMP Modülünüde ayarlamış oluyoruz ve yayın basabiliriz. Yayın basmak için yapmamız gereken işlem ise rtmp://ip-adresi/show/stream adresine yayını basmak. Bunun için çeşitli araçlar kullanabilirsiniz ffmpeg gibi.

NOT: Konfigurasyon dosyamız içerisinde yer alan parametlerelere ayrıca değineceğim.

Local’de bulunan dosyalarımızı oynatacağımız bir yayın oluşturma (Video on Demand)

Bunun için yapmamız gereken işlem aşağıdaki komut ile nginx.conf dosyamızı açalım.

nano /etc/nginx/nginx.conf

Ardından rtmp {} etiketleri arasında yer alacak şekilde aşağıdaki kod dizimini yapalım.

application vod {
play /mnt/mp4s;
}

application stream {
live on;
}

Dosyamızı kaydettikten sonra konfigurasyon dosyamızda belirttiğimiz /mnt/mp4s klasörünü oluşturalım ve nginx izinlerini ayarlayalım. Öncelikle klasörü olutşurmakla başlayalım.

mkdir /mnt/mp4s

Klasörümüze daha önce oluşturduğumuz nginx kullanıcı izinlerini verelim.

chown -R nginx:nginx /mnt/mp4s

Ayarlarımızın geçerli olması için nginx web serverimizi yeniden başlatalım.

systemctl restart nginx

Artık /mnt/mp4s içerisine aktardığımız videoları dilediğimiz zaman izleyebiliriz. İzlemek için yapmamız gereken bir network video player (VLC vb.) ile rtmp://Sunucunun-ip-adresi:1935/vod/mp4s-klasorune-aktardiginiz-dosya.mp4 çağırmak yeterli olacaktır.

Takıldığınız yerler olur ise elimden geldiğince yardımcı olmaya çalışırım. Herkese iyi günler, iyi çalışmalar 🙂