From 822e152bafcf85b36031a20504ffb5c3276f9479 Mon Sep 17 00:00:00 2001 From: xiangzelong Date: Sun, 19 Feb 2023 08:13:01 +0800 Subject: [PATCH] docs: update docs Log: --- docs/.vitepress/config.js | 1 + .../2.deepin软件包管理/2.6.从损坏的系统中恢复.md | 140 ++++++++++++++++++ .../2.deepin软件包管理/2.7.软件包管理技巧.md | 0 .../2.deepin软件包管理/2.8.玲珑简介.md | 0 docs/index.md | 14 +- 5 files changed, 149 insertions(+), 6 deletions(-) create mode 100644 docs/deepin进阶教程/2.deepin软件包管理/2.6.从损坏的系统中恢复.md create mode 100644 docs/deepin进阶教程/2.deepin软件包管理/2.7.软件包管理技巧.md create mode 100644 docs/deepin进阶教程/2.deepin软件包管理/2.8.玲珑简介.md diff --git a/docs/.vitepress/config.js b/docs/.vitepress/config.js index 88401f6..fe6d926 100644 --- a/docs/.vitepress/config.js +++ b/docs/.vitepress/config.js @@ -33,6 +33,7 @@ export default { {text: "2.3.为deepin添加来自debian或ubuntu的软件包", link: "/deepin进阶教程/2.deepin软件包管理/2.3.为deepin添加来自debian或ubuntu的软件包" }, {text: "2.4.高级软件包管理操作", link: "/deepin进阶教程/2.deepin软件包管理/2.4.高级软件包管理操作" }, {text: "2.5.Debian软件包内部管理", link: "/deepin进阶教程/2.deepin软件包管理/2.5.Debian软件包内部管理" }, + {text: "2.6.从损坏的系统中恢复", link: "/deepin进阶教程/2.deepin软件包管理/2.6.从损坏的系统中恢复" }, ], } ], diff --git a/docs/deepin进阶教程/2.deepin软件包管理/2.6.从损坏的系统中恢复.md b/docs/deepin进阶教程/2.deepin软件包管理/2.6.从损坏的系统中恢复.md new file mode 100644 index 0000000..2bde7a1 --- /dev/null +++ b/docs/deepin进阶教程/2.deepin软件包管理/2.6.从损坏的系统中恢复.md @@ -0,0 +1,140 @@ +# 2.6.从损坏的系统中恢复 + +当运行 测试版 或 不稳定版 系统,系统管理员会遇到从错误的软件包管理进行恢复的情形 + +::: warning 注意 +下面的一些方法具有很高的风险,可能会导致系统无法启动,或者导致数据丢失。请谨慎操作。 +::: + +## 2.6.1. 缺少依赖导致的安装失败 + +如果你通过"sudo dpkg -i ..."强制安装一个软件包到系统,而不安装它所依赖的所有软件包,这个软件包将作为“部分安装”而失败。 + +你应当安装所有依赖的软件包,使用 APT 系统或者 "sudo dpkg -i ..."。然后,使用下列命令来配置所有部分安装的软件包。 + +```Shell +dpkg --configure -a +``` + +::: tip +这也是我之前提到为什么不建议使用`dpkg -i`来安装软件包的原因。对于缺少依赖的问题, +最好参照[2.3节](2.3.为deepin添加来自debian或ubuntu的软件包.md)的内容进行解决。 +::: + +## 2.6.2. 软件包数据缓存错误 + +软件包数据缓存错误,能够造成奇怪的错误,比如 APT 的 "GPG error: ... invalid: BADSIG ..."。 + +你应该通过 "`sudo rm -rf /var/lib/apt/*`" 删除所有缓存的数据,然后重新尝试。(如果使用了`apt-cacher-ng`,你还应运行"`sudo rm -rf /var/cache/apt-cacher-ng/*`"。) + +## 2.6.3. 不兼容旧的用户配置 + +如果一个桌面 GUI 程序在重要的上游版本升级后变得不稳定,你应该怀疑这是旧的本地配置文件(由它创建的)所导致的。如果它在新建的用户账号下运行稳定,那么这个假设就得到了证实。(这是一个打包的 bug 并且打包者通常会避免它。) + +为了恢复稳定,你应该移除相应的本地配置文件并重新启动 GUI 程序。你可能需要阅读旧的配置文件内容以便之后恢复配置信息。(别将它们删得太快了。) + +## 2.6.4. 具有相同文件的不同软件包 + +文档级的软件包管理系统,比如说 aptitude(8) 或 apt-get(1), 使用软件包依赖,当出现相同文件时,不会尝试去安装软件包。(参见 第 2.1.6 节 “软件包依赖关系”). + +软件包维护者的错误,或者系统管理员配置了不一致的档案库混合源,(参见 第 2.7.2 节 “混合源档案库中的软件包”),都会出现不正确的软件包依赖情况。如果在出现相同文件的情况下,你通过 aptitude(8) 或 apt-get(1) 安装软件包,dpkg(1) 在对软件包解包时,确定会给调用程序返回错误,并不会覆盖已经存在的文件。 + +::: warning 小心 +使用第三方软件包会导致重大的系统风险,因为其通过使用 root 权限运行维护者脚本能够对你的系统做任何事。dpkg(1) 命令只防止解包时的覆盖行为。 +::: +可以先通过删除旧的令人讨厌的软件包,old-package,来解决这类错误的安装问题。 + +```Shell +sudo dpkg -P +``` + +## 2.6.5. 修复损坏的软件包脚本 + +当软件包脚本中的一个命令由于某些原因返回错误,脚本也将由于错误而退出,软件包管理系统忽略它们的行为,并导致部分安装的软件包。当一个软件包在它的删除脚本中有错误时,该软件包将会成为不可能删除的软件包,处理这些问题,都会变得相当棘手。 + +对于 “package_name” 的软件包脚本问题,你应该查看下列的软件包脚本。 + +- "/var/lib/dpkg/info/package_name.preinst" +- "/var/lib/dpkg/info/package_name.postinst" +- "/var/lib/dpkg/info/package_name.prerm" +- "/var/lib/dpkg/info/package_name.postrm" + +使用下列的方法,以 root 编辑损坏的软件包脚本: + +- 在行首添加 “#” 可以禁用出错的行 +- 在出错行的行尾添加 “|| true” 可以强制返回成功 + +## 2.6.6. 使用 dpkg 命令进行救援 + +因为 dpkg 是非常底层的软件包工具,它可以在很糟糕的情况下进行工作,例如无法启动系统且没有网络连接。让我们假定 foo 软件包损坏了,并且需要更换。 + +你可以在软件包缓存目录:“`/var/cache/apt/archives/`” 中找到旧的 foo 软件包的无 bug 版本。(如果找不到,你可以从档案库 https://snapshot.debian.org/ 中下载它,或从具有软件包缓存功能的机器中拷贝它。) + +如果你能够启动系统,你可以通过下列命令来安装它。 + +```Shell +sudo dpkg -i /path/to/foo_old_version_arch.deb +``` + +::: tip +如果你系统损坏较小,你也可以使用更高层的 APT 系统来降级整个系统,就像 第 2.7.10 节 “紧急降级” 中做的那样。 +::: + +如果你的系统无法从硬盘启动,你应该寻找其它方式来启动它。 + +使用 deepin 安装光盘以救援模式启动系统或者使用live CD。 + +将硬盘上无法启动的系统挂载到 “/target”。 + +通过下列命令安装旧版本的 foo 软件包。 + +```Shell +sudo dpkg --root /target -i /path/to/foo_old_version_arch.deb +``` + +即使位于硬盘上的 dpkg 命令已损坏,该命令依旧可以执行。 + +::: tip +任何由硬盘、live GNU/Linux CD、可启动的 USB 驱动或网络启动上的另一系统启动的 GNU/Linux 系统到可以类似地用来救援损坏的系统。 +::: + +如果由于依赖问题,无法用这种方式安装软件包,并且你真的必须真么做,你可以使用 dpkg 的 “--ignore-depends”、“--force-depends” 和其它选项来无视依赖。如果你这么做了,之后你必须认真努力地修复依赖关系。更多细节参见 dpkg(8)。 + +::: warning 注意 +如果你的系统严重损坏了,你应该将系统完整备份到一个安全的地方(参见 第 10.2 节 “备份和恢复”)并进行一次全新的安装。这是耗时较少且效果较好的办法。 +::: + +::: tip +如果你无视之前的提醒,义无反顾的使用混源方式安装软件包,导致系统损坏,建议直接备份数据,在保留home目录的情况下,重新安装系统。 +::: + +## 2.6.7. 恢复软件包选择数据 + +如果 “`/var/lib/dpkg/status`” 因为某种原因出现错误,Debian 系统会丢失软件包选择数据并受到严重影响。寻找位于 “`/var/lib/dpkg/status-old`” 或 “`/var/backups/dpkg.status.*`” 中旧的 “`/var/lib/dpkg/status”`" 文件。 + +给 “/var/backups/” 分配一个单独的分区是一个好习惯,因为这个目录包含了许多重要的系统数据。 + +对于严重的损坏,我建议备份系统后重新安装。即使失去 “/var/” 中的所有数据,你依旧可以从 “/usr/share/doc/” 目录恢复一些信息来引导你进行新的安装。 + +重新安装最小(桌面)系统。 + +```Shell +mkdir -p /path/to/old/system +``` + +将旧系统挂载到 “/path/to/old/system/”。 + +```Shell +cd /path/to/old/system/usr/share/doc +ls -1 >~/ls1.txt +cd /usr/share/doc +ls -1 >>~/ls1.txt +cd +sort ls1.txt | uniq | less +``` + +然后你就可以根据软件包名称来进行安装了。(可能会有一些非软件包名称,例如 “texmf”。) + +## 2.6.8deepin软件包损坏以及修复方式 + +如果和桌面环境相关的软件包损坏,可以尝试安装deepin-desktop-base进行修复 diff --git a/docs/deepin进阶教程/2.deepin软件包管理/2.7.软件包管理技巧.md b/docs/deepin进阶教程/2.deepin软件包管理/2.7.软件包管理技巧.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/deepin进阶教程/2.deepin软件包管理/2.8.玲珑简介.md b/docs/deepin进阶教程/2.deepin软件包管理/2.8.玲珑简介.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/index.md b/docs/index.md index 04eb8a9..74d7f63 100644 --- a/docs/index.md +++ b/docs/index.md @@ -53,7 +53,7 @@ deepin基于Qt技术开发了深度桌面环境和深度控制中心,并且开 你必须自己从以下原始材料查找解决方案。 -- Debian 网站([https://www.debian.org)上的通用信息](https://www.debian.org)上的通用信息) (注意:从deepin v23开始 deepin将过度到独立上游,部分debian网站提供的信息可能不适用,请注意甄别) +- Debian 网站[https://www.debian.org 上的通用信息](https://www.debian.org) (注意:从deepin v23开始 deepin将过度到独立上游,部分debian网站提供的信息可能不适用,请注意甄别) - `/usr/share/doc/package_name` 目录下的文档 @@ -61,15 +61,17 @@ deepin基于Qt技术开发了深度桌面环境和深度控制中心,并且开 - GNU 风格的 info page: "dpkg -L package_name |grep '/info/'" -- Debian Wiki([https://wiki.debian.org/)用于变化和特定的话题](https://wiki.deepin.org/)用于变化和特定的话题) +- Debian Wiki[https://wiki.debian.org/用于变化和特定的话题](https://wiki.deepin.org/) -- 国际开放标准组织的 UNIX 系统主页([http://www.unix.org/)上的单一](http://www.unix.org/)上的单一) UNIX 规范 +- deepin Wiki[https://wiki.deepin.org/用于变化和特定的话题](https://wiki.deepin.org/) -- 自由的百科全书:维基百科([https://www.wikipedia.org/)](https://www.wikipedia.org/)) +- 国际开放标准组织的 UNIX 系统主页[http://www.unix.org 上的单一UNIX规范](http://www.unix.org/) -- RFC文档([http://www.rfc.ac.cn/](http://www.rfc.ac.cn/)) +- 自由的百科全书:维基百科[https://www.wikipedia.org](https://www.wikipedia.org) -- Linux 文档项目(TLDP,[http://tldp.org/)的](http://tldp.org/)的) HOWTO +- RFC文档[http://www.rfc.ac.cn/](http://www.rfc.ac.cn/) + +- Linux 文档项目TLDP,[http://tldp.org/](http://tldp.org/) 的HOWTO ### 3.3. 排版约定