Skip to content

Instantly share code, notes, and snippets.

@suleymanfatih
Last active January 24, 2026 01:02
Show Gist options
  • Select an option

  • Save suleymanfatih/613a6791946a677c878196ac491df7e7 to your computer and use it in GitHub Desktop.

Select an option

Save suleymanfatih/613a6791946a677c878196ac491df7e7 to your computer and use it in GitHub Desktop.
rpismb

Raspberry Pi 3 ile İnternetsiz Otomatik Yedekleme Sistemi Rehberi

1. Alpine Linux ile Raspberry Pi 3 Kurulumu

Alpine imajını indirme:

Öncelikle Raspberry Pi için uygun Alpine Linux imajını indiriyoruz (aarch64 mimarisi, Raspberry Pi için özel imaj) . Alpine’nin resmi sitesindeki Downloads bölümünden “Raspberry Pi” için olan .IMG uzantılı dosyayı alın. (Güncel sürüm ve RPi3 uyumlu olmasına dikkat edin.)

SD karta yazma:

İmaj dosyasını bir microSD karta yazmamız gerekiyor. Bunun için Linux kullanıyorsanız dd komutunu, Windows’ta balenaEtcher gibi araçları kullanabilirsiniz. Örneğin Linux’ta şöyle yapabiliriz:

sudo dd if=alpine-rpi-XYZ.img of=/dev/sdX bs=4M status=progress && sync
İlk açılış ve yapılandırma:

SD kartı Raspberry Pi 3’e takıp cihazı açın. Mümkünse Pi’yi Ethernet kablosuyla ev yönlendiricinize bağlayın (daha sonra kablosuz değil, kablolu kullanacağız). Raspberry Pi’ye bir monitör ve klavye bağlayarak veya UART konsol üzerinden erişerek ilk kurulumu yapacağız

setup-alpine

Bu komut, klavye dili, hostname, ağ ayarları, saat dilimi, root parolası gibi temel ayarları sırayla soracaktır.

Adım Ekranda Ne Soruyor? Ne Seçeyim / Ne Gireyim? (Basit)
0 Başlat setup-alpine
1 Keymap / Keyboard Türkçe Q: tr + trq (emin değilsen us)
2 Hostname Örn: rpismb
3 Network interface Ethernet: eth0 (Wi-Fi varsa wlan0)
4 IP yöntemi Önerilen: dhcp (sonradan statik yapılabilir)
5 Timezone Europe/Istanbul
6 Proxy Yoksa boş bırak (Enter)
7 APK mirror / repository Varsayılanı seç (veya “fastest” varsa onu)
8 Root password Güçlü şifre belirle
9 (Opsiyonel) User Örn kullanıcı: admin (sorarsa oluştur)
10 SSH server openssh (uzaktan erişim istiyorsan)
11 Root SSH login? Güvenli: no (kolay kurulum için yes)
12 NTP client chrony veya openntpd (istemiyorsan none)
13 Disk seçimi SD kart genelde mmcblk0 / USB genelde sda (doğru diski seç)
14 Install mode sys (kalıcı kurulum)
15 Format / Install onay y (doğru diski seçtiğinden eminsen)
16 Bitti reboot
18 Açılınca güncelle apk update && apk upgrade

Not: sys modu kalıcı kurulumdur (Samba/log vb. için uygun). Diskless mod RAM’den çalışır, kalıcılık için ekstra ayar ister.

Alpine paket yöneticisi ve depolar: Alpine’da paket yönetimi için apk komutu kullanılır. Varsayılan olarak main deposu etkindir, ancak bazı ek paketler için community deposunu da açmak gerekebilir. /etc/apk/repositories dosyasını bir metin editörüyle açıp (örn. vi veya nano kurup) community satırının başındaki # işaretini kaldırın. Sonra paket listesini güncelleyin:

apk update 
apk upgrade

2. Samba (SMB) Sunucusu Kurulumu ve Yapılandırması

Alpine Linux’da Samba Kurulumu :
apk add samba

Bu komut gerekli Samba bileşenlerini yükleyecektir.

Kurulum sonrası, Alpine’de Samba servisi için bir init script de gelmiş olacak. Bu script sayesinde Samba’yı başlatıp/durdurabiliriz. Alpine openRC kullandığı için komutlar farklıdır:

  • Servisi hemen başlatmak için: rc-service samba start
  • Sistemde her açılışta başlamasını sağlamak için: rc-update add samba default

İpucu: Eğer Debian/Ubuntu üzerinde kurulacak olsaydı sudo apt install samba yeterliydi. Arch Linux için sudo pacman -S samba komutu kullanılabilirdi. Bu sistemlerde hizmeti başlatmak systemctl start smb nmb (ve enable ile kalıcı yapmak) şeklinde olurdu. Bizim Alpine konfigürasyonumuzda Samba tek bir script ile hem SMB (smbd) hem isim yayını (nmbd) süreçlerini yönetiyor.

Samba Yapılandırma Dosyası ( /etc/samba/smb.conf)

Samba kurulunca varsayılan ayar dosyası gelmiş olabilir. Alpine’de dikkat: Samba paketi belki boş bir config bırakabilir.

ls /etc/samba/

Kodunu girdiğinizde klasör şayet boş ise config dosyası oluşmamış demektir. Dosyayı oluşturmak için:

touch /etc/samba/smb.conf

Eğer dosya yoksa nano veya vi ile oluşturun. Temel bir örnek yapı verelim. Aşağıdaki smb.conf içeriğini açıklayarak koyacağız:

[global]
  workgroup = WORKGROUP
  server role = standalone server
  log file = /var/log/samba/%m.log
  log level = 1
  socket options = TCP_NODELAY
  deadtime = 0
  keepalive = 300


  # Guest'i tamamen kapatmak daha temiz
  map to guest = Never

  # SMB1 kapalı + modern
  server min protocol = SMB2
  client min protocol = SMB2
  
  [pc_yedek]
  path = /mnt/backup/pc_yedek
  read only = no
  browseable = yes
  valid users = pc_user
  force user = pc_user
  force group = pc_user
  create mask = 0660
  directory mask = 0770

[tel_yedek]
  path = /mnt/backup/tel_yedek
  read only = no
  browseable = yes
  valid users = tel_user
  force user = tel_user
  force group = tel_user
  create mask = 0660
  directory mask = 0770

Ayarları kaydedip çıkın. Sonra mutlaka testparm -s komutunu çalıştırın.

Kullanıcı ve Yetkilendirme Ayarları

Samba’da iki katmanlı bir güvenlik var: Unix (Linux) kullanıcı izinleri ve Samba’nın kendi kullanıcı veritabanı. Dosya sisteminde bir dosyaya kimin erişebileceği Linux’un normal izinleriyle belirlenir.

1. Linux kullanıcı ve grup oluşturma.

adduser pc_user # Sisteme kullanıcı ekle 
smbpasswd -a pc_user # Samba parolası ekle

Aynı işlemi telefon yedeği için tel_user ile tekrarlayın.

adduser tel_user
smbpasswd -a tel_user

2. Samba Servisini Başlatma Ayarlardan sonra Samba hizmetini önyüklemede etkinleştirin ve şimdi başlatın:

rc-update add samba default
rc-service samba start

3. Harici Disk Yapısı ve Otomatik Yedekleme Dizini

Raspberry Pi’nin SD kartı sınırlı kapasitede ve güvenilirlik açısından sürekli yazma için uygun değil. Bu yüzden yedeklenecek dosyaları tutmak için harici bir HDD veya SSD kullanacağız.

Dosya sistemi seçimi: Harici diski önceden nasıl formatlamalı? En iyi seçim ext4 gibi Linux yerel dosya sistemi. Neden ext4? Çünkü Raspberry Pi üzerinde ext4 doğrudan çekirdek desteğiyle hızlı çalışır.

Diskin tanınması:

mkfs.ext4 /dev/sda1 # /dev/sda1 yerine uygun cihaz, EXT4 ile biçimlendir 
mkdir -p /mnt/backup 
mount /dev/sda1 /mnt/backup

Diskin otomatik bağlanması için /etc/fstab dosyasına bir satır ekleyin:

/dev/sda1 /mnt/backup ext4 defaults,nofail,noatime 0 2

Klasör Hiyerarşisi: Tüm yedekleri tek bir ana dizinde toplayıp alt dizinlerle ayrıştıracağız. Örneğin, harici diski /mnt/backup dizinine mount ederek çalışalım. Bu dizin altında pc_yedek , tel_yedek gibi alt klasörler oluştururuz:

mkdir -p /mnt/backup/pc_yedek
mkdir -p /mnt/backup/tel_yedek
chmod 0770 /mnt/backup/pc_yedek 
chmod 0770 /mnt/backup/tel_yedek
chown -R pc_user:pc_user /mnt/backup/pc_yedek
chown -R tel_user:tel_user /mnt/backup/tel_yedek

Artık /mnt/backup üzerinde dosya sistemi görülecektir. Bu dizin içinde PC ve telefon yedekleri için ayrı klasörler oluşturduk ( pc_yedek , tel_yedek ). Klasör hiyerarşisi şöyle olabilir:

|/mnt/backup/ 
├── pc_yedek/ # Windows/Linux bilgisayarlar için yedek dizini 
└── tel_yedek/ # Android telefonlar için yedek dizini
Otomatik Yedekleme

Otomatik yedekleme mekanizmaları şu şekilde işleyebilir:

  • Windows (Dosya Geçmişi): Windows 10/11’de “Dosya Geçmişi” özelliği kullanılarak, bilgisayarın Belgeler, Masaüstü vb. klasörleri otomatik yedeklenir. Ayarlar -> Güncelleştirme ve Güvenlik -> Yedekleme kısmından “Ağ konumuna yedekleme” seçilir. Burada Samba paylaşımlarımız ( \\rpismb\pc_yedek ) eklenir. Microsoft’a göre File History ağdaki bir konuma bile yedek alabilir . Böylece Windows kendi belirlediği aralıklarla verileri kopyalar. (Bu özellik Windows’un yerleşik kuralıdır; komut satırı veya ek yazılım gerekmez.)

  • Linux (rsync + cron): Linux istemciler için pratik yöntem: Raspberry Pi’deki Samba paylaşımını (pc_yedek) Linux PC’ye CIFS ile bağlayıp, ardından rsync + cron ile her gece senkronize etmektir.

1) Kimlik bilgilerini güvenli sakla (credentials dosyası)

Linux PC’de aşağıdaki dosyayı oluşturun ve izinlerini kısıtlayın:

mkdir -p ~/.smb
nano ~/.smb/rpismb.creds
chmod 600 ~/.smb/rpismb.creds

Dosya içeriği (Pi tarafında oluşturduğunuz Samba kullanıcısıyla aynı olmalı; örn. pc_user):

username=pc_user
password=BURAYA_SAMBA_PAROLASI
domain=WORKGROUP
2) Mount noktası oluştur
sudo mkdir -p /mnt/rpismb
3) /etc/fstab ile otomatik bağlama (önerilen)

Önce cifs desteği yüklü olmalı. Debian/Ubuntu’da

sudo apt install cifs-utils

Arch’ta

sudo pacman -S smbclient 

vs. gerekebilir. Birçok distroda kernel modülü zaten var.

Örneğin /etc/fstab dosyasına şu satırı ekleyin.

//192.168.1.150/pc_yedek /mnt/rpismb cifs credentials=/home/kullanici_adi/.smb/rpismb.creds,uid=1000,gid=1000,iocharset=utf8,vers=3.0,nofail 0 0

İpucu: İsterseniz IP yerine hostname de kullanabilirsiniz:   //rpismb/pc_yedek

Mount’u test edin:

sudo mount -a
df -h | grep rpismb

4) rsync ile gece otomatik senkron (cron)

sudo crontab -e

Aşağıdaki cron satırı, her gece saat 02:00’de /home/kullanici/ dizinini Samba paylaşımına kopyalar:

0 2 * * * rsync -av --delete /home/kullanici/ /mnt/rpismb/ >> /var/log/rsync-rpismb.log 2>&1

Not: --delete parametresi kaynakta silinen dosyaları hedefte de siler. İstemiyorsanız kaldırın.

İnterneti “Aç/Kapat” Yapmak (Default Route Script’leri)

Bu sistem “sadece LAN” çalışsın istiyoruz. En basit garanti yöntem: Raspberry Pi’de default route (varsayılan ağ geçidi) olmasın.  

Default route yoksa Pi internete giden yolu bilmez, ama LAN içindeki cihazlarla (ör. 192.168.1.x) haberleşmeye devam eder.

Güncelleme (apk/apt) gibi ihtiyaçlarda ise default route’u geçici olarak geri ekleyip, iş bitince tekrar kaldırabiliriz.

Aşağıdaki script’ler tek amaçlıdır:  

  • internet-ac → default route ekler (internet açılır)  
  • internet-kapat → default route siler (internet kapanır)

Script 1 — internet-kapat

Öncelikle tee komutumuzun çalışabilmesi için sbin yolunu oluşturuyoruz. mkdir -p /usr/local/sbin

tee /usr/local/sbin/internet-kapat >/dev/null <<'EOF'
#!/bin/sh
# Pi'nin internete cikisini kapatir: default route'u siler.
# LAN (192.168.x.x gibi) calismaya devam eder.

ip route del default 2>/dev/null || true
ip -6 route del default 2>/dev/null || true
echo "OK: Default route(lar) silindi. Internet kapali."
EOF

chmod +x /usr/local/sbin/internet-kapat
  • Script 1.2 Boot’ta otomatik çalıştır
  mkdir -p /etc/local.d
tee /etc/local.d/internet-kapat.start >/dev/null <<'EOF'

#!/bin/sh

/usr/local/sbin/internet-kapat

EOF

chmod +x /etc/local.d/internet-kapat.start rc-update add local default

Script 2 — internet-ac

NOT: GW degerini router IP'nizle eslestirin (cogunlukla 192.168.1.1).   DEV genelde Ethernet icin eth0'dir.

tee /usr/local/sbin/internet-ac >/dev/null <<'EOF'
#!/bin/sh
# Pi'nin internete cikisini acar: default route ekler.
# Is bitince tekrar kapatmak icin: internet-kapat

GW="192.168.1.1"
DEV="eth0"

ip route add default via "$GW" dev "$DEV" 2>/dev/null || true
echo "OK: Default route(lar) eklendi. Internet acik -> GW=$GW DEV=$DEV"
EOF

chmod +x /usr/local/sbin/internet-ac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment