1

From How to list all installed packages we learn how to backup list of installed packages.

From How to See list of Repository? we learn how to backup list of installed repositories.

But how do we automatically add all repositories before we run a script to install all installed packages from the machine we are cloning?

Then how do we take the list of all installed packages and parse it to install them?

Before that how do we know what keys we need to get?

Also how do we generate list of held packages to backup and then reapply to cloned machine?

I've heard of apt-clone but not sure if it does all the above.

My list of repositories are:

$ cd /etc/apt/sources.list.d/ && cat *.list
# deb http://ppa.launchpad.net/colingille/freshlight/ubuntu xenial main # disabled on upgrade to xenial
# deb-src http://ppa.launchpad.net/colingille/freshlight/ubuntu trusty main
deb http://ppa.launchpad.net/fossfreedom/indicator-sysmonitor/ubuntu xenial main
# deb-src http://ppa.launchpad.net/fossfreedom/indicator-sysmonitor/ubuntu xenial main
deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main
### THIS FILE IS AUTOMATICALLY CONFIGURED ###
# You may comment out this entry, but any other modifications may be lost.
deb http://dl.google.com/linux/earth/deb/ stable main
deb http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu xenial main
# deb-src http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu xenial main
# deb-src http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu xenial main
deb https://download.01.org/gfx/ubuntu/16.04/main xenial main #Intel Graphics drivers
deb http://ppa.launchpad.net/mkusb/ppa/ubuntu xenial main
# deb-src http://ppa.launchpad.net/mkusb/ppa/ubuntu xenial main
deb http://ppa.launchpad.net/peek-developers/stable/ubuntu xenial main
# deb-src http://ppa.launchpad.net/peek-developers/stable/ubuntu xenial main
deb http://ppa.launchpad.net/peterlevi/ppa/ubuntu xenial main
# deb-src http://ppa.launchpad.net/peterlevi/ppa/ubuntu xenial main
deb http://ppa.launchpad.net/sethj/silentcast/ubuntu xenial main
# deb-src http://ppa.launchpad.net/sethj/silentcast/ubuntu xenial main

My list of packages is 100k and won't fit into this message but, here is a subset:

$ cat ~/.packages
a11y-profile-manager-indicator          install
account-plugin-aim              install
account-plugin-facebook             install
account-plugin-flickr               install
account-plugin-google               install
account-plugin-jabber               install
account-plugin-salut                install
account-plugin-twitter              install
account-plugin-windows-live         deinstall
account-plugin-yahoo                install
accountsservice                 install
acl                     install
acpid                       install
adduser                     install
adium-theme-ubuntu              install
adobe-flash-properties-gtk          install
adobe-flashplugin               install
adwaita-icon-theme              install

About 5% of the list have been removed and show deisntall instead of install.


EDIT 1 based on comment instructions these are the keys which are contained in /etc/apt/trusted.gpg and /etc/apt/trusted.gpg.d which I've added to my daily backup:

$ sudo apt-key list
/etc/apt/trusted.gpg
--------------------
pub   1024D/437D05B5 2004-09-12
uid                  Ubuntu Archive Automatic Signing Key <ftpmaster@ubuntu.com>
sub   2048g/79164387 2004-09-12

pub 1024D/FBB75451 2004-12-30 uid Ubuntu CD Image Automatic Signing Key <cdimage@ubuntu.com>

pub 4096R/C0B21F32 2012-05-11 uid Ubuntu Archive Automatic Signing Key (2012) <ftpmaster@ubuntu.com>

pub 4096R/EFE21092 2012-05-11 uid Ubuntu CD Image Automatic Signing Key (2012) <cdimage@ubuntu.com>

pub 1024D/7FAC5991 2007-03-08 uid Google, Inc. Linux Package Signing Key <linux-packages-keymaster@google.com> sub 2048g/C07CB649 2007-03-08

pub 4096R/D38B4796 2016-04-12 uid Google Inc. (Linux Packages Signing Authority) <linux-packages-keymaster@google.com> sub 4096R/640DB551 2016-04-12 [expires: 2019-04-12] sub 4096R/997C215E 2017-01-24 [expires: 2020-01-24]

pub 2048R/63961D39 2016-01-25 uid Elio Martinez (Installer compilation) <elio.martinez.monroy@intel.com> sub 2048R/98E81FA7 2016-01-25

/etc/apt/trusted.gpg.d/colingille-freshlight.gpg

pub 1024R/CB7F5C71 2010-12-30 uid Launchpad PPA for Congelli501

/etc/apt/trusted.gpg.d/fossfreedom_ubuntu_indicator-sysmonitor.gpg

pub 1024R/F4FE239D 2012-01-05 uid Launchpad PPA for fossfreedom

/etc/apt/trusted.gpg.d/graphics-drivers_ubuntu_ppa.gpg

pub 4096R/1118213C 2015-08-12 uid Launchpad PPA for Graphics Drivers Team

/etc/apt/trusted.gpg.d/mkusb_ubuntu_ppa.gpg

pub 4096R/54B8C8AC 2014-08-14 uid Launchpad PPA for MKUSB

/etc/apt/trusted.gpg.d/peek-developers_ubuntu_stable.gpg

pub 4096R/76BAFBC6 2017-02-14 uid Launchpad PPA for Peek Developers

/etc/apt/trusted.gpg.d/peterlevi_ubuntu_ppa.gpg

pub 1024R/A546BE4F 2012-06-28 uid Launchpad PPA for Peter Levi

/etc/apt/trusted.gpg.d/sethj_ubuntu_silentcast.gpg

pub 4096R/A1A7B3E6 2014-10-03 uid Launchpad PPA for Seth Johnson


EDIT 2

As per comments I gave aptitude-build-state-bundle and aptitude-run-state-bundle a try after installing programs using:

sudo apt install aptitude-common

Running the build program resulted in a whopping 334 MB file compressed to 92 MB.

Transferring the compressed file to the target laptop and running aptitude-run-state-bundle gave this colorful screen (among many):

aptitude-run-state-bundle.png

We can see it's tracking held packages! The old laptop was running kernel 4.4 and the new laptop defaulted to 4.10. I deviated from the unwritten rule of copying and pasting text screens and used color snapshot because it's easier to digest.

This is about as far as I got because an on-line tutorial for aptitude-run-state-bundle hasn't been located yet.

I did discover that my daily backup wasn't including permissions and had to be restored in two passes, once with sudo, once without. I discovered I wasn't backing up custom Grub fonts and Plymouth splash screens. I discovered I wasn't backing up Nautilus custom scrips either.

A full system backup and restore is tempting. It will avoid all these piecemeal steps. However on the old laptop grub is setup with gparted and CSM, whilst on the new laptop grub is using GPT and UEFI. I'm not sure what headaches that might cause.

For sure /etc/fstab must NOT be restored. Besides different UUIDs, the source has a regular SSD (/dev/sdc3) and the target has an NVMe SSD (/dev/nmve0p5).


EDIT 2 November 1, 2017

Selecting packages from source machine and installing them on target machine didn't bring over conky which was held back to version 1.9. Other software like unity-tweak-tool didn't reinstall either.

Conky script required extensive rework for temperature. Intel i7 6700HQ has different temperature thermal zones than i7 3630QM. vnStat was different because eth0 is no longer used as the new laptop has a different adapter name.

Old laptop has Super VGA, HDMI and built in LVDS that can be either iGPU (HD4000) or discrete graphics (nVidia GE Force GT650M) controlled. It was a shocker to learn on new laptop HDMI is hardwired to nVidia GTX 970M and the iGPU (HD530) can only control LVDS and ThunderBolt3 to DisplayPort to HDMI adapter.

Further complications that WSL (Windows Subsystem for Linux) cannot write to Linux partitions and Linux can only write to Windows NTFS partitions but doesn't support not WSL hybrid directories. Windows apps cannot write to WSL hybrid directories either. WinBTRFS is not released yet and Ext2FSD version .69 bricks Windows 64 bit drives. WSL only works with Windows 64-bit.

Simple save and restore is off the table.


Conclusion

December 10, 2017

  • At the end of the day all applications were installed manually.
  • HDMI had no audio so setpci had to be used during systemd boot.
  • Laptop wouldn't suspend due to NVMe SSD so ACPI hotplugging had to be disabled.
  • nVidia screen tearing was solved with NVIDIA X Server Settings composition pipeline.
  • A new mount (/mnt/e) on SSD WSL and Ubuntu 16.04.
  • I think it is difficult to do it this way and get everything exactly the same. If cloning is what you want, I would recommend cloning with Clonezilla. But I can see the advantage with your approach, which I would say is a fresh installation, where you add the repositories (and maybe PPAs), program packages, tweaks etc. – sudodus Oct 21 '17 at 03:05
  • @sudodus Clonezilla would be the same problem I have with full backup and restore in that the new laptop is Skylake and the old laptop is Ivy Bridge which aren't exactly clones. First have to bare install with live USB and then clone above and install daily backup of /home/me/bin, /home/me/Documents, cron, systemd scripts, /usr/local/bin, /home/me/.*, etc. in the daily backup .tar. Surely I'm not the only person in the world that bought a new laptop and didn't want to start from scratch. The last two laptops I started from scratch but this time it's the same Ubuntu version I'm using. – WinEunuuchs2Unix Oct 21 '17 at 03:11
  • Installed Ubuntu systems are often portable between computers. Sometimes you have to remove proprietary drivers (e.g. for graphics and wifi) to make it work in the new computer. Sometimes there are bigger differences and problems. I guess this is the case for you. I see what you want and I understand. My first comment was 'only a comment', maybe not very helpful, but believe me, I will be very interested in the progress of this thread. Maybe the word 'cloning' in the title should be replaced to keep people like me from misunderstanding. – sudodus Oct 21 '17 at 03:37
  • @sudodus As I wrote the title "cloning" I thought of clonezilla and wondered if others would suggest it. My other title options of "duplicate" or "reinstall" would probably lead to clonezilla recommendations too. Maybe I should just try a full 6 GB backup and then restore using live USB. – WinEunuuchs2Unix Oct 21 '17 at 03:48
  • 1
    It is worth trying, because it is straightforward :-) Otherwise your approach in the original question should work but it is much more manual work. I remember that @oldfred has recommended methods to identify what is installed and tweaked. Maybe he will find your question, chip in and help. – sudodus Oct 21 '17 at 04:00
  • 1
    there is also aptitude-create-state-bundle and aptitude-run-state-bundle they appear to duplicate, repos, keys, hold states etc. http://manpages.ubuntu.com/manpages/precise/man1/aptitude-create-state-bundle.1.html PS - keys are stored at etc/apt/trusted.gpg.d/ – ravery Oct 21 '17 at 06:24
  • @ravery Thanks for tip about keys I've added /etc/apt/trusted.gpg.d to my daily backup. Of the top of my head I've noticed some keys are missing for Intel Graphics optional Linux drivers and google-chrome-stable which require further digging. – WinEunuuchs2Unix Oct 21 '17 at 18:31
  • @WinEunuuchs2Unix -- on my system; chrome, wine, and skype are stored in the file etc/apt/trusted.gpg. perhaps because they were added with apt-key .... sudo apt-key list will show your keys and the file that contains them. – ravery Oct 21 '17 at 19:07
  • @ravery I've also added tar -rvf "$FileName" /etc/apt/trusted.gpg to my daily backup to include the google keys. I did install aptitude-common to use aptititude-create-build-state which makes a whopping 334 MB file. Documentation infers this file is mostly used for debugging and I'm not sure it's designed for cloning installations? I need to research further... – WinEunuuchs2Unix Oct 21 '17 at 19:29
  • @WinEunuuchs2Unix -- yes documentation says it is primarily used for backing up and restoring package state for debug purposes. However,if it can roll back, then should be able to clone. I haven't tried, but it seems that it is a more thorough system clone than apt-clone since it grabs cache, package lists, repos and keys . – ravery Oct 21 '17 at 20:12
  • @ravery I'm part way through aptitude-run-state-bundle and updated the question with progress. – WinEunuuchs2Unix Oct 22 '17 at 17:05
  • @WinEunuuchs2Unix, Thanks for sharing your progress :-) – sudodus Oct 22 '17 at 17:44

0 Answers0