如何使 mkinitcpio busybox ash 到源 /etc/profile?

如何使 mkinitcpio busybox ash 到源 /etc/profile?

Arch Linux/usr/lib/initcpio/busybox属于包 mkinitcpio-busybox 1.27.2-1,并且是配置低功能,例如 CONFIG_FEATURE_USE_INITTAB 未设置。

在包含 busybox 的自定义 initramfs 中,我设法获得执行源代码/etc/profile工作的 ssh 网络登录。还有一个shell 提示符在 VGA 显示器上可见。

然而,“vga”外壳并不来源/etc/profile。问:登录 Shell 和非登录 Shell 之间的区别?让我觉得这个 shell 不是登录 shell。该外壳由以下命令启动/init

exec setsid sh -c 'exec sh </dev/tty1 >/dev/tty1 2>&1'

回归:

  • exec setsid sh -c 'exec sh -i </dev/tty1 >/dev/tty1 2>&1'
  • exec setsid sh -c 'exec sh - </dev/tty1 >/dev/tty1 2>&1'
  • exec setsid sh -c 'exec -sh </dev/tty1 >/dev/tty1 2>&1'

如何使该busybox ashshell 成为源代码/etc/profile和/或使其成为(自动)登录 shell?

答案1

按照惯例,如果使用以 开头的命令名调用 shell,则该 shell 充当登录 shell -。如果您在路径中exec -sh调用了一个可执行文件,则可以工作。 -shBusyBox ash 也支持该-l选项,因此您可以运行sh -l.

当您登录时,login程序(或sshd,或任何处理登录的程序)负责运行用户的 shell,并以-命令名开头(命令名不必与可执行文件的名称相同,这只是一个非常常见的约定,但login故意违反了)。在这里,“处理登录的任何内容”是您的迷你脚本,因此您必须处理它。

相关内容