简单地将init更换为刚刚启动的控制台

在一台非常简单的PC上,我想用最简单的bash脚本replaceUbuntu 12.04 / sbin / init,以便拥有最less的正在运行的进程。 显然,没有X,没有USB,没有检测到新的硬件,没有升级,没有apt,没有任何东西,我只需要一个带有基于DHCP的Wi-Fi IP地址的工作控制台(ssid,密码已经存储在/ etc /networking/接口)。 就这样。 目前,我已经尝试这个replace/ sbin / init:

#!/bin/sh mount -o rw,remount / mount -t proc none /proc udevd --daemon mkdir /run/network ifup -a & while [ 1 ]; do /sbin/getty -8 115200 tty1 vt100 done 

它正在工作,因为我得到一个IP地址,我可以login,但是:

  • A)在运行关机时,我得到“关机:无法closures系统:”
  • B)control-c在控制台中不工作
  • C)login后,我得到:“bash:不能设置terminal进程组(-1):不适当的ioctl设备”
  • D)login后,我得到:“bash:这个shell中没有作业控制”

另外,我注意到所有的用户空间进程都有一个“?” 在运行ps avx的tty列中。 我怎样才能解决这些问题? 我不想用新贵来真正控制电脑上启动的东西,而且最低限度。

我结束了使用Busybox初始化。 伟大的微小初始…

你可以利用runlevels和基于你的问题runlevel 3是你想要使用的。

如果你有一些你不想启动的服务,那么你也可以关闭它。

要引导到runlevel 3 ,您只需在引导加载程序中将引导参数追加到内核:

 <EXISTING_BOOT_CMD> 3 

如果您的发行版使用systemd而不是sysvinit ,则它们被称为targetssystemdrunlevel 3通常被命名为multi-user.target

在这种情况下,您需要传递的内核启动参数是systemd.unit=multi-user.target

 <EXISTING_BOOT_CMD> systemd.unit=multi-user.target 

另一种方法是,如果您不想触摸引导装载程序:

 systemctl enable multi-user.target