My laptop battery started to explode in slow motion. HP requires 10 business days to repair my laptop under warranty, and I cannot afford that length of downtime.
Alternatively, HP quoted me 375€ + VAT for on-site repairs, which I tought was very funny.
For 376.55€ + VAT, which is pretty much exactly the same amount, I bought instead a refurbished ThinkPad X240 with a dual-core I5, 8G of RAM, 250G SSD, and a 1920x1080 IPS display, to use as a spare while my laptop is being repaired. I'd like to thank HP for giving me the opportunity to own a ThinkPad.
Since I'm migrating all my system to the spare and then (hopefully) back, I'm documenting what I need to be fully productive on new hardware.
Install Debian
A basic Debian netinst with no tasks selected is good enough to get going.
Note that if wifi worked in Debian Installer, it doesn't mean that it will work in the minimal system it installed. See here for instructions on quickly bringing up wifi on a newly installed minimal system.
Copy /home
A simple tar of /home is all I needed to copy my data over.
A neat way to do it was connecting the two laptops with an ethernet cable, and using netcat:
# On the source tar -C / -zcf - home | nc -l -p 12345 -N # On the target nc 10.0.0.1 12345 | tar -C / -zxf -
Since the data travel unencrypted in this way, don't do it over wifi.
Install packages
I maintain a few simple local metapackages that depend on the packages I usually used.
I could just install those and let apt bring in their dependencies.
For the build dependencies of the programs I develop, I use mk-build-deps
from the devscripts
package to create metapackages that make sure they are
installed.
Here's an extract from debian/control
of the metapackage:
Source: enrico Section: admin Priority: optional Maintainer: Enrico Zini <enrico@debian.org> Build-Depends: debhelper (>= 11) Standards-Version: 3.7.2.1 Package: enrico Section: admin Architecture: all Depends: mc, mmv, moreutils, powertop, syncmaildir, notmuch, ncdu, vcsh, ddate, jq, git-annex, eatmydata, vdirsyncer, khal, etckeeper, moc, pwgen Description: Enrico's working environment Package: enrico-devel Section: devel Architecture: all Depends: git, python3-git, git-svn, gitk, ansible, fabric, valgrind, kcachegrind, zeal, meld, d-feet, flake8, mypy, ipython3, strace, ltrace Description: Enrico's development environment Package: enrico-gui Section: x11 Architecture: all Depends: xclip, gnome-terminal, qalculate-gtk, liferea, gajim, mumble, sm, syncthing, virt-manager Recommends: k3b Description: Enrico's GUI environment Package: enrico-sanity Section: admin Architecture: all Conflicts: libapache2-mod-php, libapache2-mod-php5, php5, php5-cgi, php5-fpm, libapache2-mod-php7.0, php7.0, libphp7.0-embed, libphp-embed, libphp5-embed Description: Enrico's sanity Metapackage with a list of packages that I do not want anywhere near my system.
System-wide customizations
I tend to avoid changing system-wide configuration as much as possible, so
copying over /home
and installing packages takes care of 99% of my needs.
There are a few system-wide tweaks I cannot do without:
- setup postfix to send mail using my mail server
- copy Network Manager system connections files in
/etc/NetworkManager/system-connections/
update-alternatives --config editor
For postfix, I have a little ansible playbook that takes care of it.
Network Manager system connections need to be copied manually: a plain copy and
a systemctl restart network-manager
are enough. Note that Network Manager
will ignore the files unless their owner and permissions are what it expects.
Fine tuning
Comparing the output of dpkg --get-selections
between the old and the new
system might highlight packages manually installed in a hurry and not added to
the metapackages.
Finally, what remains is fixing the sad state of mimetype associations, which seem to associate opening file depending on whatever application was installed last, phases of the moon, and what option is the most annoying.
Currently on my system, PDFs are opened in inkscape by xdg-open
and in
calibre by run-mailcap
. Let's see how long it takes to figure this one out.
Updates
Tomas Janousek commented:
I've been carrying my Debian installation from disk to disk, from laptop to laptop for the past 15 years, so I might have a few tips about that. One important thing that has bitten me in the past is that when transferring the entire system (which you didn't do but perhaps one day you might) to always force use of numeric uids/gids, as the netinst (or gparted live, which I use) might have different ones for some system users.
The command I use these days for backups and migrations is this one:
rsync -havxHAXS --numeric-ids --progress --delete
(Yeah, I need to set up a temporary sshd on the live system, but then I don't need to worry about how to translate these rsync options into tar options.)
I found another issue with nc | tar
, in which if nc doesn't close tar's
stdin, tar seems to leave some things halfway: I found some (but not all) files
owned by root instead of my user, and symlinks turned into empty files.
Luckily, I didn't have many symlinks, except for git-annex directories that
could easily be fixed with a git reset --hard
.
I haven't yet had a chance to investigate that behaviour of tar further.