Pardus Güncelleme Yaparken kalan Süre göstermesi

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 .

1 Beğeni

@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:

  1. apt çıktılarını parse edip (örneğin Python veya Bash ile) detaylı bir indirme takip aracı yapmak.
  2. GUI tabanlı paket yöneticiler (ör. Discover, Synaptic, Muon) geliştirilirken indirme progress’lerine bu detayların eklenmesi.
  3. apt’nin kendisi veya arka plandaki apt indirme işlemi yapan apt-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.