bash : migration between Linux machines
#!/bin/bash
# migrate.bash
# Script to export or import repositories, packages, and GPG keys
# Usage:
# ./migrate.sh export # run on source machine
# ./migrate.sh import # run on target machine
set -e
MODE=$1
if [ "$MODE" == "export" ]; then
echo "=== Exporting repositories and packages ==="
# Export APT package list
dpkg --get-selections > packages.list
# Export Snap packages
snap list > snap-packages.list
# Export Flatpak packages
flatpak list --app --columns=application > flatpak-packages.list
# Export repository sources
cp /etc/apt/sources.list sources.list.backup
cp -r /etc/apt/sources.list.d sources.list.d.backup
# Export GPG keys used by apt
sudo apt-key exportall > apt-keys.gpg
echo "All exports done. Transfer these files to the target machine."
elif [ "$MODE" == "import" ]; then
echo "=== Importing repositories and packages ==="
# Restore GPG keys
sudo apt-key add apt-keys.gpg
# Restore repository sources
sudo cp sources.list.backup /etc/apt/sources.list
sudo cp -r sources.list.d.backup/* /etc/apt/sources.list.d/
# Update package lists
sudo apt update
# Restore APT packages
sudo dpkg --set-selections < packages.list
sudo apt-get -u dselect-upgrade -y
# Restore Snap packages
awk 'NR>1 {print "sudo snap install " $1}' snap-packages.list | bash
# Restore Flatpak packages
awk '{print "flatpak install -y " $1}' flatpak-packages.list | bash
echo "All imports done. System should now mirror the source machine."
else
echo "Usage: $0 {export|import}"
exit 1
fi
Usage
On the source machine :
chmod +x migrate.bash
./migrate.bash export
On the destination machine :
chmod +x migrate.bash
./migrate.bash import
Member discussion