require 'socket'
-def do_cmd(*cmd)
- ctl = UNIXSocket.open('/run/initctl')
- ctl.puts(cmd.join(' '))
- puts(ctl.readline.chomp)
- exit
-end
-
-
-# If we're not PID 1, parse & send commands to /run/initctl
-
-if $$ != 1
- case ARGV[0]
- when 'poweroff', 'restart', 'halt'
- do_cmd(ARGV[0].to_sym)
- when 'status'
- do_cmd(ARGV.shift.to_sym, *ARGV)
- when 'test'
- map = { poweroff: 0x4321fedc, restart: 0x01234567, halt: 0xcdef0123 }
- # 169 == SYS_reboot
- syscall(169, 0xfee1dead, 0x20112000, map[:poweroff])
- else
- puts('I know the following commands: poweroff, restart, halt, status, test')
- exit 1
- end
-end
-
-
# These are hashes
-
$daemons = {}
$daemonCmds = {}
# Needed to prevent respawning during a reboot...
-
$shuttingDown = false
-# Here we do some process monitoring...
+def launch(id, cmd)
+ puts('Starting %s...' % id)
+ pid = fork do
+ Process.setsid()
+ exec(*cmd)
+ end
+ $daemons[id] = pid
+ $daemonCmds[id] = cmd
+end
+
+
+# Here we do some process monitoring...
Signal.trap(:SIGCHLD) do
loop do
begin
end
-def action(name)
- print(name)
- begin
- yield
- rescue => e
- print(' (error: %s)' % e)
- end
- puts
-end
-
-
-def launch(id, cmd)
- puts('Starting %s...' % id)
- pid = fork do
- Process.setsid()
- exec(*cmd)
- end
- $daemons[id] = pid
- $daemonCmds[id] = cmd
-end
-
-
def init
puts('*** init-ng v1.0.0 starting...')
end
-init
-
-ARGV.each do |e|
- case e
- when 'emergency'
- $emergency = true
- end
-end
-
-if $emergency
- launch('agetty1', %w[/sbin/agetty tty1 --noclear --autologin root])
-else
- # Launch TTYs...
- (1..5).each do |n|
- launch("agetty#{n}", %W[/sbin/agetty tty#{n} --noclear])
- end
+def do_cmd(*cmd)
+ ctl = UNIXSocket.open('/run/initctl')
+ ctl.puts(cmd.join(' '))
+ puts(ctl.readline.chomp)
+ exit
end
# This shows the one of the hazards of coding this in Ruby...
-
def sys_reboot(cmd)
# LINUX_REBOOT_CMD_POWER_OFF == 0x4321FEDC
# LINUX_REBOOT_CMD_RESTART == 0x01234567
end
+#
+# Start of the script proper
+#
+# If we're not PID 1, parse & send commands to /run/initctl
+#
+if $$ != 1
+ case ARGV[0]
+ when 'poweroff', 'restart', 'halt'
+ do_cmd(ARGV[0].to_sym)
+ when 'status'
+ do_cmd(ARGV.shift.to_sym, *ARGV)
+ when 'test'
+ map = { poweroff: 0x4321fedc, restart: 0x01234567, halt: 0xcdef0123 }
+ # 169 == SYS_reboot
+ syscall(169, 0xfee1dead, 0x20112000, map[:poweroff])
+ else
+ puts('I know the following commands: poweroff, restart, halt, status, test')
+ exit 1
+ end
+end
+
+init
+
+ARGV.each do |e|
+ case e
+ when 'emergency'
+ $emergency = true
+ end
+end
+
+if $emergency
+ launch('agetty1', %w[/sbin/agetty tty1 --noclear --autologin root])
+else
+ # Launch TTYs...
+ (1..5).each do |n|
+ launch("agetty#{n}", %W[/sbin/agetty tty#{n} --noclear])
+ end
+end
+
begin
server = UNIXServer.open('/run/initctl')
rescue Errno::EADDRINUSE
# you get nothing if you're ssh'ed in...
$daemons.each { |key, value| puts(key + ': ' + (value ? '[OK]' : '[!!]') + ' (' + value.to_s + ')') }
ctl.puts
+ when :start
+ puts('Received start msg from s-s-d: ' + args.to_s)
+ when :stop
+ puts('Received stop msg from s-s-d: ' + args.to_s)
end
end