(Tekrar) Başlarken…

Sevgili Okur,

Tekrar hoşgeldiniz.

İster Freedombox ister başka yönetmlerle olsun, kendi sunucunuzu kurmayı başardığınız ve interneti tekelcilikten ve merkeziyetçilikten kurtarmakta bir adım (daha) attığınız için mutlu olabilirsiniz - size teşekkür ederim!

Kendi adıma, 4 aylık Freedombox (ara ara FBX kısaltması da kullanabilirim) kullanımı sonrası, sunucumla ilgili işlerin çoğunun yoluna girdiğini söyleyebilirim. Keşfettiklerimi kendimce notlar ve günceler tutarak bir kenara kaydettiysem de, sadece bana faydasının olması zaten yanlız kaldığımız bir dünyada beni daha da soyutluyor. Bu sebeple, biraz eğlence ve tuz-biber olması, biraz da ‘üstümdeki yükü hafifletmesi’ için dilim döndüğünce buradan tecrübelerimi paylaşmaya devam etmek istedim.

Freedombox tecrübem ve bu yazıyı derleme süreci, benim için çok da kolay olmadı. Danışacak, proof-read ve test edecek, soru soracak çevremde kimse olmadığı için, kendimce iyi olanı yapmaya çalıştım. Sizleri denemelerinizde bilmeden yanlış bir yöne sürüklermiş olursam, şimdiden affola. Eğer yazdıklarımı deneme şansınız olur da bana geribildirimde bulunmak isterseniz, çok sevinirim. Bu destekler sadace bana değil, bu yazıyı okuyacak herkese olacaktır.

Bununla beraber, biraz da artık yazılım ve donanımdan elimi ayağımı çekip kitap ve diğer sevdiğim şeylere dönmek istiyorum. Son derece çalkantılı bir 2022 geçirdikten sonra, 2023’ün benim için daha dingin olmasını istediğimden, belki bu (ve bir önceki) yazıma uzun süre bir ekleme / revizyon yapmayabilir ve yazılım ve teknolojiden de bir süre uzak durabilirim. Bir yandan hiçbir şey için kesin konuşmamak da gerektiğini biliyorum. Yeni keşfedeceğim ve heycanlandığım birşeyler olursa düşüncelerime yine buralarda yer bulmaya çalışacağım. Blog’umun bir ’teknoloji yazı dizisi’ olmasını sanırım çok istemediğim için, halihazırda derlediğim birkaç metinde saklı kalırsam daha mutlu olacağım.

Sevgili Okur, ister Freedombox kurmuş olun, ister olmayın, süreçte sizlere yeni birşeyler tanıtma ve paylaşma fırsatı bulabildiysem, bu da benim mutluluğum : ) Özgür, yaygın, teknolojiyi etik kullanabilen ve bireylerin ürün olarak tüketilmediği bir ağda hep beraber olmak umuduyla, keşiflerinizde bol şans dilerim!

Sağlıcakla kalın.

Ged
@ged@social.hayalmasal.org
https://hayalmasal.org

Bu yazımı, referans bilgi olarak okuyup değerlendirmenizi rica ederim. Aşağıda ilk başlıkta biraraya getirdiğim “Freedombox yapılandırmanızı” tamamlandıktan sonra paylaştığım diğer içerikleri herhangi bir sırada okumanız / uygulamanız gerekmiyor. Bunların içinden istedikleriniz tek tek alabilirsiniz - hepsini uygulamak zorunda da değilsiniz. Lütfen sayfanın başında bir “İçindekiler” menüsü olduğunu unutmayın ve burada bahsetmiş olsam da mantığınızın dışında birşey yapmayın. Bu postu bir oturuşta yazmadım; siz de bir oturuşta okumak zorunda değilsiniz. Bu yazı, tüm FBX uygulamalarını incelemek için değil, dikkatimi çeken veya FBX’a ek beceriler tanımlayabildiğim konuları paylaşmak içindir.

Yazdıklarım, kaleme aldığım 2023 yılı Şubat ayı itibatıyla günceldir. Sizin okuduğunuz ilerleyen bir zamanda güncelliğini kaybetmiş olabilir. Arada detay ve kaçırdığım komut / işlemler olabilir - baz şeyleri biraz kendiniz keşfederseniz daha çok keyif alabilirsiniz. Lütfen Linux’ta yapacağınız her işlemin ne olduğunu tam anlamadan uygulamayın. Her “özgür” üründe olduğu gibi, burada paylaştıklarımın herhangi bir garantisi veya teminatı yoktur, kendi araştırmalarınızı da ayrıca mutlaka yapın.


Yazıyı 5 ana başlık altında derliyorum. Sırasıyla;

  1. Freedombox Ayar ve İpuçları:
    Plinth (FBX kumanda paneli) üzerinden erişilebilecek ayar ve kurulumların yapılması, uygulamaların kullanımına ilişkin varsa paylaşabildiğim ipuçları.

  2. Freedombox Kurulu Sunucu’da Özelleştirilmeler:
    Debian paketleri ile FBX altında yüklü gelen uygulamalardan seçtiklerime yönelik ipuçları ve özelleştirmeler.

  3. Debian Deposu Dışından Yüklediğim Uygulamalar:
    Freedombox’ı kullanırken, bir yandan Debian paket arşivinde bulunmayan, haricen sunucunuza indirip kurabileceğiniz uygulamalar.

  4. Henüz Çözüm Bulamadığım, Üzerinde Çalıştığım Konular

  5. Freedombox’ta Karşılaşabileceğiniz Sorunlara Pratik Çözümler


Freedombox Ayar ve İpuçları

Freedombox’ınızı kurduktan sonra herhangi bir ayar yapmadan aşağıdaki işlemleri yapmanız hayatınızı kolaylaştıracaktır. Bir kısmı önceki yazımdan tekrar gibi görünse de, arada 3 (hatta 4) aylık bir kullanım ve deneyimden doğan farklar var - bu yazı bir öncekinden günceldir.


  • Internet servis sağlayıcınız üzerinden statik IP alın. DDNS ile e-mail çalışmayacak, sesli / görüntülü görüşmeler gibi başka hizmetlerde kurulumda fazladan uğraşacak ve harici problemlerle de karşılaşabileceksiniz. İnanın hepsi bir yana evde kendi mailınızı barındırmak çok keyifli, buna değecek.

DDNS kurulumu denedim ve çalıştırdım. Sonradan, statik IP ve kendi alan adımla devam etmenin sunduğu faydalar ağır bastı. Şimdilik bu yazımda DDNS konusuna girmeyeceğim.

  • Bir alan adı edinin. Statik IP’nizi A record olarak alan adınıza yönlendirin.

  • FBX’ınızın bağlı olduğu router / modemde 80 ve 443 portlarını sunucunuzun aynı portlarına yönlendirin. Aksi takdirde, web sayfalarınız, Pleroma vb. uygulamalarınıza erişim olmayacak, LetsEncrypt sertifikalarınız yüklenemeyecek.1

  • FBX’a yerel ağ dışından bağlanmak için ssh kullanmayın. Eğer port 22 yönlendirmesi yapmadıysanız herhangi bir sorun yok ancak, yaptıysanız kapatın ve FBX’e proxy veya VPN ile bağlanın. Ben bir dönem açık tuttum, 2 defa brute-force saldırıya uğradım : ) Hatta sizi bozmuyorsa, routerınıza ping bile yapılmasın. Yeni başlayanlara burada yazdıklarım bir anlam ifade etmiyorsa, daha iyi - henüz birşey bozmadınız, okumaya devam edin!

  • Imkanınız varsa openwrt, tomato vb. özgür arayüz / firmware sağlayan router / modem edinin. Bunu söylememin sebebi, FBX üzerinden çalıştıracağınız hizmetler için ortalama 15-20 farklı port yönlendireceksiniz (daha da fazla olabilir). TP-Link bir modemim var, modem arayüzünde sadece 15 port yönlendirebildiğimi, daha fazlasını kullanmama modemin izin vermediğini çok sonradan öğrendim. Ayrıca, modem arayüzünüzün özgür yazılım olmasının faydaları da her zaman baki.

FBX Yapılandırması

Şayet FBX’ı yükleyip, web tarayıcınızdan Plinth’e (Kumanda Paneli) kadar geldiyseniz, “çark” ikonlu “SYSTEM” menüsü / ekranından aşağıdaki işlemleri sırasıyla yapın.

Plinth ana menu cubuğu - sağ üst köşede kullanıcı adınızı görüyor olmalısınız

Plinth Sistem menüsü

Kendi kurulumum İngilizce olduğu için, menü ve ayarları bendeki İngilizce adlarıyla belirteceğim. FBX’in Türkçe arayüzü var; kendim birşeyleri tercüme etmiyorum; sonradan sizde farklı bir ekran çıkarsa aklınızı karıştırmamış olurum.

Networks

Raspberry Pi kullanıyorsanız, tüm bağlantı arayüzlerinizin güvenlik duvarında INTERNAL (dahili) olarak tanımlı olmasını sağlayın. Ne hikmetse, herhangi bir bağlantı arayüzünüz güvenlik duvarınızda EXTERNAL (harici) ağın parçası olarak görünürsa, FBX internete bağlanamıyor. Araştırdıklarımdan, bu durumun sadece Pi’da oluştuğunu öğrendim.

Pi’da Networks ekranında tüm ağlar INTERNAL (dahili) görünecek şekilde ayarlanmış olmalı. Sizdeki bağlantı sayısı (ve yapılandırması farklı olabilir) ancak Pi kullanıyorsanız hepsinin INTERNAL olmasına dikkat edin.

Ayarlarınızı yaptıktan sonra herşeyin yolunda olduğundan emin olmak için menü üzerinden sunucunuzu yeniden başlatın.


DÜZENLEME: Kendi kurulumumda Pi bir routera bağlı çalışıyor. Bu, birçok avantajının yanında ilave bir güvenlik duvarı sağlıyor ve ağ yapılandırmamı INTERNAL / EXTERNAL olarak ayırmamı gerektirmiyor. Eger siz de FBX’ınızı kablosuz ağdan tümüyle kopartıp, sadece network kablosu ile routerınıza bağlarsanız, yukarıda bahsettiğim ‘internete bağlanamama’ sorununu da giderebilirsiniz. Bunun için nano /etc/network/interfaces.d/wlan0 komutuyla wlan ayarlarınızı yapılandırdığınız dosyada tüm satırların başın # ekleyin, kaydedip çıkın. FBX, sadece ethernet bağlantısına sahip olacağı için INTERNAL veya EXTERNAL bir ayrım yapmaya gerek kalmayacak.


DÜZENLEME 2: Bookworm güncellemesi sonrası, FBX görüntümü web sitelerinden indirdim - birçok uyumsuzluğun ortadan kaltığını gördüm. Ancak, INTERNAL / EXTERNAL ayrımı hala bir sorun olduğu için, aşağıdaki yönteme başvurdum.

  1. FBX External Network’ü ortadan kaldırdım. Bunu yapmak için INTERNAL network’e masquerade uyguladım.
firewall-cmd --zone=internal --add-masquerade
firewall-cmd --zone=internal --add-masquerade --permanent
  1. Yukarıdaki işlemi yaotıktan sonra, FBX Network’s ayarlarında, tüm bağlantılarımı INTERNAL tanımladım.

Bu yöntemle ağ güvenliğimi routerım sağladığı için, rahatlıkla VPN ile FBX’a erişip hem yerel ağa hem de Internet’e bağlanabiliyorum.


BIND, Tarih ve Saat

BIND (Berkeley Internet Name Domain), alan adınızın internette yayınlanması ve yerel ağınızdaki DNS sorgulamalarının yapılmasını sağlıyor. Benim için ilki ihtiyac olmadıysa da, IP kullanmak yerine yerel ağımda örneğin hayalmasal.local gibi bir adresle sunucuma bağlanabilmek kolaylık oldu. Bunu kullanmayı düşünmeseniz de, başka yapılandırma ayarlarını da tetikleyecek olan bu ayarı açık tutmanızı öneririm.

Tarih ve saat malumunuz. Doğru bilgileri girin; güncellemeler, güvenlik duvarı vb. fonksiyonları aksatmamış olursunuz.

DDNS

Statik IP ve alan adı almadıysanız, DDNS kurmanın şimdi zamanı. Ben bu yazımda bu konuya girmiyorum. İleride belki kullanıp vazgeçtiğim yapılandırmayı paylaşabilirim.

Configure

Bu adımda ağda sunucunuzun local DNS adresini ve alan adınızı tanımlayacaksınız. Benim yapılandırmam aşağıdaki gibi:

DOMAIN NAME: hayalmasal.local
WEBSERVER HOME PAGE: hayalmasal.org

Sayfanın alt kısmında “internetten alan adınızla sunucunuzun hangi sayfasına erişmek istiyorsunuz” benzeri bir ifade ve altında beliren bir listeyle karşılaşacaksınz. Bu listeden seçebilecekleriniz, ya alan adınızı yüklediğiniz uygulamalardan birinin sayfasına gitmek, ya Plinth ekranıyla karşılaşmak, ya kullanıcılarınızdan birinin web sitesinin görüntülenmesi ya da sunucunuzda kurmuş olduğunuz ’evrensel’ bir web sitesi (Apache Default) olacak.

Sunucuyu benden başka kullanan olmadığı için hayalmasal. org sitesine (Apache Default) yönlendirdim. Aşağıda, her kullanıcının tek tek kurabileceği web sitelerinin detaylarını ayrıca anlatıyorum.

Name Services

Bu sayfada bir işlem yapmanız beklenmiyor. Göz atmak isterseniz, CONFIGURE ve DDNS ekranlarında tanımladığınız adreslerin doğruluğunu kontrol edebilirsiniz.

Let’s Encrypt

FBX’ın en çok keyif aldığım özelliklerinden biri sertifika yönetimi.

Normalde, internet kullanıcıları web sitenizin güvenilir olup olmadığını, sitenizle yaptıkları veri alışverişinin şifrelenip şifrelenmediğini bilmek ister. “Sertifikalar” en başta bu ihtiyacı karşılamaya yöneliktir. Bu sertifikaların ne olduğunu ve nasıl çalıştıklarını burada anlatmayacağım; ilgilenip araştırmak isterseniz size bırakıyorum…

Sertifikalarınızı kendiniz üretebileceğiniz gibi, akredite kuruluşlardan da temin edebilirsiniz (Let’s Encrypt gibi). certbot isimli bir uygulama ile 3 ayda bir bu işlemi kendiniz yapabileceğiniz gibi, FBX kullandığınızda iş otomatikleşebiliyor. FBX, belirlediğiniz alan adları için bu sertifikaları temin ediyor, 3 ayda bir de sizin birşey yapmanıza ihtiyaç duymadan yeniliyor.

Şayet yazının en başında paylaştığım husuları doğru şekilde yerine getirdiyseniz, buraya kadar da kurulumda herhangi bir problem yaşamadıysanız, FBX ekranında alan adlarınızın aşağıdaki şekilde sertifikalandığını görebilirsiniz.

FBX sunucum üzerinden çalıştırdığım 4 farklı domain/subdomain için alınmış LE sertifikaları

Elbette en başta sizin tek alan adınız olacak. Apache ile ilgili detaylara aşağıda çok yüzeysel olarak gireceğim; aynı sunucuda birden çok web sitesi de barındırabilirsiniz!

Herşeyin yolunda olduğundan emin olmak için ana menüden sunucunuzu burada yeniden başlatmanızı öneririm.

FBX Yedekleri ve Harici Bellekler

Harici Bellek Kurgusu

İlk yazımda FBX’ın neden SD Card üzerinden çalıştırılmasında sorun yaşayabileceğinizi ve BTRFS’in yarattığı aksaklıkları paylaştım. Kendi kurgum, sunucuma haricen 4 ayrı SSD bağlamak oldu. İlk disk işletim sistemi (FBX), disklerden iki tanesi kendime göre tasniflediğim veriler, son (dördüncü) disk ise yedekleme yerim oldu. Kapasite olarak kendi ihtiyacınızı belirleyebilirsiniz; işletim sistemine asgari 10-15GB ayırmanızı öneririm. Ben yedekleme diskimi 2TB, diğer üç diskimi de 1’er TB olarak seçtim - çok uzun süre bana yeteceklerini düşünüyorum.

Raspberri Pi’in 4 USB portu (2 USD 3.0, 2 USB 2.0) olsa da, tek bir harici diskten fazlasını çalıştırmaya gücü (elektrik) yetmiyor. Bu durumda mağdur olmamak için ya disklerinizi güç kaynaklı seçin, ya da güç kaynağı ile beslenen bir usb-çoklayıcı üzerinden bağlantı yapın. Kendi yapılandırmamda, pi’ın ilk USB 3.0 portuna işletim sistemini, ikinci USB 3.0 portuna da adaptörlü usb-çoklayıcım bağladım. Kalan iki USB 2.0 portum ise boş; ihtiyaç olursa klavya/mouse bağlayabiliyorum.

GÜNCELLEME: Pi, USB bağlantılarında çok seçici davranıyor. Harici belleklerinizle ilgili olası problemler yaşarsanız, yazının son kısmında karşılaşabileceğiniz sorunlara ilişkin çözümlere bakabilirsiniz.

Harici Belleklerin FBX’a Tanıtılması

Güncel çoğu Linux işletim sistemi gibi, FBX (Debian) da disklerinizi bağladığınızda hemen tanır. Ancak, benim gibi birden çok disk kullanıyorsanız ve uygulamalarınızı bu diskleri kullanacak şekilde yapılandırıyorsanız, bağlantı (mount) noktalarını sabitlemeniz gerekir.

Bu işlem için bilenler terminal ve komut satırı kullanabilir. Benim gibi kolaya kaçamak isterseniz, Cockpit uygulamasıyla görsel arayüz üzerinden bu işi aşağıdaki şekilde yapabilirsiniz:

  • Plinth üzerinden Cockpit uygulamasını çalıştırın ve kullanıcı adınız / şifrenizle arayüze giriş yapın.
  • Cockpit’i çalıştırdığınızda, ekranın sağ üst köşesinde “Administrative Access” yazdığından emin olun (yoksa root yetkiniz olmaz ve disklerinizi bağlayamazsınız)
  • Sırasıyla, önce “Storage” sekmesine gelin. Sekme ekranında, sağda bağlı tüm disklerinizi göreceksiniz. Bu disklerden sabitlenmemiş olan varsa, size sarı üçgenli bir uyarı gösterilecektir - bakın benim ekranımda öyle bir durum yok : )

Storage sekmesinin sağ sütununda tüm bağlı disklerimi gördüğüm web arayüzü

  • Sabitlemek istediğiniz diski seçtiğinizde, aşağıdaki gibi bir ekranlar karşılacaksınız. “Delete / Format / Mount seçeneklerinden, “Mount” seçip, diskinize veri yolu tanımlayabilirsiniz.

Ben tüm disklerimi /media/root/ dizini altına bağladım. Bu yapılandırmada, yedekleme yaptığım disk /media/root/backup olarak bağlı.

Linux’ta diskler dahil herşey tek bir dizin altına toplanıyor. Bu anlamda, Windows’dan farklıdır. Yeni başlayan ve araştırmak isteyenlere ilginç olduğunu düşündüğüm bir konu.

Cockpit arayüzü ile disklerimizin Linux dizinine bağlanması

Belki yazımın bu kısmını en başa koymak daha doğru olurdu; ancak bir yandan emin de olamadım. İlk kurulum tamamlanmadan disk yapılandırmasını anlatmak işleri karıştırabilir diye düşündüm. Şimdi bunu okuduğunuzda, belki başa dönüp birşeyleri gözden geçirmek de isteyebilirsiniz.

Harici disklerinizi de düzene soktuysanız, buyrun devam edelim…


İşletim sistemi haricindeki disklerinizi kurduktan sonra, terminal üzerinden yetki ve izinlerini ls -l ile kontrol edin. Erişim root ile kısıtlıysa aşağıdaki komutla diskinizi (işletim sistemi yüklü olmayan diskinizi) kendiniz için yetkilendirebilirsiniz.

sudo chown -R kullanici_adi:users /diskinizin_bagli_oldugu_dizin


FBX Yedekleme Uygulamaları

FBX System menüsünden, aşağıdaki uygulamaları yedekleme için kullanabilirsiniz. Yazımın ilerleyen kısımlarında, FBX ile yüklü gelen ve güçlü olduğunu düşündüğüm bir yedekleme uygulamasından (borg) bahsedeceğim.

  • Storage: FBX’ınıza bağlı disk alanlarını görebilirsiniz (bir nevi du). Önerim, en az iki harici bellek bağlamış olmanız ve SD card kullanmamanız (harici belleklerden birisi işletim sistemi, diğeri yedekleriniz için). Eğer RAID kullanmak isterseniz (ben denemedim) Cockpit uygulamasıyla bunun da çok kolay olabileceğini düşünüyorum.
  • Storage Snapshots: FBX, BTRFS kullanacak mantıkla kurgulandığından, sürekli sisteminizin “snapshot"unu alabiliyor. Ben EXT4 biçimlendirme kullandığımdan, bende bu sekme hata veririyor (bir sorun yaratmıyor - sanırım ileride geliştiriciler bu yapılandırma için hata vermeyecek şekilde uygalamayı tekrar düzenleyecekler).
  • Backups: FBX, kendi ekosistemi içinde kurduğunuz uygulamaların veri (data) yedeklemesini kendisi yapar.2 FBX’in yedekleme yapacağı bağlantı (mount) noktasını belirleyebilirsiniz. Yukarıda paylaştığım yapılandırmayı aynen takip ettiyseniz, benim bağlantı noktam /media/root/backup/FreedomBoxBackups veriyolunda.

Kontroller ve Minör Ayarlar

Buraya kadar sorun yaşamadıysanız, yapılandırmada son düzlüğe çıkmak üzeresiniz. “Çarklı” SYSTEM menüsü altında aşağıdakileri yükleyebilir / gözden geçirebilirsiniz:

  • Performance: FBX’in kontrol paneli görevini Cockpit isimli bir uygulama üstenir. Kendi zamanınızda buna uygulamaya girip bakacağınıza eminim. Cockpit üzerinden, donanımınız ve veri kullanımızın bir güncesini tutmak isterseniz, “Performance” uygulamasını yükleyebilirsiniz.
  • Privacy: Bu sekmeden, FBX kullanımınızı geliştiricilere iletebilirsiniz. Ben bu ayarı geliştiricilere faydam olması için açık tutuyorum. Ancak, mahremiyet konusunda benden hassassanız kapalı tutabilirsiniz.
  • Secure Shell: ssh kullanmak isterseniz, bu uygulamayı yükleyip aktif hale getirebilirisiniz.
  • Service Discovery: Yerel ağınızdaki diğer cihazların FBX’ınızı bulmasını sağlar. Ben açık tutuyorum.
  • Users and Groups: FBX kullanıcılarınızı ve yetkilerini bu sekmeden tanımlayabilirsiniz. Kimlere ‘admin’ yetkisi verdiğinize dikkat edin, işletim sistemi bu kişileri sudoer olarak görecek.
  • Firewall: FBX’ınızın hangi portlarının açık olduğunu gösterir. Bu ekrandan bir ayar yapamazsınız. FBX portlarınızı açıp kapatmak isterseniz, Cockpit uygulamasını kullanabilirsiniz.
  • Diagnostics: Tam tercümesi teşhis/tanı olan bu sekmeye geldiğinizde, kurduğunuz tüm uygulamaların, gerçekleştirdiğiniz yapılandırmanın ve yönlendirdiğiniz portların testlerini yaptırabilirsiniz. Herşey bittiğinde, uygulama kurmadan önce bir defa girip çalıştırmanızı, FBX nezdinde herşeyin doğru yapılandırılıp yapılandırılmadığından emin olmanızı öneririm.
  • Pagekite: Benim ihtiyacım olmayan bir servis olduğundan, detay veremiyorum. Şayet sunucunuz bir sebeple internete erişemiyorsa (güvenlik duvarı, NAT vb. sebeplerden), Pagekite kullanarak bu engelleri aşabilirsiniz.

Buraya kadar sorun yoksa, kendinizi tebrik edebilirsiniz. FBX kurulum ve yapılandırmanızı başarıyla tamamladınız! Bundan sonrası uygulama yüklemek ve kullanım ihtiyaçlarınıza göre özelleştirmeler olacak. Şimdiden kolay gelsin!

Önerilen Diğer Yapılandırmalar

Devam etmeden önce, aşağıda paylaştığım yapılandırmaları dikkate almanızı tavsiye ederim. Bunlar zaruri olmayıp, sizleri yeni sunucunuzu kullanırken koruyacak veya ilerleyen aşamalarda yardımcı olacaktır.

“Root” Kullanıcısının Erişiminin Kısıtlanması

Şayet Debian üzerinden FBX kurduysanız, root kullanıcınız tanımlıdır. Bu kullanıcı sunucunuzda herşeyi yapmaya muktedirdir. Benim gibi düşünüyosanız, bu kadar gücün bir miktar kontrol altına alınmasında fayda görebilirsiniz.

Root’un yetkilerini kısıtılamanın birçok kapsamı ve yöntemi var. Çok detaya girmeden, kendi yapılandırmamı paylaşmak isterim. Burada paylaşacağım, root kullanıcısının shell yetkisini engellemek olacak.

Ancak, root kullanıcısının yetkilerini kısıtlarken bizim de ara ara ihtyiaç olacak root yetkimizi tümüyle kaldırmamamız lazım. Malum, uygulama yüklerken veya sunucumuzda kontrollü müdahelelerde bulunurken bu güce ihtiyacımız olabilir. Bunun için önce bir deneme yapmanızı öneririm. Sunucunuza kendi kullanıcı hesabınızla bağlanıp, bir sudo komutu deneyin. Örneğin;

  1. ssh sunucu_ipiniz ile sunucunuza bağlanın.
  2. sudo mkdir ~/deneme ile ev dizinizde bir klasör oluşturun.
  3. ls -al ~ ile ev dizinizdeki içeriği listelediğinizde, “deneme” klasörünün sahiplerinin “root” olup olmadığını kontrol edebilirsiniz. Şayet böyleyse, devam edebilirsiniz.

Buradan sonrası, root kullanıcısının shell erişimini engelleyecektir.

  1. Terminal ile sunucunuza bağlanın
  2. sudo nano /etc/passwd ile kullanıcılarınızın tanımlı olduğu dosyayı açın
  3. root:x:0:0:root:/root:/bin/bash yazan satırın sonunu root:x:0:0:root:/root:/sbin/nologin olarak değiştirin.
  4. Ctrl + x > y > enter ile kaydedip çıkın.

Bundan sonra shell üzerinden root kullanıcı erişimini kapatmış olacaksınız. Ancak dikkat edin, root kullanıcısını kaldırmadık; sadece erişimini shell üzerinden kısıtladık. ftp, email gibi istemcileriniz hala bu hesabı gerekli şekilde kullanabilir.

ÖNEMLİ: Aşağıda paylaştığım yöntemler içinde sudo su komutuyla geçiş yapacağınız adımlar olabilir. Bu adımlar bundan böyle çalışmayacaktır. Ya passwd dosyanızı eski haline getirmeniz ya da tüm işlemleri önerdiğim şekilde ve sudo ile yapmanız gerekecektir.

Freedbombox Uygulama İpuçları

Artık FBX’ınız çalışır ve internetten de erişilebilir olduğuna göre, kendinize uygulama kurup sevigili sunucu arkadaşımızı işe koyabilirsiniz.

FBX bir avuç uygulamayla geliyor. Alternatiflerine göre seçenekler çok renkli görünmese de, aslında kurulu olduğu SCB’nin (benim durumumda Raspberri Pi4) gücü ve kapasitesi gözönüne alındığında, beklediğim neredeyse herşeyi karşılıyor.

Her uygulamanın incelemesine ve ayarlarına girmeyeceğim; siz de ister istemez ‘kurcalarken’ çoğunu keşfedeceksiniz. Tek önerim, kurduğunuz uygulamanın açıklama sayfasına bakmanız ve FBX’in size belirteceği portları routerınızdan FBX’ınıza doğru yönlendirmeniz olur.

Burada paylaştıklarım, FBX’ın kurulu yapılandırmalarına küçük müdahalelerle sunucumu kendime göre nasıl devşirdiğim olacak… Çok küçük şeyler olsalar da, yaptıktan sonra sistemimi daha keyifli kullanır oldum. Siz de bakın, beğenirseniz ne ala; ilaveleriniz olursa, lütfen paylaşın! Ben de sizinle yeni şeyler öğrenmiş olurum.

Bepasty

  • Başlığın düzenlenmesi: Uygulama web arayüzüne girdiğinizde, çok sevimli olmayan kullanıcı panelinin üzerinde kocaman “freedombox.local” yazması hoşuma gitmiyordu. Değiştirmek için çözüm çok basit:

sunucunuzda /etc/bepasty-freedombox.conf dosyasına gidip, SITENAME= "<basliginizi_buraya_yazabilirsiniz>" şeklinde düzenleme yapın.

Kolaylık olması için tek tek komutları giriyorum:

ssh sunucu_ipniz
sudo nano /etc/bepasty-freedombox.conf
# dosya içerisinde aşağıdaki değişkenin tırnak içindeki ibaresini değiştirin.
SITENAME = "benim_güzel_sitem"

nano’dan Ctrl+X -> y ile çıkış yapın.

Son olarak sudo systemctl restart uwsgi komutunu uygulayın.

Bepasty’ye yeniden giriş yaptığınızda, değişikliğin işlendiğini göreceksiniz.

Shaarli

İlk gördüğümde ‘bu ne anlamsız ve sevimsiz bir uygulama’ diye düşündüğümü hatırlıyorum. Ancak şu an neredeyse elim ayağım oldu. Küçük bir düzenlemeden bahsetmek ve ardından uygulamayı nasıl kullandığımı paylaşmak isterim.

  • Tema Yükleme
    Shaarli’nin yüklü gelen ‘yeşil’ temasını beğenebilirsiniz. Ben çok hoşlandığımı söyleyemeyeceğim. O kadar ki, temasını değiştirdiğimde daha çok kullanmaya başladım. Normalde bir uygulamanın arayüzü gerçekten çok kötü değilse, olduğu haliyle alışmaya çalışırım. Ancak, grafik arayüzün bu kadar etkili olduğunun sanırım kendim de farkında değilmişim.
Yüklü gelen Shaarli Teması Shaarli Material Teması

Material temasına geçtikten sonra uygulama benim için sanki bambaşka bir hal aldı. Siz de tema yüklemek isterseniz, indirdiğiniz temaları /usr/share/shaarli/tpl dizini altına kopyalayıp, uygulamanın “ayarlar” ekranından temanızı değiştirebilirsiniz.

Örnek verdiğim “Material” temasını buradan indirip, indirdiğiniz material klasörünü olduğu gibi belirttiğim adrese kopyalayabilirsiniz!


Yerel bilgisayarınıza indirdiğiniz dosyaları Linux’ta SCP komutuyla uzak sunucunuza kopyalabilirsiniz (nasıl kullanıldığını araştırın). Ancak, dizin girerken uzak bilgisayarın klasör yolları “tab” ile kendiliğinden gelmediğinden, tek tek dizin yazmaya üşendim… Bunun için dosya tarayıcınıza (ben nautilus kullanıyorum) bir SFTP bağlantısı tanımlamak pratik oluyor. Sunucunuzun /home/ klasörü altında kullanıcınıza ait bir klasör hazırda var. Dosyalarınızı buraya kopyalayıp sonradan terminal bağlantısıyla istediğiniz yere taşımak daha kolay olabilir.


  • Shaarli Kullanımım: Shaarli’de sonradan ziyaret etmek istediğiniz web sayfalarının linklerini saklayabileceğiniz gibi, notlarınızı da tutabilirsiniz. Shaarli’de kendi düzenimi kurmak için tek yapmam gereken, bir “tag” (etiket) düzeni yaratmak oldu.

Şöyle ki, notlarımın hepsinin başına “notes_” ekledim (notes_alisveris, notes_okunacaklar, notes_yapılacaklar vs.), web sayfalarımı ise konularına göre tagledim (server_xmpp, server_pleroma vs.) şeklinde. Bu iki yöntem genel tasnif için çok başarılı çalışıyor.

Sonradan, bir başka kullanım alanı daha yarattım: shaarli linkleriyle kendime bir ’landing page’ yarattım. Artık tarayıcılarım arası senkonizasyon gerektirecek bir bookmark düzenine ihtiyacım yok. Buyrun aşağıda tarayıcı ana sayfamın bir örneği… Belki siz de bunun gibi bir düzenleme yaparsınız.

Tarayıcımı başlattığımda bu sayfayla karşılanıyorum

E-Posta

Alan adınız ve statik IP’niz yoksa e-posta kurmakla uğraşmayın.

FBX, çalışan bir e-posta hizmetiyle geliyor. E-posta hizmetinin yarattığı angaryayı kısmen bildiğimden, bu hizmetin çalışabildiğine ben bile başta inanmadım. Ancak, FBX size ne yazık ki tüm güvenlik tedbirleri alınmış bir yapılandırmayla gelmiyor. Aşağıda, ayrı bir başlık altında “E-Posta Güvenliği"nden bahsettim. Bu tedbirleri tamamlamadan yola çıkarsanız, çok kısa sürede spam ve phishing yapanlar sizin adınıza posta iletmeye başlayacak, sizin de e-posta itibarınız çok hızlı düşecektir.

E-posta uygulamalarını yüklemek ve port forwardları oldukça düz mantıkla yapılabiliyor. Diğer taraftan hizmetin çalışabilmesi için, sizin internet sağlayıcınızla da sulh yapmanız gerekiyor. Ben, TTelekom abonesiyim. Kendi yaptıklarımı buaradan paylaşıyorum, siz de kendi sağlayıcınızla bu çerçevede süreç yürütebilirsiniz.

  1. Müşteri hizmetlerini arayıp port 25 in açılmasını talep edin. Bu port beynelmilel e-posta portudur. İnsanlar kendi sunucusunu kurup sağı sollu spamlemesin düşüncesinden ötürü (sanırım) TTelekom siz özellikle talep etmezseniz portunuzu kapalı tutar.

  2. PTR ve reverse-DNS’iniz ayarlı olmadığından anında spam listelerine düşersiniz. Alan adınız bir defa kara listelere düştü mü, her bir spam filtreleme sunucusuna (karşınızda insan bulabilirseniz) meramınızı anlatmakla günler geçebilir. Ben neredeyse bu hatayı yapıp anafora kapılıyordum. Herhangi bir e-posta iletmeden önce, TTelekom’un reverse-dns@turktelekom.com.tr adresine kayıtlı mail adresimden bir talep iletmem gerekli oldu. İlettiğim talep metnini aynen paylaşıyorum:

Sayın Yetkili,

Evimde kurmuş olduğum e-posta sunucusu, ne yazık ki DNS kaydı olmadığı için spam filtrelerini aşamamaktadır. Sizden ricam, aşağıda paylaştığım IP adresime Reverse-DNS kaydı olarak belirttiğim alan adını girebilirseniz, bu problemin çözülmesini sağlayacaksınız.

Statik IP Adresim: ip_adresiniz
Mail Alan Adı: alan_adınız

İlginize şimdiden teşekkür eder, iyi çalışmalar dilerim.

TTelekom tabii ki bana bir yanıt vermedi. İşlemin gerçekleşip gerçekleşmediğini nslookup -q=PTR ip_adresiniz 8.8.8.8 komutuyla öğrendim. İşlem başarılı olduktan sonra Mail Tester ile spam filtrelerinde ne kadar başarılı olup olmadığınızı, varsa eksikleriniz nasıl giderebileceğinizi öğrenebilirsiniz.

Eğer bir webmail client isterseniz, FBX ile gelen “Roundcube” uygulamasını kurabilirsiniz.

E-Posta Güvenliği

Sağlıklı bir e-posta hesabının “spam” olarak değerlendirilmemesi için birtakım doğrulama özellikleri barındırması gerekir. Bunların başlıcaları SPF, DMARC, rPTS ve DKIM. Aşağıda alt başlıklar halinde listelediğim ayarlar, biraz da kendi (el yordamıyla) bulduğum yapılandırmalardır. Elimden geleni yaptıysam da, sadece bana güvenmeyin kendi araştırmanızı mutlaka yapın.

Sırasıyla;

  1. TTelekom ile iletişim kurup rPTR ayarlarınızı tamamlayın.
  2. DMARC ayarlarınız yapılandırılmış gelse de, DMARC için DNS ayarlarınızı FBX’ın size önerdiği şekilde değil, aşağıdaki şekilde öneririm:
v=DMARC1; p=reject; rua=mailto:eposta@adresiniz; ruf=mailto:eposta@adresiniz; fo=1; adkim=s; aspf=s;
  1. Benzer şekilde, SPF yapılandırmanız tamamlanmış gelse de, SPF için DNS ayarlarınızı aşağıdaki şekilde öneririm:
v=spf1 mx a ip4:statik_IP_adresiniz -all

Mail göndermediğiniz başka alan adları varsa, onlar için de v=spf1 -all değerini girin.

  1. Başka bir e-posta sunucusunun sizin namınıza gönderi iletmesine / yönlendirmesine izin vermeyin, e-posta hesabınızı uluorta görünebileceği mecralardan uzak tutun.
  2. FBX TLS yapılandırmasıyla geliyor. Birşey yapmanıza gerek yok, bozmayın yeterli.
  3. DKIM imzanızı aşağıda tariflediğim şekilde tamamlayın.
DKIM Kurulumu

FBX ile gelen e-posta hesabınızı kurup, mail hesabınıza bir test yaptıysanız, DKIM ayarlarınızın başarısız olduğunu göreceksiniz.

FBX, 2021 Google Summer of Code sürecinde DKIM ayarları için bir takım süreçleri başlatmış ancak bu yazıyı yazdığım dönemde henüz doğru şekilde entegre edememişti. Uzunca süren araştırma, forum ve yazışmalardan sonra, kendi hesabımda aşağıdaki adımlarla DKIM imzasını gerçekleştirebildim.

  1. ssh ile sunucunuza bağlanın
  2. sudo su komutuyla root kullanıcısına geçiş yapın.
    root kullanıcısı olmak, sunucunuzda size tüm yetkileri vereceği için, işlemlerinizi bundan sonra dikkatli yapın.
  3. nano /etc/rspamd/local.d/dkim_signing.conf komutuyla rspamd dkim modul dosyanızı oluşturup, aşağıdaki içeriği olduğu gibi kopyalayıp yapıştırın. Yapıştırırken, “alanadiniz” ile belirttiğim yerlere kendi alan adınızı işleyin. Aşağıdaki dosyada daha rahat okunabilmesi için “.com” uzantılarını kaldırmadım. Alan adınızın uzantısı “.com” değilse, ilgili kısımlarda uzantıyı da değiştirmeyi unutmayın.
# local.d/dkim_signing.conf

# If false, messages with empty envelope from are not signed
allow_envfrom_empty = true;

# If true, envelope/header domain mismatch is ignored
allow_hdrfrom_mismatch = false;

# If true, multiple from headers are allowed (but only first is used)
allow_hdrfrom_multiple = false;

# If true, username does not need to contain matching domain
allow_username_mismatch = true;

# Default path to key, can include '$domain' and '$selector' variables
path = "/var/lib/rspamd/dkim/$domain.$selector.key";

# Default selector to use
selector = "dkim";

# If false, messages from authenticated users are not selected for signing
sign_authenticated = true;

# If false, messages from local networks are not selected for signing
sign_local = true;

# Map file of IP addresses/subnets to consider for signing
# sign_networks = "/some/file"; # or url

# Symbol to add when message is signed
symbol = "DKIM_SIGNED";

# Whether to fallback to global config
try_fallback = true;

# Domain to use for DKIM signing: can be "header" (MIME From), "envelope" (SMTP From) or "auth" (SMTP username)
use_domain = "header";

# Domain to use for DKIM signing when sender is in sign_networks ("header"/"envelope"/"auth")
#use_domain_sign_networks = "header";

# Domain to use for DKIM signing when sender is a local IP ("header"/"envelope"/"auth")
#use_domain_sign_local = "header";

# Whether to normalise domains to eSLD
use_esld = false;

# Whether to get keys from Redis
use_redis = false;

# Hash for DKIM keys in Redis
key_prefix = "DKIM_KEYS";

# map of domains -> names of selectors (since rspamd 1.5.3)
selector_map = "/etc/rspamd/dkim_selectors.map";

# map of domains -> paths to keys (since rspamd 1.5.3)
#path_map = "/etc/rspamd/dkim_paths.map";

# If `true` get pubkey from DNS record and check if it matches private key
check_pubkey = true;
# Set to `false` if you want to skip signing if public and private keys mismatch
allow_pubkey_mismatch = false;


# Domain specific settings
alanadiniz.com {

  # Domain name is used as key
  alanadiniz.com {

    # Private key path
    path = "/var/lib/rspamd/dkim/alanadiniz.com.dkim.key";

    # Selector
    selector = "ds";

  }

}

Ctrl+X > y > enter ile kaydedip çıkabilirsiniz.

  1. nano /etc/rspamd/local.d/dkim_selectors.map komutuyla rspamd dkim modulü için değişkenlerini tanımlayın. Aşağıdaki içeriği olduğu gibi kopyalayıp yapıştırabilirsiniz. Yapıştırırken, “alanadiniz” ile belirttiğim yerlere kendi alan adınızı işleyin. Aşağıdaki dosyada daha rahat okunabilmesi için “.com” uzantılarını kaldırmadım. Alan adınızın uzantısı “.com” değilse, ilgili kısımlarda uzantıyı da değiştirmeyi unutmayın.
{alanadiniz.com} dkim

Ctrl+X > y > enter ile kaydedip çıkabilirsiniz.

  1. Aşağıdaki komutu, yine “alanadiniz” kısmını düzenleyerek çalıştırın. Bu (ve bir sonraki komut), rspamd hizmetinin SSL anahtarlarınıza erişimini sağlayacaktır.

chown _rspamd:_rspamd /var/lib/rspamd/dkim/{alanadiniz}.dkim.key

  1. chmod 640 /var/lib/rspamd/dkim/{alanadiniz}.dkim.key

  2. exit ile root kullanıcısından çıkın.

  3. sudo systemctl restart rspamd ile hizmeti yeniden başlatın.

Bundan sonrasında bir deneme mailı ile sunucunuzun durumuna bakabilirsiniz. FBX hazır yapılandırması ve burada paylaştığım ayarlarla, Mail Tester bana 10/10 puan veriyor.

ARC Yapılandırması

ARC, aynı DKIM, DMARC, SPF gibi, e-postanızın otantik olduğunu (ve ileti süresince üzerinde oynanmadığını) kanıtlayan imzalardan birisi. Eğer DKIM yapılandırmanızın çalıştığını gördüyseniz, aşağıdaki komutla ARC yapılandırmanızı da kolayca tamamlayabilirsiniz.

sudo cp /etc/rspamd/local.d/dkim_signing.conf /etc/rspamd/local.d/arc.conf 

E-Posta İleti Büyüklüğü Yapılandırması

Kurulumda e-posta iletilerinizin varsayılan büyüklüğü 10MB tanımlıdır. Aşağıdaki komutla, bu değeri 50MB olarak değiştirebilirsiniz.

sudo postconf -e message_size_limit=52428800 
sudo systemctl restart postfix

Yukarıda belirtilen değeri 0 olarak girerseniz, ileti büyüklüğünü sınırsız olarak ayarlayabilirsiniz.

Diğer postfix yapılandırmalarınız için sudo nano /etc/postfix/main.cf dosyasına göz atabilirsiniz.

E-Posta Filtreleri

Gelen e-postaların konu / gönderici / anahtar kelimler vb. şekillerde tasniflenmesi kullanımda birçok kolaylık getirmektedir. Bu işleri yapması için e-posta uygulamanızı (istemcinizi) yapılandırabileceğiniz gibi, FBX ile gelen Roundcube uygulamasını yapılandırmanız halinde diğer tüm istemcileriniz de takip edecektir.

Bunun için aşağıdaki basit adımları takip edebilirsiniz.

  1. Aşağıdaki komutla deponuzu güncelleyip gerekli uygulamaları (eklentileri) yükleyin
sudo apt update && sudo apt install roundcube-plugins roundcube-plugins-extra
  1. sudo nano /etc/roundcube/config.inc.php ile aşağıda belirtilen aralığa managesieve ekleyin
$config['plugins'] = array(	 	 
  'managesieve',	 	 
);
  1. Bir önceki adımda düzenlediğiniz dosyayı Roundcube’un ilgili eklenti klasörüne kopyalayın
sudo cp /usr/share/roundcube/plugins/managesieve/config.inc.php.dist /etc/roundcube/plugins/managesieve/config.inc.php

Simdi FBX üzerinden Roundcube uygulamasını çalıştırdığınızda, “ayarlar” sekmesi altında “filtreler” sekmesini göreceksiniz. Burada managesieve filtre grubu altında arzu ettiğiniz kurallar silsilesini oluşturabilirsiniz.


Roundcube karşılama ekranında alan adınızı (veya başka bir karşılama yazısını) görmek isterseniz, config.inc.php dosyasında $config['product_name'] = 'Roundcube Webmail'; değerini istediğiniz şekilde düzenleyebilirsiniz.


Pratik Postfix Komutları

İşletim sisteminizde kurulu olan Rapid Spam Deamon (rspamd) ile e-posta trafiğinizi görüntüleyebilseniz de, bazen spammerları yakından incelemek, bazen takılan maillarınızı ‘kurtarmak’ gibi işler için aşağıdaki basit komutlar çok yardımcı olabilir.

  • Kütük (Log) Taraması Yapmak
    E-posta sunucunuzdan geçenleri görmek için aşağıdaki komutu kullanabilirsiniz
    journalctl -u postfix@-.service
    Bu komutu grep le beraber kullandığınızda, belirlediğiniz mesajlara yönelik filtreleme ve detaylı inceleme yapmak mümkün.

  • E-Posta Gönderi Kuyruğu Görüntülemek
    mailq komutuyla gönderi sırasındaki iletilerinizi görüntüleyebilirsiniz.

  • Sunucu Kuyruğunu Temizlemek
    postsuper -d ALL komutuyla ileti kuyruğunda bekleyen tüm epostalarınızı silebilirsiniz. Dikkat edin, sildiğiniz postalar gönderilmeden kaldırılacaktır. Komutu sudo ile beraber kullanmanız gerekir.

  • İleti Başlıkları İncelemek
    Kütük veya iletiği kuyrğundan MESSAGE_ID kimlikleriyle belirlediğiniz e-postaların başlıklarını aşağıdaki komutla görüntüleyebilirsiniz:
    postcat -qv MESSAGE_ID
    Komutu, sudo ile kullanmanız gerekecektir.


Internet servis sağlayıcınızdan aldığınız IP’ye ait blok, herhangi bir sebeple spam listelerine takılırsa, siz de kurunun yanında yaş olarak spam etiketi yiyebilirsiniz. Şu anda gmail sunucuları benim mailımı kabul etmiyor - durumun geçici olduğunu umuyorum. İşin içinde art niyet olduğunu düşünüyorum. Yine de, uzun lafın kısası, tüm yumurtaları hemen tek sepete koymayın; buluttaki e-posta hesabınızı FBX hesabınızdan emin olana kadar devre dışı bırakmayın.


Rehberlerim ve Ajandam

Radicale, çok basit ama bir o kadar da işe yarayan bir telefon rehberi / ajanda sunucusu. Uygulamanın kullanım detaylarına girmeyeceğim; kendi kendini zaten anlatıyor. Ancak, Android telefonunuzla senkronizasyon detaylarını sizlere aşağıda anlatmaya çalışacağım.

İşe başlamadan Radicale üzerinden deneme amaçlı bir/birkaç rehber, ajanda olutşrurun. Arzu ederseniz, eski rehber ve ajandalarınızı Radicale’ye “import” seçeneğiyle aktarabilirsiniz.

Radicale, bir CalDAV sunucusudur. Telefonunuza, tümüyle özgür (hata FSF tarafından geliştirlen) bir CalDAV istemcisi yüklerseniz, tüm rehber, ajanda ve notlarınızı sunucunuzda barındırp telefonunuzla eşleştirebilirsiniz.

Android kullanıcıları DAVx5’i F-Droid reposundan indirebilirsiniz. iOS için DAV uygulamaları var ancak hakim olmadığım için bir öneride bulunamıyorum (iOS’un kendi istemcisi de olabilir).

DAVx5 yüklediğinizde, “+” tuşuyla yeni hesap oluşturun. Karşınıza gelen hesap detaylarında, aşağıda örneğini paylaştığım ekrandaki “Login with Username and URL” seçeneğini işaretleyin (ikinci sekme). Açılan alanlara, Radicale’nin size verdiği HTTPS bağlantıyı ve sunucunuzda kullandığınız kullanıcı adı ve şifrenizi girin.

Davx5 Kurulım Ekranı Örnek Rehberler

Onayladığınızda, senkronizayson için 15-20 saniye verin. Senokronizasyon sağlandığından “CARDAV” sekmesinde rehberlerinizi, “CALDAV” sekmesinde ajandalarınızı görebilirsiniz. Telefonunuzun hangi rehberlerle senkron olmasını istiyorsanız, ilgili rehberi buradan işaretleyebilirsiniz.

Bilgisayarımda mail, takvim ve rehber istemcisi olarak Evolution kullanıyorum; onda da ayarlar benzer şekilde.

XMPP Sunucusu (ejabberd)

FBX’ın ejabbard ayarları beni çok uğraştırdı. Özellikle (i) dosya paylaşımı ve ardından (ii) sesli/görüntülü görüşme yapılandırmalarını tamamlayıncaya kadar interneti baya bir taradım. Yine eğer statik ip yerine DDNS kullanıyorsanız, işiniz zor, şimdiden uyarayım.

İki sorunu bir defada düzenlemenizi öneririm. Ancak ben bunları, ayrı ayrı zamanlarda yapılandıracağınızı ve test edeceğinizi düşnerek birbirinden bağımsız konular olarak aktarıyorum.

Dosya Paylaşımı

FBX geliştiricilerinin çok insanca bir arayışı var. Geliştirdikleri arayüzün, en kısıtlı imkanlarda bulunan insanlara fayda sağlamasını istiyorlar. Bu yüzden yazılım, asgari donanım gerekliliklerine uyum sağlasın, kendi kendine yetebilsin, cep telefonunuz yoksa dahi (veya akıllı telefon kullanmak istemiyorsanız) teknojinin nimetlerinden faydalanmanıza yardımcı olsun istiyorlar.

Biraz bu sebeple, XMPP’nin BOSH özelliğini ön plana çıkartarak web tarayıcısı üzerinden de istemci çalışsın istemişler. Ancak, bunu yaparken telefon ve diğer istemcilerin dosya paylaşamında yaşadığı sorunları henüz çözmemişler (çözdüklerini sanıyorlar).

Konuya dönersek, kendi XMPP sunucumu kurduğumda hemen denemeye oturdum. Mesajlarım OMEMO şifreleme ile çok güzel gidip geliyordu. Ancak, iş dosya, resim, ses vb. paylaşmaya gelince, bir türlü başarılı olamıyordum.3 Sorunun, BOSH ile alakalı olduğunu çok sonra anlayıp aşağıdaki düzenlemeye gittim:

  1. Cockpit uygulamasından Networking > Firewall > Edit Rules and Zones sekmelerinden 5443 TCP portunu ekleyip (hizmet adını xmpp-upload koyabilisiniz) açın.
  2. Routerınızın 5443 portunu FBX’ınıza yönlendirin.
  3. FBX’ınıza terminal üzerinden bağlanıp sudo mkdir /var/www/upload klasörünü oluşturun.
  4. Oluşturduğunuz klasörün yetkilendirmesini sudo chown -R ejabberd:ejabberd /var/www/upload komutuyla ejabberd kullanıcı ve grubuna atayın.
  5. Yine oluşturduğunuz klasörün mod ayarlarını sudo chmod -R 775 /var/www/upload ile değiştirin.
  6. FBX’ınızın terminaline hala bağlıyken sudo nano /etc/ejabberd/ejabberd.yml dosyasını burada paylaştığım şekilde düzenleyin:

*Dosya içeriğinin hepsini değil, ilgili kısımlarını aktarıyorum

port: 5443  
ip: “::”  
module: ejabberd_http  
tls: true  
protocol_options: ‘TLS_OPTIONS’  
request_handlers:  
/api: mod_http_api  
/bosh: mod_bosh  
## /captcha: ejabberd_captcha  
/upload: mod_http_upload  
/ws: ejabberd_http_ws`  

ve

mod_http_api: {}
mod_http_upload:
put_url: https://@HOST@:5443/upload
docroot: /var/www/upload
custom_headers:
“Access-Control-Allow-Origin”: “https://@HOST@”
“Access-Control-Allow-Methods”: “GET,HEAD,PUT,OPTIONS”
“Access-Control-Allow-Headers”: “Content-Type”
mod_last: {}

Yaptığınız değişiklikleri CTRL+X > Y ile kaydedip çıkabilirsiniz.

  1. FBX terminal bağlantınızdan çıkmadan, ejabberd servisini sudo systemctl restart ejabberd ile yeniden başlatın.

Bakın bakalım dosya aktarımlarınız çalışıyor mu : )

Not: Tedbir olması için DNS sağlayıcım üzerinden “conference” subdomaini için alan adıma işaret eden bir CNAME değeri de yarattım.

conference 10800 IN CNAME alan_adiniz.com

Görüntülü / Sesli Görüşme

XMPP ile görüntülü ve sesli görüşmeler yapabilirsiniz. Sunucunuz bu görüşmeleri STUN / TURN sunucuları aracılığıyla gerçekleştiriyor. Basit anlatımda, iki istemci birbirini aradığında, sunucu aracılığıyla birbirlerini buluyorlar. Sonradan, sunucu aradan tümüyle çıkıyor ve istemciler doğrudan bağlantı halinde oluyor. Diğer deyişle, sesli görüntülü görüşmelerde aslında sunucu sadece istemcileri buluşturmak için görev alıp, sonradan hükmü kalmıyor.

Neyse ki ejabberd bu sunucularla beraber geliyor. Ancak, bunu çalıştırabilmeniz için bir statik IP’ye ihtiyacınız var. FBX, statik IP ihtiyacını ortadan kaldırmak ve DDNS’i işe koyabilmek için Coturn uygulamasını STUN / TURN sunucusu olarak yüklemiş. Ne yaptıysam Coturn uygulamasını çalıştıramadım. DDNS ile Coturn yüklü olduğu zamanlardaki denemelerimde, iki istemcim aynı ağda bulunuyorsa görüşmeler gerçekleşiyor, istemcilerden birisi yerel ağın dışına çıktığında ise, hiçbir bağlantı sağlayamıyordum. En sonunda Coturn’u kaldırıp, ejabbard’ın kendi STUN / TURN sunucusunu kullanmaya karar verdim.

Aşıdaki işlemler çerçevesinde siz de aynısını yapabilirsiniz.

  1. Plinth üzerinden Coturn uygulamasını kurduysanız, kaldırın.
  2. ejabberd ayarlarında Automatically manage audio/video call setup sekmesi işaretliyse silin.
  3. Cockpit uygulamasının Networking > Firewall > Edit Rules and Zones sekmesinden coturn-freedombox hizmetini aktive edin (böylece 3478, 3479, 5349, 5350, 49152-50175 portlarını açmış olacaksınız).
  4. Modem / routerınızdan aşağıdaki portları FBX’ınıza yönlendirin:
Hizmet Adı Protokol WAN Portu FBX Portu
xmpp-client TCP 5222 5222
xmpp-server TCP 5269 5269
xmpp-upload TCP 5443 5443
ejabberd-stun UDP 3478 3478
ejabberd-stun TCP 5349 5349
  1. Alan adı (DNS) sağlayıcınızın web arayüzüne aşağıdaki SRV kayıtlarını ekleyin:
    (alan_adiniz.com. uygun şekilde değiştirecek şekilde. En sondaki noktayı unutmayın.)
_stun._tcp 300 IN SRV 0 0 3478 alan_adiniz.com.
_stun._udp 300 IN SRV 0 0 3478 alan_adiniz.com.
_stuns._tcp 300 IN SRV 0 0 5349 alan_adiniz.com.

_turn._tcp 300 IN SRV 0 0 3478 alan_adiniz.com.
_turn._udp 300 IN SRV 0 0 3478 alan_adiniz.com.
_turns._tcp 300 IN SRV 0 0 5349 alan_adiniz.com.
  1. FBX’ınıza terminal üzerinden bağlanıp sudo nano /etc/ejabberd/ejabberd.yml dosyasının aşağıdaki kısımlarını burada paylaştığım şekilde değiştirin:
    (alan_adiniz ve statik_ipniz’i doğru işleyecek şekilde)
listen:
 ...
- port: 3478
  transport: udp
  module: ejabberd_stun
  use_turn: true
  turn_min_port: 49152
  turn_max_port: 50175
  turn_ip: statik_ipniz
  auth_type: user
- port: 5349
  transport: tcp
  module: ejabberd_stun
  use_turn: true
  tls: true
  turn_min_port: 49152
  turn_max_port: 50175
  ip: "::"
  turn_ip: statik_ipniz
...
modules:
  mod_disco: {}
...
  mod_stun_disco:
    credentials_lifetime: 1000d
    secret: <burada_bulunan_sifreyi_degistirmeyin>
    services:
    - host: alan_adiniz.com
      port: 3478
      type: stun
      transport: tcp
      restricted: false
    - host: alan_adiniz.com
      port: 3478
      type: stun
      transport: udp
      restricted: false
    - host: alan_adiniz.com
      port: 3478
      type: turn
      transport: tcp
      restricted: false
    - host: alan_adiniz.com
      port: 3478
      type: turn
      transport: udp
      restricted: false
...

Yaptığınız değişiklikleri CTRL+X > Y ile kaydedip çıkabilirsiniz.

  1. FBX ile terminal bağlantınızı koparmadan, ejabberd servisini sudo systemctl restart ejabberd ile yeniden başlatın.

Artık XMPP üzerinden sesli ve görüntülü görüşmeleriniz nerede olursanız olun çalışacaktır. Özgürlüğe bir adım daha… güle güle kullanın…

Çoklu İstemci Senkronizasyonu (mod_mam)

FBX geliştiricleri son dakikada yapılandırma ayarlarında bir değişikliğe gittiği için ejabberd sunucum istemciler arasında senkron çalışmamaya başladı. Diğer bir deyişle, bir istemcide yaptığım görüşme, başka bir istemcim açık olmadığında sonradan senkron olmuyor, mesajlarımı istemciler arasında parça parça takip etmek durumunda kalıyordum. Hatta, tüm istemcilerim kapalı olduğu zamanlarda mesajlarımın kaybolduğu bile oldu.

Bunun düzenlenmesi için yine ejabberd.yml dosyasının aşağıda belirttiğim ilgili kısmına default: always değerini girin.

mod_mam:
    db_type: mnesia
    default: always
    request_activates_archiving: false
    assume_mam_usage: false
    cache_size: 1000
    cache_life_time: 3600
MAM Bellek Yetersizliği

Yukarıdaki düzenlemeye rağmen mesajlarınız senkronize olmuyorsa, logunuza bir göz atın. [error] MAM archives too large, won't store message for me@mydomain.com hatası alıyorsanız, ejabberd veritabanı olan mnesiaya ayrılan bellek dolmuş demektir (toplam ayrılan bellek 2GB).

Belleği temizlemek için aşağıdaki komutu kullanabilirsiniz.

ejabberdctl delete_old_mam_messages all 0

Bu komut, 0 günden daha eski tüm mesajlarınızı temizleyecektir. Bu görevi arzu ederseniz root olarak bir crontab görevi olarak tanımlayabilirsiniz (crontabden aşağıda ayrıca bahsediyorum).

MQTT Yapılandırması

BU KISIM AYRICA DERLENECEKTİR.

Evde Multimedia

Üniversite yıllarımdan biriktirdiğim film ve müzik dosyalarım var. Bunları genelde bilgisayarımda tutup, izlemek istediklerimi ya telefonum üzerinden ya da çeşitli yollarla ekrana aktarıyordum.

Hazır bir sunucu kurmuşken, her defasında bilgisayarımdan dosya alıp vermek veya telefonumla bilgisayarımın senkronizasyonunu beklemek (veya her defasında bilgisayarımı açmak) yerine bir media-sunucusu kurmanın faydaları ne olacak merak ettim.

DLNA sunucusu, tek yönlü hizmet sağladığından (sunucuya bağlandığınızda istemciler sadece okuyabiliyor, yazamıyor), önce SMB ile bu işi yürütmeye karar verdim. Aslında gayet güzel oldu da. Sonradan, sırf meraktan bir de DLNA sunucusu kurmayı denedim. DLNA ile SMB ile arasındaki hız farkı azımsanmayacak kadar çoktu.

DLNA sunucusuna bağlanan istemciler, media arşivimin içeriğini neredeyse anında görüntüleyebiliyor, videolarda ileri / geri sarmalarda hiç takılmalar yaşamıyorum.

Şu an hem SMB, hem DLNA aktif. Bence siz de her ikisini kurun; SMB ile neredeyse tüm dosya tarayıcıları üzerinden sunucunuza bağlanabilirsiniz (çoğu zaman SFTP terih etsem de). Ancak, VLC gibi bir istemci üzerinden media arşivinize erişmek isterseniz, DLNA ciddi konfor sağlayacak.

Televizyonunuza / telefonunuza KODI / VLC (veya başka bir DLNA istemcisi) yükleyebiliyorsanız, sunucunuzdaki dosyalara bu sayede rahatlıkla erişebilirsiniz.

Bir ufak da fantazi yaptım - paylaşmadan geçemeyeceğim. Eski bir tüplü tranzistörlü amfim var (plak dinliyorum ara sıra). Ona yine çok eskiden kalma bir bluetooth hi-fi adaptörü bağladım. Bir de çok eski, ne yapacağımı bilmediğim bir 8” Android tabletim vardı (hiçbir özgür OS desteklemediğinden Google’dan kurtulamadığım bir tablet). Kullanmak istemediğim için ortada duran bu tablete basit bir launcher yükledim. İçine bir de özgür bir tarayıcı ve VLC kurdum. Tabletin internet erişimini de router üzerinden kapattım, nefis bir media-kumandası ve serverıma erişebileceğim konsol oldu. Şimdi evde istediğimde amfimden gelen sesle sunucumdaki müziklerimi dinleyebiliyor, sunucuma da tabletten erişebiliyorum. Baya güzel hissettiriyor : )

OpenVPN

FBX’ı ilk kurduğumda, uzaktan ssh bağlantı ile her işimi yapabilmek çok rahattı. Bunun için port 22 yi açık tutup FBX’a yönlendirmem yeterliydi. Birçok yerde, bunun ne derece tehlikeli birşey olduğu yazıldıysa da, kulak asmadım. Sonra bir gün, baya sert bir brute-force saldırıya uğradım. Uzaktan sunucuma erişmek isteyen birileri, bir bilgisayarla harf harf şifre deneyerek giriş yapmaya çalışıyordu. Sunucmun işlemcisi o kadar yorulmuş ki, en sonunda işletim sistemim tümüyle dondu - durumu web siteme bağlanmak isteyip bağlanamadığımda farkettim. Uzaktan erişip yeniden başlatma fırsatım bile olmadı; eve gelip sunucumun enerjisini kesmek zorunda kaldım. Enerjiyi tekrar verdiğimde ise saldıranlar durmadı, aynı saldırıyı tekrar yaptı. İkinci yeniden başlatma girişimimde internet bağlantısını da kesip, ssh portunu (port 22) kapatarak çözüm ürettim.


Elbet port 22 açık tutup bu saldırıdan korunmak da mümkün. Çok detaya girmeyeceğim; bağlanacağınız bilgisayara sha anahtarlarını yüklerseniz, login ekranı olmadan ve sadece anahtar doğrulamasıyla da bağlanabilirsiniz. Benim için külfet - ayrıca her defasında bilgisayarım yanımda olmayabilir.


Bunun üzerine OpenVPN kurmaya karar verdim.4 Şimdi, uzaktan FBX’a bağlanmak istediğimde, VPN çalıştırıp giriş yapıyorum; gayet de pratik oluyor. Bu bağlantıyı ya laptoptan da ya da telefondan yapabiliyorum. FBX’ınızda OpenVPN kurduktan sonra, uygulamanın arayüzünde download profile başlıklı bir buton (düğme) var. Bu butona basmanız, tarayıcınızın anahtar dosyayı indirmesini sağlar.

İndirdiğiniz anahtar dosyayı telefon veya bilgisayarınızdaki OpenVPN istemcisine yüklediğinizde, kolayca bağlantı kurabiliyorsunuz. Bu işi nasıl yapabileceğinizi basitçe anlatmaya çalışacağım.

Raspberry Pi kullananlar, VPN ile bağlantı kurduklarında, bağlandıkları istemcinin (telefon, laptop, vs.) internet erişimi kesilecektir. Sebep ve açıklamasını yazının “Networks” başlığında açıklamaya çalıştım.

Android Üzerinden OpenVPN Bağlantı

Android kullanıcıları, yine F-Droid reposundan OpenVPN uygulamasını indirip yükleyebilirler.

Uygulama yüklendikten sonra, ekranın sağ üst köşesindeki "+” tuşuna basıp, açılan ekranda profilinize bir isim verebilirsiniz (FBX veya Sunucum benzeri bir isim olabilir). Aynı ekranın sol alt köşesindeki “import” tuşuna basıp telefonunuza indirdiğiniz ve yukarıda tariflediğim profil dosyasını seçin; kurulum tamamlanıyor.

Artık OpenVPN çalıştırıp ilgili profili aktive ettiğinizde, sunucunuza bağlanabilir, Termux ile bir terminal ekranı açıp ssh bağlantı kurablir veya telefonunuzdaki dosya tarayıcısı üzerinden SMB veya SFTP ile klasörlerinize ulaşabilirsiniz.

Debian Üzerinden OpenVPN Bağlantı

Debian, “Network Manager” uygulamasıyla geliyor. Uygulamayı çalıştırdığınızda açılan ekranın sol alt köşesindeki "+” tuşuyla açılan menüden “Import a saved VPN configuration” seçin. Ardından açılan dosya yöneticisi ekranından indirdiğiniz profil dosyasını seçtiğinizde VPN ayarlarınız kurulmuş olur.

Network Manager

Gnome kullanıcıları, ekranın sağ üst köşesindeki menüden ilgili VPN hizmetlerini kolaylıkla aktive edebilirler. Diğer DE’lar bende yüklü olmadığı için tek tek referans veremiyorum, basit bir aramayla nereden ulaşabileceğinizi bulabilirsiniz.

Gnome VPN Menusu

Debian 12 güncellemesi sonrası, yüklü gelen OpenVPN istemcisi, FBX yapılandırma dosyanızı okuyamayabilir. Sorunu gidermek için, yapılandirma dosyanızı (.ovpn) bir text editörü ile açıp, cipher AES-256-CBC satırını data-ciphers AES-256-CBC şeklinde değiştirin. Eğer ağınızda IP6 kullanmıyorsanız, proto udp6 satırını silin.

RSS Istemcileri

Alıştığınız zaman, RSS bildirimlerini takip etmek çok keyifli bir hal alıyor. Bugün, çoğu blog ve haber / yazı sitesinin bir RSS yayını var. Bunlar içinden seçip beğendiklerinizi takip etmek isterseniz TT-RSS uygulaması son derece iyi iş yapıyor. TT-RSS sunucunuzu kurduktan sonra, Android cihazınızda TT-RSS uygulamasını istemci olarak kullanabilirsiniz. Hatta o kadar ki, Andorid istemcisini kullanmak, sunucu web arayüzünü kullanmaktan daha pratik olmuş.

Diğer taraftan, her web sitesi bir RSS yayını yapmayabiliyor. Benim çok severek takip ettiğim Scott Adams Dilbert çizgi dizisi bu sitelerden birisi. 10 yıl kadar önce, Android’de Tasker ile küçük bir app yapmış, bu siteden çizgi roman görselini kesip (günlük olarak) kendime e-mail attırıyordum. Tasker özgür bir uygulama olmadığı için üzülerek terk etmiş, yaptığım bu uygulamayı da çok arar olmuştum.

Şimdi, FBX ile gelen RSS-Bridge uygulaması imdadıma yetişti. RSS yayını olmayan birçok siteyi sizin adınıza takip edip, kayıt olduklarınızı TT-RSS akışınıza yönlendirebiliyor. RSS-Bridge uygulamasına girdiğinizde, en üstte karşınıza bir arama çubuğu çıkıyor. Bu çubuğa takip etmek istediğiniz web sitesi adresini girerseniz (kaydı / takibi mümkünse), ilgili siteyi takibe başlayabiliyor.

Birçok web sitesi akışına RSS-Bridge ile ulaşabildiğimi görünce, burada bahsetmeden geçmek istemedim. Siz de mutlaka bu küçük uygulamaya bir şans verin.

Minetest Sunucunuza “Oyun” Yüklemek

Minecraft müptelası olmak benim için çok zor olmadı. Müthiş bir oyuncu olmasam da, “çıplak” vaziyette bir dünyada başlayıp iki üç el aletiyle birkaç iş yapmak, kendine bir düzen kurmak çok hoşuma gitti. Bir dönem Mojang’e para verip (10 USD), oğlum ve arkadaşlarına da bir sunucu kiralayıp, onların da oyunlarına katıldım.

Minecraft olmasa da, benzer düzeni FBX ile evinizde Minetest ile de kurabilirsiniz! Beklentiniz elbette yüksek olmasın, ne olduğunu çok basit paylaşmaya çalışacağım.

Minetest, aslında “oyun simulatörü” olarak geliştirilmiş bir platform (Roblox gibi). Geliştiriciler bu sonsuz dünyada oyun yazabilir, Minecraft’ın çok da dışına çıkabilir. Örnekleri incelemek isterseniz Minetest geliştiricilerinin yayınladığı (mod ve oyunların olduğu) Content DB veritabanına bakabilirsiniz.

Bu anlamda, Minetest aslında “çıplak” bir arayüz. Sunucuyu kurup oyuna bağlandığınızda hiçbir mob, canavar, alet, edevat vs. yok - ya da yok denecek kadar az. Bomboş bir dünyada amaçsızca dolaşmak da sıkıcı olacağından, bu dünyaya bir oyun getirmek daha keyifli.

Benim ilk ilgimi çeken, Minecraft klonu olan “Mineclone2” oyunu oldu. Biraz gerisinden gelse de, aslında Minetest’i Minecraft’a çok benzer hale getiren bu oyun, yine Minecraft kadar keyifli ve birkaç arkadaşınızla biraraya gelebileceğiniz bir platform.

FBX yapılandırması, jenerik oyun yüklenmesini zorlaştırdığı için, sanki FBX yapılandırmasını bozmuyormuş gibi yaparak aşağıdaki adımlarla Mineclone2 yükleyebildim. Denemek isterseniz, siz de takip edebilirsiniz.

  1. Content DB Mineclone2 sayfasından Minetest sürümünüze uygun oyun dosyasını indirin. Bu yazıyı yazdığım dönemde, Debian depolarında Minetest 5.3 sürümü vardı (bu sürüme uygun Mineclone2 sürümü 0.73). Eğer Content DB sayfasında aradığınız sürümü bulamazsanız, Mineclone2 git deposundan indirebilirsiniz.

  2. Sunucunuza bağlanıp, minetest sunucunuzu durdurun.

sudo systemctl stop minetest-server
  1. Sunucunuzda bir mineclone2 klasörü yaratın. Bu klasöre oyunumuzu kopyalayacağız.
sudo mkdir -p /var/games/minetest-server/.minetest/games/mineclone2`
  1. İndirdiğiniz mineclone2 oyununu yeni yarattığınız klasör içine kopyalayın.

  2. Yarattığınız (ve oyun kopyaladığınız) klasörün sahipliğini değiştirin.

sudo chown -R Debian-minetest:games /var/games/minetest-server/.minetest/games
  1. Oynayacağınız oyunun datasının kaydolacağı veri klasörünü yaratın ve sahipliğini değiştirin.
sudo mkdir -p /var/games/minetest-server/.minetest/worlds/mineclone2
sudo chown -R Debian-minetest:games /var/games/minetest-server/.minetest/worlds/mineclone2
  1. Minetest yapılandırma dosyanızı, yeni oluşturduğunuz mineclone oyununa gçre düzenleyin (dosyayı düzenlemeden önce yedek almanız iyi olur).
sudo nano /etc/minetest/minetest.conf

Bu dosyada aşağıdaki yapılandırma ayarlarını yapın. Bir oyuncuyu admin yapacaksanız, name değişkenine atıfta bulunun, yoksa boş bırakabilirsiniz.

map-dir = /var/games/minetest-server/.minetest/worlds/mineclone2
default_game = mineclone2
name = admin_oyuncu
  1. Minetest sunucunuzu başlatın
sudo systemctl start minetest-server

Artık bilgisayarınızdan Minetest istemcinizle sunucunuza bağlandığınızda Minecraft klonu oynayabilirsiniz! İyi eğlenceler.

Minetest İpuçları ve Komutlar

  • Bir dünyaya yeniden başlamak isterseniz, bir önceki oyun datanızı silebilirsiniz.
sudo rm -r /var/games/minetest-server/.minetest/worlds/mineclone2

Sunucu sizin için yeniden mineclone2 klasörü oluşturacaktır.

  • Minetest içinde şifrenizi değiştirmek isterseniz /setpassword <Name> <newpassword> komutu kullanabilirsiniz.

  • Yaratıcı bir Minetest oyununda uçmak / hızlı koşmak isterseniz, oyuna admin olarak bağlanıp /grant <Name> fly (veya) fast komutlarını kullanabilirsiniz.


Çok oyunculu bir düzen kurarsanız, arkadaşlarınızla sesli iletişim de krabileceğiniz Mumble uygulamasını da mutlaka tavsiye ederim.


Freedombox Kurulu Sunucu’da Özelleştirilmeler

Buraya kadar, FBX arayüzünden ulaşabildiğiniz uygulamaların yapılandırmalarına yönelik ufak kolaylıklar ve ipuçları paylaşmaya çalıştım. İlk yazımdan hatırlarsanız, FBX aslında bir alt dağıtım değil, saf bir Debian sürümü. Dolayısıyla, Debian ve deposu ile beraber gelen bir yazılım zenginliğine sahip.

Bu bölümde, FBX’ın su yüzüne çıkartmadığı ancak zaten sunucumuzda kurulu olan bir kısım uygulamaların kullanımına yönelik tecrübelerimi paylaşmak istiyorum.

Web Siteleri

Kendi sunucunuz olup da, web sitenizin olmaması düşünülebilir mi?

FBX, Wordpress ve ikiWiki ile beraber gelse de, arzu eden, biraz ‘kutunun’ dışına çıkabilir.

Her Kullanıcıya Ayrı Web Sitesi

FBX kullanım kılavuzlarında çok altını çizmese de, her kullanıcısına bir web alanı sunar. ssh ile FBX’a bağlandığınızda ve kendi ev dizininizin altında public_html klasörü oluşturduğunuzda, bu klasör içerisine web sitenizi kurabilirsiniz.

kullanıcı@yerel:~$ ssh benimsunucum.com
kullanıcı@sunucum:~$ mkdir public_html

İşin benim için keyifli tarafı, bu alanı açık bir dosya paylaşım platformu gibi da kullanabilmem oldu. Bunun çok güzel bir örneğini burada gördüm.

Bu klasöre sizden başkası yükleme yapamaz (bu iş için FBX BePasty var) ancak, sizin herkese açık şekilde paylaşmak istedikleriniz burada yer alabilir.

Sitenize ulaşmak isteyenler, internet tarayıcısından alan adınızın sonuna /~kullanici_adiniz eklediğinde (örneğin: https://hayalmasal.org/~ged) paylaşıma açtığınız dosyalara erişmiş olur.

Tabii ki benim bu adreste bir sitem yok; o da bana kalmış olsun : )

Ev dizininizin altında oluşturduğunuz public_html klasörü içerisine hangi dosyayı taşırsanız, web tarayıcısı üzerinden sitenize erişenler aynı dosyayı görüntüleyip isterse indirebilir.

UYARI: public_html klasörünüz internette herkesin erişimine açık olacak. Mahrem olduğunu düşündüğünüz verilerinizi bu klasörde tutmayın.

Kullanıcı Web Sitelerini Temalamak

Kurduğunuz ~kullanici_adi uzantılı siteniz varsayılan Apache yapılandırmasıyla gelir, aşağıdaki gibi bir ekran görüntüsü var.

Varsayılan Apache Dizin Listesi <em>(netten bir yerlerden kopyaladım)</em>

Bu görüntüyü, aşağıdaki gibi ’temalamak’ ister misiniz?

Apaxy ile Temalanmış Dizin Lisitesi <em>(Apaxy Web Sitesi&rsquo;nden indirdim)</em>

Bunun için paylaştığım adımları sırasyıyla izleyebilirsiniz:

  1. Apaxy temasını bu link ile indirin.5
  1. Indirdiğiniz zip dosyasını ayıklayın ve içinde yer alan /apaxy-main/apaxy klasöründeki theme klasörü ve htaccess.txt dosyasını sunucunuzda ~/public_html/ dizinine kopyalayın.
  2. Kopyalamış olduğunuz htaccess.txt dosyasını herhangi bir text editörü ile açıp, dosya içindeki tüm {FOLDERNAME} ibarelerini /~kullanici_adiniz ile değiştirin (find/replace all en kolay yöntem). Değişiklik sonrası dosyayı kaydedip çıkın.
  3. Sunucunuza teminal üzerinden bağlanıp (bağlı değilseniz), aynı dosyanın ismini mv htaccess.txt .htaccess komutuyla değiştirin.
  4. Sunucunuza bağlantınızı koparmadan, sudo nano /etc/apache2/mods-available/userdir.conf komutuyla Apache yapılandırma dosyanızı açın.
  5. Dosyanın 6.satırına, aşağıdaki örnekte gördüğünüz şekilde Options ekleyin:
<IfModule mod_userdir.c>
        UserDir public_html
        UserDir disabled root

        <Directory /home/*/public_html>
                AllowOverride FileInfo AuthConfig Limit Indexes Options
                Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
                Require method GET POST OPTIONS
        </Directory>
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Düzenleme sonrası Ctrl+X > y > enter ile kaydedip çıkın.

  1. Sunucunuzda apache hizmetini sudo /etc/init.d/apache2 restart komutuyla yeniden başlatın.

Web sayfanızı ziyaret ettiğinizde, temalanmış olduğunu göreceksiniz!


İnternette ‘apache directory theme’ ile arama yaparsanız, başka temaların da olduğunu görebilirsiniz.


Sunucunuzda Evrensel Web Sitesi Oluşturmak

Sunucunuzda her kullanıcının bir web sitesi olabileceği gibi, FBX yapılandırmasında belirttiğiniz alan adı için evrensel bir web sitesi de oluşturabilirsiniz. Başka bir deyişle, https://hayalmasal.org/~ged veya https://hayalmasal.org/~baska_kullanici gibi siteler haricinde https://hayalmasal.org adresinde bir siteniz olabilir.

Bunun için, sunucunuzun /var/www/html dizini altında sitenizi oluşturup, Plinth arayüzünün System > Configuration sekmesinde Webserver Home Page ayarını Apache Default olarak belirtmeniz yeterli.

Yapılandırma ekran görüntüsü

Bundan böyle alan adınızla internetten erişenler, evrensel web sitenize gelecektir.

Not: /var/www/html klasörüne sadece apache kullanıcısı (www-data) yazabildiği için, root yetkisi kullanmanız gerekli.

Apache ile Birçok Web Sitesini Aynı Sunucu’da Barındırmak

Apache, Linux’un yaygınlaşmasında önemli rol oynayan baş aktörlerder. Hatta bir tek Linux değil, internetin (WWW) bugünkü haline evrimleşmesinde de (olumlu yönde) belki de en önemli oyuncu.

Apache, ‘sadece Linux altında çalışan’ - özgür - bir web suncusu. Apache öncesinde, internette hizmet veren firmalar kapalı kaynak ve lisanslı donanımlara (Sun vb.) bağlıyken, Apache’nin gelmesiyle özgür, yapılandırabilecekleri bir alternatife geçebildi. Aynı sunucu üzerinden birçok web sitesini internete sunabilen Apache, hem sunucu firmalarına ‘özgürlük’ sağlıyor, hem de ’tek donanımda’ binlerce web sitesini üzerinde taşıyabiliyordu. Bu sayede Linux ve Apache ikilisi, sunucu kuran herkesin öncelikli tercihi oldu ve hızla yaygınlaştı.

FBX kurulumunuz ile sizin de sunucunuzda Apache yüklü! Bu da, doğru yapılandırmayla tek sunucunuzla birçok web sitesi (ve web uygulaması) kurabilirsiniz anlamına geliyor. Apache jargonunda, kurduğunuz her “web sitesi” (veya hizmeti) bir virtual host (sanal sunucu) olarak anılır.

FBX, ne yazık ki şu anda tek alan adı destekliyor. Bu sebeple, FBX arayüzünün dışında ve terminal ile çok işimiz olacak.

Örnek Bir Site Kuralım

Şimdi FBX’ın Plinth altında sunduğu imkanların dışına çıkıp, beraber bir site kuralım. Varsayalım ki alan adımı yönlendirdiğim web sitesi https://abc.com olsun. Bunun da ayarlarını yukarıda anlattığım şekilde Plinth arayüzünden yapılandırmış olayım. Peki, ikinci-üçüncü-vs. bir alan adım (veya alt-alan adım) varsa, ve bunun üzerinden de bir web sitesi çalıştırmak istiyorsam (sanal sunucu kurmak istiyorsam) ne yapabilirim?

En iyi örnek uygulanmış bir örnek olacağı için, bu blog sitesini - Yünbere (içerik olmadan) - nasıl oluşturduğumu adımlayacağım.

Bu anlatımda SSL sertifika konusunu ele almayacağım - onu ilerideki başlıkta inceleyeceğim.

Yapılacak ilk iş yaratacağınız sitenin alan adını (veya alt-alan adını) belirlemek olacak. DNS ayarlarınızda bu alan adını statik IP’nize yönlendirin.

Sonrası, tümüyle sunucumuz üzerinden yapacağımız işlemlerle yürüyor. ssh ile sunucunuza terminal üzerinden bağlanıp aşağıdaki komutları takip edin:

  1. Web sitemizi oluşturacağımız klasörü yaratıyoruz. sudo mkdir -p /var/www/yunbere.hayalmasal.org/public_html

  2. Aynı klasör içerisinde okunması için bir index.html dosyası yaratıyoruz. sudo touch /var/www/yunbere.hayalmasal.org/public_html/index.html

  3. Yarattığımız dosyayı işlemek üzere açıyoruz sudo nano /var/www/yunbere.hayalmasal.org/public_html/index.html

  4. HTML dosya içeriğine aşağıdaki kodu kopyalayıp yapıştırabilirsiniz

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>yunbere.hayalmasal.org sitesine hosgeldiniz!</title>
  </head>
  <body>
    <h1>Tebrikler! yunbere.hayalmasal.org ana sayfası!</h1>
  </body>
</html>
  1. index.html dosyamızı kaydedip kapattıktan sonra oluşturduğumuz dizin ve klasör yoluna Apache’nin erisebilecegi şekilde yetki veriyoruz sudo chown -R www-data:www-data /var/www/yunbere.hayalmasal.org

Sitemizin dizini, içeriği ve yetkilendirmelerini buraya kadar oluşturduk. Şimdi, Apache’ye https://yunbere.hayalmasal.org adresinden gelen talepleri dizinimize yönlendirmesini öğreteceğiz.

Önce, aşağıdaki komutla bir yapılandırma dosyası oluşturacağız:

sudo nano /etc/apache2/sites-available/01-yunbere.hayalmasal.org.conf

Oluşturduğunuz ve işlemeye başladığınız dosyanın içeriğini aşağıdaki şekilde düzenleyin:

# bu kisimda, http ile 80 portu uzerinden gelen talepleri 
# https olan ve 443 portuna yonlendiriyoruz (certbot hariç)
<VirtualHost *:80>
    ServerName yunbere.hayalmasal.org
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteCond %{REQUEST_URI} !^/\.well-known/
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

# bu kisimda, https ile 443 portu üzerinden gelen taleplerin
# hangi dizine gidecegini belirliyoruz
<VirtualHost *:443>
    ServerName yunbere.hayalmasal.org
    DocumentRoot /var/www/yunbere.hayalmasal.org/public_html

    <Directory /var/www/yunbere.hayalmasal.org/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
    </Directory>

# bu kisimda hatalarin guncesinin nerede tutulacagini yaziyoruz 
    ErrorLog ${APACHE_LOG_DIR}/yunbere.hayalmasal.org-error.log
    CustomLog ${APACHE_LOG_DIR}/yunbere.hayalmasal.org-access.log combined

# bu kisimda, web sitemizin SSl sertifikalarinin klasor yollarini 
# ve anahtar dosyalarini belirtiyoruz
SSLCertificateFile /etc/letsencrypt/live/yunbere.hayalmasal.org/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yunbere.hayalmasal.org/privkey.pem

</VirtualHost>

Dosyamızı Ctrl+X > y > enter ile kaydedip çıktıktan sonra, Apache sunucumuza hata ayıklaması ve web sitemizi aktif hale getirmesini söylüyoruz:

sudo a2ensite 01-yunbere.hayalmasal.org.conf

Ardından son olarak Apache sunucumuzu yeniden başlatıyoruz:

sudo systemctl restart apache2

Tebrikler! Artık sunucunuz yeni bir web sitesini internete açtı. Güle güle kullanın.


Dikkat ettiyseniz, Apache yapılandırma dosyasının başına “01-” ekledim. Bunun sebebi, FBX varsayılan ayarlarının olduğu dosyadan önce Apache’nin bizim yapılandırmalarımızı dikkate almasını istiyorum.

Dosyanın ismine “01-” (veya “02-” vb.) gibi numerik bir ön-ek koymadığım durumda FBX kendisine ait olmayan yapılandırma dosyalarının okunmasına engel oluyor. FBX ile yaşarken, tüm sanal sunucu yapılandırma dosyalarınızın adlarını bu şekilde ön-ek ile oluşturun.


Let’s Encrypt ile Birden Çok Alan Adı için Sertifika Almak

SSL sertifikalar, sitenize gelen ziyaretçiyle sunucunuz arasında şifrelenmiş bir iletişim kanalı oluşturur. Sertifka edinmiş web siteleri, http:// yerine https:// ile başlar. Bu web sitelerini ziyaretinizde arada olabilecek bir üçüncü kişi veya kurum, veri içeriğinizi izleyemez.

Çok yakın zamanda bir endüstri standardı olacağını düşündüğüm bu düzenleme, sizin de web sitelerinizin önemli bir parçası olmalı.


SSL sertifika üretimi için kendi sunucunuzu kullanabileceğiniz gibi akredite olmuş, çoğu kullanıcının güvenli olduğunu kabul ettiği sertifika sağlayıcılarından da faydalanabilirsiniz. Her ne kadar popüler tarayıcılar sizin oluşturaceğiniz sertifikaları “güvensiz” adletse de, aslında bir kurumdan alacağınız sertifikayla arasında fark bulunmaz.


SSl ile şifrelenmiş olan web sitelerini en kolay iki şekilde anlayabilirsiniz:

  1. Adres çubuğunda web sitesinin ön-eki https:// olur,
  2. Yine adres çubuğunda web sitesinin yanında bir “asma kilit” veya “kalkan” benzeri simge görürsünüz. Bu simgeye tıkladığınızda, sertifika bilgilerine ulaşabilirsiniz.

3 veya 6 aylık süreli olarak üretilen sertifikaların, bu dönemlerin sonunda yenilenmesi gerekir.

FBX’ın sunduğu kolaylıklardan birisi, SSL sertifiklarınızı “Let’s Encrytp"ten temin edip, zamanı geldiğinde yenileyebilmesi. Tecrübeli kullanıcılar certbot ve/veya cron‘la da bu işi çözebilse de, yeni gelenlere böyle bir imkan sağlanması kolaylık.

Let’s Encrypt ücretsiz, açık bir sertifika sağlayıcısıdır. Buradan alacağınız SSL sertifikalar, bütün popüler tarayıcılar tarafından güvenilir adledilir.

Sertifika temini öncesi modem / router ve sunucunuzda aşağıdakileri tekrar kontrol edin:

  1. 80 ve 443 portları sunucunuza yönlendirilmiş olmalı.
  2. Alan adı kaydınızı tamamlanmış ve statik IP’nize yönlendirilmiş olmalı.
  3. Alan adınız başka bir alan adına yönlendirilmemiş ve başka bir web sitesi de sizin alan adınıza yönlendirilmemiş olmalı.
  4. Sunucunuzda sitenizin klasör yolu olşuturmuş ve Apache sanal sunucu ayarlarınız yapılmış olmalı.

Bu dört şartın sağladığınıdan eminseniz, Plinth üzerinden System > Configure sekmesine gelip “Domain Name"inizi yeni alan adınızla (veya alt alan adı) değiştirip kaydedin.

Bu işlemde, 10-15 saniye beklemeniz sonrası Plinth arayüzünden kopacaksınız. Tarayıcınızı yenileyin. An itibarıyla önceden kurmuş olduğunuz e-mail, xmpp ve benzeri yapılandırmalarının hepsi bozulacak. Endişe etmeyin, sertifikanızı bir defa temin ettikten sonra aynı işlemi geri sarıp baştaki yapılandırmanıza döneceğiz.

Değişikliğinizin işlenmesi biraz zaman alabilir - birkaç dakika bir işlem yapmadan sabırla bekleyin.

Şimdi, Plinth menüsünden System > Let’s Encrypt sekmesine gelebilirsiniz. İşler doğru gittiyse, açılacak ekranda eklediğiniz alan adının ismini ve sertifikasını görebilirsiniz.

Let&rsquo;s Encrypt ekranından yüklü SSL sertfikalarını görebilirsniz.

Bir hata ile karşılaşırsanız, sayfayı yenilemeyi veya “Re-Obtain” tuşuyla sertifika almayı deneyebilrsiniz. Sertifika alımında hata ile karşılaşıyorsanız, Plinth’in size göstereceği hata mesajının içinde hata güncesine (log) bakabilirsiniz.

Alan adlarının yanında göreceğiniz “Delete” ve “Revoke” tuşları, sırasyıla SSL sertifikalarınızı sunucudan “silmek” ve sertifika kurumu tarafından sağlanan sertifikanın “iptal” edilmesi içindir. Gerekli durumlarda kullanabilirsiniz.

Sertifikanızı başarılı şekilde aldıysanızi Plinth üzerinden yine yapılandırma sayfanıza erişip e-mail, xmpp vb. hizmetler için ilk kurduğunuz alan adı ayalarına geri dönebilirsiniz. FBX, tek alan adı desteklediğinden, böyle bir ek iş ne yazık ki çıkıyor. Bu işlemden sonra tek tek uygulama ayarlarınıza girip, herşeyin yolunda olduğunu kontrol etmenizi, gerekirse sunucunuzu bir defa yeniden başlatmanızı öneririm.

Geçmiş olsun (ve tebrikler)!

Plinth’i Kendi Launcher’ınız Olarak Kullanmak

Freedombox yüklediğinizde, size sunulan en keyifli kullanım alanlarından birisi Plinth (web arayüzü) üzerinden uygulamalara erişebilmek. Yüklü ve yapılandırılmış gelen uygulamaların kısayollarının yer aldığı bu arayüz, hem mobil hem de masaüstü düzenlerine ayak uydurabilmektedir.

Peki, FBX uygulamaları dışında, kendiniz bir uygulama ya da web sitesi kısayol oluşturup, Plinth’e eklemek ister misiniz? Böylece, örneğin Plinth’i tarayıcınızda ana sayfanız olarak tanımladığınızda, sunucunuzdaki tüm uygulamalara ’tek tıkla’ erişebileceksiniz.

Yünbere blog sitesi ve Webtrees uygulaması eklenmiş haliyle, özelleştirilen Plinth arayüzü.

FBX gelitiricileri bunu yapabilmemiz için bir açık kapı bırakmış. Şöle ki, /etc/plinth klasörü altında custom-shortcuts.json adında bir dosya yaratıp, içine de JSON formatında uygulama ve kısayollarınızı işlerseniz, bu düzenlemeyi gerçekleştirebilirsiniz.

Adım adım bu işi beraber yapalım. Herşeyden önce, önerim kısayolunuz için bir simge belirlemek. Uygulamanızın simgesi (ikonu) veya sizin belirleyeceğiniz bu PNG görseli, /var/www/plinth/custom/static/themes/default/icons/ veriyoluna kopyalayın.

Akabinde, sudo nano /etc/plinth/custom-shortcuts.json komutuyla, dosya içeriğini aşağıdaki örneğe benzer şekilde düzenleyebilirsiniz.

{
    "shortcuts": [{
        "name": "Rapid Spam",
        "short_description": "Spam Filter",
        "description": ["Rspamd is a daemon functioning as a spam filter."],
        "icon_url": "/plinth/custom/static/themes/default/icons/rspamd.png",
        "clients": [{
            "name": "rspamd",
            "platforms": [{
                "type": "web",
                "url": "/rspamd"
            }]
        }]
    },
{
        "name": "HayalMasal",
        "short_description": "Pleroma Instance",
        "description": ["Pleroma instance to social.hayalmasal.org"],
        "icon_url": "/plinth/custom/static/themes/default/icons/hayalmasal.png",
        "clients": [{
            "name": "hayalmasal",
            "platforms": [{
                "type": "web",
                "url": "https://social.hayalmasal.org"
            }]
        }]
   }]
}

Son olarak, sudo systemctl restart plinth ile uygulamayı yeniden başlattığınızda, Plinth arayüzüne yeni simge ve kısayollarınızın eklendiğini göreceksiniz.

Yedekleme ve Otomasyon İpuçları

FBX ile gelen ‘snapshots’ ve ‘backup’ uygulamalarının eriştiği konumlar dışında da verileriniz olabilir. Nasıl derseniz; FBX sadece kurulu olduğu disk üzerinde kendi uygulamalarının verilerini yedekler. Ya sizin ikinci bir diskinz var ve bu disk üzerinde dosyalarınızı saklayıp sunucunuzu NAS gibi de kullanıyorsanız? Bunları da belli aralıklarda yedeklemek istemez misiniz?

Burda yine işletim sistemimiz (Debian), ek bir uygulama yüklemeye gerek olmadan imdada yetişiyor. FBX’ın ‘backup’ uygulaması aslında borg ile çalışıyor. Dolayısıyla, işletim sistemimizde halihazırda kurulu bir yedekleme uygulaması var, biz de bunu nasıl kullanabileceğimiz bakabiliriz.


borg (bence) çok başarılı bir yedekleme aracı. İlgilenenlerin web sitesini ziyaret etmesini ve oradaki demoları izlemesini tavsiye ederim.

borg ilginizi çekmezse rsync uygulamasını da inceleyebilirsiniz.


Borg Backup

Terminal ile sunucunuza bağlanıp apt list borgbackup yazdığınızda, borgbackup/stable,now 1.1.16-3 arm64 [installed,automatic] göreceksiniz. Sondaki [installed,automatic], borgbackupın yüklü olduğunu gösterir.

Borg’un en faydalı yanı, her yedeklemede tüm verilerinizi her defaten kopyalamak yerinde, sadece değişiklikleri (eksiltme / ilave / değişiklik) işleyerek yedek alması. Bu, ilk yedeklemenizin belli bir zaman alacağı ancak sonradan alacağınız yedeklerin çok daha hızlı gerçekleşeceği anlamına gelir.

Şimdi, borg’la (sitesinden de kolayca öğrenebileceğiniz) 3 basit adımda yedek nasıl alınır aşağıda paylaşacağım.


Borg’un yedek alırken şifreleme ve sıkıştırma özellikleri de bulunur. Bunu bilerek, uygulamayı daha detaylı inceleyebilirsiniz.


Yedek Almak

  1. Yedekleme için bir arşiv oluşturmalıyız.

borg init --encryption=none /media/root/yedeklerim

Bu komutla, /media/root/yedeklerim dizinini, borg’un yedek alabileceği bir arşiv olarak tanımlamış olduk. --encryption=none parametresi, yedek alınırken herhangi bir şirfeleme yapılamayacağını gösteriyor. Benim sunucumu benden başka kullanan olmadığı için, şifreleme ihtiyacı duymuyorum. Ancak siz isterseniz --encrytpion=repokey (başka alternatifler için Borg Kullanım Kılavuzu’na bakın) kullanabilirsiniz.

  1. Sonraki adımımız, ilk yedeğimizi almak olacak.

borg create --stats --progress --compression lz4 /media/root/yedeklerim::yedegim-{now} /home/ged/

Yukarıdaki komuta göre, sunucumuzda önceden yapılandırdığımız /media/root/yedeklerim klasörü içerisine /home/ged dizinini “yedegim-yedekleme_zamani dosya ismiyle ve lz4 formatında sıkıştırarak yedekliyorum. Komutta gördüğünüz --stats --progress parametreleri ekranımızda yedekleme sürecini detaylarıyla gösterecek.

  1. Diyelim her gün bir yedek alacağız ancak bu yedeklerin hepsini saklamak istemiyoruz; belirli aralıklarla arşivimiz saklı kalsın, arada gereksiz gördüklerimiz silinsin. Bu durumda;

borg prune -v --list --keep-daily=7 --keep-weekly=4 --keep-monthly=12 --keep-yearly=1 /media/root/yedeklerim

komutunu kullanabiliriz. Burada verdiğim örnek, geçtiğimiz son haftanın her günü için bir yedek, her ay için bir yedek ve her yıl için bir yedek saklar.

FBX ile yüklü gelen borg, en güncel sürüm değildir. Bir sonraki sürüm itibarıyla alan kaybı yaşamamak için bu komutu borg compact /media/root/yedeklerim ile desteklememiz gerekecek.

Bu 3 adımda yedeğimizi almış olduk.

Bundan böyle her yedek alma işleminde 2. ve 3. adımı uygularsanız, tekrar tekrar tüm verilerinizi yedeklemek yerine, sadece değişiklikleri yedeklemiş olursunuz.

Yedeklerin Listelenmesi ve Veri Kurtarmak

Aldığımız yedekleri ve içeriklerini görmek için;

borg list /media/root/yedeklerim

komutunu kullanabiliriz. Bu komut, /media/root/yedeklerim dizini içindeki tüm yedekleme dosyalarınızı listeler. Bu listeden seçtiğiniz dosyanın ismini terminal ekranında orta fare tuşu veya shift+ctrl+c ile kopyalayıp aşağıdaki komut içerisine yapıştırabilirsiniz.

Böylece,

borg list /media/root/yedeklerim/::yedegim-2022-11-08T20:57:23

komutunu girdiğinizde yedeğini aldığınız tüm dosya ve klasörlerin dökümünü görebilirsiniz. İçinden seçtiğiniz bir dosyayı ayıklamak / kurtarmak için

borg extract /media/root/yedeklerim/::yedegim-2022-11-08T20:57:23 kurtarilacak_dosya

komutunu kullanabilirsiniz.


Bilgisayarımdaki verilerin bir kısmını Syncthing ile senkronize ediyor olsam da, tüm “ev” dizinimi Pika Backup uygulaması ve ardındaki “borg” teknolojisiyle ile sunucuma ayrıca yedekliyorum.


Yedekleme için Basit Bir Script Kullanmak

Yedekleme alırken borg komutlarını girmekten sıkılırsanız, bunun için bir ALIAS yaratabilir (araştırın : ) veya küçük bir script yazabilirsiniz. Script hazırlamak, sonradan anlatacağım crontab (otomasyon için) altında yapacağımız uygulama için de pratik olacağından, aşağıda kendim de kullandığım bir örneği paylaşıyorum.

  1. Terminal üzerinden ssh ile suncunuza bağlanın.
  2. Ev dizininizin altında (başka yer isterseniz serbest, ben bu alanı kullanmayı tercih ediyorum) aşağıdaki komutla script dosyanızı oluşturun:

nano yedekleme.sh

  1. Açılan nano ekranında, aşağıda paylaştığım scripti kendi veri yollarınıza göre güncelleyerek işleyin, sonrasında Ctrl+X > y > enter ile kadedip çıkın.
#!/bin/sh
borg create --stats --progress --compression lz4 /media/root/yedeklerim::yedegim-{now} /home/ged/
borg prune -v --list --keep-daily=7 --keep-weekly=4 --keep-monthly=12 --keep-yearly=1 /media/root/yedeklerim

Ev dizininizdeyken komut satırından ./yedekleme.sh girerseniz, hem yedekleme hem de geçmişi temizleme işlevini yerine getiren iki komutu da arka arkaya çalıştırmış olursunuz.


Bunun gibi birçok yedeği alacak tek bir script de hazırlayabilirsiniz.


Otomasyon

İlk bilgisayar kullanmaya başladığım 90’lı yılların başlarında DOS altında BASIC ile ufak programlar yazardım. Çok basit uygulamalar; soru anketleri, zeka testleri(!), tek piksellik oyun denemeleri, ya da random parametrelerle ekranda oluşturduğum desenler.

Bu denemelerim, ilerleyen süreçlerde işletim sistemini kullanmak ve .bat uzantılı “batch script"ler oluşturmayla devam etti. İşletim sistemine yaptırmak istediğim bir dizi sıralı komutu bir batch dosyası olarak kaydedip, birçok sayıda oluşturduğum komutla da (autoexec.bat içinden çalıştırdığım) bir “çoktan seçmeli” arayüz hazırlamıştım. Hızlı erişim sağlamak istediğim uygulamaları bu arayüz ile çalıştırırdım (o zamanlar RAM’in hangi uygulama için ne şekilde kullanılacağını uygulamayı çalıştırmadan önce belirlememiz gerekirdi). Aradan yıllar geçti, gülümseyerek hatırlıyorum. 90’ların çok başı olsa da, henüz Windows’u tanımadığım yıllardı…

Yaptıklarım aslında bir çeşit “otomasyon"du. Autoexec.bat dosyası, bilgisayar açılırken kendiliğinden çalışan bir “script” olduğu için, çalıştıracağım .bat dosyalarını buraya gömer, bilgisayarımın açılışıyla istediğim komutların sıralanmasını sağlardım.

Yıllar sonra (sanırım 2005) Macintosh’ta bu işi yapan ve görsel arayüzü olan “Automator” isimli bir uygulama çıktığında ‘vay be, Mac gerçekten kullanıcı dostu’ diye düşündüğümü hatırlarım : )

Linux’la tanışınca, çok daha fazlasını daha pratik şekilde yapabileceğimi keşfettim. Buyrun devam edelim…

Crontab ile Otomasyon

Crontab, Linux’ta bellirli koşullarda çalışmasını istediğiniz komut ve uygulamarı çalıştıran bir yazılım. Autoexec.bat gibi sadece bilgisayarınız açıldığında değil, hangi günlerde, hangi saatlerde hangi uygulama / komutları ne sıklıkta çalıştırmak isterseniz “kurabiliyorsunuz.” FBX’ın aldığı yedekler dışında, borg için yukarıda paylaştığıma benzer scriptleri belirli aralıklarda çalıştırabilmesi, benim için işletim sistemimin kendiliğinden yedeğini alabilmesi demekti.

Bu yazıda hiçbir uygulamayı incelemediğim gibi, Crontab’i de incelemeyeceğim. Siz okuyucular, bu uygulamanın nasıl kullanıldığını internetten rahatlıkla araştırıp bulabilirsiniz. Ben burada kendim crontab ile ne yaptım, onu paylaşacağım:

  1. Kullanıcı Hesabınızla Yedek Alın

Kendi kullanıcınızla ssh üzerinden sunucunuza bağlandıktan sonra, aşağıdaki komutla crontab ekranına girin:

nano cronteb -e

nano ile açılan dosyanın en altına, aşağıdaki içerikteki son iki satırı ekleyin:

# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command
MAILTO=e-posta_adresim
0 5 * * 1-7 /bin/sh /home/ged/yedekleme.sh

Yukarıdaki içeriğin son iki satırını ekleyerek, crontab’e aslında şunu söylüyoruz:

a. Haftanın her günü sabah saat 5’te, bash script kullanarak, ev dizinimdeki yedekleme.sh dosyasını çalıştır. b. Sana verdiğim görevleri yaptığında bana mail at, görevlerin sonuçlarından bilgim olsun

Buyrun kalanını siz deşifre edin : ) Artık sunucum her sabah saat 5’te istediğim yedeklemeleri alıp, akabinde bana bu yedeklemenin sonuçlarını e-mail olarak gönderiyor.

  1. Root Kullanıcıyla Görevler Kurun

Yukarıda paylaştığım örnek, kendi kullanıcınızın yetkileri dahilinde cron görevleri çalıştırır. Kimi zaman kimi uygulama / scripti “root” olarak da çalıştırmak isteyebilirsiniz (örneğin ben her sabah saat 7’de root kullanıcımla rspamdyi yeniden başlatıyorum).

Bunu yapmak için, sunucunuza terminalle bağlıyken

sudo su
crontab -e

Açılacak dosya, “root"a ait crontab dosyası olacağından, burada işleyeceğiniz tüm uygulama ve komutlar root kullanıcı olarak çalıştırılacaktır.

Kendi kurulumumda film, dizi, müzik arşivim gibi dosyalarımı ayrı bir harici bellekte saklıyorum. Sunucum açıldıktan sonra miniDLNA bu arşivimi taramakta zorluk yaşayabiliyor. Burada paylaştığım crontab özelliği ile bilgisayarım her açıldığında media arşivimin yeniden taramasını yaptıracağım bir komut kullanıyorum. @reboot komutu, sunucum yeniden başladığında tetikleniyor. Şöyle ki;

@reboot sleep 300 && sudo minidlnad -R && systemctl restart minidlna

Bu satırı crontab işlerim arasına ekledikten sonra, sunucum açıldıktan 300 saniye (5 dakika) sonra, minidlna arşiv taraması yapıp akabinde yeniden başlıyor. Böylelikle tüm medya arşivim yeniden taranmış, güncel şekliyle istemcimden ulaşılabilir oluyor.


Yukarıda crontab ile paylaştığım otomasyonu FBX Cockpit uygulamasını kullanarak da yapabilirsiniz. Services > Timers > Create timer seçenekleriyle çalıştırmak istediğiniz servis ve komutları zamanlayıcıya bağlayabilirsiniz. .timer, systemd ile beraber gelen bir özellik ve en az crontab kadar güçlü olabiliyor. İlginizi çekerse ayrıca araştırabilirsiniz.


Debian Deposu Dışından Yüklediğim Uygulamalar

Yazının bu kısmında, Debian deposu dışından yüklediğim, bağımlılık problemi yaratmadığını denediğim uygulamaları derlemeye çalıştım. Zamanla ekleme / çıkarmalar olabilir, sizden de bir öneri gelirse her zaman beklerim.

Burada paylaştığım uygulamaların güvenli olup olmadığına dair herhangi bir teminat verememem. Dağıtım depoların dışından herhangi bir uygulamaya yüklemeye karşı her zaman tedbirli olmaya çalışırım, mümkünse de yüklemem. Bu kısımda paylaştığım içerik, sonradan başınıza iş açabilir veya işletim sisteminizde zaaflar oluşturabilir. Lütfen tedbirli olun, kendinizden emin değilseniz yüklemeyin.

Pleroma

Freedombox’ta en çok eksikliğini çektiğim uygulama, ActivityPub destekleyen bir sosyal medya uygulaması oldu. Eski Mastodon hesabımı belki hatırlarsınız, bırakıp bırakmamakta ciddi kararsızlık yaşadıktan sonra harekete geçmemde üç sebep etken oldu.

  1. Dahil olduğum sunucu sadece İngilizce iletişim kurmama izin veriyordu. Tercihim, hem İngilizce hem Türkçe kullanabilmekti. Sunucu kısıtlamalarına tabi olmak istemedim.
  2. Kendi sunucumu çalıştırmak ve arkasındaki teknolojiyi keşfetme merakındaydım.
  3. Dahil olduğum sunucunun ileride açık durup durmayacağı belli değildi (tüm sunucular için geçerli). En azından kendi alan adımla bir sunucu ve kullanıcı hesabı yaratırsam, uzun yıllar bu hesabımı koruyabilecektim.

Geçmişten tecrübem olmadığı için, sürece donanım ihtiyaçlarını anlamaya çalışarak başladım. Okuduğum birçok makale, Mastodon’un işlemci ve bellek ihtiyacının alternatiflerine göre çok daha yüksek olduğu yöndeydi. Elimdeki Pi4 malum; donanıma göre en makul (işlev-donanım ihtiyacı olarak) uygulamanın Pleroma olduğunu keşfettim. Biraz kullandığımda, Mastodon’la aralarında aşağıdaki farklar dikkatimi çekti. Bu listeyi çok kabartamıyorum, yukarıda da paylaştığım gibi başka sunucu deneyimim olmadığı için olandan çıkarımımı yapıyorum.

  1. Pleroma’da, Mastodon’daki 500 karakterden farklı olarak 5000 karaktere kadar gönderi yayınlayabiliyorsunuz.
  2. Pleroma Markdown destekliyor.
  3. Mastodon’un daha başarılı bir web arayüzü olsa da, Pleroma üçüncü taraflarca geliştirilen arayüzlere (Front-End) çok açık.
    Bence yine de hala Mastodon’un arayüzüne yaklaşan bir alternatif yok.
  4. Her iki platform da birbirine işlev olarak yakın olduğu için, Mastodon’dan Pleroma’ya geçişte bir kullanım zorluğu yaşamadım.

Kurulum

Aşağıda, Freedombox’ta gerçekleştirdiğim kurulumun adımlarını paylaşıyorum. Burada derlediğim bilgileri, olduğu şekliyle Pleroma Kullanım Kılavuzundan alıp, FBX yapılandırmasına göre biraz değiştirdim (ör: nginx yerine apache kullanımı olacak şekilde).

OTP ve Kaynaktan Yükleme Arasındaki Fark

Pleroma’yı yüklemek için iki alternatifiniz var. Birisi, kaynağı indirip sunucunuzda derlemek, diğeri hazır derlenmiş OTP (Open Telecom Protocol) ile yükleme yapmak.

Uzun bir süre kendi sunucumu kaynak kodundan derleyerek çalıştırdım. Ancak, son dönem güncellemelerinin gerektirdiği bağımlılıkları Debian deposu doyurmadığı için, OTP ile kuruluma geçtim. Tecrübelerim, OTP’nin işlemci ve belleği daha iyi yönettiği yönde oldu. Kendi derlediğim sunucuda işlemci %30 - 40 mertebelerinde çalışırken, OTP kurulumumda bu oran %10-15 seviyelerine düştü.

OTP kurulumu daha kolay, işletim sisteminizin deposundaki bağımlılılara ihtiyaç duymayan, önceden derlenmiş hazır uygulama yöntemi sunuyor. OTP’nin tek dezavantajı, sunucu yedeklerinizin geri yüklemesinin zor oluşu. İşin teknik zorluğundan sebep, yayınlarımın yedeklerini almaktan bir süre önce vazgeçtim.

Aşağıda paylaştığım yükleme OTP içindir. Şayet kaynak kodundan derleyerk yüklemek isterseniz, yazımın başında paylaştığım Pleroma kılavuzundan dağıtımınıza göre talimatlara bakabilirsiniz.

OTP ile Pleroma Kurulumu

Başlamadan önce, bilgisayarınızdaki işlemcinin ne olduğunu keşfedelim. Bu bilgi, bize hangi OTP sürümünü çalıştırabileceğimizi gösterecek.

  1. Terminal ile sunucunuza bağlanın.

  2. Aşağıdaki komutu olduğu haliyle kopyalayıp yapıştırın:

arch="$(uname -m)";if [ "$arch" = "x86_64" ];then arch="amd64";elif [ "$arch" = "armv7l" ];then arch="arm";elif [ "$arch" = "aarch64" ];then arch="arm64";else echo "Unsupported arch: $arch">&2;fi;if getconf GNU_LIBC_VERSION>/dev/null;then libc_postfix="";elif [ "$(ldd 2>&1|head -c 9)" = "musl libc" ];then libc_postfix="-musl";elif [ "$(find /lib/libc.musl*|wc -l)" ];then libc_postfix="-musl";else echo "Unsupported libc">&2;fi;echo "$arch$libc_postfix"

Komutu girdiğinizde, terminal ekranının alt satırında ihtiacınız olan sürümü göreceksiniz (ör: pi4 için arm64). Bu bilgiyi bir yere not edin.

  1. Gerekli uygulama / bağımlıklıkları aşağıdaki komutla kurun (bir kısmı zaten yüklü bulunacak):
sudo apt update
sudo apt install npm imagemagick ffmpeg libimage-exiftool-perl unzip libncurses5 postgresql-contrib libmagic-dev
  1. Kullanıcınızı SuperUser ile değiştirin.
    Bundan sonra yapacaklarınızda dikkatli olun.
sudo su
  1. pleroma kullanıcısı yaratın:
adduser --system --shell  /bin/false --home /opt/pleroma pleroma
  1. Pleroma uygulamasını, aşağıdaki komutla deposundan indirin. Komutun yazan kısmını, yukarıda 2. adımda not ettiğiniz ifadeyle değiştirin.
su pleroma -s $SHELL -lc "
curl 'https://git.pleroma.social/api/v4/projects/2/jobs/artifacts/stable/download?job=$FLAVOUR' -o /tmp/pleroma.zip
unzip /tmp/pleroma.zip -d /tmp/
"
  1. İndirdiğiniz uygulamayı, serverınızda /opt/ klasörüne taşıyın, geçici dosyaları temizleyin.
su pleroma -s $SHELL -lc "
mv /tmp/release/* /opt/pleroma
rmdir /tmp/release
rm /tmp/pleroma.zip
"
  1. Pleroma sunucunuzun ihtiyacı olacak uploads klasörünü oluşturun, gerekli yetkileri tanımlayın:
mkdir -p /var/lib/pleroma/uploads
chown -R pleroma /var/lib/pleroma
  1. Pleroma’da özelleştirmelerinizi yükleyeceğiniz (emojiler, web arayüzler, vb.) static klasörünü oluşturun.
mkdir -p /var/lib/pleroma/static
chown -R pleroma /var/lib/pleroma
  1. Yapılandırma klasörünüzü oluşturun.
mkdir -p /etc/pleroma
chown -R pleroma /etc/pleroma
  1. Yapılandırma sihirbazını çalıştırın. Bu kısımda, Pleroma yapılandırması başlatılacaktır. Uygulama, sunucunuzla ilgili size istediğiniz ayarları soracaktır. Süreç İngilizce devam eder; ne olduğunu bilmediğiniz soruların yanıtlarını varsayılan değerlerde bırakın.
su pleroma -s $SHELL -lc "./bin/pleroma_ctl instance gen --output /etc/pleroma/config.exs --output-psql /tmp/setup_db.psql"

Debian 12 (Bookworm) itibarıyla Pleroma’da bir bağımlılık sorunu oluştu. Bu sorunu gidermek için Pleroma’nın kurulumda ihtiyacı olacak libssl dosyasını, Debian deposundan ayrıca indirebilirsiniz. Bu yazının yazıldığı dönemde Raspberry Pi için güncel sürüm libssl1.1_1.1.1n-0+deb11u5_arm64.deb İndirdiğiniz dosyayı sudo apt install ile yükleyebilirsiniz.


  1. SQL veritabanınızı oluşturun.
su postgres -s $SHELL -lc "psql -f /tmp/setup_db.psql"
su pleroma -s $SHELL -lc "./bin/pleroma_ctl migrate"
  1. Pleroma sunucunuzu deneme amaçlı başlatın.
su pleroma -s $SHELL -lc "./bin/pleroma daemon"
  1. Yapılandırmanızın doğru olup olmadığnın kontrolünü yapın.
sleep 20 && curl http://localhost:4000/api/v1/instance
  1. Pleroma sunucunuzu durdurun.
su pleroma -s $SHELL -lc "./bin/pleroma stop"
  1. Pleroma sunucu hizmetinin systemd tarafından çalıştırılabilecek dosyalarını kopyalayın.
cp /opt/pleroma/installation/pleroma.service /etc/systemd/system/pleroma.service
  1. Pleroma sunucunuzu başlatın ve etkin hale getirin.
systemctl start pleroma
systemctl enable pleroma
  1. “Admin” yetkili ilk kullanıcı hesabınızı (kendi hesabınızı), aşağıda ilgili değerleri isteğinize göre değiştirerek oluşturun.
cd /opt/pleroma
su pleroma -s $SHELL -lc "./bin/pleroma_ctl user new yeni_kullanici yeni_kallanici@eposta.com --admin"

Son komutu girdiğinizde sunucu size kullanıcı bilgilerinizi gösterip emin olup olmadığınızı soracak. Kontrol sonrası teyit edin. Terminal ekranının en altında size sağlanan linki kopyalayıp web tarayıcınıza yapıştırın. Bu sizi, şifrenizi belirleyeceğiniz web sayfasına yönlendirecektir.

  1. Root (Super User) kullanıcısından çıkın.
exit

Tebrikler! Sunucunuzu kurdunuz! Ancak, iş burada bitmiyor. Hem Apache ayarlarınızı hem de benim gibi Pi4 üzerinden çalışıyorsanız işlemci optimizasyonunuzu yapmanız gerekir. Lütfen okumaya devam edin.

BEAM Optimizaysonu

Pleroma, size sağlıklı bir haber akışı sağlayabilmek için işlemcinizin sürekli hazır ve çalışır olmasını ister. Bunu yapmak için busy-waiting kullanır. Bu yöntem, pi4 gibi düşük donanımlı SCB’lerde (tek kartlı bilgisayar) çok ciddi işlemci yükü doğrur ve sunucunuzun yer yer donmasına ve kitlenmesine de neden olabilir. Uzun uğraşlar sonrası, “busy-waiting"den aşağıdaki şekilde kurtulabileceğimi keşfettim.

  1. Sunucunuza terminal ile bağlanın.

  2. Pleroma sunucunuzu durdurun.

sudo systemctl stop pleroma
  1. Aşağıdaki komutla vm.args yapılandırmanıza girin.
sudo nano /opt/pleroma/releases/2.5.0/vm.args

Bu kılavuzu hazırladığımda yüklü Pleroma sunucu sürümüm 2.5.0’dı. Dosya yolunda kendi sürümünüzü kontrol edin.

  1. Dosya içeriğine aşağıdaki 3 satırı ekleyin.
+sbwt none
+sbwtdcpu none
+sbwtdio none

Ctrl+x > y > enter ile kaydedip çıkın.

  1. Pleroma sunucunuzu çalıştırın.
sudo systemctl start pleroma

Apache Yapılandırması

Apache yapılandırmasını ilk sırada yapabileceğiniz gibi, herşeyi kurup hazırladıktan sonra en son da yapabilirsiniz. Günün sonunda, Pleroma sunucunuza internetten erişim gerekeceği için, mutlaka bir yapılandırma olmalı.

İşe başalamadan önce, terminalinize bağlanıp sudo systemctl stop pleroma ile sunucunuzu durdurun. Ardından, aşağıdaki işlemleri sırasyıla yapın.

  1. Pleroma sunucunuz için bir apache yapılandırma dosyası oluşturun.
sudo nano /etc/apache2/sites-available/01-site_isminiz.com.conf
  1. Açılan nano dosyasına, aşağıdaki içeriği, kendi sununucu adresinizi girecek şekilde kopyalayıp yapıştırın (yine .com uzantısını dikkatinizi çekmek için bıraktım; sizin suncunuzun uzantısı neyse, onu kullanın).

Apache altında “reverse proxy” kullanıyoruz. Eğer Pleroma kurulumunda varsayılan ayarları değiştirmediyseniz, Apache 127.0.0.1 altında 4000 portunu tarayıp, sitenize yönlendirecek.

 Define servername sunucu_adresiniz.com

<IfModule !proxy_module>
    LoadModule proxy_module libexec/apache24/mod_proxy.so
</IfModule>
<IfModule !proxy_http_module>
    LoadModule proxy_http_module libexec/apache24/mod_proxy_http.so
</IfModule>
<IfModule !proxy_wstunnel_module>
    LoadModule proxy_wstunnel_module libexec/apache24/mod_proxy_wstunnel.so
</IfModule>
<IfModule !rewrite_module>
    LoadModule rewrite_module libexec/apache24/mod_rewrite.so
</IfModule>

ServerName ${servername}
ServerTokens Prod

<VirtualHost *:80>
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =${servername}
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/sunucu_adresiniz.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/sunucu_adresiniz.com/privkey.pem

    RewriteEngine On
    RewriteCond %{HTTP:Connection} Upgrade [NC]
    RewriteCond %{HTTP:Upgrade} websocket [NC]
    RewriteRule /(.*) ws://127.0.0.1:4000/$1 [P,L]

    ProxyRequests off
    ProxyPass / http://127.0.0.1:4000/
    ProxyPassReverse / http://127.0.0.1:4000/
    ProxyPreserveHost On

</VirtualHost>

Ctrl+x > y > enter ile kaydedip çıkın.

  1. Oluşturduğunuz yapılandırmayı apache ile “tanıştırın” ve etkinleştirin.
cd /etc/apache2/sites-available
sudo a2ensite 01-site_isminiz.com.conf
  1. Apache sunucunuzu yeniden başlatın.
sudo systemctl restart apache2

Henüz almadıysanız yeni sunucu adresinize Let’s Encrypt sertifikası almayı unutmayın! Sertifikanız yerinde değilse, Apache size hata verir, yeniden başlamaz.

  1. Pleroma sunucunuzu başlatın.
sudo systemctl start pleroma

Artık Pleroma sunucunuza internetten de erişim sağlayabilirsiniz. Güle güle kullanın!


Apache sunucunuz pleroma sayfanızı açmıyorsa, yukarıda paylaştığım .confdosyasındaki <VirtualHost *:80> ifadesinideki yıldız yerine statik ip adresinizi girin (<VirtualHost 123.456.789.78:80> şeklinde).


Soapbox

UYARI: Soapbox beklediğimden fazla kaynak tükettiği ve Pleroma mantığının biraz da dışında çalıştığı için sonradan kullanmaktan vazgeçtim. Önerim, varsayılan Pleroma arayüzüne hiç müdahale etmemeniz ancak, arzu ederseniz aşağıdaki yöntemle devam edebilrsiniz. OTP kurulumda Soapbox’ı sonradan kaldıramadığımı ayrıca paylaşmak isterim.

Pleroma web arayüzünün çok da göze hitab ettiğini düşünmüyorum. Kendi sunucunuzu çalıştırıp baktıysanız, “alışık olduğumuz” çağdaş sosyal medya arayüzlerinden oldukça uzak.

Ancak Pleroma’nın bir güzel yanı, web arayüzünü temalayabilmeniz. Birçok alternatif arasında ben kendi sunucumu Soapbox ile temaladım.

Eğer hoşunuza gittiyse, aşağıdaki komutlarla siz de benzerini yapabilirsiniz.

Buradaki komutlar Soapbox OTP kurulum sayfasından alınmıştır. Komutlar, sadece OTP kurulumunda çalışmaktadır. Kaynaktan kurulum yaptıysanız, paylaştığım sayfayı ziyaret ederek adımları takip edebilirsiniz.

  1. ssh ve terminal üzerinden sunucunuza bağlanıp, “ev” (~/) dizininizde olduğunuzu kontrol edin.

  2. Aşağıdaki komutları sırasıyla çalıştırın.

curl -L https://gitlab.com/soapbox-pub/soapbox/-/jobs/artifacts/develop/download?job=build-production -o soapbox-fe.zip
sudo su
busybox unzip soapbox-fe.zip -o -d /var/lib/pleroma
chown -R pleroma /var/lib/pleroma
exit
rm ~/soapbox-fe.zip

Tarayıcınızdan Pleroma hesabınıza bağlandığınızda arayüzün değişmiş olduğunu göreceksiniz.
İyi eğlenceler : )

Pleroma Yedekleme

Yedeklemeye başlamadan, Pleroma hizmetini aşağıdaki komutla durdurun.

sudo systemctl stop pleroma

OTP ile Pleroma kurduysanız, yedek alacağınız 3 veri olacak.

  1. Sunucunuza yüklediğiniz görsel, ses, video vb. dosyalar:
sudo zip -qr <yedegi_almak_istediginiz_dosya_adi> /var/lib/pleroma/uploads
  1. Pleroma yapılandırma dosyanız:
sudo cp -f /etc/pleroma/config.exs <yedegi_almak_istediginiz_dizin>
  1. Pleroma SQL veritabanı:
sudo -Hiu postgres pg_dump -d pleroma --format=custom > <yedegi_almak_istediginiz_dosyaadi.pgdump>

Yedekleri aldıktan sonra sudo systemctl start pleroma ile hizmeti başlatabilirsiniz.

Pleroma Geri-Yükleme

OTP ile Pleroma sunucusu yükledikten sonra ve yukarıda tariflenen şekilde yedek aldıysanız, aşağıdaki adımlarla geri-yükleme yapabilirsiniz.

Pleroma kurulumunuzu yedek aldığınız config.exs dosyasındaki verilere göre oluşturursanız, geri-yükleme sizin için daha az zorlu olur.

  1. systemctl stop pleroma ile hizmeti durdurun.
  2. yedeğini aldığınız /var/lib/pleroma/uploads klasörünü yine aynı dizine açın. Dosya sahipliğinin pleroma:root olmasına ve mod’unun 755 olmasına dikkat edin.
  3. Yedek aldığınız config.exs dosyasını /etc/pleroma/config.exs yoluna kopyalayın. Dosya sahipliğinin pleroma:nogroup olmasına, modunun 644 olmasına dikkat edin.
  4. Aşağıdaki komutla kurulu olan veritabanı ve kullanıcısını kaldırın.
sudo -Hu postgres psql -c 'DROP DATABASE pleroma;'; sudo -Hu postgres psql -c 'DROP USER pleroma;'
  1. Aşağıdaki komutla yeni bir veritabanı oluşturun.
sudo -Hu postgres psql -c "CREATE USER pleroma WITH ENCRYPTED PASSWORD 'config.exs_dosyasında_belirttiginiz_sifre_buraya;'  
sudo -Hu postgres psql -c "CREATE DATABASE pleroma OWNER pleroma;"
  1. Almış olduğunu veritabanı yedegini geri-yükleyin
sudo -Hiu postgres pg_restore -d pleroma -v -1 <yedek_aldığınız_dosyaadi>
  1. systemctl start pleroma ile hizmeti başlatın.
  2. Son olarak, veritabanın hızlı erişimi için istatistik verileri yeniden derletin.
sudo -Hu postgres vacuumdb --all --analyze-in-stages

Pleroma Güncelleme

OTP üzerinden yükleme yaptıysanız, öncelikle sudo systemctl stop pleroma ile sunucunuzu durdurun.

su pleroma -s $SHELL -lc "./bin/pleroma_ctl update"

ile güncellemeyi indirin.

su pleroma -s $SHELL -lc "./bin/pleroma_ctl migrate"

ile veritabanınızı taşıyın.

Normal şartlar altında postgresql, apache ve pleroma hizmetlerini (yeniden) başlattığınızda güncellenmiş sunucunuzun devreye girmesi gerekir. En kötü ihtimalle sunucunuzu tümüyle yeniden başlatabilirsiniz.

Pratik Postgresql Komutları

OTP kurulumda çok gerekli olmadıysa da, kaynağından derlediğim Pleroma sunucumda birşeyler ters gittiğinde veritabanını “sıfırlamak” için aşağıdaki komutlar çok iş gördü.

Oldu ya, siz de Pleroma sunucunuzu kaldırmak veya yeniden yapılandırmak isterseniz, el altında bulunması için paylaşıyorum.

Veritabanı uygulamaları kullanımı konusunda en ufak bir fikrim yok. Bu komutları el yordamıyla buldum, sınırların dışına da çıkmamaya gayret ediyorum. Siz arzu ederseniz yine kendi araştırmanızı ayrıca yapın.

Aşağıdaki komutları terminalden girmenin birçok yolu var. Benim için en pratik yöntem, Debian üzerinde kurulu postgres kullanıcısı ile PSQL içinden komutları uygulamak oldu. Kullanıcı geçişi ve PSQL başlatmak için;

su  
sudo -i -u postgres  
psql  

postgres kullanıcısı altında psql uygulamasına geçtikten sonra, aşağıdaki komutları kullanabilirsiniz. Çıkmak için \q uygulayın.

  • Yüklü veritabanlarının listelenmesi \l

  • Tanımlı kullanıcıların listelenmesi \du

  • Yeni kullanıcı yaratılması create user <kullanici_adi> with encrypted password '<kullanici_sifresi>';

  • Yeni veritabanı yaratılması ve bir kullanıcıya atanması

CREATE DATABASE <veritabani_adi>
  WITH
  OWNER = <veritabani_kullanicisi>;
  • Belirli veritabanının silinmesi DROP DATABASE <veritabai_adi>;

  • Belirli kullanıcının kaldırılması DROP USER <kullanici>;

  • Belirli veritabanı içindeki tablolarının listelenmesi \c <database_name> ve /dt+

  • PSQL’den çıkış \q

Şayet PSQL’de bir değişiklik yapıp çıktıyasanız ve hizmeti yeniden başlatmak istiyorsanız, terminal ekranında aşağıdakini kullanabilirsiniz.
sudo systemctl restart postgresql


PSQL’e girmeden ve shell altında yukarıdaki komutları kullanmak isterseniz, terminal ekranında sudo -Hu postgres psql -c 'PSQL_KOMUTU' kullanabilirsiniz.


Webtrees

Soyağacı çalışmalarına meraklıysanız, webtrees kurulumu çok pratik, kullanımı da bir o kadar esnek.

Webtrees kurmak için, aşağıdaki adımları izleyebilirsiniz.

  • Öncelikle Uygulamayı çalıştıracağınız alanadını belirleyin.
  1. Sunucunuzda /var/www/alanadi dizinini oluşturun.
  2. Uygulamayı web sitesinden sunucunuza wget https://github.com/fisharebest/webtrees/releases/download/2.1.18/webtrees-2.1.18.zip ile indirin (güncel sürüme web sitesinden bakın).
  3. Indirdiğiniz sıkıştırılmış dosyayı unzip webtrees-2.1.18.zip -d /var/www/alanadi yoluna açın.
  4. Aşağıdaki komutlarla klasör ismini değiştirip apache’ye sahiplik tanımlayın.
sudo mv /var/www/webtrees/alanadi /var/www/alanadi/public_html
sudo chown -R www-data. /var/www/alanadi
  1. sudo nano /etc/apache/sites-available/01-alan_adiniz.conf dosyasında aşağıdaki içeriği kendi bilgilerinize göre düzenleyin:
 Define servername alanadi.com
<VirtualHost *:80>
    ServerName alanadi.com
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteCond %{REQUEST_URI} !^/\.well-known/
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>
<VirtualHost *:443>
     ServerName alanadi.com
     DocumentRoot /var/www/alanadi/public_html

    <Directory /var/www/alanadi/public_html>
        <IfModule mod_rewrite.c>
            RewriteEngine On
            RewriteRule ^/index.php/(.*)$ /$1 [R,L]
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule ^(.*)$ index.php [L]
        </IfModule>
    </Directory>
 
    <Directory /var/www/alanadi/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/alanadi-error.log
    CustomLog ${APACHE_LOG_DIR}/alanadi-access.log combined

SSLCertificateFile /etc/letsencrypt/live/alanadi/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/alanadi/privkey.pem

</VirtualHost>
  1. Aşağıdaki komutlarla sitenizi etkinleştirip, apache’yi yeniden başlatın.
sudo a2ensite /etc/apache/sites-available/01-alan_adiniz.conf
sudo systemctl restart apache2
  1. Plinth arayüzünde settings > configure ile alanadi değişikliğini yapın ve Let’sEncrypt sekmesinden sitenizin sertifikasını temin edin.
  2. Aşağıdaki komutlarla postgre kullanıcısına geçiş yapıp psql çalıştırın.
su  
sudo -i -u postgres  
psql  

9.create user webtrees with encrypted password '<kullanici_sifresi>'; ile webtrees kullanıcısını yaratın.
10. Aşağıdaki komutla veritababınızı yaratıp, psql’den çıkın.

CREATE DATABASE soyagaci
  WITH
  OWNER = webtrees;
\q
  1. sudo systemctl restart postgresql ile veritabanını yeniden başlatın.
  2. Webtrees, otomatik güncelleme özelliği için PHP-zip eklentisinin yüklü olmasını ister. Aşağıdaki komutla (sunucunuzda yüklü PHP sürümüne uygun şekilde), ilgili eklentiyi yükleyin.
sudo apt update && sudo apt install php8.2-zip
  1. Tarayıcınızdan yeni oluşturduğunuz alanadıyla sitenize bağlanın. Kurulum adımları sizi yönlendirecektir. Kurulumda, veritabanı uygulaması olarak PostgreSQL, vertiabanı olarak soyagaci veritabanı kullanıcısı olarak webtrees ile yukarıda belirlediğiniz şifrenizi kullanın. Uygulama hemen sonra sizden ilk oluşturmak istediğiniz ilk (admin) kullanıcı bilgilerini isteyecektir.
  2. /var/www/alanadi/public_html/data klasörü içindeki config.ini.php dosyasını aşağıdaki içeriğe göre düzenleyin. Özellikle base_url değişkeninin, doğrudan sitenizin yolunu göstermesine dikkat edin.
; <?php return; ?> DO NOT DELETE THIS LINE
dbtype="pgsql"
dbhost="localhost"
dbport="5432"
dbuser="webtrees"
dbpass="[COK_GIZLI_SIFRENIZ]"
dbname="soyagaci"
tblpfx="wt_"
base_url="https://alanadi.com"
rewrite_urls="0"

Güle güle kullanın!

Webtrees Yedekleme

Webtrees yedeklemesi iki aşamalı olarak gerekleşiyor.

İlk aşamada, veritabanına yüklediğiniz resim, dosya vb. ortamları almanız gerekiyor. Bu veriler sunucuda /data klasöründe yer alıyor. Bu klasörü olduğu gibi kopyalamanız yeterli.

İkinci aşamada, veritabanının kendisini yedeklemeniz gerekiyor.
Bunun için postgres kullanıcısı olarak pg_dump komutunu kullanabilirsiniz.

sudo -Hiu postgres pg_dump soyagaci > /home/fbx_kullanici_adiniz/soyagaci.sql

Komut, sunucuda ev dizininizde bir yedek dosyası yaratacaktır.

Webtrees Geri Yükleme

Almış olduğunuz yedeğin geri yüklenmesi için, uygulamayı kurmuş ve soyagaci veritabanını oluşturmuş olmanız gerekir.

Akabinde, yedek aldığınız /data klasörünü aynı veriyoluna kopyalayıp, aşağıdaki komutla psql veritabanınızın yüklemesini yapın.

sudo -Hiu postgres psql --set ON_ERROR_STOP=on soyagaci < /home/fbx_kullanici_adiniz/soyagaci.sql

Son olarak, veritabanın hızlı erişimi için istatistik verileri yeniden derletin.

sudo -Hu postgres vacuumdb --all --analyze-in-stages

PiGallery2

Cep telefonlarıyla fotoğraf çekme alışkanlığı geliştikçe, elimdeki arşiv her geçen gün kontrolsüz bir şekilde büyümeye başlıyor. Buna bir de sohbet uygulamalarından gelen fotoğraflar da eklenince, iş kontrolden çıkmaya başladı. Karmaşasından hiç bakamadığım fotoğraflar ciddi yer tuttuğu gibi, ziyaret edilmemekten boş yere de yer kaplıyordu.

Fotoğrafları bilgisayarımda arşivleyebileceğim bir düzen oluşturmam mümkün. Shotwell, Digikam gibi uygulamalar aslında tam da bu işe yarıyor. Ancak diğer taraftan, bu fotoğrafları eşim ve dostumla da paylaşabileceğim bir arayüze ihtiyacım olduğundan, bu işi sunucumda yapmaya çok hevesliydim.

İhtiyacım basitti:

  • Fotoğraflarıma bir web arayüzünden ulaşabileyim
  • Bu arayüze ancak bir kullanıcı adı ve şifreyle erişilsin (ki kimse arşivimi görmesin)
  • İstediğimde basit bir linkle album / fotoğraf paylaşabileyim; karşı taraf aynı fotoğrafları indirebilsin.
  • Sadece fotoğraf değil, video kayıtlarımı da aynı ortamda sunabileyim
  • FBX altında çalışacak, Debian deposu dışında bağımlılığı olmayan, kurulumla helak olmayacağım bir uygulama olsun
  • Kuracağım uygulama sunucumdaki fotoğraflarıma hiç dokunmasın, verim güvende olsun. Uygulamayla sadece arama yapıp arşivimde gezinebileyim.
  • Özgür yazılım kullanayım.

Çok basit gibi görünüyor değil mi? : ) Bu yazıyı yazdığım dönemde, çok uzun süren araştırma sonucu yukarıda paylaştıklarımı yapabilen tek bir uygulama buldum. Tanıştırayım: PiGallery2 (Github sayfasına buradan ulaşabilirsiniz).

Uygulama, sunucumdaki fotoğrafları oldukları klasör düzeninde sergiliyor, yukarıda paylaştıklarımın tümünü gerçekleştiriyor, ilaveten de varsa fotoğraflarınızdaki GPS konumunu ekranda küçük bir haritada gösterebiliyor. Uygulamayı keşfettiğimde çölde vaha bulmuş kadar sevindim!

Kurulum

Uygulama, çoğu benzerleri gibi Docker üzerinden kurulabildiği gibi, kaynak kodunu da derleyip sunucunuzda çalıştırabiliyorsunuz. Bu işlem, 8GB belleği olan bir Pi4’te yaklaşık 5 dakika sürüyor.

FBX’da Docker çalıştırmayı tercih etmediğim için, uygulamayı kaynak kodundan derleyerek kurdum. Github sayfasında etraflıca anlatılan kurulumu burada da paylaşmak isterim.

Örnek olması açısından kurulumu /var/www/album altına yapacağım; siz farklı bir klasör düzeni kurgulayacaksanız, düzenlemenizi ona göre yapın.

Herhangi bir işleme başlamadan önce, album sitenizin çalışacağı alan adını DNS ayarlarınızdan düzenleyip, yukarıda bahsettiğim şekilde Let’sEncrypt sertifikanızı alın.

  1. Kuruluma başlamadan önce, sunucunuza nodejs ve npm kurmanız gerekiyor. npm kurulumuyla nodejsbağımlılık olarak yükleniyor.
sudo apt update && sudo apt install npm
  1. PiGallery web sitesinden kaynak dosyaları ev dizininize indirin ve aynı dizine ayıklayın.
cd ~
wget https://github.com/bpatrik/pigallery2/archive/master.zip
unzip master.zip
  1. Ayıklanan pigallery2-master klasörünü yerine taşıyıp sahipliğini kendi kullanıcınıza verin.
mv ~/pigallery2-master /var/www/album/
sudo chown -R kullanıcı_adiniz:users /var/www/album
  1. Kuruluma geçmeden, apache yapılandırmanızı aşağıdaki içeriğe göre sudo nano /etc/apache2/sites-available/01-album.conf ile oluşturun.
<VirtualHost *:80>
 ServerName album.alanadim.com
 RewriteEngine On
 RewriteCond %{HTTPS} off
 RewriteCond %{REQUEST_URI} !^/\.well-known/
 RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

<VirtualHost *:443>
 ServerName album.alanadim.com
 ProxyRequests Off
 AllowEncodedSlashes On

 ProxyPass / http://localhost:3030/
 ProxyPassReverse / http://localhost:3030/

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/album.alanadim.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/album.alanadim.com/privkey.pem
</VirtualHost>

Yukarıdaki yapılandırmaya dikkat ederseniz, uygulamayı port 3030 üzerinden çalışacak şekilde düzenledim. Yapılandırmanızı sudo a2ensite 01-album.conf ile devreye alın ve sudo systemctl restart apache2 ile hizmeti yeniden başlatın.

  1. Arık kuruluma geçebiliriz. İlgili dizine geçip, uygulamamızı kaynaktan oluşturmaya başlayalım.
cd /var/www/album/pigallery2-master
npm install
npm run build

komutlarını çalıştırın. Kurulumda hata mesajlarıyla karşılaşmanız durumunda, gerekli bağımlılıkları kontrol edip, gerekirse yükleme yapın.


  1. Kurulum sağlıklı bir şekilde tamamlandıysa, port 3030 üzerinden ilk defa çalıştırmak için aşağıdaki komutu kullanın.
npm start -- --Server-port=3030

port 3030 herhangi bir sebepten hata verirse port 8080 ile deneyin.
Uygulamayı ffmpeg-probe hatasından çalıştıramazsanız, rm -r /var/www/album/pigallery-master/node_modules/ffmpeg-static klasörünü silip, yeniden çalıştırmayı deneyin.


  1. Bir hata mesajı almadıysanız ve terminalde uygulamanın çalıştığını görüyorsanız, web tarayıcınız üzerinden https://album.alanadim.com (veya yerel ağda http://yerel_ag_adresi:3030) adresine girip, Settingsden alan adınız, bağlantı portunuz, fotoğraf albümlerinizin konumu vb. bilgilerle ilk yapılandırmanızı yapın. Burada yapacağınız ayarları, pigallery-master klasöründeki config.json üzerinden de yapabilirsiniz. Önerim, elbette grafik arayüz kullanmak.
  2. Ayarlardan çıktıktan sonra, deneme yapmak için terminal üzerinden çalıştırdığınız komutu Ctrl+C ile durdurun ve bu defa sadece npm start ile çalıştırın. Komutta herhangi bir problem olmuyor ve sitenize ulaşabiliyorsanız, yapılandırmanız düzgün çalışıyor demektir.
  3. Uygulamanızın sunucunuzu her çalıştığında başlamanızı isterseniz, aşağıdaki gibi bir script olutşturup, cron görevi olarak tanımlayabilirsiniz. Script ismini unutmamaniz için start_pigallery2.sh koyup, ev dizinizde tutabilirsiniz.
#!/bin/bash

cd /var/www/album/pigallery-master
export NODE_ENV=production
npm start

yukarıdaki scripti oluşturduktan sonra chmod u+x start_pigallery2.sh ile yürütülebilir hale getirmeyi unutmayın.
10. crontab -e ile cron görevini @reboot sleep 300 && /bin/sh /home/kullanicim/start_pigallery2.sh şeklinde tanımlayabilirsiniz.

Yedekleme / Güncelleme

Aşağıdaki dosyaların birer yedeğini alın. Bu dosyaları, güncelleme / yeniden yükleme sonrası oldukları dizine tekrar kopyalayabilirsiniz.

#yapılandırma dosyanız
/var/www/alanadi/public_html/config.json

#siteniz için ffmpeg ile optimize edilmiş/küçültülmüş dosyalar
/var/www/alanadi/demo/tmp

FileGator

Freedombox kullanırken en çok özendiğim uygulamalardan biri Nextcloud oldu. Klasör/dizin yaratmak ve bu dizinleri çevremdekilerle paylaşmak; onlara da okuma ve yazma yetkisi vermek çok aradığım bir işlevdi. Uzun süre BePasty ve Apache üzerinden dosya paylaşımı yaptıysam da, temel “klasör paylaşımı” ihtiyacımı bu iki uygulama yerine getirmedi.

Biraz arama tarama sonrası, FileGator ile karşılaştım. Uygulama’nın aşağıdaki özellikleri ilgimi çektiği için kurup kullanmaya başladım:

  • başkalarına kolaylıkla okuma/yazma yetkisi vererek istediğiniz klasör düzenini yaratabiliyorsunuz.
  • mevcut FBX kurulumu ile gelen uygulamalar haricinde bir bağımlılıklık gerektirmiyor (apache ve php ile çalışıyor).
  • yükleyip kullanması oldukça basit.

Filegator ile yakın arkadaşlarıma kendi root klasörüm altında birer klasör açıp her birine ayrı yetki verdim. Onları yetkilendirdiğim alanlar haricinde başka klasörü görmüyor ve erişemiyorlar. Aramızda dosya paylaşımı oldukça kolaylaştı; NextCloud (ve GoogleDrive) ihtiyacım ortadan kalktı. Uygulamanın sitesini incelemenizi öneririm.

Kurulum

FileGator’ın en sevdiğim özelliği, kurulumunun çok sade olmasıydı. Özetle aslında tek yaptığım, kaynak dosyalarını sunucuma indirip, web sunucumu bu dosyalara yönlendirmek oldu.

Adımları aşağıda sıralıyorum:

  1. Sunucunuza bağlanıp son sürümü indirin
wget https://github.com/filegator/static/raw/master/builds/filegator_latest.zip
  1. Indirdiğiniz dosyaları web sunucunuzun erişeceği dizine ayıklayın
sudo unzip filegator_latest.zip -d /var/www
  1. Ayıkladığınız dosyalara erişim için apache’yi yetkilendirin
sudo chown -R www-data: /var/www/filegator
  1. DNS ayarlarınızı yapın, FBX ile sertifikalarınızı alın.
  2. Apache yapılandırma dosyanızı sudo nano /etc/apache2/sites-available/01-filegator.alanadiniz.com.conf ile oluşturup, aşağıdaki içeriği kurulumunuza göre düzenleyin.
<VirtualHost *:80>
    ServerName filegator.alanadiniz.com
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteCond %{REQUEST_URI} !^/\.well-known/
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

<VirtualHost *:443>
    ServerName filegator.alanadiniz.com
    DocumentRoot /var/www/filegator/dist

    <Directory /var/www/filegator/dist>
        <IfModule mod_rewrite.c>
            RewriteEngine On
            RewriteRule ^/index.php/(.*)$ /$1 [R,L]
            RewriteCond %{REQUEST_FILENAME} !-f
           RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule ^(.*)$ index.php [L]
        </IfModule>
    </Directory>

    <Directory /var/www/filegator/dist>
        Options -Indexes +FollowSymLinks
        AllowOverride All
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/filegator.alanadiniz.com-error.log
    CustomLog ${APACHE_LOG_DIR}/filegator.alanadiniz.com-access.log combined

SSLCertificateFile /etc/letsencrypt/live/filegator.alanadiniz.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/filegator.alanadiniz.com/privkey.pem

</VirtualHost>
  1. sudo a2ensite /etc/apache2/sites-available/01-filegator.alanadiniz.com.conf ve sudo systemctl restart apache2 ile web sunucunuzu yapılandırıp tekrar başlatın.

  2. https://filegator.alanadiniz.com/ adresini ziyaret edin. İlk kullanımda kullanıcı adı ve şifre admin/admin123 şeklindededir. Arayüze giriş yaptıktan sonra kendinize bir admin hesabı tanımlayıp kullanmaya başlayabilirsiniz!


İPUÇLARI

  • Web arayüze girmeden SFTP ile klasörlere erişim isterseniz, kendi kullanıcınızı www-data grubuna aşağıdaki komutla ekleyebilirsiniz.
sudo usermod -aG www-data kullanici_adiniz
  • PHP ayarları sebebiyle dosya indirme yükleme sınırları yeterli olmayabilir. Bu durumda, sudo nano /etc/php/8.2/apache2/php.ini dosyasında aşağıdaki düzenlemeyi yapabilirsiniz.
upload_max_filesize = 2000M

Ardından, sudo nano /var/www/filegator/configuration.php dosyasında aşağıdaki değişkeni benzer şekilde düzenleyin.

'frontend_config' => [
'upload_max_size' => 2000 * 1024 * 1024, // 2000MB
  • Eklediğiniz kullanıcıların şifre değişikliği yapmasını istemiyorsanız, web arayüzünden “Users” sekmesini kaldırabilirsiniz. Bunun için sudo nano /var/www/filegator/configuration.php dosyasında aşağıdaki değişikliği yapabilirsiniz.
'add_to_head' => '<style>.navbar-item.profile{display:none!important}</style>',

MiroTalk P2P

FBX’a son dönem eklenen JANUS, her ne kadar özgür yazılım olsa da, çok temel konferans işlemlerini yapabildiğinden, bir alternatif yüklemenin ihitiyaç olduğunu düşündüm. Alternatifler arasında en başaırlı uygulama Jitsi Meet gibi görünse de, birkaç sorunla geliyor (en başta ejabberd yerine Prosody kullanması).

Aşağıdaki temel ihtiyaçları karşılamak üzere tarama yaptığımda, Mirotalk P2P ihtiyacımı karşılar göründü.

  • Yüklemesi pratik
  • P2P görüşme sağlıyor (sunucuya yük bindirmiyor)
  • Şifreli bağlanma imkanı sunuyor
  • Harici STUN / TURN sunucusu kullanabiliyor (ejabberd ile uyumlu)
  • Canlı görüntü yanında, sohbet, ekran paylaşımı gibi gelişmiş özellikler sunuyor.

Tek hoşuma gitmeyen tarafı, uygulama geliştiricisinin kendi ve sponsorlarının reklamlarını çok baskın halde sunması. Tümüyle özgür yazılım olduğu için, arzu edenler bunları ayrıca yok edebilir.

Uygulamanın sayfasına buradan, dökümantasyonuna buradan ulaşabilirsiniz.

Uygulamayı yüklemeye başlamadan önce aşağıdaki hazırlıkları tamamlayın:

  • Alan adı hazırlıklarınızı yapın, apache yapılandırmanızı hazırlayın ve sertifikanızı alın. Apache yapılandırma dosyanızı aşağıdaki şekilde oluşturabilirsiniz:
<IfModule !proxy_module>
    LoadModule proxy_module libexec/apache24/mod_proxy.so
</IfModule>
<IfModule !proxy_http_module>
    LoadModule proxy_http_module libexec/apache24/mod_proxy_http.so
</IfModule>
<IfModule !proxy_wstunnel_module>
    LoadModule proxy_wstunnel_module libexec/apache24/mod_proxy_wstunnel.so
</IfModule>
<IfModule !rewrite_module>
    LoadModule rewrite_module libexec/apache24/mod_rewrite.so
</IfModule>

<VirtualHost *:80>
ServerName konferans_sitem.com
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/\.well-known/
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

<VirtualHost *:443>
ServerName konferans_sitem.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/konferans_sitem.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/konferans_sitem.com/privkey.pem

Protocols h2 http/1.1

    RewriteEngine On
    RewriteCond %{HTTP:Connection} Upgrade [NC]
    RewriteCond %{HTTP:Upgrade} websocket [NC]
    RewriteRule /(.*) ws://localhost:3100/socket.io/$1 [P,L]

    #ProxyRequests must be off or you open your server to abuse as an open proxy
    ProxyRequests off
    ProxyPass / http://localhost:3100/
    ProxyPassReverse / http://localhost:3100/
    ProxyPreserveHost On
</VirtualHost>
  • TURN sunucusunun şifresini admin kullanıcı şifrenizden farklı olması için bir FBX arayüzü üzerinden “dummy” kullanıcı (örneğin vc)
  • “dummy” kullanıcınızı online tutacak bir xmpp istemcisine kurun. Bu hesabı kullanmasanız da, ejabberd online görsün.

Kurulum

Kurulum adımları için aşağıdakileri takip edebilirsiniz:

  • Henüz sunucunuzda yüklü değilse npm yükleyin:
sudo apt update && sudo apt install npm
  • Uygulamanın yükleneceği klasörü oluşturun ve uygulamayı kaynağından indirin:
sudo mkdir /var/www/konferans_sitem.com/
sudo chown -R kullanici_adiniz:users /var/www/konferans_sitem.com/
cd /var/www/konferans_sitem.com/
git clone https://github.com/miroslavpejic85/mirotalk.git
  • Yapılandırma dosyasını oluşturun:
cd /var/www/konferans_sitem.com/mirotalk
cp .env.template .env
  • Dosya içeriğinde aşağıdaki düzenlemeleri yapın:
HTTPS=false # true or false

HOST=localhost
HOST_PROTECTED=true # true or false
HOST_USERNAME=admin_kullanici
HOST_PASSWORD=gizli_sifre

PORT=3100

STUN_SERVER_ENABLED=true # true or false
STUN_SERVER_URL=stun:benim_sitem.com:3478

TURN_SERVER_ENABLED=true # true or false
TURN_SERVER_URL=turn:benim_sitem.com:3478
TURN_SERVER_USERNAME=vc
TURN_SERVER_CREDENTIAL=vc_sifre
  • Aşağıdaki komularla bir test sürüşü yapın:
npm install
npm start

Tarayıcınızdan https://konferans_sitem.com adresinden kontrolünüzü yapın. Siteye ulaşabildiyeseniz, Ctrl+C ile uygulamayı sonlandırın ve aşağıdaki adımlarla sabitleyin.

  • Klasör sahipliğini apache’ye verin:
sudo chown -R www-data: /var/www/konferans_sitem.com/
  • Sunucunuz her çalıştığında devreye girecek bir sistem dosyası oluşturun:
sudo nano /etc/systemd/system/mirotalk.service

Dosya içeriğini aşağıdaki şekilde düzenleyin:

[Unit]
Description=Mirotalk
After=network.target

[Service]
WorkingDirectory=/var/www/konferans_sitem.com/mirotalk
ExecStart=npm start
Restart=on-failure
User=www-data

[Install]
WantedBy=multi-user.target
  • Aşağıdaki komutlarla hizmeti başlatın:
cd /etc/systemd/system
systemctl enable mirotalk.service
systemctl start mirotalk.service

Yedekleme

Kurulumunuzu yedeiğini almak için aşağıdaki dosyaların birer kopyasını saklayabilirsiniz:

/etc/systemd/system/mirotalk.service
/var/www/konferans_sitem.com/mirotalk/.env
/etc/apache2/sites-available/01-konferans_sitem.com.conf

Güncelleme

Yeni sürüme güncelleme yapmak için, aşağıdaki adımları izleyebilirsiniz:

  • Hizmeti durdurun
sudo systemctl stop mirotalk
  • Uygulama kalsör sahipliğini kendi kullanıcınıza alın
sudo chown -R kullanici_adiniz:users /var/www/konferans_sitem.com/
  • Güncel sürümü çekin
cd /var/www/konferans_sitem.com/
git pull
  • Klasör sahipliğini tekrar apache’ye verin ve hizmeti başlatın
sudo chown -R www-data: /var/www/konferans_sitem.com/
sudo systemctl start mirotalk

Hugo ile Web Siteleri Yaratmak

BU KISIM HENÜZ DERLENMEDİ

Üzerinde Çalıştığım Konular

Aradığım Uygulama / Hizmetler

Aşağıdaki işleri yapacak, pi 4 üzeriden çalışacak, Debian deposu ile uyumlu, Docker, Flatpak, Snap gibi sandbox paketlerden oluşmayan uygulamalar arıyorum. Siz de denk gelirseniz, paylaşmanızdan mutlu olurum.

  • Kitap / Plak Envanter Oluşturulması
    ERP ve ağır veritabanı kullanımına girmeden basit bir kütüphane uygulaması arıyorum.

Freedombox’ta Çözmek İstediğim Konular

Aşağıdakiler, henüz bir çözüm üretemediğim; vaktim oldukça araştırdığım konular. Eğer sizin bir çözümünüz olursa ve paylaşırsanız çok sevinirim.

  • Apache Webdav
    Hazır apache sunucum çalışırken, bir webdav klasörü oluşturmak, uzaktan dosyalarıma erişimi kolaylaştıracaktır. Bunun teknik olarak yapılabilirliğinin farkındayım, vakit ayırıp uğraşamadım. Bunun yerine şimdilik VPN ile sunucuma bağlanıp SMB üzerinden verilerime erişiyorum.

  • Searx Engellenmesi
    Kendi Searx suncumu çalıştırabiliyorum. Ancak ne hikmetse, 1 haftaya kalmıyor tüm arama motorları sunucumu engelliyor. Bunun önüne geçebilecek bir çözüm bulamadım, varsa beklerim.

Freedombox’ta Karşılaşabileceğiniz Sorunlara Pratik Çözümler

Kimi zaman bir sorunla karşılaşıp günlerce çözememenin sinir bozukluğunu hepimiz yaşıyoruz. Burada çözümü çok basit, ama keşfi vakit alan konuları toplamaya çalışacağım.

UUID Hatası

Tüm kurulumum harici diskler üzerinde olduğu için, sunucumu “hard-boot” ettiğimde bazen grub ve işletim sisteminin yüklü olduğu diskin kaybolduğu oluyor. Bunu genelde, “sunucum neden açılmadı” endişesiyle teşhis edebilirsiniz. Çok sonradan problemin kök sebebinin USB çoklayıcım olduğunu keşfettim ve aşağıda ayrı bir konu başlığında soruna değinmeye çalıştım. Ancak, bulgularımı paylaşmak için (veya başka sebepten size yardımcı olabileceğini düşündüğüm için) aşağıdaki iki yöntemi (biri veya her ikisini kullanabilirsiniz) not düşüyorum.

  1. Yöntem; işletim sisteminizin yüklü olduğu diskinizi bilgisayarınıza bağlayıp, “root” kullanıcısı olarak sudo nano /etc/fstab dosyasına girin. Burada UUID ile başlayan satırların başına # ekleyip, kaydedip çıkın. Diskinizi sağlıklı bir şekilde bilgisayarınızdan ayırdıktan sonra sunucunuza bağlayın; umarım sorununuz çözülmüş olur.

  2. Şayet harici disklerinizi yazının başında anlattığım şekilde Cockpit üzerinden mount ettiyseniz ve # eklemek sorun yaratıyorsa, Cockpit’e geri dönüp tüm disklerinizi umount ile ilişkisizlendirin. /etc/fstab dosyanızda da disk veriyollarınızın sonundaki auto defaults 0 0 değerlerini auto noauto, 0 0 olarak değiştirin. Bundan sonra sunucunuz her açılışta disklerinizi bağlamaya çalışmayacak, systemd kesintiye uğramadan işletim sisteminizi devreye sokacaktır. Diskleriniz zaten bağlıyısa (ve üzerlerinde bir hata yoksa) Debian kısa bir süre sonra kendiliğinden harici disklerinizi bulup tanımlayacaktır.

SSD Harici Diskinizi Bağladığınız SATA USB 3.0 Kutu ile Boot Edemiyorsunuz

Çokca uğraştığım, ancak kimsenin net bir şekilde çözümü anlatmadığı bir durum daha… Harici bir SATA SSD disk aldınız ve bir USB 3.0 muhafaza (veya adaptör) ile sunucunuza bağlayıp, bu disk üzerinden kurulum yapmak istiyorsunuz. Gelin görün ki Pi, USB 3.0 dönüştürücüleri pek sevmiyor. Ancak, bunun etrafından dolaşmanın bir yolu var.

Öncelikle, harici diski muhafazası içinde Pi’ın USB 2.0 portlarından birisine bağlayın (siyah port). Normal koşullarda bu şekilde çalışması lazım (çalışmıyorsa muhafazanızı başka yerde kullanırsınız - yapacak çok birşey yok). Çalıştıysa, güvenli bir şekilde söküp bu defa bilgisayarınıza bağlayın ve lsusb komutuyla diskinizin [VID] ve [PID] numaralarını bulun (bende [VID]: 152d, [PID]:0578. Bu iki numarayı lsusb 152d:0578 şeklinde görüntüledi). Bu numaraları bir yere kaydedin.

Akabinde, SSD diskinizin sudo nano /boot/firmware/cmdline.txt dosyasına girin. Bulduğunuz numaraları aşağıdaki formatta ilk satırın en başına yazın (yeni satır açmayın! sadece mevcut satır başına ekleyin).

usb-storage.quirks=[VID]:[PID]:u

Dosyadaki tek satırınız (kendi VID ve PID değerleriniz neyse) usb-storage.quirks=152d:0578:u console=tty0 console=ttyS1,115200 root=LABEL=RASPIROOT rw fsck.repair=yes net.ifnames=0 rootwait şeklinde olacak şekilde kaydedip, çıkın.

Sunucunuz, artık SSD diskinizi SATA adaptörü ve USB 3.0 üzerinden çalıştırabilecektir.

Yaptığımız iş, aslında diskimizin UASP ile değil, BOT ile çalışmasını sağlamak oldu. USB 3.0 hızımız %10-30 arasında azaldıysa da, USB 2.0’ın hızının çok üstüne çıktı. Bu sorun, tamamen sürücüden kaynaklanıyor - belki ilerleyen yıllarda Pi geliştiricleri uygun sürücüleri de dağıtımlarla paylaşıtlar.

Elektrik Kesintisi Sonrası Server Boot Etmiyor

Sunucunuzu hard-boot ettiğinizde veya bir elektrik kesintisi olduğunda açılmayıp donabilir. Birden fazla harici bellek kullanıyorsanız, bu sorun muhtemelen USB portunuza bağlı çoklayıcıdan kaynaklanıyor. USB çoklayıcınız “back-voltage"a (backfeed olarak da tanımlanıyor) sebep olup Pi’in usb portuna voltaj gönderiyorsa, sunucunuz ne yapacağını bilemiyor - boot edeceği diski de belirlemiyor.

Ben bu sorunu kaliteli bir USB çoklayıcı ile giderebildim. Marka zaruriyeti yok elbet ama çok sıkışırsanız U-Green şimdilik bende bir sorun yaratmıyor. Siz yine bakın, başka marka / model öneriniz olursa buraya not düşebilirim. Umarım faydası olur…

MiniDLNA Çalışmıyor

MiniDLNA güvenlik duvarı ayarlarınız doğru yapılandırılmamış olabilir. Cockpit uygulamasının ‘Networking’ sekmesinden, “Add Services” tuşunu seçin. Açılacak ekranda “minidlna” aratması yaptığınızda uygun protlar karşınıza çıkacaktır. Bu portları etkinleştirin, akabinden ister Cockpit üzerinden, ister terminal üzerinden (sudo systemctl restart firewalld) güvenlik duvarını yeniden başlatın. MiniDLNA erişilir durumda mı kontrol edin.

Sorun devam ederse, aşağıdaki komutla minidlna kullanıcısını freedombox-share grubuna ekleyin.

sudo usermod -aG freedombox-share minidlna

Bununla beraber, eğer syncthing kullanıyorsanız, minidlna‘in erişeceği klasörün sahipliğini syncthing:freedombox-user olarak tanımlayıp, chmod -R 775 ile tam yetki verin.

Son olarak da sudo minidlnad -R ile baştan bir arşiv taraması yaptırıp, sudo systemctl restart minidlna ile hizmeti tekrar başlatın.

SMB Klasörlerine Erişilmiyor

Hata kaza Samba’yı devre dışı bırakıp tekrar çalıştırdığınızda, yerel ağdan klasör yollarınıza erişim sağlayamıyorsanız, güvenlik duvarı ayarlarınızı kontrol edin. Hem INTERNAL hem EXTERNAL zonlarda samba portları (TCP 134, 445 / UDP 137, 138) açık olmalı. Portları etkinleştirdiğinizde güvenlik duvarını yeniden başlatmayı (sudo systemctl restart firewalld) unutmayın.

Sunucum’un root Kullanıcısına Gönderdiği E-postalara Erişemiyorum

FBX üzerinden rspamd uygulama arayüzüne girdiğinzide, root kullanıcısında e-posta iletimleri olduğunu görebilirsiniz. Bu maillar size ulaşmıyorsa, problem aslında bir root eposta hesabının bulunmamasından kaynaklanıyor. Bunu okuyorsanız, siz de FBX’ı Debian üzerinden kuranlardansınız.

Aşağıdakileri yapmaktansa, kendinize FBX üzerinden bir root aliası da yaratabilirsiniz (denemedim), FBX yapılandırmamı bozup bozmayacağını bilemediğim için tercihi aşağıdaki yöntemden yana kullandım.

  1. Sistem kullanıcılarını aşağıdaki dosyadaki tanımlarla postmasterdan kendi kullanıcınıza atfedin.
sudo nano /etc/aliases

postmaster: /dev/null şeklinde belirtirseniz, postmastera gelen tüm iletiler çöp kutunuza gider.

  1. Yukarıdaki dosyayı değiştirdikten sonra güncellemenizi etkinleştirip postfix servisini yeniden başlatın.
newaliases
postfix reload
  1. root klasörünüz altında bir e-posta yönlendirme dosyası yaratın
sudo nano /root/.forward

Bu dosyanın içine yönlendirmenin yapılmasını istediğiniz e-posta adresini yazın (ör:ged@hayalmasal.org).

Artık sistem bildirimleri kendi posta kutunuza düşecektir.

Roundcube Üzerinden E-Posta Gönderirken SMTP Doğrulama Hatası Oluşuyor

Son güncellemelerden sonra, Roundcube e-posta iletmeden önce alan adı sertfikanızın doğrulamasını yapmak istiyor. FBX ile gelen yapılandırma, buna izin vermediği için hatayla karşılaşılıyor.

Sorunu gidermek için;

  1. Roundcube yapılandırma dosyasına gidin
sudo nano /etc/roundcube/config.inc.php
  1. Dosyada $config['smtp_host'] = 'localhost:587'; değerini $config['smtp_host'] = 'tls://%n:587'; şeklinde değiştirin.
  2. Ctrl+X ile nanodan çıkış yapın ve sudo systemctl restart apache2 ile apache hizmetini yeniden başlatın.

Sorunun giderilmiş olduğunu göreceksiniz.

TT-RSS Kurulumda “Şifre Hatası Veriyor”

Sorunu büyük ihtimalle yedeğinizi geri yüklerken yaşıyorsunuz. Postgresql’e kayıtlı TT-RSS kullanıcısının şifresi bir önceki kurulumdan kaldığı için, yükleme sırasında hata oluşuyor - yükleme yarım kalıyor.

Terminal komut satırından suda apt remove tt-rss ile uygulamayı kaldırdığınızda, veritabanı girişleri de silinecektir. Bir sonraki yükleme girişiminizde sıfırdan kurulum olacağı için baş ağrıtmadan yükleme yaparsınız.


  1. Bu hizmetleri kullanmayıp sertifikalarınızı baska yollarla da edinebilirsiniz. Ayrıca, web sayfalarınıza erişim portlarınızı Apache üzerinden farklı sekilde de kurgulayabilirsiniz. Bu çabaların daha ileri seviye işler olduğunu düşündüğüm için ilgili portları açık tutmanızı öneriyorum. Bunlarla başedebilirim derseniz, elbette bu portlar kapalı da durabilir. ↩︎

  2. Bu işlem için FBX, borg isimli bir uygulama kullanır. Elimizin altındaki bu faydalı yedekleme uygulamasından ayrıca bahsedeceğim. ↩︎

  3. XEP-0363 olarak da araştırabilirsiniz. ↩︎

  4. İsterseniz Wireguard da kullanabilirsiniz. Daha önce kullanmadığım için bana kurulumu gereksiz karmaşık geldi. OpenVPN benim için daha tandık bir yüz olduğu için tercih ettim. ↩︎

  5. Daha detaylı bilgi için https://github.com/oupala/apaxy adresine gidebilirisiniz. ↩︎