# E-Imza Linux Kurulum Rehberi

## Desteklenen Dağıtımlar

| Dağıtım | Sürüm |
|----------|-------|
| Ubuntu | 20.04 (Focal), 22.04 (Jammy), 24.04 (Noble) |
| Debian | 11 (Bullseye), 12 (Bookworm), 13 (Trixie) |

## Desteklenen Smart Card Okuyucular

| Üretici | Modeller |
|---------|----------|
| ACS | ACR38, ACR39, ACR40T ve diğer ACS CCID uyumlu okuyucular |
| SafeNet / Thales | eToken serisi |
| Gemalto / Thales | IDBridge, IDPrime serisi |
| HID | Omnikey serisi |
| Identiv | SCR serisi |

## Desteklenen PKCS#11 Sürücüler

| Sürücü | Kart Tipi |
|--------|-----------|
| libakisp11.so | TÜBİTAK AKİS (Türk eID kartları) |
| libeToken.so | SafeNet eToken |
| libIDPrimePKCS11.so | Thales IDPrime |

> Her sürücü yalnızca kendi kart tipini okuyabilir. Uygulama tüm sürücüleri sırayla dener ve uyumlu olanı kullanır.

## Kurulum

### 1. Dosyaları Çıkart

```bash
tar -xzf E-Imza-linux-x64.tar.gz
cd E-Imza-linux-x64
```

### 2. Kurulum Scriptini Çalıştır

```bash
sudo ./Drivers/Linux/install.sh
```

### install.sh Ne Yapar?

| Adım | Açıklama |
|------|----------|
| **pcscd kurulumu** | Smart card daemon (`pcscd`), araçlar (`pcsc-tools`) ve temel CCID sürücüsü (`libccid`) kurulur. pcscd, uygulama ile smart card okuyucu arasındaki iletişimi sağlar. |
| **libdl.so symlink** | glibc 2.34+ sürümlerinde `libdl` ayrı bir kütüphane olarak sunulmaz. PKCS#11 sürücülerinin çalışabilmesi için `/usr/lib/x86_64-linux-gnu/libdl.so` symlink'i oluşturulur. |
| **AKİS bağımlılıkları** | `libasn1ber.so` ve `libasn1rt.so` kütüphaneleri `/usr/lib/` altına kopyalanır. Bu dosyalar `libakisp11.so` sürücüsünün çalışması için gereklidir. |
| **pcscd auto-exit kapatma** | pcscd varsayılan olarak istemci bağlantısı olmadığında kendini kapatır (`--auto-exit`). Bu davranış devre dışı bırakılır, böylece servis sürekli çalışır. |
| **udev kuralları** | Yaygın smart card okuyucu üreticileri (ACS, SafeNet, Gemalto, HID, Identiv) için udev kuralları eklenir. Bu kurallar, okuyucu USB'ye takıldığında pcscd servisinin otomatik başlamasını ve kernel driver çakışmalarının önlenmesini sağlar. |
| **ACS CCID sürücüsü** | `libacsccid1` paketi dağıtıma uygun versiyonuyla kurulur. Bu sürücü ACS marka okuyucuların (ACR38, ACR39, ACR40T vb.) pcscd tarafından tanınmasını sağlar. |
| **pcscd başlatma** | Servis etkinleştirilir ve yeniden başlatılır. |

### 3. Uygulamayı Çalıştır

```bash
./E-Imza
```

## Sorun Giderme

### Dongle algılanmıyor

pcscd servisinin çalıştığını kontrol edin:

```bash
sudo systemctl status pcscd
```

Durmuşsa başlatın:

```bash
sudo systemctl start pcscd
```

Dongle'ın pcscd tarafından görüldüğünü doğrulayın:

```bash
pcsc_scan
```

Okuyucu ve kart bilgisi görünmelidir. `Waiting for the first reader...` mesajında kalıyorsa dongle'ı çıkarıp tekrar takın.

### USB cihaz meşgul hatası

pcscd debug logunda `LIBUSB_ERROR_BUSY` görüyorsanız, kernel driver USB cihazı tutuyor olabilir.

Önce pcscd'yi debug modda başlatın:

```bash
# Mevcut servisi durdurun
sudo systemctl stop pcscd

# Debug modda başlatın (Terminal 1)
sudo pcscd -f -d
```

Ardından dongle'ı çıkarıp tekrar takın ve debug çıktısını gözlemleyin. Başarılı bağlantıda `Found Vendor/Product` ve `Card ATR` satırları görünmelidir. `LIBUSB_ERROR_BUSY` hatası görünüyorsa dongle'ı tekrar çıkarıp takın — genellikle ikinci denemede bağlantı sağlanır.

Debug moddan çıktıktan sonra servisi tekrar başlatın:

```bash
sudo systemctl start pcscd
```

### Log dosyası

Uygulama logları aşağıdaki konumda tutulur:

```
~/.local/share/e-imza/e-imza-YYYY-MM-DD.log
```

Her gün yeni bir log dosyası oluşturulur. Örnek: `e-imza-2026-03-30.log`
