首先感谢falconindy提供的几个note, 这是我的解决思路的基础:
A few things to note...
1) If you find yourself in a position to recreate the symlink yourself, the link target is [b]usr/lib[/b] and not [b]/usr/lib[/b]. This is an important difference that's only evident in a chroot situation.
2) The linker is an interpreter, just like /bin/bash. If it exists on the system but the /lib symlink is missing/fubar, you can run ELF binaries directly via the linker, e.g. /usr/lib/ld-2.16.so /bin/ln -s ....
我遇到了和litemotiv一样的问题:
清理过/lib, 保证里面的文件都属于 glibc 后再次尝试升级:
(1/2) upgrading glibc [########################################################] 100%
error: extract: not overwriting dir with file lib
error: problem occurred while upgrading glibc
call to execv failed (No such file or directory)
error: command failed to execute correctly
error: could not commit transaction
error: failed to commit transaction (transaction aborted)
Errors occurred, no packages were upgraded.
我的问题的特殊点是: 我没有打开一个root权限的命令行, root密码登陆被禁用(所以我无法使用su root), 而且我无法使用上面说的ld-2.16.so去加载sudo(由于sudo本身的安全规则).
于是我琢磨出了下面的方法去修复这个已经挂掉的系统, 希望能帮到遇到类似问题的盆友:
- 重启, 编辑grub里linux(或kernel)开头的那行, 在尾部添加:
init=/usr/lib/ld-2.16.so /bin/sh
- remount文件系统使其可写:
/usr/lib/ld-2.16.so /bin/mount -o remount,rw /
- 移除空的(上面的错误会使它是空的) /lib 目录:
/usr/lib/ld-2.16.so /bin/rmdir /lib
- 手动修复链接:
/usr/lib/ld-2.16.so /bin/ln -s usr/lib /lib
- 按 ctrl-alt-del 重启电脑, 然后用pacman重新安装一次glibc
然后各种东西都恢复正常了, 不需要使用恢复光盘之类的东西 🙂
参考: https://bbs.archlinux.org/viewtopic.php?pid=1126667#p1126667
我这里有一台VPS装了Arch升级pacman就遇到了这个。。。
赞,这个已经被官方wiki推荐了。话说我是先看到DevoloperWiki里面链接的帖子后看到这里的。。。
虽然我解决的时候没用这个办法,不过还是很厉害的样子。
我没有遇到这个问题,不知道是为什么,昨天刚刚升级系统的。
没有用一些奇怪的内核模块什么的吧…
哦,自从我上次因为开testing而吃尽了libpng的苦头之后就没有再开testing了。
现在我的core/glib版本是2.16.0-1
呵呵, libpng那次算温柔了, 就个别软件不能用. 这次已经让好多老外直接挂了…
我突然发现电脑不出声了……alsamixer识别声卡,但是gnome-sound-applet不认……
不知道怎么回事,打算重启……
原来是和Timidity++冲突……
俺这里pulseaudio和timidity++一起工作的正常呢(
我是把 timidity -iA 写在 /etc/rc.local 里面,这样每一次启动MIDI软件的时候就不会忘记启动timidity++,昨天升级timidity++之后发现其他程序就不能发声了。
但是又不是权限问题(虽然是root启动),因为kill掉timidity之后再用root启动也很好……
纠结,现在不能让timidity自动启动了……