#! /bin/bash function e { echo -ne "${1};" } # file age # return 0 if given file mtime is older than given age (in day) # arg1: file # arg2: age to compare function _fileOlderThan { if [ ! -f $1 ] ; then echo -ne "0;" ; return 0 ; fi test $(find test -mtime +$2) return $? } # file mtime # arg1: file function fileMTime { if [ ! -f $1 ] ; then echo -ne "0;" ; return 0 ; fi stat --printf "%y;" $1 } # file numline # arg1: file function fileNumLines { if [ ! -f $1 ] ; then echo -ne "0;" ; return 0 ; fi n=$(wc -l $1 | awk '{print $1}') echo -ne $n; } #ok if given program returns given code # arg1: program to run # arg2: expected return code (default 0) function exitCodeOk { program=$1 code=${2:=0} $program &> /dev/null if [ $? -eq $code ] ; then echo -ne "1;" ; else echo -ne "0;" ; fi } #Ok if file size > X # arg1: file # arg2: min size function fileBiggerThan { if [ ! -f $1 ] ; then echo -ne "0;" ; return 0 ; fi filesize=$(stat --format "%s" $1) if [ $filesize -lt $2 ] ; then echo -ne "0;" ; else echo -ne "1;" ; fi } #Ok if file exists # arg1: file to check function fileMustExists { if [ -f ${1} ] ; then echo -ne "1;" else echo -ne "0;" fi } #Ok if file DOESNOT exists # arg1: file to check function fileMustNOTExists { if [ -f ${1} ] ; then echo -ne "0;" else echo -ne "1;" fi } #Ok if dir exists # arg1: dir to check function dirMustExists { if [ -d ${1} ] ; then e 1 else e 0 fi } # Ok if given dir DOESNOT exists # arg1: dir function dirMustNOTExists { if [ -d ${1} ] ; then echo -ne "0;" else echo -ne "1;" fi } # Ok if some files of given dir contains at least one occurence of pattern # arg1: dir # arg2: pattern function dirMustContains { dir=$1 shift string=$@ if [ ! -d $dir ] ; then echo -ne "0;" ; return 0 ;fi if ( grep -ri -qE "${string}" $dir ) ; then echo -ne "1;" else echo -ne "0;" fi } # Ok if file contains at least one occurence of pattern # arg1: file # arg2: pattern function fileMustContains { file=$1 shift string=$@ if [ ! -f $file ] ; then echo -ne "0;" ; return 0 ;fi if ( grep -i -qE "${string}" $file ) ; then echo -ne "1;" else echo -ne "0;" fi } # Return num of occurences of pattern # arg1: file # arg2: pattern function fileCountPattern { file=$1 shift string=$@ if [ ! -f $file ] ; then e 0 ; return 0 ;fi local size=$(stat --printf '%s' $file) if [ $size -eq 0 ] ; then e 0 ; return 0 ; fi num=$(grep -ciE "${string}" $file ) e "$num" } # Ok if file contains N pattern # arg1: file # arg2: num of expected item # arg3: pattern function fileMustContainsNItem { file=$1 n=$2 shift string=$@ if [ ! -f $file ] ; then echo -ne "0;" ; return 0 ;fi num=$(grep -ciE "${string}" $file ) if [ $num -eq $1 ] ; then echo -ne "1;" else echo -ne "0;" fi } # Ok if file DOESNOT contain pattern # Arg1: file # ArgN: pattern function fileMustNOTContains { file=$1 shift string=$@ if [ ! -f $file ] ; then echo -ne "0;" ; return 0 ; fi if ( grep -i -qE "${string}" $file ) ; then echo -ne "0;" else echo -ne "1;" fi } # Ok if given user exists # Arg1: user function userExists { if ( grep -iq $1 /etc/passwd ) ; then e 1 ; else e 0 ; fi } # Ok if given group exists # Arg1: group function groupExists { if ( grep -iq $1 /etc/group ) ; then e 1 ; else e 0 ; fi } # insert hostname at beginning of result line function addHeader { test -f /etc/motd && user="$(cat /etc/motd | sed 's/\n//');" echo -ne "${user}$(hostname -s);" } # get file md5 # arg1: file to checksum function md5 { test -f "$1" && local am=$(md5sum "$1" | awk '{print $1}') echo -ne "${am};" } # cleanUppkgList # arg1: rootfs function cleanUppkgList { test -d ${1} || return 0 test -f ${1}/tmp/pkg.list && rm -f ${1}/tmp/pkg.list } # init pkg list # arg1: rootfs function initPkgList { root="$1" test -f "${1}/tmp/pkg.list" || chroot "$1" sh -c "rpm -qa > /tmp/pkg.list" } # Ok if given package is installed # arg1: rootfs # arg2: pkg to check # WARNING: package list might not be up to date function pkgInstalled { if (grep -qi "$2" "${1}/tmp/pkg.list" ) ; then e 1 ; else e 0 ; fi } # Ok if given package is NOT installed # arg1: pkg to check # WARNING: package list might not be up to date function pkgNotInstalled { if (grep -qi "$2" "${1}/tmp/pkg.list" ) ; then e 0 ; else e 1 ; fi echo -ne "${?};" } # ok if given process is running # arg1: process to check function processIsRunning { if ( pgrep -f $1 &> /dev/null ) ; then echo -ne "1;" ; else echo -ne "0;" ; fi } #Ok if given command returns 0 # arg1: chroot dir # arg2: command to be run function commandIsWorking { chroot=$1 shift command="$@" chroot ${chroot} bash -c "$command" &> /dev/null ret=$? if [ $ret -eq 0 ] ; then e 1 ; else e 0 ; fi } # ok if given pattern is detected on command's stdout or stderr # arg1: chroot # arg2: command # arg3: pattern function commandStdoutPattern { chroot=$1 command=$2 shift pattern=$@ result=$(chroot ${chroot} bash -c "$command") if ( echo -n "$result" | grep -qiE "${pattern}" ) ; then echo -ne "1;" ; else echo -ne "0;" ; fi } # ok if given service is enabled # arg1: service function serviceIsEnabled { local root=$1 local service=${2}.service c=$(ls -l ${root}/etc/systemd/system/multi-user.target.wants/ | grep -i ${service} | wc -l) if [ $c -gt 0 ] ; then e 1 ; else e 0 ; fi } # ok if output of given url contains given stuff # arg1: url # arg2: string function okIfCurl { url=$1 shift if ( curl -q "${url}" | grep -q "$@" ) ; then echo -ne "1;" ; else echo -ne "0;" ; fi }