Pardus ETAP kurulu sınıf etkileşimli tahtalarını, imaj yöntemiyle kopyalanıp yüzlerce tahtaya kolayca dağıtılabilecek biçimde hazırlayan sihirbaz uygulaması.
TiHA, Pardus ETAP kurulu bir tahtayı imaj alınmaya hazırlayan; isteyen yöneticiye ek olarak parola sertleştirme ve PIN ile giriş kurulumu sunan bir sihirbaz uygulamasıdır.
Pardus ETAP 23 kurulu tahtada tek bir komutla çalışır — bilgisayara yüklenmez, geçici olarak açılıp kapanır. Görsel bir 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.
- Tahtada Etap Yönetici (
etapadmin) hesabıyla oturum açın. - Uygulamalar menüsünden Terminal'i açın.
- 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.
Tek tahtada hazırlanan bir Pardus ETAP imajını onlarca tahtaya sorunsuz dağıtmak için gerekli iki tür hazırlığı tek sihirbazda toplar:
- İmaja özel teknik hazırlık (her senaryoda gereklidir): paket güncellemesi, NTP, benzersiz hostname stratejisi, SSH/Samba ile uzak bakım, merkezi log, güç yönetimi, imaj öncesi tekil kimlik sanitizasyonu ve yer açma.
- İsteğe bağlı parola sertleştirmesi:
rootveetapadminiçin bilinçli parola atamak; istenirse açılışta parolaların yeniden rastgeleleştirildiği bir servisle parolalı girişi tamamen kapatmak; öğretmenler için PIN anahtarlarını imaj öncesi toplu üretmek.
Tarihçe. Projeyi başlatan tetikleyici, EBA-QR'ın ilk girişte öğretmenden yerel parola tanımlamasını isteyen ve bu parolanın 65 inç dokunmatik ekrana parmakla yazılması nedeniyle arka sıralardaki öğrenciler tarafından okunabilen davranışıydı. Bu zorunluluk yeni dağıtımda kaldırıldı. Yine de ekrana parola yazılması her zaman ifşa riski taşır; o riski tamamen kapatmak isteyenler için TiHA'nın parola sertleştirme adımları olduğu gibi kullanılabilir.
İmaj uygulandıktan sonra öğretmenlerin oturum açabileceği yollar:
| Yol | Açıklama |
|---|---|
| 🔳 EBA-QR | Telefondaki EBA uygulamasından ekrandaki kare kodu okutarak (Pardus ETAP'ın varsayılan giriş yolu) |
| 🔢 PIN kodu | Authenticator uygulamasından üretilen, 30 saniyede bir değişen 6 haneli kod |
| 🗝️ USB anahtar | Öğretmene özel hazırlanmış kişisel USB bellek |
| 🔑 Yerel parola | Standart yol; TiHA'nın parola sertleştirme adımları uygulandığında kapatılır |
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. Yedek hesap (ogretmen01, ogretmen02…) sayısı verilebilir. Her hesap için passwd GECOS alanına ad-soyad yazılır. 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. Tüm hatalar mesaj kutusunda inline gösterilir. Üretilen anahtarlar (kullanıcı adı + BASE32 secret + otpauth:// URL'si) panoya kopyalanabilir veya .txt dosyasına kaydedilebilir. |
| 5 | 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. |
| 6 | 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-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. |
| 7 | 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. Bu adımı uyguluyorsanız 9. adımı (Dinamik hostname) de mutlaka uygulayın, yoksa sunucudaki kayıtlar tahtalar arasında ayırt edilemez. |
| 8 | 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. |
| 9 | 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. |
| 10 | 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. Geri al orijinal service.py'yi yedekten geri yükler. |
| 11 | İmaj için sanitize | Son adım, büyük ölçüde geri alınamaz. İki kategori temizlik yapar: (a) tekil kimlik silme — machine-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, ahenk (LiderAhenk) ajan kimliği (UID, parola, Pulsar broker alanları, ahenk.db yerel kayıt veritabanı, ahenk.log); paket kaldırılmaz, servis devre dışı bırakılmaz, kopya tahta ilk açılışta kendi UUID'sini üretip Lider'e yeniden kayıt olur; (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+. Kısmi geri alma: ahenk kimliği yıkımdan önce /var/lib/tiha/state/ altına yedeklenir; imaj alınmadan vazgeçilirse Özet sayfasındaki "Geri al" düğmesi yalnız ahenk kimliğini eski hâline döndürür (log/önbellek/geçmiş temizlikleri kalıcıdır). |
Okulların ağ yapısı genellikle şu şekildedir. 5., 6. ve 7. 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
- SSH Erişimi (5. 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ı (6. adım): Tahtanın diskine dosya gezgini ile erişebilmek için tahta ve AP ağında olmak zorunludur.
- Merkezi Log İletimi (7. 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.
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ü
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.jsondosyası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.
10. adım (Otomatik kapanma) uygulandığında TiHA, Pardus ETA paketinin sağladığı eta-shutdown altyapısını tamamen kaldırmaz — systemd unit'i (eta-shutdown.service), main.py ve aynı yapılandırma dosyası (/etc/pardus/eta-shutdown.conf) korunur; "ETA Zamanlı Kapatma" GUI'si değişmeden çalışmaya devam eder.
Bypass edilen tek dosya /usr/share/eta/eta-shutdown/src/service/service.py'dir: TiHA bu dosyayı, ek özellikler içeren genişletilmiş bir sürümle değiştirir:
- 2 dakikalık GTK geri sayım penceresi (10 dakika erteleme veya "Şimdi kapat" düğmesiyle)
- Aktif grafik oturumun
systemd-logind(loginctl) ile saptanması — kullanıcı login değilse uyarı LightDM greeter ekranında gösterilir - Çoklu X11 DISPLAY (
:0,:1,:10,:11) üzerinden idle algılama düzeltmesi
Orijinali aynı dizinde service.py.tiha-backup adıyla yedeklenir. 10. adımın "geri al" işlemi yedeği geri yükler ve servisi yeniden başlatır. Ayrıca kullanıcı oturumunda gösterilen geri sayım penceresi /usr/local/sbin/tiha-shutdown-countdown.py olarak yazılır; geri al sırasında o da silinir.
LightDM giriş ekranında etkin geri sayım — kullanıcı login değilken bile uyarı görünür.
- adımdaki yer açma katmanı, açık kaynak temizleyicilerin yaklaşımlarını harmanlar:
- virt-sysprep — sanal makine imajlarını "ilk klon" hâline indirir.
- cloud-init clean — bulut imaj örneklerinde durum sıfırlama.
- BleachBit — kullanıcı önbellek ve gezinti verisi temizliği.
- Debian'ın kendi
apt-get autoremove --purge+apt-get clean+journalctl --vacuum-*araç zinciri.
- 🐛 Hata bildirimi ve öneri: GitHub Issues
- 💬 Soru ve tartışma: GitHub Discussions
- Pull request'ler hoş karşılanır; ayrıntılar için
CONTRIBUTING.md.
GPL-3.0 — ayrıntı için LICENSE dosyasına bakınız.
Copyright © 2026 Özgür Koca