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
|
||||
|
||||
RCBIN = rc/halt rc/shutdown
|
||||
RC = rc/rc.local rc/rc.shutdown rc/functions rc/rc.conf
|
||||
|
||||
LN = ln -sf
|
||||
CP = cp -R --no-dereference --preserve=mode,links -v
|
||||
RM = rm -f
|
||||
@@ -27,6 +30,7 @@ CHMODAW = chmod a-w
|
||||
CHMODX = chmod +x
|
||||
|
||||
HASRC = yes
|
||||
HASSYSV = no
|
||||
|
||||
EDIT = sed \
|
||||
-e "s|@RUNITDIR[@]|$(RUNITDIR)|g" \
|
||||
@@ -45,18 +49,15 @@ EDIT = sed \
|
||||
|
||||
|
||||
all: all-runit
|
||||
|
||||
ifeq ($(HASRC),yes)
|
||||
|
||||
all: all-rc
|
||||
|
||||
endif
|
||||
|
||||
all-runit: $(STAGES)
|
||||
$(CC) $(CFLAGS) pause.c -o pause $(LDFLAGS)
|
||||
|
||||
all-rc:
|
||||
make RCDIR=$(RCDIR) -C rc
|
||||
all-rc: $(RC) rc/shutdown
|
||||
$(CC) $(CFLAGS) rc/halt.c -o rc/halt $(LDFLAGS)
|
||||
|
||||
install-runit:
|
||||
install -d $(DESTDIR)$(RUNITDIR)
|
||||
@@ -84,11 +85,39 @@ install-runit:
|
||||
install -m644 modules-load.8 $(DESTDIR)$(MANDIR)/man8
|
||||
|
||||
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
|
||||
ifeq ($(HASRC),yes)
|
||||
install: install-rc
|
||||
ifeq ($(HASSYSV),yes)
|
||||
install: install_sysv
|
||||
endif
|
||||
endif
|
||||
|
||||
clean-runit:
|
||||
@@ -96,7 +125,8 @@ clean-runit:
|
||||
-rm -f $(STAGES)
|
||||
|
||||
clean-rc:
|
||||
make -C rc clean
|
||||
-rm -f rc/halt
|
||||
-rm -f rc/shutdown $(RC)
|
||||
|
||||
clean: clean-runit
|
||||
ifeq ($(HASRC),yes)
|
||||
@@ -105,5 +135,4 @@ endif
|
||||
|
||||
clean:
|
||||
|
||||
|
||||
.PHONY: all install clean install-runit install-rc clean-runit clean-rc all-runit all-rc
|
||||
.PHONY: all install clean install-runit install-rc clean-runit clean-rc all-runit all-rc install_sysv
|
||||
|
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