Linux und Ich

Blog über Ubuntu, Linux, Android und IT

Mit apt-clone die Installation eines Rechners auf andere übertragen

Mit apt-clone die Installation eines Rechners auf andere übertragen

| 10 Kommentare

Wer länger mit einem Ubuntu- oder Debian-System gearbeitet hat, der weiß natürlich die Paketverwaltung zu schätzen. Sie ist eines DER Argumente pro Linux, wenn nicht sogar DAS Argument. Wer nicht nur einen Rechner besitzt, sondern neben dem Desktop noch ein Notebook, ein Netbook usw. der möchte oft die selben Pakete auf all seinen Rechnern installiert haben. So kann man nahtlos auf allen Rechner sämtliche Aufgaben erledigen. Dafür gibt es schon seit längerem Tricks und Kniffe, wie man eine Paketliste auf einem System erstellt, und diese dann auf einem anderen Rechner einspielt. Allerdings kommt diese Methode mit manuell installierten Paketen und zusätzlichen Quellen nicht mehr wirklich gut klar, so dass es seit Ubuntu Natty mit apt-clone ein Werkzeug gibt, das das Clonen von Systemen vereinfacht.

Wie angesprochen kann man über den Befehl dpkg die installierten Pakete ausgeben lassen. Mit ein bisschen Shell-Magie kann man aus dieser Liste eine Datei erzeugen, die sich dann auf einem anderen Rechner dazu verwenden lässt, die selben Pakete zu installieren. Im Endeffekt läuft das das Ganze so ab…

# Paketliste auf Rechner A erstellen...
$ dpkg --get-selections | awk '!/deinstall|purge|hold/ {print $1}' > packages.list
# Pakete aus der Liste auf Rechner B installieren
$ xargs -a "packages.list" sudo apt-get install

Nun funktioniert dieses Vorgehen leider nur solange, wie die Liste der verfügbaren Pakete in den Paketquellen identisch ist. Referenziert die Liste auf ein Paket, das manuell installiert wurde oder auf ein Paket aus einer zusätzlichen Paketquelle, so muss diese erst über die /etc/apt/sources.list bzw. über $ add-apt-repository hinzugefügt werden. Manuell installierte Pakete müsste man sogar von Hand aus der Liste löschen.

Hier kommt nun das Programm apt-clone ins Spiel. Dieses sichert nicht nur eine Paketliste, sondern speichert auch auch die sources.list inkl. weiterer in /etc/apt/sources.list.d/ abgelegten Quellen und erzeugt sogar aus manuell installierten Programmen wieder installierbare Pakete. So kann man in der Tat das komplette System klonen, ohne dass man groß Aufwand treiben muss. Einzig Konfigurationsdateien aus /etc werden bislang nicht mitgesichert, so dass man Dienste erneut konfigurieren muss, doch daran arbeitet man aktuell auch noch.

Wenn Ihr das Ganze ausprobieren wollt, dann müsst Ihr ersteinmal apt-clone auf beiden Rechnern installieren. Das Paket gibt es jedoch nur seit Ubuntu Natty 11.04, ältere Ubuntu-Versionen lassen sich daher auf diesen bequemen Weg nicht clonen…

$ sudo apt-get install apt-clone

Danach müsst ihr auf dem fertig eingerichteten System apt-clone ausführen. Die Option  “clone –width-dpkg-repack” sorgt dafür, dass von Hand installierte Pakete wieder erneut verpackt werden, so dass Ihr sie auf dem zweiten System wieder erneut installieren könnt. Bei mir schmeißt das Ganze ein paar Fehlermeldungen aus, die jedoch keine Auswirkungen hatten.

$ sudo apt-clone clone --with-dpkg-repack /
dpkg-deb: warning: './dpkg-repack-7727/DEBIAN/control' contains user-defined field 'Original-Maintainer'
dpkg-deb: warning: ignoring 1 warning about the control file(s)

dpkg-deb: building package `libxapian15' in `./libxapian15_1.0.20-2_amd64.deb'.
dpkg-deb: building package `teamviewer6' in `./teamviewer6_6.0.9224_amd64.deb'.
dpkg-deb: building package `openshot-doc' in `./openshot-doc_1.3.0-maverick1_all.deb'.
dpkg-deb: warning: './dpkg-repack-8460/DEBIAN/control' contains user-defined field 'Python-Version'
dpkg-deb: warning: ignoring 1 warning about the control file(s)

dpkg-deb: building package `arte+7recorder-5' in `./arte+7recorder-5_5.0.beta3~ppa3~maverick_all.deb'.
dpkg-deb: warning: './dpkg-repack-8498/DEBIAN/control' contains user-defined field 'Original-Maintainer'
dpkg-deb: warning: ignoring 1 warning about the control file(s)
...

Danach findet ihr im Wurzelverzeichnis / eine Datei mit dem Namen apt-clone-state-rechnername.tar.gz, in dieser stecken nun die gesammelten Informationen. Habt ihr keine Pakete manuell installiert, so ist sie nur ein paar KB groß. Sollten jedoch Programme wie Skype, Teamviewer und Co. manuell über .deb Dateien installiert worden sein, so wird diese Sicherung natürlich recht schnell aufgeblasen.

Packt die Datei nun auf einen USB-Stick oder schiebt sie über das Netzwerk auf eurer zweiten Rechner und startet auf dem zweiten Rechner ebenfalls apt-clone. Diesmal übergebt ihr mit restore die Option, dass die Paketinformationen aus dem Archiv wiederhergestellt werden sollen.

$ sudo apt-clone restore apt-clone-state-rechnername.tar.gz

Je nachdem wie viele Pakete gefehlt haben, wird nun die Paketverwaltung eine Weile lang beschäftigt sein, da ich auf meinem Testsystem bspw. eine komplette Latex-Umgebung installiert hatte, wird diese nun auch auf dem geclonten System installiert usw…

Damit Ihr nicht völlig unnötige Pakete installieren lässt, würde ich vorher auf dem zu klonenden System etwas aufräumen. Schmeißt dazu am besten Synaptic oder das Software-Center an und schaut was ihr nicht wirklich braucht. Räumt dann noch mit…

$ sudo apt-get autoremove

…nicht mehr benötigte Pakete runter und entfernt am besten noch bei den nicht mehr benötigte Kernel, die sammeln sich recht gerne an und brauchen viel Platz. Schau euch dazu am besten mal den Beitrag alte Kernel inkl. Header mit nur einem Befehl entfernen an. Mit einem Kommando räumt ihr alle alten Kernels vom System.

Getestet habe ich das alles mit meiner “normalen” Natty-Installation unter einem 64-Bit Ubuntu und einer 32-Bit Installation in einer VirtualBox. Selbst bei diesem Sprung von 32- auf 64-Bit ging alles klar. Alles in allem ist apt-clone für alle ein tolles Werkzeug, die ihr System neu einrichten wollen.

(Bildquelle: Vince Alongi, CC-BY, Flickr)

Autor: Christoph Langner

Hallo, ich bin Christoph -- Linux-User, Blogger und pragmatischer Fan freier Software. Wie Ihr ohne Zweifel bemerkt haben solltet schreibe ich hier über Linux im Allgemeinen, Ubuntu im Speziellen, sowie Android und andere Internet-Themen. Wenn du Freude an meinen Artikel gefunden haben solltest, dann kannst du mir über Facebook, Google+ oder Twitter oder natürlich dem Blog folgen.

10 Kommentare

  1. Das klingt ja mal sehr interessant. Um apt-clone auch unter Lucid zu nutzen, kann man das source package von https://launchpad.net/apt-clone herunter laden und das Python-Script nach dem Entpacken entweder direkt aufrufen oder per checkinstall installieren (ich musste vorher lediglich die Pakte “python-argparse” und “dpkg-repack” installieren). Ob das Widerherstellen der Sicherung funktioniert, werde ich noch in einer VM testen.

    • Eventuell kann man auch gleich das Paket aus Natty installieren. Bin mal gespannt, ob dein Test erfolgreich abläuft :)

      • Beim Wiederherstellungsversuch sowohl unter Lucid als auch unter Natty in einer VM wirft “apt-clone restore” jeweils folgende Fehlermeldung und bricht ab:

        Traceback (most recent call last):
        File “/usr/local/bin/apt-clone”, line 80, in
        info = clone.info(args.source)
        File “/usr/local/lib/python2.6/dist-packages/apt_clone.py”, line 223, in info
        f = tar.extractfile(“./etc/apt/sources.list”)
        File “/usr/lib/python2.6/tarfile.py”, line 2101, in extractfile
        tarinfo = self.getmember(member)
        File “/usr/lib/python2.6/tarfile.py”, line 1789, in getmember
        raise KeyError(“filename %r not found” % name)
        KeyError: “filename ‘./etc/apt/sources.list’ not found”

        Ebenso bei “apt-clone info”. Da scheint das vorherige “apt-clone clone” unter Lucid nicht ganz rund gelaufen zu sein. Schade! Aber vielleicht ergibt sich da ja noch in Zukunft etwas seitens der Entwickler.

  2. Hört sich interessant an, werde es morgen mal testen, wenn es wirklich so einfach ist wird es mir bestimmt ein großteil der arbeit abnehmen ;)

  3. Pingback: Automatisierte Installation | DSIW

  4. Hallo Christian, als erstes ein großes Kompliment für Deine Arbeit.

    Dann, eine Frage: Kann ich “apt-clone” auch in “chroot” benutzen?
    In “chroot” kann ich auch software installieren…”apt-clone”, außer:
    sudo mount /dev/sde6 /mnt
    sudo mount –bind /dev /mnt/dev
    sudo mount –bind /proc /mnt/proc
    sudo mount –bind /sys /mnt/sys
    sudo cp /etc/resolv.conf /mnt/etc/resolv.conf
    sudo chroot /mnt /bin/bash

    ggf. was muss noch gemountet werden?
    Danke im Voraus, Tony

    • habe auch
      sudo mount –bind /dev/pts /mnt/dev/pts
      gemonted weil gemekkert hat, aber bei
      sudo apt-clone clone –with-dpkg-repack /
      kamen zwei Feler
      not installable:
      version mismatch:
      jrgend eine Idee?

  5. Danke für die gute Anleitung!

    Mich würde interessieren, ob es auch möglich ist eine Liste nur der Pakete zu erzeugen, die man „aktiv“ installiert hat (sei’s über die Paketverwaltung oder manuell per .deb). So hätte man eine Liste der Software und Pakete, die man selbst zusätzlich installiert hat und nicht aller installierten Pakete, was nach einer Neuinstalltion (z.B. wegen Update) ja sinnvoller ist und viel übersichtlicher. Wenn ich die Liste „manuell installiert“ in Synaptics durchschaue, erscheinen dort viele Pakete, die ich nicht aktiv installiert habe (evtl. Abhängigekeiten von solchen Pakekten?).

    Vielen Dank für jegliche Hinweise!

  6. @Horst Meyer: Eine Liste der aktuell installierten Pakete bekommt man über den Befehl:

    dpkg -l

    Allerdings sind hier auch die “Löschkandidaten” drin, deshalb diese mittels

    dpkg -l | grep “^ii”

    rausfiltern.

Hinterlasse eine Antwort

Auf Linux und Ich darf anonym kommentiert werden. Die Felder für Name und E-Mail-Adresse dürfen beim Eintragen eures Kommentars leer bleiben. Ich freue mich aber über jeden Kommentar, zu dem der Autor mit seinem Namen steht.