Skip to content

enseitankado/tiha

Repository files navigation

TiHA — Tahta İmaj Hazırlık Aracı

Pardus ETAP kurulu sınıf tahtalarının imaj alma sürecini hızlandıran; öğretmen PIN anahtarlarını toplu üreten, her tahtaya MAC tabanlı benzersiz bir ad veren, klon tahtaların Ahenk kaydını otomatikleştiren, merkezi log gönderimini yapılandıran, isteyen okullarda dokunmatik ekrana parola yazma riskini ortadan kaldıran (USB / QR / PIN girişleri açık kalır) ve imaj öncesi diski temizleyip yer açan bütünleşik bir sihirbaz.

Durum Platform Lisans Dil


TiHA nedir?

TiHA, sınıflardaki yüzlerce Pardus ETAP tahtasını teker teker elden geçirmek yerine; tek bir tahtada baştan sona hazırlanan örnek bir imajın bütün tahtalara güvenle dağıtılmasını sağlamak için tasarlanmış görsel bir kurulum sihirbazıdır. Öğretmenlerin tahtaya giriş yapacağı PIN anahtarlarını topluca üretir, her tahtaya ağda kendine özgü ve değişmez bir ad verir, çoğaltılan tahtaların merkezi yönetim sunucusuna (Ahenk) kendi kimlikleriyle kaydolmasını otomatikleştirir, merkezi log toplama altyapısını yapılandırır, dokunmatik ekrana parola yazma riskinin önüne geçilmek isteyen okullara hazır bir seçenek sunar ve imaj alınmadan hemen önce diski sanitize edip yer açar. Saatler — bazen günler — süren manuel kurulum süreci, böylece dakikalar içinde tamamlanan tek bir akışa indirgenir.

Pardus ETAP 23 kurulu tahtada tek bir komutla çalışır — bilgisayara yüklenmez, geçici olarak açılıp kapanır. Görsel sihirbaz her adımın ne yaptığını ve neden yaptığını size açıklar, onayınızı alır, sonucu gösterir ve gerektiğinde geri alır.

Nasıl çalıştırılır?

  1. Tahtada Etap Yönetici (etapadmin) hesabıyla oturum açın.
  2. Uygulamalar menüsünden Terminal'i açın.
  3. Aşağıdaki komutu kopyalayıp terminale yapıştırın ve Enter'a basın:
curl -fsSL https://raw.githubusercontent.com/enseitankado/tiha/main/bootstrap.sh | bash

İlk çalıştırmada tek seferliğine etapadmin parolanızı sorabilir. Sonra sihirbaz penceresi açılır — gerisi tamamen görsel ve adım adımdır.

Neler yapar?

Sihirbaz adımları sırasıyla uygular. Her adım isteğe bağlıdır; sol listeden istediğiniz adıma her zaman geçebilirsiniz. Parola sertleştirme adımları (2, 3, 4) bir bütündür; uygulayıp uygulamamak size kalmıştır.

# Adım Kısa açıklama
1 Sistem güncellemesi (apt) Önce depo sağlığını kontrol eder (eksik Pardus ETAP depolarını ekler, bozuk .broken.* dosyalarını siler), sonra apt-get update → full-upgrade → autoremove → clean zincirini çalıştırır. Çıktı canlı akar. Bekleyen güncelleme yoksa adım atlanabilir; "İleri" düğmesi bekleme olmadan etkinleşir.
2 Yerel hesaplar root, etapadmin ve isteğe bağlı ogretmen parolasını siz belirlersiniz. Parolalar SHA-512 hash olarak doğrudan /etc/shadow'a yazılır — bu yol PAM politikalarından ve AppArmor kısıtlamalarından etkilenmez, fiziksel/sanal makine farkı yaratmaz. Ayrı bir düğme ile öğrenci hesabını (ogrenci) tamamen silebilirsiniz. Geri al adımı /etc/shadow yedeğini geri yükler.
3 Otomatik parola temizliği Her açılışta etapadmin dışındaki tüm normal hesapların (UID 1000–59999) parolasını kriptografik olarak güvenli 40 karakterlik rastgele bir değere çeviren bir systemd oneshot servisi kurar. Sonradan elle atanan parolalar da bir sonraki açılışta işe yaramaz hâle gelir. (isteğe bağlı parola sertleştirme — etapadmin'in yönetici erişimi her zaman korunur) Geri alma sırasında varsa standart dışı kullanıcı hesaplarını da silmeyi önerir.
4 Toplu PIN anahtarı Öğretmenler için PIN üreten güvenli anahtarları (TOTP) imaj öncesi merkezî olarak üretip /etc/otp-secrets.json dosyasına kaydeder. Pardus ETAP'ın PAM modülü bu dosyayı doğrudan okur. Üretim için enseitankado/eta-otp-cli aracını otomatik olarak GitHub'dan indirir; başarısız olursa pyotp yedek yoluna düşer. CSV içe aktarma: öğretmen listesini ad-soyad CSV'sinden alabilir. Yazdırılabilir kâğıt: her öğretmen için kart (ad, kullanıcı adı, 4'lü gruplara bölünmüş secret, adım adım Authenticator talimatı) HTML olarak üretilir, tarayıcıda Ctrl+P ile yazdırılır veya PDF kaydedilir. Yedek hesap (ogretmen01…) sayısı verilebilir. Her hesap için passwd GECOS alanına ad-soyad yazılır. Yönetici PIN'i (opsiyonel): bir onay kutusu ile etapadmin sistem yöneticisi için de PIN üretilebilir — yönetici parolasını paylaşmadan, birine sadece o anlık 6 haneli kodu vererek geçici yetki devretmek için (parola güvende kalır, etapadmin hesabı yine her giriş yolu için kullanılabilir; GECOS bozulmaz). Sistemde 50+ kullanıcı varsa LightDM greeter cache betiği otomatik indirilir ve her açılışta çalıştırılır. Ayrı bir düğme ile varsayılan (etapadmin/ogretmen/ogrenci) dışındaki tüm fazladan hesapları prosesleri sonlandırıp deluser --remove-home ile siler — düğme yalnız fazladan hesap varken görünür.
5 EBA QR parola diyalogu (kapat) EBA QR kodu ile bir kullanıcı tahtaya ilk kez giriş yaptığında, sistem otomatik olarak parola tanımlama penceresini açar; öğretmen sınıfta öğrencilerin önünde parolasını dokunmatik klavyeden yazmak durumunda kalabilir. Bu adım otomatik açılan diyalogu kapatır: /etc/xdg/autostart/tr.org.eta.password-changer.desktop dosyasının [Desktop Entry] bölümüne Hidden=true eklenir (XDG-spec'e uygun "girdi başlatılırken atlanır" anlamı). eta-password-changer / eta-qr-login paketleri kaldırılmaz, sentinel yazma akışına dokunulmaz — sadece otomatik tetikleme devre dışı kalır. Kullanıcı dilerse Sistem Ayarları → Kullanıcı Hesapları üzerinden parolasını yine tanımlayabilir. Geri al: orijinal autostart dosyası yedek üzerinden geri yüklenir.
6 SSH Sunucusu openssh-server paketini (yoksa) kurar, /etc/ssh/sshd_config.d/99-tiha.conf ile root parolasıyla uzaktan girişe izin verir, ssh servisini etkinleştirir. apt çıktısı canlı akar. Geri al: ek yapılandırma dosyası silinir; TiHA paketi yeni kurmuşsa apt-get purge ile kaldırılır, daha önce kuruluysa korunur.
7 Samba dosya paylaşımı samba paketini (yoksa) kurar; kök / dizinini kullanıcının seçtiği isimle ve istediği Samba parolasıyla paylaşan [root] adlı bir paylaşım tanımlar (/etc/samba/smb.conf.d/tiha-root-share.conf + smb.conf içine include). Windows'tan \\<tahta-ip>\root, Linux'tan smb://<tahta-ip>/root yolu ile dosya gezgininden erişilir. Geri al: paylaşım tanımı + smbpasswd kaydı kaldırılır; paketi TiHA kurmuşsa purge edilir.
8 Merkezi log sunucusu Tahtanın tüm sistem günlüklerini ağdaki merkezi rsyslog sunucusuna disk-assisted queue ile iletir: uzak sunucu erişilemez olduğunda (elektrik kesintisi, ağ bakımı, sunucu arızası) loglar /var/lib/rsyslog/ altında diskte birikir, sunucu geri gelince otomatik gönderilir. UDP/TCP, varsayılan port 514, 100 MB kuyruk limiti, 30 sn–10 dk arası artan yeniden deneme. Önizleme kuyruğun anlık durumunu (boş / dolu, dosya boyutları) gösterir. "Log Sunucusunu Test Et" düğmesi yapılandırmadaki host'a TCP el sıkışması (TCP modunda) veya örnek bir RFC3164 mesajı gönderimi (UDP modunda) ile ağ yolunun açık olduğunu doğrular. Bu adımı uyguluyorsanız 10. adımı (Dinamik hostname) de mutlaka uygulayın, yoksa sunucudaki kayıtlar tahtalar arasında ayırt edilemez.
9 Zaman senkronizasyonu (NTP) /etc/systemd/timesyncd.conf.d/tiha.conf üzerinden birincil ve yedek NTP sunucularını + saat dilimini (varsayılan Europe/Istanbul) yapılandırır, systemd-timesyncd'yi etkinleştirir. PIN kodları zaman tabanlı olduğu için tahtanın saati doğru olmak zorundadır. "NTP Sunucularını Test Et" düğmesi girilen sunuculara UDP/123'ten doğrudan paket gönderip yanıt zaman damgasını doğrular (5 sn timeout); sonuç canlı akar.
10 Dinamik hostname İmaj alınırken hostname'i şablon (etap-image vb.) yapar ve /etc/hosts'taki 127.0.1.1 satırını da eşitler — aksi hâlde her sudo çağrısı ~10 sn DNS timeout'una takılır. Ek olarak her açılışta çalışan bir systemd servisi kurulur; servis kablolu MAC'in son 6 hanesinden etap-1a2b3c benzeri benzersiz bir hostname üretir, hem hostname'i hem /etc/hosts'u günceller. Hostname zaten doğruysa değişiklik yapmaz; ağ kartı değişirse otomatik yeniden ad atar.
11 Otomatik kapanma Pardus ETA'nın eta-shutdown altyapısının üstüne zenginleştirilmiş bir çalışma sürümü kurar (orijinal service.py yedeklenip değiştirilir; systemd unit, GUI ve /etc/pardus/eta-shutdown.conf korunur). İki mod: belirlenen sabit saatte kapatma ve idle tabanlı kapatma (1–180 dk). Her iki modda da kapatmadan 2 dakika önce ekranda GTK geri sayım penceresi açılır; pencereden "10 dakika ertele" veya "Şimdi kapat" seçeneklerini sunar. Aktif grafik oturum systemd-logind (loginctl) ile saptanır: kullanıcı login değilse uyarı LightDM greeter ekranında da gösterilir. Idle eşiği sistemin ekran-blank süresinden uzun seçilirse "geri sayım kararmış ekranda görünmeyebilir" uyarısı verilir; ayrıca geri sayım açılırken monitör xset dpms force on + xset s reset ile güç tasarrufundan otomatik çıkarılır, böylece pencere ekran kapalıyken bile görünür kılınır. Geri al orijinal service.py'yi yedekten geri yükler. Bypass kapsamı, korunan dosyalar ve geri alma davranışı: docs/m11-eta-shutdown-bypass.md.
12 Otomatik Ahenk Kaydı (klon-yeniden-talep) Klon makinelerin LiderAhenk'te kimlik çakışmasına yol açmaması için boot-zamanlı yeniden talep mekanizmasını imaja gömer. Wizard zamanında ahenk credential'larına dokunmaz; sadece (a) kaynak tahtanın birincil MAC'ini /var/lib/tiha/state/imaged-mac altına yazar, (b) ahenk paketi yoksa apt update && apt install -y ahenk ile kurup ahenk.service enable eder (eta-register installer akışıyla birebir aynı), (c) /etc/systemd/system/tiha-clone-reclaim.service (Type=oneshot, Before=ahenk.service) + /usr/local/sbin/tiha-clone-reclaim.py yazıp enable eder. Klonun ilk açılışında servis ahenk başlamadan önce çalışır: MAC eşitse çıkar (kaynak tahta), farklıysa ETAP backend'ine GET /api/board/check?mac= atar. Kayıtlıysa → ahenk credential'larını siler, ahenk'i systemctl start --no-block ile yeniden başlatır (Before= ordering cycle'ını ele alır; yeni UUID üretilip Lider'e kendi MAC'iyle kayıt olur), servis kendini disable eder. Kayıtsızsa → credential'lar yine silinir (Pulsar'a sahte kimlikle bağlanma riski sıfır), ahenk disable edilir; kullanıcı etapadmin oturumu açıp eta-register ile tahtayı kaydedince ahenk otomatik enable + start edilir. Geri al: boot servisi + imza dosyası kaldırılır; ahenk TiHA kurmuşsa apt-get purge, daha önce kuruluysa korunur. Akışın görsel şeması ve gerekçeleri: docs/m12-clone-reclaim.md.
13 İmaj için sanitize Geri alınamaz bir temizlik adımı (son adım). İlk iş olarak /etc/tiha-image-info.json imaj damgasını yazar (TiHA sürümü, hazırlama tarihi, uygulanan adım listesi). Ardından iki kategori iş yapar: (a) tekil kimlik silmemachine-id, SSH host anahtarları (ilk açılışta yeniden üreten servis bırakılır), NetworkManager bağlantıları (WiFi parolaları dahil), DHCP lease'ler, random-seed; (b) yer açma & iz silme — APT önbelleği, rc-state paketleri (dpkg --purge), apt-get autoremove --purge, systemd journal (1 KB'a vakum), tüm /var/log, crash raporları, mail/cron spool kuyrukları, sistem önbellekleri (man/fontconfig/debconf/PackageKit/lightdm/cups), dpkg-old/dpkg-dist/ucf-* yedekleri, kullanılmayan diller (tr*, en*, C, POSIX dışındakiler), tüm kullanıcıların ~/.cache, ~/.local/share/Trash, kabuk geçmişleri (.bash_history, .zsh_history, .viminfo, .python_history…), /tmp, /var/tmp ve web tarayıcı önbellek + gezinti verileri (Firefox, Chrome, Chromium, Edge, Brave, Vivaldi, Opera, Yandex — gezinti geçmişi, çerezler, oturumlar, IndexedDB; yer imleri korunur). Bittiğinde popup ile boşalan disk miktarını bildirir. Tipik kazanım: 500 MB – 1 GB+. Ahenk kimliği bu adımda dokunulmaz — onun için bir önceki adım (12, Otomatik Ahenk Kaydı) klon-yeniden-talep mekanizmasını imaja gömmüş olur; credential temizliği klonun ilk açılışında otomatik yapılır. Esinlendiği projeler: virt-sysprep (VM imajlarını "ilk klon" hâline indirir), cloud-init clean (bulut imaj durum sıfırlama), BleachBit (kullanıcı önbellek + gezinti verisi temizliği) ve Debian'ın apt-get autoremove --purge + apt-get clean + journalctl --vacuum-* araç zinciri.

Sihirbazdan kareler

Hoş geldiniz
Hoş geldiniz — sihirbazın sunduğu özelliklerin özeti
Sistem güncellemesi
1. Sistem güncellemesi — depo sağlığı + apt zinciri
Yerel hesaplar
2. Yerel hesaplar — root / etapadmin / ogretmen parolaları
Otomatik parola temizliği
3. Otomatik parola temizliği — açılışta parola sıfırlama servisi
Toplu PIN anahtarı
4. Toplu PIN anahtarı — eta-otp-cli ile öğretmen anahtarları
SSH sunucusu
5. SSH Sunucusu — uzaktan terminal erişimi
Samba
6. Samba dosya paylaşımı — uzak dosya gezgini erişimi
Merkezi log
7. Merkezi log sunucusu — disk-assisted queue ile dayanıklı rsyslog
NTP
8. Zaman senkronizasyonu (NTP) — canlı test düğmesi dahil
Hostname
9. Dinamik hostname — her açılışta MAC tabanlı ad
Güç yönetimi
10. Otomatik kapanma — 2 dk uyarı + greeter desteği
Sanitize
13. İmaj için sanitize — kapsamlı tekil kimlik ve iz temizliği
Özet
Özet — günce genelinde geri alınabilir durumdaki tüm adımları listeler (önceki oturumlarda uygulanmış olsa bile)
Greeter ekranında countdown
Bonus — Otomatik kapanma uyarısı greeter ekranında
Kullanıcı login değilken (LightDM giriş ekranında) bile 2 dakikalık geri sayım penceresi gösterilir; "10 dakika ertele" ile şimdilik vazgeçilebilir.

📡 Ağ Topolojisi ve Erişim Gereksinimleri

Okulların ağ yapısı genellikle şu şekildedir. 6., 7. ve 8. adımların (SSH, Samba, Merkezi log) sağladığı özellikler yalnızca tahta ve AP ağından kullanılabilir.

graph TB
    subgraph "🌐 FATİH İnternet"
        I[Internet]
    end

    subgraph "🏫 Okul Ağı"
        R[🌐 Ana Router]

        subgraph "💻 İdari Ağ (Öğretmenler Odası)"
            direction TB
            A1[💻 Müdür PC]
            A2[💻 Sekreter PC]
            A3[💻 Öğretmen PC]
        end

        subgraph "📱 Tahta ve AP Ağı (10.x.x.x)"
            direction TB
            T1[📺 Sınıf 1 Tahta]
            T2[📺 Sınıf 2 Tahta]
            T3[📺 Sınıf N Tahta]
            AP1[📡 Access Point 1]
            AP2[📡 Access Point 2]
            LS[🖥️ Log Sunucusu]
        end
    end

    I ---|🌐| R
    R ---|🔗| A1
    R ---|🔗| A2
    R ---|🔗| A3
    R ---|🔗| T1
    R ---|🔗| T2
    R ---|🔗| T3
    R ---|🔗| AP1
    R ---|🔗| AP2
    R ---|🔗| LS

    T1 -.->|🔧 SSH Erişimi| LS
    T2 -.->|📁 Samba Paylaşımı| LS
    T3 -.->|📋 Log İletimi| LS

    classDef admin fill:#e3f2fd
    classDef tahta fill:#f3e5f5
    classDef internet fill:#f1f8e9
    classDef router fill:#fff3e0
    classDef logserver fill:#fce4ec

    class A1,A2,A3 admin
    class T1,T2,T3,AP1,AP2 tahta
    class I internet
    class R router
    class LS logserver
Loading

⚠️ Önemli Ağ Kısıtları

  • SSH Erişimi (6. adım): Tahtaya terminal bağlantısı yapabilmek için tahta ve AP ağında (10.x.x.x) olmak zorunludur.
  • Samba Dosya Paylaşımı (7. adım): Tahtanın diskine dosya gezgini ile erişebilmek için tahta ve AP ağında olmak zorunludur.
  • Merkezi Log İletimi (8. adım): Log sunucusu tahta ve AP ağında konumlandırılmalıdır.

İdari ağdaki bilgisayarlardan bu özelliklere erişim yoktur. Teknik destek için laptop/tablet ile tahta ağına bağlanmanız veya log sunucusunu tahta ağına yerleştirmeniz gerekir.

Proje yapısı

tiha/
├── README.md
├── LICENSE
├── bootstrap.sh                 Tek komutla çalıştıran başlatıcı
├── pyproject.toml
├── data/styles.css              GTK3 teması
└── tiha/                        Python paketi
    ├── app.py                   Uygulama girişi
    ├── core/                    Altyapı (günce, günlük, yetki, yardımcılar, yollar)
    ├── modules/                 Sihirbaz adımları
    └── ui/                      GTK3 arayüzü

Dayandığı projeler

TiHA, "Toplu PIN anahtarı" adımında aşağıdaki açık kaynaklı aracı doğrudan kullanır:

  • enseitankado/eta-otp-cli — Pardus ETAP'ın /etc/otp-secrets.json dosyasıyla bire bir uyumlu, terminal tabanlı TOTP/PIN yönetim aracı. Öğretmen listesinden Linux hesaplarını doğru gruplarla oluşturur, her hesap için PIN anahtarı üretir ve giriş ekranında görünür yapar. Yazara ve projeye teşekkürler — bu iş akışını oldukça basitleştirdi.

Katkı ve destek

Lisans

GPL-3.0 — ayrıntı için LICENSE dosyasına bakınız.

Copyright © 2026 Özgür Koca

About

Pardus ETAP etkileşimli tahtalarını imaj yoluyla dağıtıma hazırlayan modern sihirbaz

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors