Update init to handle directories
This commit is contained in:
parent
e3f3f27fbc
commit
cda17ce4c1
3
filesystem/etc/init.d/00_base
Normal file
3
filesystem/etc/init.d/00_base
Normal file
|
@ -0,0 +1,3 @@
|
|||
/sbin/randd
|
||||
/sbin/ptyd
|
||||
/sbin/pcid /etc/pcid.toml
|
5
filesystem/etc/init.d/10_net
Normal file
5
filesystem/etc/init.d/10_net
Normal file
|
@ -0,0 +1,5 @@
|
|||
/sbin/ethernetd
|
||||
/sbin/ipd
|
||||
/sbin/tcpd
|
||||
/sbin/udpd
|
||||
dhcpd -b
|
2
filesystem/etc/init.d/20_console
Normal file
2
filesystem/etc/init.d/20_console
Normal file
|
@ -0,0 +1,2 @@
|
|||
getty display:2
|
||||
getty display:3
|
1
filesystem/etc/init.d/30_orbital
Normal file
1
filesystem/etc/init.d/30_orbital
Normal file
|
@ -0,0 +1 @@
|
|||
/sbin/orbital display:4/activate /ui/bin/orblogin /ui/bin/launcher
|
1
filesystem/etc/init.d/40_serial
Normal file
1
filesystem/etc/init.d/40_serial
Normal file
|
@ -0,0 +1 @@
|
|||
getty debug: -J
|
|
@ -1,12 +0,0 @@
|
|||
/sbin/randd
|
||||
/sbin/ptyd
|
||||
/sbin/pcid /etc/pcid.toml
|
||||
/sbin/ethernetd
|
||||
/sbin/ipd
|
||||
/sbin/tcpd
|
||||
/sbin/udpd
|
||||
dhcpd -b
|
||||
getty display:2
|
||||
getty display:3
|
||||
/sbin/orbital display:4/activate /ui/bin/orblogin /ui/bin/launcher
|
||||
getty debug: -J
|
|
@ -6,4 +6,4 @@ pcid /etc/pcid.toml
|
|||
redoxfs disk:0 file
|
||||
cd file:
|
||||
export PATH file:/bin
|
||||
run /etc/init.rc
|
||||
run.d /etc/init.d
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 67098b38c671d7804c3b9b7b856090099d4cecda
|
||||
Subproject commit a3b7f7af5e2695c309eb5d87158deb50cbbab2a6
|
|
@ -1,11 +1,12 @@
|
|||
extern crate syscall;
|
||||
|
||||
use std::env;
|
||||
use std::fs::File;
|
||||
use std::fs::{File, read_dir};
|
||||
use std::io::{BufRead, BufReader, Result};
|
||||
use std::path::Path;
|
||||
use std::process::Command;
|
||||
|
||||
pub fn run(file: &str) -> Result<()> {
|
||||
pub fn run(file: &Path) -> Result<()> {
|
||||
let file = File::open(file)?;
|
||||
let reader = BufReader::new(file);
|
||||
|
||||
|
@ -46,12 +47,42 @@ pub fn run(file: &str) -> Result<()> {
|
|||
println!("init: failed to export: no argument");
|
||||
},
|
||||
"run" => if let Some(new_file) = args.next() {
|
||||
if let Err(err) = run(&new_file) {
|
||||
if let Err(err) = run(&Path::new(new_file)) {
|
||||
println!("init: failed to run '{}': {}", new_file, err);
|
||||
}
|
||||
} else {
|
||||
println!("init: failed to run: no argument");
|
||||
},
|
||||
"run.d" => if let Some(new_dir) = args.next() {
|
||||
match read_dir(new_dir) {
|
||||
Ok(list) => {
|
||||
let mut entries = vec![];
|
||||
for entry_res in list {
|
||||
match entry_res {
|
||||
Ok(entry) => {
|
||||
entries.push(entry.path());
|
||||
},
|
||||
Err(err) => {
|
||||
println!("init: failed to run.d: '{}': {}", new_dir, err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
entries.sort();
|
||||
|
||||
for entry in entries {
|
||||
if let Err(err) = run(&entry) {
|
||||
println!("init: failed to run '{}': {}", entry.display(), err);
|
||||
}
|
||||
}
|
||||
},
|
||||
Err(err) => {
|
||||
println!("init: failed to run.d: '{}': {}", new_dir, err);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
println!("init: failed to run.d: no argument");
|
||||
},
|
||||
"stdio" => if let Some(stdio) = args.next() {
|
||||
let _ = syscall::close(2);
|
||||
let _ = syscall::close(1);
|
||||
|
@ -86,7 +117,7 @@ pub fn run(file: &str) -> Result<()> {
|
|||
}
|
||||
|
||||
pub fn main() {
|
||||
if let Err(err) = run("initfs:etc/init.rc") {
|
||||
if let Err(err) = run(&Path::new("initfs:etc/init.rc")) {
|
||||
println!("init: failed to run initfs:etc/init.rc: {}", err);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue