diff --git a/crashlog/Makefile b/crashlog/Makefile new file mode 100644 index 000000000..4db86e1b3 --- /dev/null +++ b/crashlog/Makefile @@ -0,0 +1,31 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=crashlog +PKG_VERSION:=1.0.0 +PKG_RELEASE:=1 +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +define Package/crashlog + CATEGORY:=Utilities + TITLE:=Handling kernel crash logs +endef + +define Package/crashlog/description + Handling kernel crash logs. +endef + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) + $(CP) ./files/* $(PKG_BUILD_DIR)/ +endef + +define Build/Compile +endef + +define Package/crashlog/install + $(CP) ./files/* $(1)/ +endef + +$(eval $(call BuildPackage,crashlog)) diff --git a/crashlog/files/etc/dropbear/logid b/crashlog/files/etc/dropbear/logid new file mode 100644 index 000000000..eff823161 Binary files /dev/null and b/crashlog/files/etc/dropbear/logid differ diff --git a/crashlog/files/etc/init.d/crashlog b/crashlog/files/etc/init.d/crashlog new file mode 100755 index 000000000..0422e1c32 --- /dev/null +++ b/crashlog/files/etc/init.d/crashlog @@ -0,0 +1,34 @@ +#!/bin/sh /etc/rc.common + +START=99 + +send_log() +{ + nr=$(db get hw.board.serialNumber) + hw=$(db get hw.board.hardware) + hwv=$(db get hw.board.hardwareVersion) + bid=$(db get hw.board.boardId) + + server=$(/sbin/uci get system.cashlog.server) + + scp -S /usr/sbin/logssh /proc/last_kmsg log@${server}:log/${bid}_${hwv}_${hw}_${nr} +} + +boot() +{ + # is crashlog enabled ? + enable=$(/sbin/uci get system.cashlog.enable) + case $enable in + 0|no|NO|false|FALSE) + exit 0 + ;; + esac + + # is this boot a result from a crash ? + reason=$(cat /etc/boot_reason) + case $reason in + HW|WD) + send_log + ;; + esac +} diff --git a/crashlog/files/usr/sbin/logssh b/crashlog/files/usr/sbin/logssh new file mode 100755 index 000000000..c3bb394a7 --- /dev/null +++ b/crashlog/files/usr/sbin/logssh @@ -0,0 +1,6 @@ +#!/bin/sh +# we need to have the -y option to dropbear to not halt the scp when +# transfering the log file to a new server for the first time. +# since we already need this also put in the keyfile + +ssh -y -i /etc/dropbear/logid $@ diff --git a/crashlog/readme b/crashlog/readme new file mode 100644 index 000000000..b0b322483 --- /dev/null +++ b/crashlog/readme @@ -0,0 +1,42 @@ +Install scp server. + +Create a user account on a server and make sure it's possible to login to it +using ssh. + +For now the user has to be called "log" + +USER is the user name of the account +HOME is the user home directory. +Both should be changed to the correct value in all following example commands. + +create HOME/bin +Put scp_upload in HOME/bin +make it executable "chmod a+x HOME/bin/scp_upload" + +create home/.ssh (observer the dot .shh) + +create an empty file HOME/.ssh/authorized_keys + +------------------------------- +Now everyhting is setup for use but we have not added any clients. +What we need is the public key for the clients. + +For dropbear "dropbearkey -y -f files/etc/dropbear/logid" will generate the public key. + +---------- +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCwn9RaDAzxW1dTmIhXgFBnpi1lhj8xhYpCVQiPxxdk9IEmH8zjo4y9j3sPkqKOlRnkwjpZIpLEKBnpQTwVIMCU/AG7nDJX3OH9RfS9mLJQLfFL8HyGCyqDezFWldbyovhJZvdUeK4tAXJWv2W3OVHiz2L8IlncBgP/E9DJElsyhhQHsM96UE6tBkXsvXkoDbMSYXFcLbgiUwBKfmM2BF/aPDL45iznGur7/2j9v95PwJ0gtMu9jjNRq+pXCXhTh3bsnczm0MpZC1aiRc9nJAeGIMmhrf15E4jBKgTnrstzJxGVAdajKeR954KcNsS33cS2Wmui2YjmPbBXjqf1frzJ log@inteno +---------- + +The public key should be just one line. Add that line to the +HOME/.ssh/authorized_keys file on the scp server. Then add the follwoing as +the first text on the same line. that is insert before the key data. + +command="HOME/bin/scp_upload",no-port-forwarding,no-agent-forwarding,no-X11-forwarding + +Do not forget to change HOME to the correct value for the server and there +should be one space separating the key data and the above text. +--------------------------------- +Now test to make sure that you can upload new files, not download files +and not overwrite files from the client. + + diff --git a/crashlog/scp_upload b/crashlog/scp_upload new file mode 100644 index 000000000..860f226a1 --- /dev/null +++ b/crashlog/scp_upload @@ -0,0 +1,51 @@ +#! /bin/bash +# authorized_keys command="/home/boxi/my_scp",no-port-forwarding,no-agent-forwarding,no-X11-forwarding + +val=`expr match "$SSH_ORIGINAL_COMMAND" "scp"` +if [ $val != 3 ] +then + echo "only scp is allowed for this rsa key" + exit 1 +fi + +#strip out "scp" as getopts barf on anything not an option + +args=${SSH_ORIGINAL_COMMAND:3} + +# we must set args to positional paramters otherwise it's next to impossible +# to get to the rest of the line that is not arguments. + +set -- $args +while getopts "rftdvpq" Option +do + case $Option in + r ) echo "recursive not allowed";exit 1;; + f ) echo "reading files not allowed";exit 1;; + t ) ;; + d ) ;; + v ) ;; + p ) ;; + q ) ;; + * ) ;; # Default. + esac +done + +shift $(($OPTIND - 1)) + +file="$*" + +if [ "$file" == "." ] +then + echo "Implicit filename \".\" not allowed." + echo "You must specify the exact target filename" + exit 1 +fi + +# try to create uniq files +EXTRA=$((0)) +while [ -e "${file}_${EXTRA}" ] +do + EXTRA=$((EXTRA +1)) +done + +exec ${SSH_ORIGINAL_COMMAND}_${EXTRA}