Kendi Internet Radyonuzu Kurun

Debian GNU/Linux üzerinde Icecast Radyo Sunucusu
Debian GNU/Linux üzerinde Icecast Radyo Sunucusu

Uzunca bir süredir yazı yazamıyorum. Yaklaşık 2 ay önce yeni bir kurumda çalışmaya başladım. Değişikliğin hem öncesi hem de sonrası – takdir edersiniz ki – biraz yoğun geçti. Kaldığım yerden devam edebilmeyi umuyorum.

Bu yazıda, Digital Ocean üzerinden (referans linkidir) ayağa kaldıracağımız bir droplet’te, Debian GNU/Linux üzerine Icecast kurulumu yapıp kendi internet radyomuzu oluşturacağız. Önceki yazılardan farklı olarak bir de video anlatım hazırladım.

Başlamadan önce şu uyarıları yapmakta fayda var:

Bu yazıda yer alan bilgiler eğitim amaçlıdır. Burada edindiğiniz bilgiler ile production ortamına çıkmanız önerilmez. Yayın haklarına sahip olmadığınız bir eseri herhangi bir ortamda yayınlamanız suçtur.

Droplet Oluşturmak

Digital Ocean hesabınıza giriş yaptıktan sonra sağ üst köşeden “Create -> Droplets” adımlarını takip edin. Sonrasında ayağa kaldırmak istediğiniz instance’ın işletim sistemini seçin. Sonrasında donanım ihtiyaçlarınıza göre bir paket seçip – ki ben test amaçlı bir kurulum yaptığım için en ucuzuna yöneldim – “Authentication” kısmında beni bekleyin 🙂

Digital Ocean droplet oluşturma
Digital Ocean droplet oluşturma

SSH Anahtarlarının Oluşturulması

Eğer parola doğrulama (password authentication) ile devam etmek isterseniz konu sizin için burada bitti. Kullanıcı adınız “root“, parolanız ise belirlediğiniz şey her ne ise. Bu noktadan sonra droplet’inizi oluşturup SSH yapabilirsiniz.

Ancak anahtar doğrulamasıyla ilerlemek isteyenler öncelikle bir anahtar çifti üretmeli. “Benim zaten anahtarım var.” diyorsanız muhtemelen benim anlatacaklarıma ihtiyacınız yoktur. Yolunuzu bulabilirsiniz.

ali@zion:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ali/.ssh/id_rsa): /home/ali/.ssh/test
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/ali/.ssh/test
Your public key has been saved in /home/ali/.ssh/test.pub
The key fingerprint is:
SHA256:CHfdjTnbc5HRF1Ne3kZLUmVIlVAek6HDhs+76CVmyi8 ali@zion
The key's randomart image is:
+---[RSA 3072]----+
|             +=&/|
|         . .o+*B%|
|    . . . ..==.=*|
|     o o    ++...|
|      . S   .oo .|
|              .o |
|           + o   |
|        .E+ + .  |
|         o++ .   |
+----[SHA256]-----+

ssh-keygen” komutunu kullanarak bir anahtar çifti yaratmak istediğimizi belirtiyoruz. Sonrasında anahtarımızı nereye kaydedeceğimiz soruluyor. Örneğin ben, “/home/ali/.ssh/test” yolunu verdim. Bu dosya, benim “private” anahtarım olacak. “/home/ali/.ssh/test.pub” dosyası ise, bu anahtar çiftinin “public” tarafını gösterecek. Private anhatarınızı asla kimseyle paylaşmamalısınız. Son olarak bu anahtar çifti için bir “passphrase” belirleyebilirsiniz. Bu adım, şart olmamakla birlikte tavsiye edilir.

Oluşturduğunuz public key dosyasını “cat” ya da başka bir şeyle okuyarak, Digital Ocean’da ilgili alana yapıştırmanız yeterli olacaktır.

ali@zion:~$ cat .ssh/test.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCzo9rrbthvUz/TZj+aHFlt/C5bQ5ZO07r6r+qHvzwiUF/tVRIFiTPSXnFFP5AvDbw9fOUTxzcI+oRAU93KSJNe2VE9681fGeEeDm7WEuYFSE4YdWtqGsTb2aTO9yoctTXw8KQQ4105Rg4X7PJf2JGLaNBkJzHHSJ/PxdHPwirQ2VWVz19vYK5Za4ovVXIM3PUUeTKvh5sWlbCccJ3pmyzc9VWyGFR9spOd6lKvya1T79Qnhi5FVXUdR8vAYlkCxr+8K39wMb+8Z5ZpKXO8EfBGVQxbKGbhpni49C+cokBLIRmWzFqqD6cOgjLpjVX3LNb0Aqte9kh893X2usbmHgK9za2M32+Hfbcb0beIV6D5xMH3OmeyRbzz9xUwUQFP4CfI5L8kJ8dAn7mlWt1YjpatBgkdPPxTtZD2EWp2riA5vv/Ji6eNEonFsOQ+D9aHH+9XVhkKk9YMqioJjos2WqNlBHwnAtYhi6l1MHIRH5sIgc27d8G7stcr47hqpYYFHn8= ali@zion
SSH anahtarlarının hazırlanması
SSH anahtarlarının hazırlanması

Icecast Kurulumu

Yeni açılan instance, bazı paket update’lerine ihtiyaç duyacak olabilir. Dolayısıyla bu temiz cihaz üzerinde bir güncelleme kontrolü yapıyoruz. Sonrasında “icecast2” paketini kuruyoruz:

root@debian-radyo:~# apt-get update
root@debian-radyo:~# apt-get upgrade
root@debian-radyo:~# apt-get install icecast2

Paket kurulumu sırasında, bizi aşağıdaki yapılandırma ekranı karşılıyor. Bu arayüzü kullanarak; admin parolası, relay parolası, source parolası, hostname gibi bilgileri dolduruyoruz.

Icecast2 konfigürasyon ekranı
Icecast2 konfigürasyon ekranı

Paket kurulumu tamamlandıktan sonra, Icecast2 çalışmaya başlayacaktır. Ancak yapılandırma tarafıyla işimiz henüz bitmedi. Bu nedenle halihazırda çalışmakta olan “icecast” process’ini durdurmamız gerekecek.

root@debian-radyo:~# ps aux | grep icecast
root@debian-radyo:~# kill -9 (process ID'si)

Icecast’in Temel Yapılandırması

Icecast’in varsayılan yapılandırma dosyası, “/etc/icecast2/icecast.xml” dosyasıdır. Bu dosya üzerinde, “mount” kısmında bazı değişiklikler yapacağız:

<!-- Only define a <mount> section if you want to use advanced options,
         like alternative usernames or passwords
        -->
    <mount>
        <mount-name>/test.ogg</mount-name>

        <shoutcast-mount>/stream</shoutcast-mount>
        <username>ali</username>
        <password>sezisli</password>

        <max-listeners>10</max-listeners>
        <dump-file>/tmp/dump-example1.ogg</dump-file>
        <burst-size>65536</burst-size>
        <fallback-mount>/example2.ogg</fallback-mount>
        <fallback-override>1</fallback-override>
        <fallback-when-full>1</fallback-when-full>
        <intro>/example_intro.ogg</intro>
        <public>1</public>
        <no-yp>1</no-yp>
        <!--
        <authentication type="htpasswd">
                <option name="filename" value="myauth"/>
                <option name="allow_duplicate_users" value="0"/>
        </authentication>
        -->
        <on-connect>/home/icecast/bin/stream-start</on-connect>
        <on-disconnect>/home/icecast/bin/stream-stop</on-disconnect>
    </mount>

Yukarıdaki bloğu incelediğinizde bazı temel bilgileri edinebilirsiniz. Sunucu üzerinde yayının yapılacağı mount point olarak “test.ogg” belirtilmiş. Yani bir dinleyici, bu yayına “IP adresi:8000/test.ogg” adresinden ulaşabilir.

Bu noktaya yayın yapabilecek yetkili kullanıcı adı “ali“, parolası ise “sezisli“. Bir başka dikkat edilesi nokta, authentication type kısmının comment-out yapılmış olması.

Videoda, konfigürasyon dosyasını biraz daha detaylı inceliyorum.

Konfigürasyon dosyasıyla işimizi bitirdikten sonra, aşağıdaki komutu kullanarak icecast’i başlatıyoruz:

root@debian-radyo:~# sudo -u icecast2 icecast2 -b -c /etc/icecast2/icecast.xml

Sonrasında sunucunuzun IP adresi:8000 adresine gittiğinizde, radyo server’ınız sizi karşılamalı:

Icecast Radyo Server
Icecast Radyo Server

Yayının Yapılması

Aslında işimiz tamamlandı. Radyo sunucumuz hazır. Fakat bir de deneme yayını yapayım derseniz bunun için bazı uygulamalar mevcut. Ben bu denememde “Mixxx” yazılımını kullandım. Icecast’in web sitesinde alternatifler bulabilirsiniz.

Bu uygulamaların kullanımları apayrı bir konu. Bu nedenle çok detaya giremeyeceğim. Ancak Mixxx’teki ayarımı paylaşmak isterim:

Mixxx Icecast ayarları
Mixxx Icecast ayarları

Burada dikkat etmemiz gereken en temel noktalar; host (sunucumuzun IP adresi ya da alan adı), mount (konfigürasyon dosyasında belirttiğimiz mount point), port (konfigürasyon dosyasında belirleniyor, varsayılan 8000), mount point’i kullanacak kullanıcı adı ve parola.

Icecast Kurulumu Videolu Anlatım

Icecast kurulumu videolu anlatım

Shell Script #8 – Değişkenlerle Oynamak

Değişkenlerle ilgili daha önce şöyle bir yazı yazmıştım. Gayet tabii, birkaç sayfayla anlatılabilecek bir konu değil.

Zaten bu yazıdan sonra da “Tamam, değişkenler bitti. Öğrendik.” diyemeyeceğiz. Emin olabilirsiniz.

Kod örneklerini GitHub reposunda bulabilirsiniz.

Bash ortamında substring örneği
Bash ortamında substring örneği
Okumaya devam et “Shell Script #8 – Değişkenlerle Oynamak”

Shell Script #7 – İnteraktif Script’ler

Bu zamana kadar yazdığımız script’lerin neredeyse tamamında bir çıktı (output) ürettik. Ancak hiçbirinde bir girdi (input) almadık.

Kullanıcıyla etkileşime geçen script’lere “etkileşimli (interactive, interaktif)” script’ler diyoruz. Etkileşim; input alma, output verme ya da ikisiyle birden de gerçekleştirebilir. Dolayısıyla bu yazıda, bir yandan çıktılarımızı biçimlendirmeyi denerken bir yanda da girdileri yönetebilmeyi deneyeceğiz.

Kod örneklerini GitHub reposunda bulabilirsiniz.

Okumaya devam et “Shell Script #7 – İnteraktif Script’ler”

Shell Script #6 – Matematiksel İşlemler

Shell scripting serisine matematiksel işlemler ile devam ediyoruz. Konu, programlama dillerine aşina arkadaşlar için oldukça basit kalacaktır. Ancak yine de bash’e özel bazı noktalara değinmiş olacağız.

Kod örneklerini GitHub reposunda bulabilirsiniz.

Bash ortamında "başarısız" bir toplama işlemi
Bash ortamında “başarısız” bir toplama işlemi
Okumaya devam et “Shell Script #6 – Matematiksel İşlemler”

Uyku Kaçıran Programlama Dilleri – Ezoterik Diller

Üniversite yıllarımda bir süre programlamayla ilgilenmiştim. Hemen hemen her konuda olduğu gibi bu konuda da “Uçlarda ne var?” merakım, beni oldukça garip programlama dilleriyle buluşturdu. Bu dilleri öğrenmek, nasıl çalıştığını anlamak ve bu dillerde program yazmak gibi konulara ise merakım yetmemiş olacak ki; sadece uzaktan bakmakla yetindim.

“Ne işimize yarayacak?” ya da “Neden böyle bir şey yapalım ki?” sorularını en baştan reddeden bazı programlama challenge’larıyla karşılaşmışsınızdır. “Hiç noktalı virgül kullanmadan Hello world diyebilen bir C programı” gibi.

Eğer siz de bu sorulara “Hiiç, eğlence olsun, öylesine.” ya da “Çünkü yapabiliyorum.” cevaplarını vermeye hazırsanız, sizi bu tarz programlama dillerinin bir listesiyle baş başa bırakmak istiyorum.

Okumaya devam et “Uyku Kaçıran Programlama Dilleri – Ezoterik Diller”