]> Shamusworld >> Repos - init-ng/blobdiff - init
Added start of start-stop-daemon (OpenRC) communication handling.
[init-ng] / init
diff --git a/init b/init
index f281acd4044651451a26353cebb0061d1811bb5b..4e9382132bafb40917613198b91559fa31ee8fb5 100755 (executable)
--- a/init
+++ b/init
@@ -3,44 +3,26 @@
 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
@@ -66,28 +48,6 @@ Signal.trap(:SIGCHLD) do
 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...')
 
@@ -114,27 +74,15 @@ def shutdown
 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
@@ -153,6 +101,45 @@ def sys_sync
 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
@@ -174,6 +161,10 @@ loop do
     # 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