运行 Raspbian 时,我的 microSD 坏了。我曾经ddrescue
对它进行映像处理,并将映像放在好的 microSD 上。系统启动后,我可以 ssh 进入,plex 似乎可以工作,samba 似乎可以工作,大多数东西似乎都可以工作。
但是,尝试wget
通过 HTTPS 进行任何操作都会出现分段错误。普通 HTTP 似乎没问题。这意味着我无法更新某些软件包/软件包源,这通常不太好。
我已经重新安装了(apt install --reinstall
)wget
及其所有依赖项(通过获得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
大部分),否则我会一直担心随机的东西会因此而损坏或无法工作。