Depodan indirilen programları bilgisayarda saklayabilir miyiz?

Bilgisayara herhangi bir şey olması durumunda. Yeniden format veya sıfırlama dan önce mevcut programları bilgisayarda saklamanın bir yolu var mı? Veya mevcut kurulumu programlar ile birlikte ISO haline getirmenin bir yolu? İnternetimin yetmediği durumlar için.

3 Beğeni

yazılımların deb paketlerini saklayabilirsiniz fakat bağımlılıklar konusu da işin içine girince her zaman işe yaramayabilir. yine de kullandığınız yazılıma göre bu ihtimal var.

linux ortamında pek windows gibi setup’ı olsun yeniden kurarım mantığı işe yaramayabiliyor. yine de uygun şekilde yedek alırsanız yedekten geri dönebilirsiniz.

veya hangi yazılımları yedeklemek istiyorsunuz sorusu ile konuya yaklaşabiliriz çünkü kimi yazılımların appimage paket sistemiyle paketlenmiş sürümlerini appimage olarak taşımak mümkün.

flatpak ile de yazılımı usb’ye aktarmak mümkün fakat pek kullanana denk gelmedim.

2 Beğeni

Sene 2019 da geliştiricilerden flatpakı indirme seçeneği istemiştim :smiley:

Flatpak sonradan kullanım için paketlemek mümkün. Aşağıdaki rehberi takip edin.
https://man7.org/linux/man-pages/man1/flatpak-create-usb.1.html

2 Beğeni

btrfs dosya sistemi ve timeshift kullanarak yedek alabilirsin yada cube-get kullanabilirsin
camicri/cube-get: Portable Package Manager for Linux (github.com)
bu program ile internetsiz paket ve bağımlılıkları kurabilirsiniz
internet bağlantınız varken paket ve bağımlılıkları seçip indiriyorsunuz
usb ile taşıyarak diğer bilgisayarlarda kurabilirsiniz
cube-get/projects/pardus/data/sources/ depo adresleri ekleye bilirsiniz





2 Beğeni

Eğer pardus kullanıcılarından talep gelirse yedekleme uygulaması geliştirebilirim. Senin amacın için örnek kod yazdım kullanımı ve açıklamaları ekledim amacınıza göre özelleştirebilirsiniz.

import subprocess
import os
import shutil
import argparse

def backup_user_apps(backup_dir, app_config_dirs, additional_dirs, include_dependencies):
    """
    Kullanıcı tarafından yüklenen uygulamaların .deb paketlerini, ayarlarını, belirtilen diğer dizinleri ve isteğe bağlı olarak bağımlılıklarını yedekler.
    """

    # Yüklü paketleri listele
    result = subprocess.run(["dpkg", "--get-selections"], capture_output=True, text=True)
    packages = result.stdout.splitlines()

    # Sistem paketlerini filtrele (genellikle "ii" ile başlar)
    user_packages = [pkg.split()[0] for pkg in packages if not pkg.startswith("ii ")]

    if include_dependencies:
        # Bağımlılıkları çözümle ve user_packages listesine ekle
        for package_name in user_packages.copy():  # Orijinal listeyi değiştirmemek için kopyasını kullan
            result = subprocess.run(["apt-cache", "depends", package_name], capture_output=True, text=True)
            dependencies = [line.split()[1] for line in result.stdout.splitlines() if line.startswith("Depends:")]
            user_packages.extend(dependencies)

        # Tekrar eden paketleri kaldır
        user_packages = list(set(user_packages))

    # Yedekleme dizini oluştur
    os.makedirs(backup_dir, exist_ok=True)

    for package_name in user_packages:
        try:
            # Paket dosyasını indir
            subprocess.run(["apt", "download", package_name], cwd=backup_dir, check=True)

            # Ayar dosyalarını yedekle
            for config_dir in app_config_dirs:
                app_config_path = os.path.expanduser(f"~/{config_dir}/{package_name}")
                if os.path.exists(app_config_path):
                    shutil.copytree(app_config_path, os.path.join(backup_dir, config_dir, package_name))
        except subprocess.CalledProcessError:
            print(f"Hata: {package_name} paketi indirilemedi veya ayarları kopyalanamadı.")

    # Ek dizinleri yedekle
    for dir_path in additional_dirs:
        try:
            expanded_path = os.path.expanduser(dir_path)
            if os.path.exists(expanded_path):
                shutil.copytree(expanded_path, os.path.join(backup_dir, os.path.basename(expanded_path)))
        except FileNotFoundError:
            print(f"Hata: {dir_path} dizini bulunamadı.")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Kullanıcı uygulamalarını yedekler.")
    parser.add_argument("backup_dir", help="Yedekleme dizini")
    parser.add_argument("-c", "--config", nargs="+", default=[".config"], help="Uygulama ayar dizinleri (varsayılan: .config)")
    parser.add_argument("-d", "--dirs", nargs="+", help="Ek olarak yedeklenecek dizinler")
    parser.add_argument("--dependencies", action="store_true", help="Paket bağımlılıklarını da yedekle")
    args = parser.parse_args()

    backup_user_apps(args.backup_dir, args.config, args.dirs if args.dirs else [], args.dependencies)

Nasıl Çalışır?

  1. Gerekli Kütüphanelerin İçe Aktarılması:

    • subprocess: Sistem komutlarını çalıştırmak için kullanılır.
    • os: Dosya ve dizin işlemleri için kullanılır.
    • shutil: Dosya ve dizin kopyalama işlemleri için kullanılır.
    • argparse: Komut satırı argümanlarını işlemek için kullanılır.
  2. backup_user_apps Fonksiyonu:

    • Bu fonksiyon, yedekleme işleminin ana adımlarını gerçekleştirir.
    • backup_dir: Yedeklerin kaydedileceği dizin.
    • app_config_dirs: Uygulama ayarlarının bulunduğu dizinler (varsayılan: .config).
    • additional_dirs: Ek olarak yedeklenecek dizinler.
    • include_dependencies: Uygulama bağımlılıklarını da yedeklemek için kullanılır (True/False).

    Fonksiyonun Adımları:

    • Yüklü paketlerin listelenmesi: dpkg --get-selections komutu ile sistemdeki tüm paketler listelenir.
    • Kullanıcı paketlerinin filtrelenmesi: Sistem paketleri (genellikle “ii” ile başlayanlar) listeden çıkarılır.
    • Bağımlılıkların çözümlenmesi (isteğe bağlı): include_dependencies True ise, her bir kullanıcı paketi için apt-cache depends komutu ile bağımlılıklar bulunur ve listeye eklenir. Tekrar eden bağımlılıklar temizlenir.
    • Yedekleme dizininin oluşturulması: os.makedirs ile belirtilen yedekleme dizini oluşturulur.
    • Paketlerin indirilmesi: Her bir kullanıcı paketi için apt download komutu ile paket dosyası yedekleme dizinine indirilir.
    • Ayar dosyalarının yedeklenmesi: Belirtilen uygulama ayar dizinlerinde (app_config_dirs) bulunan paketlere ait ayar dosyaları, yedekleme dizinine kopyalanır.
    • Ek dizinlerin yedeklenmesi: additional_dirs listesinde belirtilen dizinler, yedekleme dizinine kopyalanır.
    • Hata yönetimi: Paket indirme veya kopyalama işlemleri sırasında oluşan hatalar yakalanır ve kullanıcıya bildirilir.
  3. Komut Satırı Argümanlarının İşlenmesi:

    • argparse modülü ile komut satırı argümanları tanımlanır ve işlenir.
      • backup_dir: Yedekleme dizini (zorunlu).
      • -c, --config: Uygulama ayar dizinleri (varsayılan: .config). Birden fazla dizin belirtilebilir.
      • -d, --dirs: Ek olarak yedeklenecek dizinler. Birden fazla dizin belirtilebilir.
      • --dependencies: Paket bağımlılıklarını da yedeklemek için kullanılır.
  4. backup_user_apps Fonksiyonunun Çağırılması:

    • Komut satırı argümanları işlendikten sonra, backup_user_apps fonksiyonu çağırılarak yedekleme işlemi başlatılır.

Kullanım Örneği

python yedekleme_scripti.py /media/harici_disk/yedekler -c .config .local/share -d ~/Belgelerim ~/Projelerim --dependencies

Bu komut, kullanıcı uygulamalarını /media/harici_disk/yedekler dizinine yedekler. Uygulama ayarları .config ve .local/share dizinlerinden alınır. Ek olarak ~/Belgelerim ve ~/Projelerim dizinleri de yedeklenir. --dependencies argümanı ile paket bağımlılıkları da yedeklemeye dahil edilir.

1 Beğeni

Ben de mevcut tüm kullandığım paketler ve uygulamaları sh hazırladım. Onunla kuruyorum. Böylece format sonrası sadece tek bir sh ile eski ortamım hazır oluyor ama tek sıkıntım uygulamalarda yaptığım ayarları nasıl yedeklerim konusu. Bu konuda önerisi olan varsa onu hazır konu açılmışken öğrenmek isterim. Teşekkürler

1 Beğeni

Timeshift kullanışlı bir sistem yedekleme aracı

1 Beğeni

Daha önce ubuntu kullanırken internetim yoktu. Ben de internet kafeye gidip bir başka harddiske ubuntu kurarak gerekli programları kuruyor,

/var/cache/apt/archive 

klasöründen programları alıp internetsiz bilgisayardaki ubuntuya kopyalayıp sorunsuz kuruyordum.

3 Beğeni

Bu konu son yanıttan 10 gün sonra otomatik olarak kapatıldı. Yeni yanıtlara artık izin verilmiyor.