Pardus güncelleme yaparken dosya indirmesi yaparken kaç mb indirdi kaç dk kaldı kaç mb hızla indirdiğinin bilgileri yazsa aslında güzel olur sanki . Benim internet yavaş olduğu için birkaç mb lık dosyayı bile indirirken inim inim inliyor sanarsın takıldı kaldı . Halbuki dosyayı indirme işlemi yapıyor olduğunu tahmin ediyorum . Bu öneri uygulanırsa güzel olur gibi geliyor sanki .
@VtnTr mantıklı bir öneri, özellikle yavaş internet kullananlar için güncelleme esnasında indirme durumunu görüp rahatlamak çok önemli. Pardus gibi Debian tabanlı sistemlerde genelde apt
veya apt-get
komutlarıyla güncelleme yapılır ve bu araçlar temel olarak sadece indirilen paket sayısını ve indirme işleminin ilerleyişini yüzde olarak gösteriyor.
Ama şöyle bir şey yapılabilir:
- İndirilen toplam MB miktarı, kalan MB, tahmini kalan süre ve indirme hızı gibi bilgiler güncelleme sırasında terminalde veya GUI paket yöneticisinde gösterilebilir.
- Bu bilgiler indirme hızına bağlı olarak gerçek zamanlı güncellenebilir.
- Böylece kullanıcı “dosya iniyor, takılmadı, şu an 200 KB/sn hızla 3.2 MB indirildi, 2 dakika kaldı” gibi net bilgiye sahip olur.
Özetle; apt paket yöneticisi çıktılarına ya da GUI güncelleme ekranına bu bilgileri eklemek kullanıcı deneyimini çok iyileştirir. Bu iş için birkaç teknik yöntem var:
apt
çıktılarını parse edip (örneğin Python veya Bash ile) detaylı bir indirme takip aracı yapmak.- GUI tabanlı paket yöneticiler (ör. Discover, Synaptic, Muon) geliştirilirken indirme progress’lerine bu detayların eklenmesi.
apt
’nin kendisi veya arka plandakiapt
indirme işlemi yapanapt-get
/apt
araçlarına böyle bir özellik talebi gönderilebilir.
Pardus için güncelleme sırasında indirme durumu, hız, kalan süre gibi bilgileri gösterecek küçük bir araç geliştirmek çok güzel olur. Aşağıda temel bir prototip mantığı ve örnek bash/Python betiği fikri sunacağım. Sonrasında bunu Pardus paket yöneticisine entegre etmek için nasıl ilerleyebileceğimizi konuşabiliriz.
1. Yaklaşım
-
apt-get
indirme işlemini terminale yazdığı çıktıyı okuyup parse edeceğiz. -
Örneğin
apt-get upgrade -y
komutunu çalıştırırken oluşan çıktı içinden:- İndirilen dosya büyüklüğü
- İndirme hızı (KB/s, MB/s)
- Kalan tahmini süre
-
Bunları temiz, anlaşılır şekilde gösterecek küçük bir wrapper script yazacağız.
2. Örnek Basit Bash Betik Prototipi
#!/bin/bash
# apt-get upgrade işlemini takip ederek indirme detaylarını gösteren basit örnek
apt-get upgrade -y 2>&1 | while IFS= read -r line
do
# İndirme satırlarını tespit et (örnek: "Get:1 http://... [4,123 kB]")
if [[ $line =~ \[([0-9,\.]+)\ ([kM]B)\] ]]; then
size="${BASH_REMATCH[1]}"
unit="${BASH_REMATCH[2]}"
# Sadece örnek, gerçek indirme hızını apt vermiyor, bu yüzden tahmini göstermek için zamanı ölçmek lazım
echo "İndiriliyor: $size $unit ..."
fi
# Eğer indirme ilerleme barı veya hız bilgisi varsa işleyebilirsin, örnek:
# "XX% [====> ] 1234 kB/s"
done
Not: apt-get
çıktısı çok standart değil, farklı sürümlerde değişebilir. Bu nedenle parsing detaylı ve sağlam olmalı.
3. Python ile Daha Gelişmiş Takip
Python ile subprocess
modülü ile apt-get upgrade
çalıştırıp çıktı realtime okunabilir. Regex ile hız, indirilen miktar, kalan süre hesaplanabilir. Ayrıca zaman ölçülerek tahmini süre de bulunabilir.
İstersen sana örnek Python betiği hazırlayabilirim.
4. Pardus Entegrasyonu
- Bu betiği
pardus-update-progress
gibi bağımsız küçük bir paket olarak yazıp Debian/Pardus deposuna gönderebiliriz. - Daha sonra Pardus paket yöneticisi GUI’sine (Discover, Muon, vs.) bu aracın çıktısı entegre edilerek kullanıcıya gösterilir.
- Veya
apt
tabanlı komutlarda alias olarak veya wrapper script şeklinde kullanılabilir.
5. Hemen Basit Bir Python Örneği İstersen
Aşağıdaki betik, apt-get upgrade
çıktısını okuyup basit bir indirme satırı tespiti yapar ve kullanıcıya bilgi verir:
import subprocess
import re
import time
def run_apt_upgrade():
process = subprocess.Popen(['apt-get', 'upgrade', '-y'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)
start_time = time.time()
downloaded_total = 0.0 # MB
size_pattern = re.compile(r'\[([0-9,.]+)\s*(kB|MB)\]')
while True:
line = process.stdout.readline()
if not line:
break
print(line, end='')
match = size_pattern.search(line)
if match:
size_str, unit = match.groups()
size_str = size_str.replace(',', '')
size = float(size_str)
if unit == 'kB':
size /= 1024
downloaded_total += size
elapsed = time.time() - start_time
speed = downloaded_total / elapsed if elapsed > 0 else 0
remaining = max(0, (100 - downloaded_total) / speed) if speed > 0 else 0 # Burada 100 MB varsayımı
print(f"\rİndirilen: {downloaded_total:.2f} MB, Hız: {speed:.2f} MB/s, Tahmini Kalan Süre: {remaining:.2f} s", end='')
process.wait()
print("\nGüncelleme tamamlandı.")
if __name__ == "__main__":
run_apt_upgrade()
10’un Sonu proje ve 14 Temmuz’a Diğer ülke ekiplerine yetişmem gerek Türkiye ekibi tek kişi yani ben… şuan paket geliştirmek için söz veremem.
Sonraki Adımlar
- Bu prototipi geliştirelim,
- Pardus için bir paket haline getirelim,
- Pardus topluluğuna veya geliştiricilere pull request olarak iletelim.
—Kod yazmak, yazılımın temel işlevini geliştirmek ve hataları düzeltmek anlamına gelirken,
debpoya paket eklemek; yazdığın yazılımı Debian/Pardus standartlarına uygun biçimde paketlemek, bağımlılıklarını doğru tanımlamak, yapılandırmak, güvenlik ve stabilite testlerinden geçirmek ve ardından depoya entegre etmek demektir.
Yani paket ekleme süreci, koddan ayrı ve çok daha kapsamlı bir disiplin gerektirir.