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 erst einmal 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.

13 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.

      • 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. 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?

  4. 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!

  5. @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.

  6. Kurze Frage: Warum? o_O
    Ich kopiere immer einfach eine Installation nach der Einrichtung komplett auf die anderen Rechner. Dann muss nur noch der Bootloader neu geschrieben werden und alles läuft wieder.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein