Sas*_*san 6 software-installation
情况:有一天我的SSD硬盘坏了,随机删除了很多文件,包括一些操作系统的文件。损坏足够大,使操作系统无法启动,甚至无法 chroot。
幸运的是,我在另一张光盘上有另一个 Ubuntu,我能够恢复chroot
受损操作系统的启动和网络功能。然后我启动了损坏的操作系统并运行了一个脚本来重新安装安装在它上面的每个包(使用apt-get install <package> --reinstall
)它并不像我描述的那么容易,有很多包需要特别注意。
在那之后,除了运行像wine和adb这样的32位二进制文件之外,几乎一切都很好。我需要这个领域的专家告诉我我应该怎么做才能恢复正在执行的 32 位二进制文件。
例如,假设我想运行 wine:首先让我们运行它fish
:
# wine
Failed to execute process '/usr/bin/wine'. Reason:
The file '/usr/bin/wine' does not exist or could not be executed.
Run Code Online (Sandbox Code Playgroud)
现在让我们运行它bash
:
# wine
bash: /usr/bin/wine: No such file or directory
Run Code Online (Sandbox Code Playgroud)
让我们输入完整的位置:
# whereis wine
wine: /usr/bin/wine /usr/bin/X11/wine /usr/share/wine /usr/share/man/man1/wine.1.gz
# /usr/bin/wine
bash: /usr/bin/wine: No such file or directory
Run Code Online (Sandbox Code Playgroud)
让我们看看文件是否真的存在:
# ls -l /usr/bin/wine
-rwxr-xr-x 1 root root 9748 Dec 18 05:11 /usr/bin/wine
Run Code Online (Sandbox Code Playgroud)
什么ldd
和file
说:
# ldd /usr/bin/wine
not a dynamic executable
# file /usr/bin/wine
/usr/bin/wine: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xe4e2fb58bdbbbc2dedf7483825900ed35a6dc989, stripped
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?
损坏的操作系统是 Ubuntu 13.10 amd64。
这ldd
是预期的,因为“二进制”只是一个脚本:
$ file /usr/bin/wine\n/usr/bin/wine: POSIX shell script, ASCII text executable\n$ head /usr/bin/wine \n#!/bin/sh\n\nset -e\n\nwine=/usr/bin/wine32\nif test "$(file -b -L "$1" | cut -d\\ -f1)" = "PE32+" -o "$WINEARCH" = "win64"; then\n wine=/usr/bin/wine64\nfi\n\nif test -f $wine; then\n
Run Code Online (Sandbox Code Playgroud)\n\n那么,解决办法是什么?完全删除它们并安装它们。我们真的不知道有多少损坏,因此删除并重新安装是最安全的:
\n\nsudo apt-get autoremove --purge wine\n
Run Code Online (Sandbox Code Playgroud)\n\n对于任何不起作用的软件包也是如此。您可以使用以下命令验证与二进制文件对应的包dpkg -S
:
\xe2\x9e\x9c ~ dpkg -S /usr/bin/wine\nwine: /usr/bin/wine\n
Run Code Online (Sandbox Code Playgroud)\n
跑步
sudo apt-get install libopenal1:i386
Run Code Online (Sandbox Code Playgroud)
或者
sudo apt-get install --reinstall libopenal1:i386
Run Code Online (Sandbox Code Playgroud)
至少这应该让ldd
行为良好。我不知道这是否能解决其他问题,也许吧。如果没有,那么我只会查看输出ldd
,然后安装/重新安装包含这些库的软件包。
归档时间: |
|
查看次数: |
692 次 |
最近记录: |