系统恢复后,wget 出现 https 段错误

系统恢复后,wget 出现 https 段错误

运行 Raspbian 时,我的 microSD 坏了。我曾经ddrescue对它进行映像处理,并将映像放在好的 microSD 上。系统启动后,我可以 ssh 进入,plex 似乎可以工作,samba 似乎可以工作,大多数东西似乎都可以工作。

但是,尝试wget通过 HTTPS 进行任何操作都会出现分段错误。普通 HTTP 似乎没问题。这意味着我无法更新某些软件包/软件包源,这通常不太好。

我已经重新安装了(apt install --reinstallwget及其所有依赖项(通过获得apt-cache depends wget)。

下一步我该尝试什么?


作为参考,wget -d没有提供太多有用的信息:

$ wget -d https://google.com
DEBUG output created by Wget 1.20.1 on linux-gnueabihf.

Reading HSTS entries from /home/felix/.wget-hsts
URI encoding = ‘UTF-8’
Converted file name 'index.html' (UTF-8) -> 'index.html' (UTF-8)
--2021-12-20 21:43:42--  https://google.com/
Certificates loaded: 126
Resolving google.com (google.com)... 142.250.200.46, 2a00:1450:4009:81e::200e
Caching google.com => 142.250.200.46 2a00:1450:4009:81e::200e
Connecting to google.com (google.com)|142.250.200.46|:443... connected.
Created socket 3.
Releasing 0x01c1cb70 (new refcount 1).
Segmentation fault

依赖项列表如下:

$ apt-cache depends wget
wget
  Depends: libc6
  Depends: libgnutls30
  Depends: libidn2-0
  Depends: libnettle6
  Depends: libpcre2-8-0
  Depends: libpsl5
  Depends: libuuid1
  Depends: zlib1g
  Conflicts: <wget-ssl>
  Recommends: ca-certificates

答案1

设法修复了它,下面是为后人提供的方法。

总结:用于dpkg --verify验证所有已安装的软件包,重新安装损坏的软件包。在一个命令中:

$ sudo dpkg --verify | grep -v ' c ' | awk '{print $NF}' | xargs dpkg -S | awk '{print substr($1, 1, length($1)-1)}' | sort | uniq | xargs sudo apt install --reinstall

将上述命令分解如下:

sudo dpkg --verify

将列出所有安装的文件自安装以来已修改的文件。但是,这还会列出已修改的配置文件(标有 )c,这就是为什么我们需要...

grep -v ' c '

...这将删除所有与该模式匹配的行,因此我们可以忽略那些我们只是更改了配置文件的包。

awk '{print $NF}'

这只会打印每行的最后一列。在第一个命令的输出中,这是验证失败的文件的路径(在我的情况下,它们都未通过 md5 验证)。

xargs dpkg -S

调用dpkg -S每个路径,打印出包裹拥有/安装了该路径。

awk '{print substr($1, 1, length($1)-1)}'

从输出中提取包名称dpkg -S

sort | uniq

对软件包名称进行排序,然后删除重复项。sort需要这样做才能uniq正常工作。之所以有重复项,是因为同一个软件包中的多个文件可能会损坏。

xargs sudo apt install --reinstall

重新安装所有有问题的软件包。在我的例子中,这些是:

binutils-arm-linux-gnueabihf
console-setup-linux
g++-8
gcc-8
grep
iso-codes
libcephfs2:armhf
libglib2.0-0:armhf
libgmp10:armhf
libperl5.28:armhf
libpython2.7-stdlib:armhf
librados2:armhf
libstdc++-8-dev:armhf
man-db
perl-base
poppler-data

有点高兴我找到了这个(dpkg --verify大部分),否则我会一直担心随机的东西会因此而损坏或无法工作。

相关内容