FreeBSD 8.2,删除了/ bin / sh,无法启动


8

我对一台服务器做出了一个非常糟糕的决定。

我删除了/bin/sh。我重新启动了服务器,服务器无法运行,因为它需要/bin/sh启动rc脚本。我也无法访问单用户模式,因为需要sh。

有什么简单的方法可以重新安装bourn shell?

我尝试从活动CD复制sh,但在ld-elf.so.1库中失败了。所以我将其从livecd复制到了/ libexec到我的/分区。然后,它需要libedit.so库,我将其复制到了/ libexec,但这一次它不起作用。

我尝试了一个符号链接,/usr/local/bin/bash但是仍然显示“找不到sh”类型错误。我假设这是因为/usr尚未安装,因为它是通过rc脚本完成的。

任何帮助是极大的赞赏。


2
天啊。嗯不好 是时候拉最后一条胶带了。
MDMarra 2011年

您的LiveCD麻烦可能是因为它是FreeBSD的不同版本(或者您的LiveCD使用的是魔术压缩的二进制文件,该二进制文件/ bin / ABunchOfStuff硬链接到不同的名称)。您正在运行哪个版本的FreeBSD?
voretaq7 2011年

标题中有herp-derp版本。别管我 需要咖啡。
voretaq7 2011年

3
所以...嗯...是什么迫使您这样做呢?您听起来像是故意的。
user606723 2011年

Answers:


8

您需要将/ bin / sh替换为某些内容;那是关键。如果您可以在启动过程中进入FreeBSD加载程序(提示为“ ok”),请尝试以下操作:

set init_shell=/bin/csh
unset init_script
unset init_path

我从FreeBSD手册页(在线)的loader(8)中获得了此信息。我还没有做到这一点,但是它应该可以工作(假设/ bin / csh存在并且可执行)。

如果您有FreeBSD 8.2服务器并在其他地方运行,则可以尝试从该源中窃取/ bin / sh并将其放入系统中。

或者,获取静态构建的/ bin / sh并将其放入;静态构建的二进制文件不会有任何库问题。

编辑:我应该指出:如果您启动到/ bin / csh,您仍然必须使用某些东西来代替/ bin / sh。您可以通过Internet获得它,也可以从另一张CD或软件包或其他东西复制它;使用/ bin / csh引导进入计算机。通过网络进行复制需要您启动网络。否则,请从CDROM复制。

将来避免这种情况的最佳方法:

  1. 不要从/ bin中删除!(那是容易的部分)
  2. 具有静态构建的/ bin / sh,而不是动态链接的。
  3. 拥有一个备份sh,例如/bin/sh.static。

做到这三个。


也是一个很棒的“让我备份,以便我可以解决此问题”的解决方案(其优点是不需要LiveCD来启动)。
voretaq7 2011年

6

好,首先讲课:

  1. 与系统二进制文件不惹
    任何东西/bin/sbin/rescue在FreeBSD应单独留在家中。即使您知道自己在做什么(如果您知道自己在做什么,您也知道这些都应该单独放置。它们确实很重要-所有这些都非常重要!)

  2. 不要删除/bin/sh永远 任何具有它的* NIX系统上。
    真。不要这样 一个 LOT脚本的依赖/bin/sh是一个Bourne shell。它打破了宇宙。
    如果您确实希望,可以安全地将其替换为Adam Z建议的副本bash,但是如果要这样做,则可能需要静态链接该副本bash-它引入了很多库,并且您在系统启动并/usr/local安装之前,可能没有这些。


现在,如何解决问题?两种选择:

选项1:有点痛苦
转至 http://www.freesbie.org/(或您选择的FreeBSD LiveCD-您甚至可以使用 http://www.freebsd.org的恢复CD)。拿起LiveCD,将其刻录并引导。

在LiveCD环境中挂载后,挂载系统中断的根分区,将其/bin/sh从LiveCD 复制到计算机,然后重新启动。

这样可以使您重新启动并运行-您可能需要遵循Rebuild“ World”的说明,或者至少/bin/sh从与您正在运行的系统匹配的源树中重新编译。

选项2:减轻痛苦,无需LiveCD
如果周围有另一个FreeBSD盒,您可以脱开(或通过其他方法将手指放在上/bin/sh,然后以单用户模式启动FreeBSD机器。配置网络(或挂载)任何介质上都有替换壳),然后将其复制到应该放置的位置。

重新启动,您应该没问题-与LiveCD相同的警告,但如果/bin/sh您不是从相当接近的同一台计算机上获得LiveCD,则请注意。


1
仅当共享库是正确的版本时,才能使用FreeBSD的另一个发行版中的/ bin / bash。最好使用直接来自FreeBSD 8.2的东西,而不要使用替代版本。但是,任何FreeBSD 8.x系统都应该能够提供可以正常工作的静态构建的外壳。
梅,

@david好点- /bin不再是静态链接。我认为适当版本的FreeBSD的Rescue CD具有可用的外壳(即可以直接转储到位的外壳),但是自从我启动一个
外壳

4

与其进行符号链接,不如将其复制bash到中/bin/sh。使用该ldd命令查找除rootfs之外可能驻留在文件系统上的所有库,并将它们也复制到rootfs。


1
这是一个很好的解决方案,但会造成库混乱,需要稍后进行后续清理。
voretaq7 2011年

是的,之后需要清理。一种选择是使用静态构建的外壳二进制文件。
亚当·扎尔克曼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.