标签: busybox

如何开发一个小型的 linux 发行版?

由于 Linux 使用开源包,我想知道是否可以通过编译这些包来开发我自己的 Linux 发行版。

我试图阅读 Linux From Scratch 书,但它非常大并且使用了很多包。

我想使用 Linux 内核和 busybox 开发一个小型 Linux 发行版。我尝试在互联网上搜索,但没有找到好的指南。

linux compiling busybox

6
推荐指数
1
解决办法
1756
查看次数

Bash 遍历字符串列表

我有这个 bash 脚本:

for opt in string1 string2 string3 ... string99
do somestuff
Run Code Online (Sandbox Code Playgroud)

它有效,但我想用一个实际包含所有字符串的文件替换我的字符串的显式列表;像这样:

strings=loadFromFile
for opt in $strings
do somestuff
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

bash shell-script text-processing busybox

6
推荐指数
2
解决办法
4万
查看次数

进程字段中的 inittab '-' 字符

我有一个包含inittab以下条目的文件:

console::askfirst:-/bin/ash
Run Code Online (Sandbox Code Playgroud)

根据此手册页,流程字段中的“+”字符表示

init不会对该进程进行 utmp 和 wtmp 计算。

但是,它没有说明“-”字符。进程字段中的“-”字符有什么作用?

linux init-script busybox init

6
推荐指数
1
解决办法
1273
查看次数

urlencode 函数

我需要一种在运行旧版 busybox 的 OpenWRT 设备上使用 shell 脚本对字符串进行 URL 编码的方法。现在我最终得到了以下代码:

urlencode() {
echo "$@" | awk -v ORS="" '{ gsub(/./,"&\n") ; print }' | while read l
do
  c="`echo "$l" | grep '[^-._~0-9a-zA-Z]'`"
  if [ "$l" == "" ]
  then
    echo -n "%20"
  else
    if [ -z "$c" ]
    then
      echo -n "$l"
    else
      printf %%%02X \'"$c"
    fi
  fi
done
echo ""
}
Run Code Online (Sandbox Code Playgroud)

这或多或少地工作正常,但有一些缺陷:

  1. 某些字符会被跳过,例如“\”。
  2. 结果是逐个字符返回,因此速度非常慢。对一批中的几个字符串进行 url 编码大约需要 20 秒。

我的 bash 版本不支持像 ${var:x:y} 这样的子字符串。

shell shell-script openwrt busybox ash

6
推荐指数
1
解决办法
3703
查看次数

在使用 buildroot 构建的嵌入式 linux 上启动后 sshd 没有启动?

我已经使用树莓派的 buildroot 的默认配置完成了最小安装。我还从 menuconfig 中选择了 openssh 和 openssl:

Package Selection for the target  --->
    [*] Networking  --->
        [*]   openssh
    [*] Library -->
        Crypto -->
            -*-   openssl
            [*]      openssl binary
            [ ]      openssl additional engines
Run Code Online (Sandbox Code Playgroud)

我将 Pi 分配给了192.168.0.14,但无法通过 ssh 连接到它。nmap 显示 Pi 的所有端口都已关闭,有时根本不显示 Pi,我觉得这很奇怪——每当 nmap 扫描它时,LINK LED 就会闪烁,所以我猜它连接得很好。

我通常使用update-rc.d或管理启动服务systemctl,但是我只能通过 ssh 连接到 Pi - 我没有 HDMI 或串行端口。我不确定如何手动设置。/etc/init.d/S50sshd存在于 Pi 中,所以它应该在启动后启动 ssh,不是吗?

相关配置文件:/etc/ssh/sshd_config, /etc/init.d/S50sshd.

我在 SD 卡中找不到任何相关日志。

编辑:

根据 X Tian 从评论中提出的建议,我能够获得日志。唯一记录的是/var/log/messages …

embedded busybox init.d raspberry-pi buildroot

6
推荐指数
1
解决办法
7990
查看次数

在华为的 Dopra Linux 中访问常规 linux 命令

背景故事:我家里有一台华为 HG8245 路由器,我想更改默认用户名/密码。我试过遵循指南,但配置文件总是被重置。我的 ISP 也没有帮助,所以我正在寻找其他方法来实现这一目标。路由器具有 telnet 访问权限,因此这似乎是更改凭据的一种方式。

我可以访问的第一个 shell 如下所示:

WAP>
Run Code Online (Sandbox Code Playgroud)

按“?” 给了我一个我在这里粘贴的可用命令列表,两个有趣的命令是“su”和“shell”。我似乎无法获得 su 访问权限,即使在以 root 身份登录后(挑战密码提示,然后什么也没发生),但 shell 给了我一个合适的 linux shell。

WAP>shell

BusyBox v1.18.4 (2017-12-26 17:06:34 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

WAP(Dopra Linux) #
Run Code Online (Sandbox Code Playgroud)

现在这是有趣的地方,安装了 BusyBox,但是 help 命令实际上不起作用。

WAP(Dopra Linux) # help
ERROR::Command is not existed
Run Code Online (Sandbox Code Playgroud)

打 ”?” 再次给了我另一个可用命令列表,我在这里粘贴了这些命令。它们非常有限,但我可以访问 ls 并且我可以看到 /bin 实际上有很多经典的 linux 内容,但我似乎无法运行其中任何一个,甚至是 busybox。它只是抛出厚颜无耻的“命令不存在”错误消息。

我的问题是:如何访问这些命令(最好是 cat 和 echo)?

linux busybox telnet ash huawei

6
推荐指数
0
解决办法
5214
查看次数

无法让busybox switch_root 工作

我正在研究使用 initramfs 启动的嵌入式 ARM Linux 系统。(这里有一些早期 问题的背景知识,如果你感兴趣的话。)到目前为止,部分感谢在这里收到的帮助,我可以通过带有嵌入式 initramfs 的 TFTP 引导内核。MMC 驱动程序检测到包含新根文件系统的 SD 卡,然后我可以挂载它。但是,我无法完成最后一步,即使用 busybox switch_root 切换到 SD 卡上的文件系统来工作。

在 initramfs shell 提示符下,我认为这应该使内核切换到新的文件系统:

switch_root -c /dev/console /mnt/root /sbin/init.sysvinit 
Run Code Online (Sandbox Code Playgroud)

然而,它只是让busybox( switch_root 别名)打印其手册页,如下所示:

/ # switch_root -c /dev/console /mnt/root /sbin/init.sysvinit 
BusyBox v1.17.4 (2010-12-08 17:01:07 EST) multi-call binary.

Usage: switch_root [-c /dev/console] NEW_ROOT NEW_INIT [ARGS]

Free initramfs and switch to another root fs:
chroot to NEW_ROOT, delete all in /, move NEW_ROOT to /,
execute NEW_INIT. PID must be 1. NEW_ROOT …
Run Code Online (Sandbox Code Playgroud)

linux util-linux busybox sd-card

5
推荐指数
1
解决办法
3万
查看次数

尝试从另一台机器在基于 Linux 的机器上设置日期

我在嵌入式平台上运行繁忙的盒子。每次重新启动硬件时,我都想在盒子上正确设置日期。我没办法持久地节省时间,所以只能每次都设置时间。我有 LAN 连接,但没有 SSH。我目前的技巧是将“日期”的输出重定向到我电脑上的文件,通过 tftp 从我的硬件平台访问该文件,然后以某种方式解析文件,使用其内容,然后设置日期。我不知道如何从文件中获取字符串,然后使用 'date' 命令设置它。任何帮助,将不胜感激。设置日期的任何其他方式都将被获取。我曾尝试使用 ntpd,但由于缺乏互联网连接而失败

date busybox

5
推荐指数
2
解决办法
1万
查看次数

adduser, addgroup“正在使用的组”

我正在尝试创建一个系统范围的 PulseAudio 守护进程(我知道与此相关的安全问题)。但是,当我通过 PulseAudio 守护进程(以 root 身份)播放时,出现访问被拒绝的错误。我认为这可能是因为root用户不在pulse-access组中。

我尝试添加它:

adduser root pulse-access
Run Code Online (Sandbox Code Playgroud)

不幸的是,这又给了我这个错误:

addgroup: group 'root' in use
Run Code Online (Sandbox Code Playgroud)

我正在一个小型 BusyBox 上运行,它没有更高级的 useradd 等命令。

Why can't I / How should I add a user to a specific group, having only access to these two commands?

Running PulseAudio as System-Wide Daemon https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/SystemWide/

users busybox

5
推荐指数
1
解决办法
1万
查看次数

获取通过 find 输出检索的文件的确切大小

我的 shell 引擎是Busybox 1.31.0bash 3.2

我需要获取从find命令中检索到的文件的大小。

我一直在尝试只查找 60 多天前修改过的文件,同时最好以 MB 表示法的单行形式获取所有这些文件的大小。这是我尝试过的。

find -type f -mtime +60 -print0 | xargs -0 du -smc
Run Code Online (Sandbox Code Playgroud)

find -type f -mtime +60 -exec du -smc {} \;
Run Code Online (Sandbox Code Playgroud)

前者逐行检索超过 60 天的所有文件(在此之前完全没有问题),但它奇怪地计算了所有这些行之间的大小数次,在最后一行我得到了一个不对应的“总”大小到输出的实际总大小。这是它的样子。

.....
.....
0       ./FOLDER 2018/Copy #183 of ~$DATABASE OTHERS - NOV.18N.xlsx
42      ./FOLDER 2018/F9C8A618.tmp
0       ./FOLDER 2018/Copy #166 of ~$DATABASE PORTFOLIO NOV.18.xlsx
3275    total
10      ./FOLDER 2018/CFDC6981.tmp
2       ./FOLDER 2018/D5AAF4EB.tmp
0       ./LIFE INSURANCE/Copy #15 of ~$Copy of LIFE INSURANCE …
Run Code Online (Sandbox Code Playgroud)

command-line bash find disk-usage busybox

5
推荐指数
1
解决办法
2002
查看次数