Compare commits
2 Commits
20180505
...
20180505.2
Author | SHA1 | Date | |
---|---|---|---|
![]() |
b0238301c9 | ||
![]() |
c28ea35b41 |
47
Makefile
47
Makefile
@@ -18,6 +18,9 @@ BIN = zzz pause modules-load
|
|||||||
|
|
||||||
STAGES = 1 2 3 ctrlaltdel
|
STAGES = 1 2 3 ctrlaltdel
|
||||||
|
|
||||||
|
RCBIN = rc/halt rc/shutdown
|
||||||
|
RC = rc/rc.local rc/rc.shutdown rc/functions rc/rc.conf
|
||||||
|
|
||||||
LN = ln -sf
|
LN = ln -sf
|
||||||
CP = cp -R --no-dereference --preserve=mode,links -v
|
CP = cp -R --no-dereference --preserve=mode,links -v
|
||||||
RM = rm -f
|
RM = rm -f
|
||||||
@@ -27,6 +30,7 @@ CHMODAW = chmod a-w
|
|||||||
CHMODX = chmod +x
|
CHMODX = chmod +x
|
||||||
|
|
||||||
HASRC = yes
|
HASRC = yes
|
||||||
|
HASSYSV = no
|
||||||
|
|
||||||
EDIT = sed \
|
EDIT = sed \
|
||||||
-e "s|@RUNITDIR[@]|$(RUNITDIR)|g" \
|
-e "s|@RUNITDIR[@]|$(RUNITDIR)|g" \
|
||||||
@@ -45,18 +49,15 @@ EDIT = sed \
|
|||||||
|
|
||||||
|
|
||||||
all: all-runit
|
all: all-runit
|
||||||
|
|
||||||
ifeq ($(HASRC),yes)
|
ifeq ($(HASRC),yes)
|
||||||
|
|
||||||
all: all-rc
|
all: all-rc
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
all-runit: $(STAGES)
|
all-runit: $(STAGES)
|
||||||
$(CC) $(CFLAGS) pause.c -o pause $(LDFLAGS)
|
$(CC) $(CFLAGS) pause.c -o pause $(LDFLAGS)
|
||||||
|
|
||||||
all-rc:
|
all-rc: $(RC) rc/shutdown
|
||||||
make RCDIR=$(RCDIR) -C rc
|
$(CC) $(CFLAGS) rc/halt.c -o rc/halt $(LDFLAGS)
|
||||||
|
|
||||||
install-runit:
|
install-runit:
|
||||||
install -d $(DESTDIR)$(RUNITDIR)
|
install -d $(DESTDIR)$(RUNITDIR)
|
||||||
@@ -84,11 +85,39 @@ install-runit:
|
|||||||
install -m644 modules-load.8 $(DESTDIR)$(MANDIR)/man8
|
install -m644 modules-load.8 $(DESTDIR)$(MANDIR)/man8
|
||||||
|
|
||||||
install-rc:
|
install-rc:
|
||||||
make install BINDIR=$(BINDIR) RCDIR=$(RCDIR) RCBINDIR=$(RCBINDIR) MANDIR=$(MANDIR) DESTDIR=$(DESTDIR) -C rc
|
install -d $(DESTDIR)$(RCDIR)
|
||||||
|
install -d $(DESTDIR)$(RCDIR)/sysinit.d
|
||||||
|
install -d $(DESTDIR)$(RCDIR)/shutdown.d
|
||||||
|
install -m755 $(RC) $(DESTDIR)$(RCDIR)
|
||||||
|
install -m644 rc/sysinit.d/* $(DESTDIR)$(RCDIR)/sysinit.d
|
||||||
|
install -m644 rc/shutdown.d/* $(DESTDIR)$(RCDIR)/shutdown.d
|
||||||
|
install -m644 rc/crypt.awk $(DESTDIR)$(RCDIR)
|
||||||
|
|
||||||
|
install -d $(DESTDIR)$(RCBINDIR)
|
||||||
|
install -m644 $(RCBIN) $(DESTDIR)$(RCBINDIR)
|
||||||
|
|
||||||
|
$(LN) halt $(DESTDIR)$(RCBINDIR)/poweroff
|
||||||
|
$(LN) halt $(DESTDIR)$(RCBINDIR)/reboot
|
||||||
|
|
||||||
|
install_sysv:
|
||||||
|
install -d $(DESTDIR)$(BINDIR)
|
||||||
|
$(LN) runit-init $(DESTDIR)$(BINDIR)/init
|
||||||
|
$(LN) $(RCBINDIR)/halt $(DESTDIR)$(BINDIR)/halt
|
||||||
|
$(LN) $(RCBINDIR)/shutdown $(DESTDIR)$(BINDIR)/shutdown
|
||||||
|
$(LN) halt $(DESTDIR)$(BINDIR)/poweroff
|
||||||
|
$(LN) halt $(DESTDIR)$(BINDIR)/reboot
|
||||||
|
install -d $(DESTDIR)$(MANDIR)/man8
|
||||||
|
install -m644 rc/shutdown.8 $(DESTDIR)$(MANDIR)/man8/shutdown.8
|
||||||
|
install -m644 rc/halt.8 $(DESTDIR)$(MANDIR)/man8/halt.8
|
||||||
|
$(LN) halt.8 $(DESTDIR)$(MANDIR)/man8/poweroff.8
|
||||||
|
$(LN) halt.8 $(DESTDIR)$(MANDIR)/man8/reboot.8
|
||||||
|
|
||||||
install: install-runit
|
install: install-runit
|
||||||
ifeq ($(HASRC),yes)
|
ifeq ($(HASRC),yes)
|
||||||
install: install-rc
|
install: install-rc
|
||||||
|
ifeq ($(HASSYSV),yes)
|
||||||
|
install: install_sysv
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
clean-runit:
|
clean-runit:
|
||||||
@@ -96,7 +125,8 @@ clean-runit:
|
|||||||
-rm -f $(STAGES)
|
-rm -f $(STAGES)
|
||||||
|
|
||||||
clean-rc:
|
clean-rc:
|
||||||
make -C rc clean
|
-rm -f rc/halt
|
||||||
|
-rm -f rc/shutdown $(RC)
|
||||||
|
|
||||||
clean: clean-runit
|
clean: clean-runit
|
||||||
ifeq ($(HASRC),yes)
|
ifeq ($(HASRC),yes)
|
||||||
@@ -105,5 +135,4 @@ endif
|
|||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
|
||||||
|
.PHONY: all install clean install-runit install-rc clean-runit clean-rc all-runit all-rc install_sysv
|
||||||
.PHONY: all install clean install-runit install-rc clean-runit clean-rc all-runit all-rc
|
|
||||||
|
103
crypt.awk
103
crypt.awk
@@ -1,103 +0,0 @@
|
|||||||
/^#/ || /^$/ { next }
|
|
||||||
NF>4 { print "a valid crypttab has max 4 cols not " NF >"/dev/stderr"; next }
|
|
||||||
{
|
|
||||||
# decode the src variants
|
|
||||||
split($2, o_src, "=")
|
|
||||||
if (o_src[1] == "UUID") ("blkid -l -o device -t " $2) | getline src;
|
|
||||||
else src=o_src[1];
|
|
||||||
|
|
||||||
# no password or none is given, ask fo it
|
|
||||||
if ( NF == 2 ) {
|
|
||||||
ccmd="cryptsetup luksOpen " src " " $1;
|
|
||||||
system(ccmd);
|
|
||||||
ccmd="";
|
|
||||||
}
|
|
||||||
else if (NF == 3 ) {
|
|
||||||
dest=$1
|
|
||||||
key=$3
|
|
||||||
split($3, po, "=");
|
|
||||||
if ( po[1] == "none") ccmd="cryptsetup luksOpen " src " " dest;
|
|
||||||
else ccmd="cryptsetup luksOpen -d " key " " src" " dest;
|
|
||||||
system(ccmd);
|
|
||||||
ccmd="";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
# the option field is not empty parse the options
|
|
||||||
dest=$1
|
|
||||||
key=$3
|
|
||||||
split($4, opts, ",");
|
|
||||||
commonopts="";
|
|
||||||
swapopts="";
|
|
||||||
luksopts="";
|
|
||||||
for(i in opts) {
|
|
||||||
split(opts[i], para, "=");
|
|
||||||
par=para[1];
|
|
||||||
val=para[2];
|
|
||||||
if ( par == "readonly" || par == "read-only") commonopts=commonopts "-r ";
|
|
||||||
else if ( par == "discard" ) commonopts=commonopts "--allow-discards ";
|
|
||||||
else if ( par == "tries" ) commonopts=commonopts "-T " val " ";
|
|
||||||
else if ( par == "swap" ) makeswap="y";
|
|
||||||
else if ( par == "cipher" ) swapopts=swapopts "-c " val " ";
|
|
||||||
else if ( par == "size" ) swapopts=swapopts "-s " val " ";
|
|
||||||
else if ( par == "hash" ) swapopts=swapopts "-h " val " ";
|
|
||||||
else if ( par == "offset" ) swapopts=swapopts "-o " val " ";
|
|
||||||
else if ( par == "skip" ) swapopts=swapopts "-p " val " ";
|
|
||||||
else if ( par == "verify" ) swapopts=swapopts "-y ";
|
|
||||||
#else if ( par == "noauto" )
|
|
||||||
#else if ( par == "nofail" )
|
|
||||||
#else if ( par == "plain" )
|
|
||||||
#else if ( par == "timeout" )
|
|
||||||
#else if ( par == "tmp" )
|
|
||||||
else if ( par == "luks" ) use_luks="y";
|
|
||||||
else if ( par == "keyscript" ) {use_keyscript="y"; keyscript=val;}
|
|
||||||
else if ( par == "keyslot" || par == "key-slot" ) luksopts=luksopts "-S " val " ";
|
|
||||||
else if ( par == "keyfile-size" ) luksopts=luksopts "-l " val " ";
|
|
||||||
else if ( par == "keyfile-offset" ) luksopts=luksopts "-keyfile-offset=" val " ";
|
|
||||||
else if ( par == "header" ) luksopts=luksopts "--header=" val " ";
|
|
||||||
else {
|
|
||||||
print "option: " par " not supported " >"/dev/stderr";
|
|
||||||
makeswap="";
|
|
||||||
use_luks="";
|
|
||||||
use_keyscript="";
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( makeswap == "y" && use_luks != "y" ) {
|
|
||||||
ccmd="cryptsetup " swapopts commonopts "-d " key " create " dest " " src;
|
|
||||||
ccmd_2="mkswap /dev/mapper/" dest;
|
|
||||||
makeswap="";
|
|
||||||
use_luks="";
|
|
||||||
use_keyscript="";
|
|
||||||
system(ccmd);
|
|
||||||
system(ccmd_2);
|
|
||||||
ccmd="";
|
|
||||||
ccmd_2="";
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
if ( use_luks == "y" && makeswap != "y" ){
|
|
||||||
if ( use_keyscript == "y") {
|
|
||||||
ccmd=keyscript " | cryptsetup " luksopts commonopts "luksOpen -d - " src " " dest;
|
|
||||||
use_keyscript="";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if ( key == "none" ){
|
|
||||||
ccmd="cryptsetup " luksopts commonopts "luksOpen " src " " dest;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ccmd="cryptsetup " luksopts commonopts "luksOpen -d " key " " src " " dest;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
print "use swap OR luks as option" >"/dev/stderr";
|
|
||||||
ccmd="";
|
|
||||||
}
|
|
||||||
makeswap="";
|
|
||||||
use_luks="";
|
|
||||||
use_keyscript="";
|
|
||||||
if ( ccmd != ""){
|
|
||||||
system(ccmd);
|
|
||||||
ccmd=""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
55
rc/Makefile
55
rc/Makefile
@@ -1,55 +0,0 @@
|
|||||||
RCBIN = halt shutdown
|
|
||||||
RC = rc.local rc.shutdown functions rc.conf
|
|
||||||
|
|
||||||
LN = ln -sf
|
|
||||||
RM = rm -f
|
|
||||||
M4 = m4 -P
|
|
||||||
CHMODAW = chmod a-w
|
|
||||||
CHMODX = chmod +x
|
|
||||||
|
|
||||||
EDIT = sed -e "s|@RCDIR[@]|$(RCDIR)|g"
|
|
||||||
|
|
||||||
%: %.in Makefile
|
|
||||||
@echo "GEN $@"
|
|
||||||
@$(RM) "$@"
|
|
||||||
@$(M4) $@.in | $(EDIT) >$@
|
|
||||||
@$(CHMODAW) "$@"
|
|
||||||
@$(CHMODX) "$@"
|
|
||||||
|
|
||||||
all: $(RC) shutdown
|
|
||||||
$(CC) $(CFLAGS) halt.c -o halt $(LDFLAGS)
|
|
||||||
|
|
||||||
install:
|
|
||||||
install -d $(DESTDIR)$(RCDIR)
|
|
||||||
install -d $(DESTDIR)$(RCDIR)/sysinit.d
|
|
||||||
install -d $(DESTDIR)$(RCDIR)/shutdown.d
|
|
||||||
install -m755 $(RC) $(DESTDIR)$(RCDIR)
|
|
||||||
install -m644 sysinit.d/* $(DESTDIR)$(RCDIR)/sysinit.d
|
|
||||||
install -m644 shutdown.d/* $(DESTDIR)$(RCDIR)/shutdown.d
|
|
||||||
install -m644 crypt.awk $(DESTDIR)$(RCDIR)
|
|
||||||
|
|
||||||
install -d $(DESTDIR)$(RCBINDIR)
|
|
||||||
install -m644 $(RCBIN) $(DESTDIR)$(RCBINDIR)
|
|
||||||
|
|
||||||
$(LN) halt $(DESTDIR)$(RCBINDIR)/poweroff
|
|
||||||
$(LN) halt $(DESTDIR)$(RCBINDIR)/reboot
|
|
||||||
|
|
||||||
|
|
||||||
install_sysv:
|
|
||||||
install -d $(DESTDIR)$(BINDIR)
|
|
||||||
$(LN) runit-init $(DESTDIR)$(BINDIR)/init
|
|
||||||
$(LN) $(RCBINDIR)/halt $(DESTDIR)$(BINDIR)/halt
|
|
||||||
$(LN) $(RCBINDIR)/shutdown $(DESTDIR)$(BINDIR)/shutdown
|
|
||||||
$(LN) halt $(DESTDIR)$(BINDIR)/poweroff
|
|
||||||
$(LN) halt $(DESTDIR)$(BINDIR)/reboot
|
|
||||||
install -d $(DESTDIR)$(MANDIR)/man8
|
|
||||||
install -m644 shutdown.8 $(DESTDIR)$(MANDIR)/man8/shutdown.8
|
|
||||||
install -m644 halt.8 $(DESTDIR)$(MANDIR)/man8/halt.8
|
|
||||||
$(LN) halt.8 $(DESTDIR)$(MANDIR)/man8/poweroff.8
|
|
||||||
$(LN) halt.8 $(DESTDIR)$(MANDIR)/man8/reboot.8
|
|
||||||
|
|
||||||
clean:
|
|
||||||
-rm -f halt
|
|
||||||
-rm -f shutdown $(RC)
|
|
||||||
|
|
||||||
.PHONY: all install install_sysv clean
|
|
73
shutdown.in
73
shutdown.in
@@ -1,73 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# shutdown - shutdown(8) lookalike for runit
|
|
||||||
|
|
||||||
single() {
|
|
||||||
runsvchdir single
|
|
||||||
}
|
|
||||||
|
|
||||||
abort() {
|
|
||||||
printf '%s\n' "$1" >&2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
usage() {
|
|
||||||
abort "Usage: ${0##*/} [-fF] [-kchPr] time [warning message]"
|
|
||||||
}
|
|
||||||
|
|
||||||
action=single
|
|
||||||
|
|
||||||
while getopts akrhPHfFnct: opt; do
|
|
||||||
case "$opt" in
|
|
||||||
a|n|H) abort "'-$opt' is not implemented";;
|
|
||||||
t) ;;
|
|
||||||
f) touch /fastboot;;
|
|
||||||
F) touch /forcefsck;;
|
|
||||||
k) action=true;;
|
|
||||||
c) action=cancel;;
|
|
||||||
h|P) action=halt;;
|
|
||||||
r) action=reboot;;
|
|
||||||
[?]) usage;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
shift $((OPTIND - 1))
|
|
||||||
|
|
||||||
[ $# -eq 0 ] && usage
|
|
||||||
|
|
||||||
time=$1; shift
|
|
||||||
message="${*:-system is going down}"
|
|
||||||
|
|
||||||
if [ "$action" = "cancel" ]; then
|
|
||||||
kill "$(cat @RUNDIR@/shutdown.pid)"
|
|
||||||
if [ -e /etc/nologin ] && ! [ -s /etc/nologin ]; then
|
|
||||||
rm /etc/nologin
|
|
||||||
fi
|
|
||||||
echo "${*:-shutdown cancelled}" | wall
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
touch @RUNDIR@/shutdown.pid 2>/dev/null || abort "Not enough permissions to execute ${0#*/}"
|
|
||||||
echo $$ >@RUNDIR@/shutdown.pid
|
|
||||||
|
|
||||||
case "$time" in
|
|
||||||
now) time=0;;
|
|
||||||
+*) time=${time#+};;
|
|
||||||
*:*) abort "absolute time is not implemented";;
|
|
||||||
*) abort "invalid time";;
|
|
||||||
esac
|
|
||||||
|
|
||||||
for break in 5 0; do
|
|
||||||
[ "$time" -gt "$break" ] || continue
|
|
||||||
[ "$break" = 0 ] && touch /etc/nologin
|
|
||||||
|
|
||||||
printf '%s in %s minutes\n' "$message" "$time" | wall
|
|
||||||
printf 'shutdown: sleeping for %s minutes... ' "$(( time - break ))"
|
|
||||||
sleep $(( (time - break) * 60 ))
|
|
||||||
time="$break"
|
|
||||||
printf '\n'
|
|
||||||
|
|
||||||
[ "$break" = 0 ] && rm /etc/nologin
|
|
||||||
done
|
|
||||||
|
|
||||||
printf '%s NOW\n' "$message" | wall
|
|
||||||
|
|
||||||
$action
|
|
Reference in New Issue
Block a user