30 Commits
1.3.3 ... 1.8.1

Author SHA1 Message Date
fbt
c0364011e0 Use an indexed array for mount definitions 2015-08-26 14:44:08 +03:00
fbt
f93cfc9056 git you silly thing 2015-08-17 17:13:39 +03:00
fbt
e59c449b0e Merge branch 'master' of builder:git/spark-rc 2015-08-17 17:10:28 +03:00
fbt
90c8943782 create the default XDG_RUNTIME dirs 2015-08-17 17:10:19 +03:00
fbt
33cea83d1b sync 2015-08-08 19:38:56 +03:00
fbt
79bccd989e Merge branch 'master' of builder:git/spark-rc 2015-06-16 16:45:40 +03:00
fbt
6d2a516b64 sync disks before shutting down 2015-06-16 16:45:33 +03:00
Alad Wenter
87de61f78c support for owner/group permissions in tmpfiles 2015-03-03 10:28:07 +03:00
fbt
22bb388fdb more robust umount 2015-03-02 18:02:16 +03:00
fbt
8af7868947 even better: configurable tpdirs and tmpfiles creation 2015-03-02 18:00:23 +03:00
fbt
e4b9660bce Merge branch 'master' of builder:git/spark-rc 2015-03-02 17:40:16 +03:00
fbt
550fabfc8e tmpfiles 2015-03-02 17:40:09 +03:00
fbt
a607a63107 Code cleanup, thx to http://www.shellcheck.net 2015-01-17 16:37:15 +03:00
fbt
782b0a3fe8 Newline, bitch 2015-01-08 15:35:06 +03:00
fbt
440eada379 simplify the default rc.conf 2015-01-08 12:42:44 +03:00
fbt
1c91d74984 support for reading hostname from /etc/hostname 2015-01-08 11:13:47 +03:00
fbt
31f80cc8da avoid heredocs, they don't work on a fully readonly VFS 2015-01-05 22:32:29 +03:00
fbt
f3cc18fcc2 Merge branch 'master' of builder:git/spark-rc 2014-12-30 18:41:33 +03:00
fbt
c23f30e7ca tmpdirs 2014-12-30 18:41:24 +03:00
fbt
14e07dbedf motd 2014-12-27 18:28:34 +03:00
fbt
88f0fa6acb Merge branch 'master' of builder:git/spark-rc 2014-12-27 17:53:39 +03:00
fbt
1d0bc30bb2 fixed the default rc.conf a bit 2014-12-27 17:53:28 +03:00
fbt
158c5939fd useless function 2014-12-01 12:03:31 +03:00
fbt
9edb1380fb rc.conf example for the timezone 2014-11-07 00:09:34 +03:00
fbt
f65b360295 set the timezone from rc.conf 2014-11-07 00:08:55 +03:00
fbt
362571f19a halt action 2014-11-06 23:29:40 +03:00
fbt
1c52234809 this is not the watchman makefile 2014-10-18 17:57:36 +04:00
fbt
025d3e4a36 make install 2014-10-18 17:56:51 +04:00
fbt
834668bd87 killall5 2014-10-18 17:50:53 +04:00
fbt
8a36bb37ae license 2014-10-16 13:28:18 +04:00
8 changed files with 186 additions and 31 deletions

13
LICENSE Normal file
View File

@@ -0,0 +1,13 @@
Copyright (c) 2012-2014, Jack L. Frost <fbt@fleshless.org>
Permission to use, copy, modify, and/or distribute this software for any purpose with or without
fee is hereby granted, provided that the above copyright notice and this permission notice appear
in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
OF THIS SOFTWARE.

View File

@@ -1,18 +1,21 @@
# watchman makefile # spark-rc makefile
VERSION=1.6.9
# Please modify config.mk and not this # Please modify config.mk and not this
sinclude config.mk sinclude config.mk
.PHONY: clean install uninstall all .PHONY: clean install uninstall all tools
build: rc build: rc tools
all: build all: build
tools:
make -C tools
rc: rc.in rc: rc.in
sed -r \ sed -r \
-e 's%@ETC@%$(ETC)%' \ -e 's%@ETC@%$(ETC)%' \
-e 's%@BASH_PATH@%$(BASH_PATH)%' \
rc.in > rc rc.in > rc
chmod 750 $@ chmod 750 $@
@@ -20,12 +23,21 @@ rc: rc.in
clean: clean:
rm rc rm rc
make -C tools clean
install: build install: build
install -dm755 $(BINDIR) install -dm755 $(BINDIR)
install -dm755 $(ETCDIR) install -dm755 $(ETCDIR)
install -m750 rc $(BINDIR)/rc install -m750 rc $(BINDIR)/rc
install -m644 rc.conf $(ETCDIR)/rc.conf install -m644 rc.conf $(ETCDIR)/rc.conf
install -m644 rc.motd $(ETCDIR)/rc.motd
install -m755 tools/killall5 $(BINDIR)/killall5
make -C tools install
uninstall: uninstall:
rm $(BINDIR)/rc rm $(BINDIR)/rc
make -C tools uninstall

View File

@@ -4,5 +4,7 @@ USR ?= /usr/local
ETC ?= /etc ETC ?= /etc
BIN ?= $(USR)/bin BIN ?= $(USR)/bin
BASH_PATH ?= /bin/bash
BINDIR = $(DESTDIR)$(PREFIX)$(BIN) BINDIR = $(DESTDIR)$(PREFIX)$(BIN)
ETCDIR = $(DESTDIR)$(PREFIX)$(ETC) ETCDIR = $(DESTDIR)$(PREFIX)$(ETC)

18
rc.conf
View File

@@ -4,14 +4,18 @@ export PATH='/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin'
# Hostname # Hostname
cfg_hostname='changeme' cfg_hostname='changeme'
# Services # Timezone
cfg_services+=( 'fsck' 'mount' 'systemd-udevd' 'sysctl' ) # Services that need tp be started in an order # Change this to yours
cfg_services+=( @agetty-tty{2..6} ) # Comment this if your init starts something on the ttys itself. #cfg_timezone='Europe/Moscow'
cfg_services+=( '@crond' '@network' '@dbus' '@alsa' ) # These start in parallel.
cfg_services+=( 'rc.local' ) # Traditionally, rc.local starts last.
# Modules # Services
cfg_modules=( ) # Add modules you want to be loaded at boot time here cfg_services+=( 'fsck' 'mount' 'sysctl' 'rsyslogd' ) # Services that need tp be started in an order
cfg_services+=( '@lo.iface' '@scron' '@sshd' ) # These start in parallel.
cfg_services+=( @agetty-tty{2..6} ) # Comment this if your init starts something on the ttys itself.
cfg_services+=( 'rc.local' ) # Traditionally, rc.local starts last. Technically here it doesn't. Not quite :)
# Add modules you want to be loaded at boot time here
#cfg_modules=( )
# Make C-A-D perform a soft reset # Make C-A-D perform a soft reset
ctrlaltdel soft ctrlaltdel soft

82
rc.in Executable file → Normal file
View File

@@ -1,15 +1,30 @@
#!/bin/bash #!@BASH_PATH@
declare -A cfg_mounts
# Default virtual mounts for linux systems # Default virtual mounts for linux systems
cfg_mounts+=( 'proc:proc:/proc:' ) cfg_mounts[proc]='proc:/proc'
cfg_mounts+=( 'run:tmpfs:/run:' ) cfg_mounts[run]='tmpfs:/run'
cfg_mounts+=( 'sys:sysfs:/sys:' ) cfg_mounts[sys]='sysfs:/sys'
# devfs and its children # devfs and its children
cfg_mounts+=( 'dev:devtmpfs:/dev:' ) cfg_mounts[dev]='devtmpfs:/dev'
cfg_mounts+=( 'pts:devpts:/dev/pts:noexec,nosuid,gid=5,mode=0620' ) cfg_mounts[pts]='devpts:/dev/pts:noexec,nosuid,gid=5,mode=0620'
cfg_mounts+=( 'mqueue:mqueue:/dev/mqueue:noexec,nosuid,nodev' ) cfg_mounts[mqueue]='mqueue:/dev/mqueue:noexec,nosuid,nodev'
cfg_mounts+=( 'shm:tmpfs:/dev/shm:defaults,mode=0777' ) cfg_mounts[shm]='tmpfs:/dev/shm:defaults,mode=0777'
# Some temporary directories
cfg_tmpdirs+=( '/run/lock' '/run/lock/lvm' '/run/lvm' '/run/user' )
# And temporary files
cfg_tmpfiles+=( '/run/utmp' )
# Default XDG_RUNTIME_DIR for all non-system users
# rtkit:x:133:133:RealtimeKit:/proc:/sbin/nologin
while IFS=':' read -r _ _ uid gid _; do
if (( uid >= 1000 )); then
cfg_tmpdirs+=( "/run/user/$uid:700:$uid:$gid" )
fi
done < /etc/passwd
# Functions # Functions
rc.rescue() { exec "${cfg_rc_rescue_shell:-"$SHELL"}"; } rc.rescue() { exec "${cfg_rc_rescue_shell:-"$SHELL"}"; }
@@ -17,23 +32,36 @@ rc.rescue() { exec "${cfg_rc_rescue_shell:-"$SHELL"}"; }
rc.motd() { rc.motd() {
[[ -f "/etc/rc.motd" ]] && { [[ -f "/etc/rc.motd" ]] && {
while read; do while read; do
printf "$REPLY" printf "%s\n" "$REPLY"
done < "/etc/rc.motd" done < "/etc/rc.motd"
} }
return 0 return 0
} }
rc.tmpfiles() {
printf '%s\n' "${cfg_tmpdirs[@]}" | while IFS=':' read dir perm own grp; do
mkdir -pm "${perm:-755}" "$dir"
chown -c "${own:-root}:${grp:-root}" "$dir"
done
printf '%s\n' "${cfg_tmpfiles[@]}" | while IFS=':' read file perm own grp; do
> "$file"
chmod -c "${perm:-644}" "$file"
chown -c "${own:-root}:${grp:-root}" "$file"
done
}
rc.mount_misc() { rc.mount_misc() {
for m in "${cfg_mounts[@]}"; do for fs in "${!cfg_mounts[@]}"; do
IFS=':' read fs fs_type mountpoint mount_options <<< "$m" echo "$fs" | while IFS=':' read fs_type mountpoint mount_options; do
[[ "$mount_options" ]] || { mount_options='defaults'; }
[[ "$mount_options" ]] || { mount_options='defaults'; } mountpoint -q "$mountpoint" || {
[[ -d "$mountpoint" ]] || { mkdir -p "$mountpoint"; }
mountpoint -q "$mountpoint" || { mount "$fs" -n -t "$fs_type" -o "$mount_options" "$mountpoint"
[[ -d "$mountpoint" ]] || { mkdir -p "$mountpoint"; } }
mount "$fs" -n -t "$fs_type" -o "$mount_options" "$mountpoint" done
}
done done
} }
@@ -97,7 +125,7 @@ rc.stop_everything() {
rc.unmount_everything() { rc.unmount_everything() {
echo "Unmounting filesystems..." echo "Unmounting filesystems..."
umount -a umount -r -a
} }
rc.remount_root() { rc.remount_root() {
@@ -107,7 +135,9 @@ rc.remount_root() {
rc.boot() { rc.boot() {
rc.mount_misc rc.mount_misc
rc.tmpfiles
rc.hostname rc.hostname
rc.timezone
rc.modules rc.modules
rc.services_start rc.services_start
wait wait
@@ -122,9 +152,14 @@ rc.halt() {
esac esac
} }
rc.sync() {
echo "Syncing disks."
}
rc.shutdown() { rc.shutdown() {
rc.services_stop rc.services_stop
rc.stop_everything rc.stop_everything
rc.sync
rc.unmount_everything rc.unmount_everything
rc.remount_root rc.remount_root
@@ -134,6 +169,7 @@ rc.shutdown() {
} }
rc.hostname() { rc.hostname() {
[[ -f '/etc/hostname' ]] && { hostname "$(</etc/hostname)"; }
[[ "$cfg_hostname" ]] && { hostname "$cfg_hostname"; } [[ "$cfg_hostname" ]] && { hostname "$cfg_hostname"; }
} }
@@ -143,6 +179,12 @@ rc.modules() {
done done
} }
rc.timezone() {
[[ "$cfg_timezone" ]] && {
ln -fs "/usr/share/zoneinfo/${cfg_timezone}" /etc/localtime
}
}
rc.main() { rc.main() {
source "@ETC@/rc.conf" source "@ETC@/rc.conf"
@@ -150,11 +192,11 @@ rc.main() {
case "$action" in case "$action" in
boot) boot)
echo "Welcome to `uname -rs`" echo "Welcome to $(uname -rs)"
rc.boot rc.boot
;; ;;
poweroff|reboot|shutdown) poweroff|reboot|shutdown|halt)
rc.shutdown rc.shutdown
;; ;;
esac esac

1
rc.motd Normal file
View File

@@ -0,0 +1 @@
Boot finished. Switch to tty2 to login.

29
tools/Makefile Normal file
View File

@@ -0,0 +1,29 @@
# spark-rc tools makefile
# Please modify config.mk and not this
sinclude ../config.mk
.PHONY: clean install uninstall all
build: killall5
all: build
killall5: killall5.in
sed -r \
-e 's%@BASH_PATH@%$(BASH_PATH)%' \
killall5.in > killall5
chmod 750 $@
clean:
rm killall5
install: build
install -dm755 $(BINDIR)
install -dm755 $(ETCDIR)
install -m750 killall5 $(BINDIR)/killall5
uninstall:
rm $(BINDIR)/killall5

52
tools/killall5.in Normal file
View File

@@ -0,0 +1,52 @@
#!@BASH_PATH@
# A simple reimplementation of killall5 from sysvinit-tools
get_my_tree() {
local my_pid
read my_pid garbage < "/proc/self/stat"
child="$my_pid"
while [[ "$parent" != 1 ]]; do
read a b c parent d < "/proc/$child/stat";
child="$parent"
echo "$parent"
done
}
get_all_procs() {
local processlist
for i in /proc/*/exe; do
process_dir="${i%/*}"
process_pid="${process_dir##*/}"
readlink -e "$i" &>/dev/null && {
echo "$process_pid"
}
done
}
get_procs_to_kill() {
for i in "${all_procs[@]}"; do
unset skip
for p in "${my_tree[@]}"; do
[[ "$i" == "$p" ]] && { skip=1; }
done
[[ "$skip" ]] || { echo "$i"; }
done
}
main() {
my_tree=( $(get_my_tree) self thread-self )
all_procs=( $(get_all_procs) )
procs_to_kill=( $(get_procs_to_kill) )
signal="${1:-"-15"}"
kill "$signal" "${procs_to_kill[@]}" 2>/dev/null
return 0
}
main "$@"