安装软件,使其无法通过重新安装而被删除

安装软件,使其无法通过重新安装而被删除

有没有办法在 Ubuntu 下安装程序,使得从 live usb 进行标准重新安装不会擦除它们?(例如,将它们安装在不同的分区中或将 /bin/local 等文件夹保存在不同的分区上?)

如果没有,那么编译所有以前的软件列表的最佳方法是什么(假设它们都可以通过 apt-get 添加,最多通过添加 repo)并制作可以重新安装它们的脚本?(某些软件,例如需要许可证的软件不能以这种方式处理,但很多其他软件,例如 texlive、geany 等)

动机:作为 Linux 的新手,我喜欢尝试各种方法(我想尝试其他发行版、更改分区等),我经常不得不重新安装,因为有时这是修复损坏系统的最简单方法。但作为我的主要计算机,我不想每次发生这种情况时都重新安装/重做所有配置。

答案1

有多种方法可以对操作系统执行此操作,但我不确定它在发行版之间的可移植性如何。您可以对基于 Debian 的发行版执行此操作(使用 apt 和 dpkg),并且它可能工作得相当一致。但有很多发行版不使用 apt/dpkg,因此它几乎肯定不适用于这些发行版。例如,Fedora 使用 yum,我不记得 Arch 使用什么。

因此,可能最好的/最可转移的方法是保留您想要的应用程序的文本文件...即使这样,它也不是万无一失的,因为不同的发行版通常甚至有略微不同的命名约定。

根据你编辑的答案(保留在 Ubuntu 上),列出所有安装的软件包的一个快速而肮脏的方法是

apt-cache pkgnames > apps.txt

但请注意,这将列出所有已安装的软件包;而不仅仅是您明确安装的软件包。因此,如果您在具有不同桌面环境的不同 Ubuntu 版本之间切换,这将有点问题...它还将列出依赖项(未手动安装的依赖项 - 因此如果您卸载手动安装的软件,它们不会被自动标记为不需要)。

为了尽量减少这种影响(但不能消除),您可以在同一版本的全新安装上重新运行该命令(例如,在切换到 Lubuntu 之前)。然后使用第二个列表的结果清理第一个列表...

apt-cache pkgnames > clean-install-apps.txt
grep -v -x -f clean-install-apps.txt apps.txt > new-apps.txt

然后你可以使用以下命令进行安装:

sudo apt-get update && sudo apt-get install < new-apps.txt

但请记住,这也会手动安装依赖项。此外,它不会包含所有配置信息(如果您已按所需方式配置了这些应用程序...通常,这些信息保存在主目录中的点目录中(例如“.appname”之类的目录)。因此,理论上,您可以将主目录挂载到不同的目录中,然后每次都重新挂载它。即使这样,如果您使用不同的发行版或版本,它也可能不起作用,因为软件版本可能不一样(如果您使用的是相同版本的 Ubunut,则不应该是问题;例如 15.04)...

我还想到了一个快速而简单的方法,可以加快安装速度(并减少下载带宽,这是一个问题),那就是将 /var/cache/apt/archives 中的所有 deb 包复制到 USB(或单独的分区等)。然后,您可以使用 dpkg 安装所有 deb。假设您的 USB 安装在 /media/USB 上,在您当前的系统上,它将如下所示:

mkdir /media/USB/debs-to-install
cp /var/cache/apt/archives/*.deb /media/USB/debs-to-install

然后重新安装后:

dpkg -i --force-depends /<USB-dir>/*.deb
apt-get install -f

解释: 即使依赖关系不满足,也会强制安装(通常不推荐,但在这种情况下是可以的,因为几乎可以保证所有依赖关系都存在于该目录中;只是它们没有按照正确的顺序安装)。 dpkg -i应该 解决任何依赖问题(如果有的话)。--force-dependsapt-get install -f

请注意,第二个选项也会使依赖项标记为手动安装......

如下文所述,还有其他选项可以作为此问题的答案:如何列出所有已安装的软件包

相关内容