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.
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.
Sene 2019 da geliştiricilerden flatpakı indirme seçeneği istemiştim
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
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
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?
-
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.
-
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çinapt-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.
-
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.
-
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.
- Komut satırı argümanları işlendikten sonra,
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.
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
Timeshift kullanışlı bir sistem yedekleme aracı
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.
Bu konu son yanıttan 10 gün sonra otomatik olarak kapatıldı. Yeni yanıtlara artık izin verilmiyor.