如何备份我的PPA?

相关问题请参考this question。但我担心的是,在过去的一年中,大部分更有趣(或使用频率更高)的应用都来自PPAs,并且仅备份我的源列表无法像add-apt-repository一样添加关联的launchpad密钥。

因此,我正在寻找一种列出所有PPA网址(例如ppa:chromium-daily/stable)的方式,以便我可以轻松地编写一系列的add-apt-repository命令,优雅地将它们添加到新的安装中。

当然,除非倒出我的bash历史记录。这可能是可行的,取决于该文件的历史深度。

5个回答

因为我喜欢深入研究命令行脚本,所以我写了以下代码。它生成了一系列PPA字符串,您可以将它们备份并编写成“add-apt-repository”脚本:
grep -RoPish '(?<=ppa.launchpad.net/)[^/]+/[^/ ]+' /etc/apt | sort -u | sed 's/^/ppa:/'

那会生成类似这样的东西:
ppa:ubuntu-wine/ppa
ppa:am-monkeyd/nautilus-elementary-ppa
ppa:nilarimogard/webupd8
ppa:ubuntu-x-swat/x-updates
ppa:tualatrix/ppa
ppa:banshee-team/banshee-unstable
ppa:chromium-daily/beta
ppa:libreoffice/ppa
ppa:banshee-team/ppa

如果你想要完全恢复它们,你可以像这样将它们重新导入系统(假设我们将PPA保存为 ~/ppa-backup.txt):
<~/ppa-backup.txt xargs -I % sudo add-apt-repository %

我建议你不要一股脑地恢复所有备份。浏览备份文件,确保你知道每个PPA包含的内容。

谢谢Oli。我今晚会测试一下,如果测试成功的话,我会接受这个建议! - Scaine
1我的天啊,我系统上有很多个PPA。这太完美了,Oli。谢谢你的努力! - Scaine
写得不对。 - user447607

我所做的是将整个/etc/apt目录复制到一个安全的位置。如果你需要重新安装或克隆你的安装,只需将该目录复制回来即可。它甚至会保存gpg的受信任密钥。

如果您想导入所有的GPG密钥,您可以使用我的脚本(以.deb格式提供)一次性导入所有缺失的GPG密钥。下载 使用方法很简单,只需运行以下命令:
sudo launchpad-getkeys

如果你想的话,你可以查看一下.deb文件的内容,脚本非常简单易懂(以防你不相信我的.deb文件)。
然后,要备份所有的PPA,你只需要将所有的.list文件复制到新电脑/新安装中,一旦复制完成,运行上述命令导入所有的密钥即可。

备份所有第三方 deb 仓库列表以及 Flatpak 和 Snaps,可以尝试使用我的名为 srslsudPython 脚本(适用于 Ubuntu 和 Debian 的软件列表保存/恢复脚本)。
它将把所有 APT 仓库、它们的 GPG 密钥以及 Snaps、Flatpaks 和 Ubuntu Make 应用的列表保存为 JSON 文件,从第一台机器上。
然后,您可以在第二台机器上使用相同的 JSON 文件来恢复此列表。
# minimal for APT
sudo apt-get install python3 python3-gi python3-apt software-properties-common python3-jsonpickle

# additional for Snap, Flatpak
sudo apt-get install snapd flatpak gir1.2-snapd-1 gir1.2-flatpak-1.0

# additional for Ubuntu Make
sudo apt-get install ubuntu-make

cd ~/Downloads
wget https://raw.githubusercontent.com/N0rbert/srslsud/master/srslsud.py
chmod +x srslsud.py
./srslsud.py all_save

然后将 *.json 文件与 srslsud.py 一起复制到目标系统中,并在那里运行以下命令:
./srslsud.py all_load
sudo bash ./apt.sh

最后,享受新的克隆系统。
注意:如果只需要APT,请使用apt_save和apt_load代替。

非常方便! - Archisman Panigrahi

我的答案 上的如何从命令行获取所有存储库和PPA列表到安装脚本中?ppa:USER/REPO格式列出PPA:
list_ppas () {
  grep -E '^deb\s' /etc/apt/sources.list /etc/apt/sources.list.d/*.list |\
    cut -f2- -d: |\
    cut -f2 -d' ' |\
    sed -re 's#http://ppa\.launchpad\.net/([^/]+)/([^/]+)(.*?)$#ppa:\1/\2#g' |\
    grep '^ppa:'
}

生成安装脚本:
list_ppas | xargs printf 'add-apt-repository -y %s\n' > install_ppas.sh

(如果你不想进行非交互式安装,请去掉-y)

运行脚本:

sudo sh install_ppas.sh

请查看我在另一个问题上的回答,其中包含一些额外功能的完整脚本,您可以保存并使用。