7

我自己编译了busybox,我把它放到了我们的嵌入式linux中。但我有一些问题。

问题1:当我尝试使用gzip之类的命令时,它会打印“gzip:applet not found”。当我检查busybox的menuconfig时,我确保我选择了“gzip”。

问题2:我以前使用VIM,但是busybox只提供VI。所以我将VIM链接到VI,但是当我输入vim并运行它时,它也显示“vim:applet not found”。

任何人都可以帮助我解决“找不到小程序”的问题吗?非常感谢。

PS:我对busybox的“小程序”感到困惑,它是什么?像java中的“applet”?

4

3 回答 3

1

问题 1 和 2 的答案是:您必须先设置变量或在启用的PATH情况下编译busybox 。FEATURE_PREFER_APPLETS您可以PATH使用以下方式设置变量:

$ export PATH=/bin:/sbin:/usr/bin:/usr/sbin

Busybox 小程序是一个小型应用程序,通常可以在 UNIX 通用实用程序(在 POSIX 标准中定义)中找到。这个小程序被编译成一个单一的可执行文件:busybox.

于 2018-01-05T01:57:22.537 回答
1

[FYI] Shebang 的错字给我带来了同样的applet not found错误。

$ # The '!' was forgotten in shebang
$ cat sample.sh
#/bin/sh

echo 'hello world'

$ ./sample.sh
sample.sh: applet not found

在 docker-compose 中,运行上面的脚本会给我一个打击错误:

standard_init_linux.go:211: exec user process caused "exec format error"
于 2019-10-30T11:13:32.200 回答
-1

即使这是一个与 Java 相关的问题,正如@KEINOS 指出的那样,这与缺少的 shebang 表示法有关。我在安装 R 包时尝试构建基于 Alpine Linux 的 Docker 映像时遇到了问题。

我的 jerry-rigged 解决方案是在映像中安装 R 之后添加以下脚本以运行,然后运行 ​​Buildx 的 muiltarch 构建:

#!/bin/sh
for script in $(ls -p /usr/lib/R/bin/ | grep -v / )
do
    sed -i '1 i\#!/bin/bash\n#' "/usr/lib/R/bin/$script"
done

这会将 shebang 表示法添加到所有 R 提供的脚本中。

即便如此,一些包的 shell 脚本也缺少 shebang 符号。我刚刚在其中一个中打开了一个PR来添加这个符号。

如果您尝试编译只是为了在基于 x86 的系统中运行,则此修复可能不会产生影响,但如果您尝试编译到任何其他架构,例如 arm/v6、arm/v7、arm/v8、ppc64le , 和 s390x; 你会遇到这个问题。

于 2021-03-13T13:40:30.287 回答