Package init

This commit is contained in:
overweight 2019-09-30 11:16:30 -04:00
commit 6ffeb528d2
14 changed files with 1026 additions and 0 deletions

View File

@ -0,0 +1,166 @@
From 71e9b4eda329fc9e59fbbcdc86353a7609f8d383 Mon Sep 17 00:00:00 2001
From: guoxiaoqi <guoxiaoqi2@huawei.com>
Date: Tue, 26 Feb 2019 23:33:08 +0000
Subject: [PATCH] add configuration to avoid memory leak for bugfix of rsyslog-7.4.7
reason: add configuration to avoid memory leak for bugfix of rsyslog-7.4.7
Signed-off-by: guoxiaoqi <guoxiaoqi2@huawei.com>
---
action.c | 7 ++++++-
runtime/queue.c | 30 +++++++++++++++++++++++++++++-
runtime/queue.h | 2 ++
3 files changed, 37 insertions(+), 2 deletions(-)
diff --git a/action.c b/action.c
index 1bc0ad2..e973f72 100644
--- a/action.c
+++ b/action.c
@@ -174,6 +174,7 @@ typedef struct configSettings_s {
int iActionQWrkMinMsgs; /* minimum messages per worker needed to start a new one */
int bActionQSaveOnShutdown; /* save queue on shutdown (when DA enabled)? */
int64 iActionQueMaxDiskSpace; /* max disk space allocated 0 ==> unlimited */
+ int64 iActionQueDiskSpaceMark; /* rsyslog cannot run out of disk space */
int iActionQueueDeqSlowdown; /* dequeue slowdown (simple rate limiting) */
int iActionQueueDeqtWinFromHr; /* hour begin of time frame when queue is to be dequeued */
int iActionQueueDeqtWinToHr; /* hour begin of time frame when queue is to be dequeued */
@@ -309,7 +310,8 @@ actionResetQueueParams(void)
cs.iActionQtoWrkShutdown = 60000; /* timeout for worker thread shutdown */
cs.iActionQWrkMinMsgs = -1; /* minimum messages per worker needed to start a new one */
cs.bActionQSaveOnShutdown = 1; /* save queue on shutdown (when DA enabled)? */
- cs.iActionQueMaxDiskSpace = 0;
+ cs.iActionQueMaxDiskSpace = 100*1024*1024;
+ cs.iActionQueDiskSpaceMark = 100*1024*1024;
cs.iActionQueueDeqSlowdown = 0;
cs.iActionQueueDeqtWinFromHr = 0;
cs.iActionQueueDeqtWinToHr = 25; /* 25 disables time windowed dequeuing */
@@ -543,6 +545,7 @@ actionConstructFinalize(action_t *__restrict__ const pThis, struct nvlst *lst)
error %d. Ignored, running with default setting", iRet); \
}
setQPROP(qqueueSetsizeOnDiskMax, "$ActionQueueMaxDiskSpace", cs.iActionQueMaxDiskSpace);
+ setQPROP(qqueueSetsizeOnDiskMrk, "$ActionQueueDiskSpaceMark", cs.iActionQueDiskSpaceMark);
setQPROP(qqueueSetiDeqBatchSize, "$ActionQueueDequeueBatchSize", cs.iActionQueueDeqBatchSize);
setQPROP(qqueueSetMaxFileSize, "$ActionQueueFileSize", cs.iActionQueMaxFileSize);
setQPROPstr(qqueueSetFilePrefix, "$ActionQueueFileName", cs.pszActionQFName);
@@ -2229,6 +2232,8 @@ rsRetVal actionClassInit(void)
&cs.iActionQueueDeqBatchSize, NULL));
CHKiRet(regCfSysLineHdlr((uchar *)"actionqueuemaxdiskspace", 0, eCmdHdlrSize, NULL,
&cs.iActionQueMaxDiskSpace, NULL));
+ CHKiRet(regCfSysLineHdlr((uchar *)"actionqueuediskspacemark", 0, eCmdHdlrSize, NULL,
+ &cs.iActionQueDiskSpaceMark, NULL));
CHKiRet(regCfSysLineHdlr((uchar *)"actionqueuehighwatermark", 0, eCmdHdlrInt, NULL,
&cs.iActionQHighWtrMark, NULL));
CHKiRet(regCfSysLineHdlr((uchar *)"actionqueuelowwatermark", 0, eCmdHdlrInt, NULL,
diff --git a/runtime/queue.c b/runtime/queue.c
index 23de366..0c2485c 100644
--- a/runtime/queue.c
+++ b/runtime/queue.c
@@ -46,6 +46,7 @@
#include <time.h>
#include <errno.h>
#include <inttypes.h>
+#include <sys/vfs.h>
#include "rsyslog.h"
#include "queue.h"
@@ -125,6 +126,7 @@ static struct cnfparamdescr cnfpdescr[] = {
{ "queue.mindequeuebatchsize", eCmdHdlrInt, 0 },
{ "queue.mindequeuebatchsize.timeout", eCmdHdlrInt, 0 },
{ "queue.maxdiskspace", eCmdHdlrSize, 0 },
+ { "queue.diskspacemark", eCmdHdlrSize, 0 },
{ "queue.highwatermark", eCmdHdlrInt, 0 },
{ "queue.lowwatermark", eCmdHdlrInt, 0 },
{ "queue.fulldelaymark", eCmdHdlrInt, 0 },
@@ -472,6 +474,7 @@ StartDA(qqueue_t *pThis)
CHKiRet(qqueueSetpAction(pThis->pqDA, pThis->pAction));
CHKiRet(qqueueSetsizeOnDiskMax(pThis->pqDA, pThis->sizeOnDiskMax));
+ CHKiRet(qqueueSetsizeOnDiskMrk(pThis->pqDA, pThis->sizeOnDiskMrk));
CHKiRet(qqueueSetiDeqSlowdown(pThis->pqDA, pThis->iDeqSlowdown));
CHKiRet(qqueueSetMaxFileSize(pThis->pqDA, pThis->iMaxFileSize));
CHKiRet(qqueueSetFilePrefix(pThis->pqDA, pThis->pszFilePrefix, pThis->lenFilePrefix));
@@ -1016,6 +1019,20 @@ qAddDisk(qqueue_t *const pThis, smsg_t* pMsg)
ISOBJ_TYPE_assert(pMsg, msg);
number_t nWriteCount;
const int oldfile = strmGetCurrFileNum(pThis->tVars.disk.pWrite);
+ struct statfs stDiskInfo;
+ unsigned long long ullFreeDisk = 0;
+
+ /* rsyslog cannot run out of disk space:start */
+ iRet = statfs(pThis->pszSpoolDir, &stDiskInfo);
+ if (iRet != 0||&stDiskInfo == NULL){
+ FINALIZE;
+ }
+ ullFreeDisk = stDiskInfo.f_bsize * stDiskInfo.f_bfree;
+ if ( ullFreeDisk < pThis->sizeOnDiskMrk ){
+ iRet = RS_RET_WRN_WRKDIR;
+ FINALIZE;
+ }
+ /* rsyslog cannot run out of disk space:end */
CHKiRet(strm.SetWCntr(pThis->tVars.disk.pWrite, &nWriteCount));
CHKiRet((objSerialize(pMsg))(pMsg, pThis->tVars.disk.pWrite));
@@ -1047,6 +1064,13 @@ qAddDisk(qqueue_t *const pThis, smsg_t* pMsg)
}
finalize_it:
+ if(iRet != RS_RET_OK){
+ DBGOPRINT((obj_t*) pThis, "cannot write to disk, queue disk size now %lld octets, EnqOnly:%d\n",
+ pThis->tVars.disk.sizeOnDisk, pThis->bEnqOnly);
+
+ if(pMsg != NULL)
+ msgDestruct(&pMsg);
+ }
RETiRet;
}
@@ -1544,7 +1568,8 @@ qqueueSetDefaultsActionQueue(qqueue_t *pThis)
pThis->toWrkShutdown = actq_dflt_toWrkShutdown; /* timeout for worker thread shutdown */
pThis->iMinMsgsPerWrkr = -1; /* minimum messages per worker needed to start a new one */
pThis->bSaveOnShutdown = 1; /* save queue on shutdown (when DA enabled)? */
- pThis->sizeOnDiskMax = 0; /* unlimited */
+ pThis->sizeOnDiskMax = 100*1024*1024; /* unlimited */
+ pThis->sizeOnDiskMrk = 100*1024*1024;
pThis->iDeqSlowdown = 0;
pThis->iDeqtWinFromHr = 0;
pThis->iDeqtWinToHr = 25; /* disable time-windowed dequeuing by default */
@@ -3355,6 +3380,8 @@ qqueueApplyCnfParam(qqueue_t *pThis, struct nvlst *lst)
pThis->toMinDeqBatchSize = pvals[i].val.d.n;
} else if(!strcmp(pblk.descr[i].name, "queue.maxdiskspace")) {
pThis->sizeOnDiskMax = pvals[i].val.d.n;
+ } else if(!strcmp(pblk.descr[i].name, "queue.diskspacemark")) {
+ pThis->sizeOnDiskMrk = pvals[i].val.d.n;
} else if(!strcmp(pblk.descr[i].name, "queue.highwatermark")) {
pThis->iHighWtrMrk = pvals[i].val.d.n;
} else if(!strcmp(pblk.descr[i].name, "queue.lowwatermark")) {
@@ -3455,6 +3482,7 @@ DEFpropSetMeth(qqueue, iDeqBatchSize, int)
DEFpropSetMeth(qqueue, iMinDeqBatchSize, int)
DEFpropSetMeth(qqueue, sizeOnDiskMax, int64)
DEFpropSetMeth(qqueue, iSmpInterval, int)
+DEFpropSetMeth(qqueue, sizeOnDiskMrk, int64)
/* This function can be used as a generic way to set properties. Only the subset
diff --git a/runtime/queue.h b/runtime/queue.h
index 5f91c58..f01c325 100644
--- a/runtime/queue.h
+++ b/runtime/queue.h
@@ -143,6 +143,7 @@ struct queue_s {
int iNumberFiles; /* how many files make up the queue? */
int64 iMaxFileSize; /* max size for a single queue file */
int64 sizeOnDiskMax; /* maximum size on disk allowed */
+ int64 sizeOnDiskMrk; /*rsyslog cannot run out of disk space*/
qDeqID deqIDAdd; /* next dequeue ID to use during add to queue store */
qDeqID deqIDDel; /* queue store delete position */
int bIsDA; /* is this queue disk assisted? */
@@ -233,6 +234,7 @@ PROTOTYPEpropSetMeth(qqueue, bSaveOnShutdown, int);
PROTOTYPEpropSetMeth(qqueue, pAction, action_t*);
PROTOTYPEpropSetMeth(qqueue, iDeqSlowdown, int);
PROTOTYPEpropSetMeth(qqueue, sizeOnDiskMax, int64);
+PROTOTYPEpropSetMeth(qqueue, sizeOnDiskMrk, int64);
PROTOTYPEpropSetMeth(qqueue, iDeqBatchSize, int);
#define qqueueGetID(pThis) ((unsigned long) pThis)
--
2.19.1

View File

@ -0,0 +1,59 @@
From 8645960b76db8ff5986efc60f7d2b77b8c5c0094 Mon Sep 17 00:00:00 2001
From: guoxiaoqi <guoxiaoqi2@huawei.com>
Date: Sat, 26 Jan 2019 12:37:59 +0000
Subject: [PATCH] add monotonic timestamp for bugfix of rsyslog-7.4.7 imjournal
reason: add monotonic timestamp for bugfix of rsyslog-7.4.7 imjournal
Signed-off-by: guoxiaoqi <guoxiaoqi2@huawei.com>
---
plugins/imjournal/imjournal.c | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/plugins/imjournal/imjournal.c b/plugins/imjournal/imjournal.c
index 4396ddd..ffafa1f 100644
--- a/plugins/imjournal/imjournal.c
+++ b/plugins/imjournal/imjournal.c
@@ -281,6 +281,7 @@ readjournal(void)
struct timeval tv;
uint64_t timestamp;
+ uint64_t monotonic_timestamp;
struct json_object *json = NULL;
int r;
@@ -291,6 +292,9 @@ readjournal(void)
char *sys_iden_help = NULL;
char *c = NULL;
+ char *t;
+ char *tpmessage;
+
const void *get;
const void *pidget;
size_t length;
@@ -443,8 +447,19 @@ readjournal(void)
}
}
- /* submit message */
- enqMsg((uchar *)message, (uchar *) sys_iden_help, facility, severity, &tv, json, 0);
+ if (sd_journal_get_data(j, "_SOURCE_MONOTONIC_TIMESTAMP", &get, &length) >= 0)
+ {
+ t = strndup(get+28, length-28);
+ monotonic_timestamp = atoll(t);
+ free(t);
+ tpmessage = (char *)malloc(strlen(message)+30);
+ int ret = sprintf(tpmessage,"[%5lu.%06lu] ",monotonic_timestamp/1000000, monotonic_timestamp%1000000);
+ memcpy(tpmessage+(ret > 30 ? 0 :(ret < 0 ? 0:ret)),message,strlen(message)+1);
+ enqMsg((uchar *)tpmessage, (uchar *) sys_iden_help, facility, severity, &tv, json, 0);
+ free(tpmessage);
+ }else
+ /* submit message */
+ enqMsg((uchar *)message, (uchar *) sys_iden_help, facility, severity, &tv, json, 0);
finalize_it:
free(sys_iden_help);
--
1.8.3.1

View File

@ -0,0 +1,93 @@
#!/bin/bash
LOCK_FILE=/var/lock/os_check_timezone_change.lock
exec 200<>$LOCK_FILE
flock -nx 200
if [ $? -ne 0 ];then
echo "$0 is running, can not run it twice at one time" >/dev/kmsg
exit 1
fi
FILE_TMP="/etc/localtime_tmp"
OLD_TIME_ZONE=""
fn_is_container_pid()
{
#test whether the specified pid is a process in container from host.
#a process is in container if its namespace is not same as pid1.
local pid="$1"
local ns_pid1=/proc/1/ns/pid
local ns_target=/proc/$pid/ns/pid
local -i ret=0 #default to false
if [ -f "$ns_pid1" -a -f "$ns_target" ] ; then
ns_pid1=$(readlink -sn "$ns_pid1")
ns_target=$(readlink -sn "$ns_target")
if [ "$ns_pid1" != "$ns_target" ] ; then
ret=1
fi
fi
return $ret
}
#kill process on the host instead of the container
fn_container_protect_kill()
{
local pid="$1"
local signal="${2:-"TERM"}"
local cmdline_part="${3:-""}"
if [ -d "/proc/$pid" ] ; then
fn_is_container_pid "$pid"
if [ $? -eq 0 ] ; then
if [ -n "$cmdline_part" ] ; then
full_cmdline=$(xargs -0 <"/proc/$pid/cmdline" 2>/dev/null)
if [[ "$full_cmdline" == *"$cmdline_part"* ]] ; then
#kill only when cmdline matches
kill -$signal $pid
fi
else
kill -$signal $pid
fi
else
echo "pid [$pid] is a process from container or has already terminated, do not kill." >/dev/kmsg
fi
fi
}
#Restart rsyslog and cron services
fn_restart_syslog_and_cron()
{
local rsyslogd_path="/usr/sbin/rsyslogd"
systemctl restart rsyslog
systemctl restart crond
#ensure there is only rsyslog instance after restarting
for (( i=0;i<3;i++ ));do
sleep 2
pids=(`/usr/sbin/pidof ${rsyslogd_path}`)
num=${#pids[@]}
if [ "$num" -eq "1" ];then
return 0
elif [ "$num" -gt "1" ];then
echo "fn_restart_syslog ret:$num, do killall syslog...." >/dev/kmsg
for ((i=0;i<num;i++));do
fn_container_protect_kill "${pids[${i}]}" kill "${rsyslogd_path}"
done
systemctl start rsyslog
else
systemctl start rsyslog
fi
done
return 0
}
if [ -f ${FILE_TMP} ];then
OLD_TIME_ZONE=`cat ${FILE_TMP}`
timezone=`date +%Z%z`
if [ "$timezone" != "$OLD_TIME_ZONE" ];then
echo "timezone changed....new ${timezone} old ${OLD_TIME_ZONE}" >/dev/kmsg
fn_restart_syslog_and_cron
fi
fi
date +%Z%z > ${FILE_TMP}

102
os_rotate_and_save_log.sh Normal file
View File

@ -0,0 +1,102 @@
#!/bin/bash
###########################################################################
#File Name:os_rotate_and_save_log.sh
#Description: Save the source file to destination directories by size
#Parameter: It is a character string, has three values.
# parameter one, the file which needs to be saved.
# parameter two, the destination directory for saving the file.
# parameter three, logdump dir limit size
#Output:none
###########################################################################
CUR_SCRIPT=$0
PID=$(pidof -x $CUR_SCRIPT)
L_CUR_SCRIPT_RUNNING_COUNT=$(echo "$PID" | wc -w)
#can not be runned twice at the same time
if [ "${L_CUR_SCRIPT_RUNNING_COUNT}" -gt 1 ];then
echo "[$CUR_SCRIPT] $CUR_SCRIPT is running, can not run it twice at one time" >/dev/kmsg
exit 1
fi
#parse parameter
declare -a PARAM_ARRAY
PARAM_ARRAY=($1)
SRC_FILE=${PARAM_ARRAY[0]}
DEST_DIR=${PARAM_ARRAY[1]}
DIR_LIMIT_SIZE=${PARAM_ARRAY[2]}
FILE_NAME=${SRC_FILE##*/}
#get the maximum serial number
SERIEL_NUM=`ls $DEST_DIR|grep "messages-.*-.*\.tar\.bz2"|cut -d '-' -f3 |sort -nr|head -n1|cut -d '.' -f1`
if [ -z $SERIEL_NUM ];then
SERIEL_NUM=0
fi
((SERIEL_NUM=$SERIEL_NUM+1))
TMPNAME=${FILE_NAME}-`date "+%Y%m%d%H%M%S"-${SERIEL_NUM}`
TMPFILE=/tmp/$TMPNAME
#create destination directory
if [ ! -d "$DEST_DIR" ];then
mkdir -p $DEST_DIR
fi
#save the log file to /tmp/
mv $SRC_FILE $TMPFILE
#count the maximum number of bytes in the destination directory
DIR_LIMIT_SIZE_NUM=${DIR_LIMIT_SIZE%[A-Z|a-z]}
DIR_LIMIT_SIZE_UNIT=${DIR_LIMIT_SIZE##[0-9]*[0-9]}
case $DIR_LIMIT_SIZE_UNIT in
M|m)
DIR_LIMIT_SIZE_NUM=$((DIR_LIMIT_SIZE_NUM*1024*1024))
;;
K|k)
DIR_LIMIT_SIZE_NUM=$((DIR_LIMIT_SIZE_NUM*1024))
;;
esac
TAR_PKG_NAME=$TMPFILE.tar.bz2
cd /tmp
tar -cjf $TAR_PKG_NAME $TMPNAME
cd -
#count current dump file size
FILE_SIZE=`du -sb $TAR_PKG_NAME|awk '{print $1}'`
#count the maximum space that a file can occupy in the destination directory if it is to accommodate the current dump file.
((MAX_LEFT_SIZE=$DIR_LIMIT_SIZE_NUM-$FILE_SIZE))
#current total size of files
pushd $DEST_DIR >/dev/null
cursize=`du -sb|awk '{print $1}'`
#delete extraneous files when there is not enough space
if [ "$cursize" -gt "$MAX_LEFT_SIZE" ];then
irrelevant_files=`find $DEST_DIR|grep -v "^$DEST_DIR/$FILE_NAME-.*-.*\.tar\.bz2$" |grep -v "^$DEST_DIR$"`
if [ "$irrelevant_files" != "" ];then
rm -rf $irrelevant_files
echo "[$0]space of output directory $DEST_DIR will be larger than $DIR_LIMIT_SIZE bytes,delete the irrelevant files :$irrelevant_files" >/dev/kmsg
cursize=`du -sb|awk '{print $1}'`
fi
fi
#when the space is still insufficient, delete the oldest log package one by one until it can hold the latest log package
while [ $cursize -gt $MAX_LEFT_SIZE ]
do
del_file=`ls $DEST_DIR|grep "$FILE_NAME-.*-.*\.tar\.bz2"|cut -d '-' -f3|sort -n|head -n1`
if [[ $del_file == "" ]];then
break
fi
del_file=`ls|grep "$FILE_NAME-.*-$del_file"`
echo "[$0]space of output directory is larger than $DIR_LIMIT_SIZE bytes,delete the oldest tar file $del_file" >/dev/kmsg
rm -rf $del_file
cursize=`du -sb|awk '{print $1}'`
done
popd >/dev/null
mv $TAR_PKG_NAME $DEST_DIR
rm -rf $TMPFILE
exit 0

BIN
rsyslog-8.1907.0.tar.gz Normal file

Binary file not shown.

View File

@ -0,0 +1,35 @@
From 4196f125b63ad889c071b25a6a72176be2e31f65 Mon Sep 17 00:00:00 2001
From: guoxiaoqi <guoxiaoqi2@huawei.com>
Date: Sat, 26 Jan 2019 12:21:02 +0000
Subject: [PATCH] rsyslog-8.24.0, ensure parent dir exists when writting log file
reason: rsyslog-8.24.0, ensure parent dir exists when writting log file
Signed-off-by: guoxiaoqi <guoxiaoqi2@huawei.com>
---
tools/omfile.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/tools/omfile.c b/tools/omfile.c
index c1a5615..30d792a 100644
--- a/tools/omfile.c
+++ b/tools/omfile.c
@@ -805,7 +805,14 @@ doWrite(instanceData *__restrict__ const pData, uchar *__restrict__ const pszBuf
DBGPRINTF("omfile: write to stream, pData->pStrm %p, lenBuf %d, strt data %.128s\n",
pData->pStrm, lenBuf, pszBuf);
- if(pData->pStrm != NULL){
+ if(pData->pStrm != NULL) {
+ if(pData->pStrm->fd == -1 && access((char*)pData->fname, F_OK)) {
+ if(makeFileParentDirs(pData->fname, ustrlen(pData->fname),
+ pData->fDirCreateMode, pData->dirUID,
+ pData->dirGID, pData->bFailOnChown) != 0) {
+ ABORT_FINALIZE(RS_RET_ERR); /* we give up */
+ }
+ }
CHKiRet(strm.Write(pData->pStrm, pszBuf, lenBuf));
if(pData->useSigprov) {
CHKiRet(pData->sigprov.OnRecordWrite(pData->sigprovFileData, pszBuf, lenBuf));
--
1.8.3.1

View File

@ -0,0 +1,77 @@
From 80b2f2cb20cd72b4ce5e2d646f2fa9d6abd3f31d Mon Sep 17 00:00:00 2001
From: liufeng <liufeng111@huawei.com>
Date: Mon, 1 Jul 2019 12:20:02 +0800
Subject: [PATCH] initialize variables and check return value to eliminate warnings
reason: initialize variables and check return value to eliminate warnings
Signed-off-by: liufeng <liufeng111@huawei.com>
---
plugins/imjournal/imjournal.c | 22 +++++++++++++---------
tools/rsyslogd.c | 2 +-
2 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/plugins/imjournal/imjournal.c b/plugins/imjournal/imjournal.c
index 2eb42a6..87c251a 100644
--- a/plugins/imjournal/imjournal.c
+++ b/plugins/imjournal/imjournal.c
@@ -281,7 +281,7 @@ readjournal(void)
struct timeval tv;
uint64_t timestamp;
- uint64_t monotonic_timestamp;
+ uint64_t monotonic_timestamp = 0;
struct json_object *json = NULL;
int r;
@@ -292,8 +292,8 @@ readjournal(void)
char *sys_iden_help = NULL;
char *c = NULL;
- char *t;
- char *tpmessage;
+ char *t = NULL;
+ char *tpmessage = NULL;
const void *get;
const void *pidget;
@@ -450,13 +450,17 @@ readjournal(void)
if (sd_journal_get_data(j, "_SOURCE_MONOTONIC_TIMESTAMP", &get, &length) >= 0)
{
t = strndup(get+28, length-28);
- monotonic_timestamp = atoll(t);
- free(t);
+ if (t != NULL) {
+ monotonic_timestamp = atoll(t);
+ free(t);
+ }
tpmessage = (char *)malloc(strlen(message)+30);
- int ret = sprintf(tpmessage,"[%5lu.%06lu] ",monotonic_timestamp/1000000, monotonic_timestamp%1000000);
- memcpy(tpmessage+(ret > 30 ? 0 :(ret < 0 ? 0:ret)),message,strlen(message)+1);
- enqMsg((uchar *)tpmessage, (uchar *) sys_iden_help, facility, severity, &tv, json, 0);
- free(tpmessage);
+ if (tpmessage != NULL) {
+ int ret = sprintf(tpmessage,"[%5lu.%06lu] ",monotonic_timestamp/1000000, monotonic_timestamp%1000000);
+ memcpy(tpmessage+(ret > 30 ? 0 :(ret < 0 ? 0:ret)),message,strlen(message)+1);
+ enqMsg((uchar *)tpmessage, (uchar *) sys_iden_help, facility, severity, &tv, json, 0);
+ free(tpmessage);
+ }
}else
/* submit message */
enqMsg((uchar *)message, (uchar *) sys_iden_help, facility, severity, &tv, json, 0);
diff --git a/tools/rsyslogd.c b/tools/rsyslogd.c
index 10a8a05..bacc218 100644
--- a/tools/rsyslogd.c
+++ b/tools/rsyslogd.c
@@ -236,7 +236,7 @@ static rsRetVal
writePidFile(void)
{
FILE *fp;
- int fd;
+ int fd = -1;
DEFiRet;
const char *tmpPidFile;
--
1.8.3.1

BIN
rsyslog-doc-8.1907.0.tar.gz Normal file

Binary file not shown.

78
rsyslog.conf Normal file
View File

@ -0,0 +1,78 @@
# rsyslog configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# or latest version online at http://www.rsyslog.com/doc/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
#### GLOBAL DIRECTIVES ####
# Where to place auxiliary files
global(workDirectory="/run/log/journal")
# Use default timestamp format
module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat")
#### MODULES ####
module(load="imuxsock" # provides support for local system logging (e.g. via logger command)
SysSock.Use="off") # Turn off message reception via local log socket;
# local messages are retrieved through imjournal now.
module(load="imjournal" # provides access to the systemd journal
StateFile="imjournal.state") # File to store the position in the journal
#module(load="imklog") # reads kernel messages (the same are read from journald)
#module(load="immark") # provides --MARK-- message capability
# Provides UDP syslog reception
# for parameters see http://www.rsyslog.com/doc/imudp.html
#module(load="imudp") # needs to be done just once
#input(type="imudp" port="514")
# Provides TCP syslog reception
# for parameters see http://www.rsyslog.com/doc/imtcp.html
#module(load="imtcp") # needs to be done just once
#input(type="imtcp" port="514")
# Include all config files in /etc/rsyslog.d/
include(file="/etc/rsyslog.d/*.conf" mode="optional")
#### RULES ####
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg :omusrmsg:*
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
# ### sample forwarding rule ###
#action(type="omfwd"
# # An on-disk queue is created for this action. If the remote host is
# # down, messages are spooled to disk and sent when it is up again.
#queue.filename="fwdRule1" # unique name prefix for spool files
#queue.maxdiskspace="1g" # 1gb space limit (use as much as possible)
#queue.saveonshutdown="on" # save messages to disk on shutdown
#queue.type="LinkedList" # run asynchronously
#action.resumeRetryCount="-1" # infinite retries if host is down
# # Remote Logging (we use TCP for reliable delivery)
# # remote_host is: name/ip, e.g. 192.168.0.1, port optional e.g. 10514
#Target="remote_host" Port="XXX" Protocol="tcp")

12
rsyslog.log Normal file
View File

@ -0,0 +1,12 @@
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
missingok
sharedscripts
postrotate
/usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
endscript
}

354
rsyslog.spec Normal file
View File

@ -0,0 +1,354 @@
%define rsyslog_statedir %{_sharedstatedir}/rsyslog
%define rsyslog_pkidir %{_sysconfdir}/pki/rsyslog
%define rsyslog_docdir %{_docdir}/rsyslog
Name: rsyslog
Version: 8.1907.0
Release: 1
Summary: The rocket-fast system for log processing
License: (GPLv3+ and ASL 2.0)
URL: http://www.rsyslog.com/
Source0: http://www.rsyslog.com/files/download/rsyslog/%{name}-%{version}.tar.gz
Source1: http://www.rsyslog.com/files/download/rsyslog/%{name}-doc-%{version}.tar.gz
Source2: rsyslog.conf
Source3: rsyslog.sysconfig
Source4: rsyslog.log
Source5: os_rotate_and_save_log.sh
Source6: os_check_timezone_for_rsyslog.sh
Source7: timezone.cron
BuildRequires: gcc autoconf automake bison dos2unix flex pkgconfig python3-docutils libtool
BuildRequires: libgcrypt-devel libuuid-devel zlib-devel krb5-devel libnet-devel gnutls-devel
BuildRequires: libfastjson-devel >= 0.99.8 libestr-devel >= 0.1.9 systemd-devel >= 204-8
BuildRequires: libdbi-devel mariadb-connector-c-devel net-snmp-devel qpid-proton-c-devel libcurl-devel
Requires: logrotate >= 3.5.2 bash >= 2.0 libdbi mariadb-connector-c-devel
%{?systemd_requires}
Provides: syslog
Obsoletes: sysklogd < 1.5-11
Provides: rsyslog-crypto rsyslog-doc rsyslog-elasticsearch rsyslog-mmjsonparse
Provides: rsyslog-mmaudit rsyslog-mmsnmptrapd rsyslog-libdbi rsyslog-mysql
Provides: rsyslog-snmp rsyslog-gssapi rsyslog-gnutls rsyslog-updspoof
Obsoletes: rsyslog-crypto rsyslog-doc rsyslog-elasticsearch rsyslog-mmjsonparse
Obsoletes: rsyslog-mmaudit rsyslog-mmsnmptrapd rsyslog-libdbi rsyslog-mysql
Obsoletes: rsyslog-snmp rsyslog-gssapi rsyslog-gnutls rsyslog-updspoof
%description
RSYSLOG is the rocket-fast system for log processing.It offers high-performance,
great security features and a modular design. While it started as a regular syslogd,
rsyslog has evolved into a kind of swiss army knife of logging, being able to
accept inputs from a wide variety of sources, transform them, and output to the
results to diverse destinations.
RSYSLOG can deliver over one million messages per second to local destinations when
limited processing is applied. Even with remote destinations and more elaborate
processing the performance is usually considered “stunning”.
%package hiredis
Summary: Redis support for rsyslog
Group: System Environment/Daemons
Requires: %name = %version-%release
BuildRequires: hiredis-devel
%description hiredis
This package provides support from redis.
%package kafka
Summary: Provides the omkafka module
Group: System Environment/Daemons
Requires: %name = %version-%release
BuildRequires: librdkafka-devel
%description kafka
This package provides support from kafka.
%package mmnormalize
Summary: Log normalization support for rsyslog
Group: System Environment/Daemons
Requires: %name = %version-%release
BuildRequires: libestr-devel liblognorm-devel >= 1.0.2
%description mmnormalize
This module provides the capability to normalize log messages via liblognorm.
%package mmkubernetes
Summary: Provides the mmkubernetes module
Group: System Environment/Daemons
Requires: %name = %version-%release
BuildRequires: libcurl-devel
%description mmkubernetes
This package provides support for kubernetes to add container metadata.
%package mongodb
Summary: MongoDB support for rsyslog
Group: System Environment/Daemons
Requires: %name = %version-%release
BuildRequires: mongo-c-driver-devel snappy-devel cyrus-sasl-devel
%description mongodb
This package provides support from mongodb.
%package omamqp1
Summary: Provides the omamqp1 module
Group: System Environment/Daemons
Requires: %name = %version-%release
BuildRequires: qpid-proton-c-devel
%description omamqp1
The omamqp1 output module can be used to send log messages via an AMQP
1.0-compatible messaging bus.
%package pgsql
Summary: PostgresSQL support for rsyslog
Group: System Environment/Daemons
Requires: %name = %version-%release
BuildRequires: postgresql-devel
%description pgsql
The rsyslog-pgsql package contains a dynamic shared object that will add
PostgreSQL database support to rsyslog.
%package rabbitmq
Summary: RabbitMQ support for rsyslog
Group: System Environment/Daemons
Requires: %name = %version-%release
BuildRequires: librabbitmq-devel >= 0.2
%description rabbitmq
This package provides support from rabbitmq.
%package relp
Summary: RELP protocol support for rsyslog
Group: System Environment/Daemons
Requires: %name = %version-%release
BuildRequires: librelp-devel >= 1.0.3
%description relp
The rsyslog-relp package contains the rsyslog plugins that provide
the ability to receive syslog messages via the reliable RELP
protocol.
%package_help
%prep
%setup -q -a 1 -T -c
rm -r LICENSE README.md source build/objects.inv
mv build doc
%autosetup -n %{name}-%{version} -D
%build
autoreconf -vfi
%ifarch sparc64
export CFLAGS="$RPM_OPT_FLAGS -fPIE -DPATH_PIDFILE=\\\"%{Pidfile}\\\""
%else
export CFLAGS="$RPM_OPT_FLAGS -fpie -DPATH_PIDFILE=\\\"%{Pidfile}\\\""
export LDFLAGS="-pie -Wl,-z,relro -Wl,-z,now"
%endif
# the hiredis-devel package doesn't provide a pkg-config file
export HIREDIS_CFLAGS=-I/usr/include/hiredis
export HIREDIS_LIBS="-L%{_libdir} -lhiredis"
%configure \
--prefix=/usr \
--disable-static \
--disable-testbench \
--enable-elasticsearch \
--enable-generate-man-pages \
--enable-gnutls \
--enable-gssapi-krb5 \
--enable-imdiag \
--enable-imfile \
--enable-imjournal \
--enable-impstats \
--enable-imptcp \
--enable-libdbi \
--enable-mail \
--enable-mmanon \
--enable-mmaudit \
--enable-mmcount \
--enable-mmkubernetes \
--enable-mmjsonparse \
--enable-mmnormalize \
--enable-mmsnmptrapd \
--enable-mysql \
--enable-omamqp1 \
--enable-omhiredis \
--enable-omjournal \
--enable-ommongodb \
--enable-omprog \
--enable-omrabbitmq \
--enable-omstdout \
--enable-omudpspoof \
--enable-omuxsock \
--enable-pgsql \
--enable-pmaixforwardedfrom \
--enable-pmcisconames \
--enable-pmlastmsg \
--enable-pmsnare \
--enable-relp \
--enable-snmp \
--enable-unlimited-select \
--enable-usertools \
--enable-omkafka
%make_build
%check
make V=1 check
%install
%make_install
install -d -m 755 $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig
install -d -m 755 $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d
install -d -m 755 $RPM_BUILD_ROOT%{_sysconfdir}/rsyslog.d
install -d -m 700 $RPM_BUILD_ROOT%{rsyslog_statedir}
install -d -m 700 $RPM_BUILD_ROOT%{rsyslog_pkidir}
install -d -m 755 $RPM_BUILD_ROOT%{rsyslog_docdir}/html
install -p -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/rsyslog.conf
install -p -m 644 %{SOURCE3} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/rsyslog
install -p -m 644 %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/rsyslog
install -p -m 644 plugins/ommysql/createDB.sql $RPM_BUILD_ROOT%{rsyslog_docdir}/mysql-createDB.sql
install -p -m 644 plugins/ompgsql/createDB.sql $RPM_BUILD_ROOT%{rsyslog_docdir}/pgsql-createDB.sql
dos2unix tools/recover_qi.pl
install -p -m 644 tools/recover_qi.pl $RPM_BUILD_ROOT%{rsyslog_docdir}/recover_qi.pl
mkdir -p $RPM_BUILD_ROOT/etc/cron.d/
install -m 0600 %{_sourcedir}/timezone.cron $RPM_BUILD_ROOT/etc/cron.d/
install -m 0500 %{SOURCE5} $RPM_BUILD_ROOT%{_bindir}/os_rotate_and_save_log.sh
install -m 0500 %{SOURCE6} $RPM_BUILD_ROOT%{_bindir}/os_check_timezone_for_rsyslog.sh
cp -r doc/* $RPM_BUILD_ROOT%{rsyslog_docdir}/html
%delete_la
sed -i '/^Alias/s/^/;/;/^Requires=syslog.socket/s/^/;/' $RPM_BUILD_ROOT%{_unitdir}/rsyslog.service
%pre
%post
for n in /var/log/{messages,secure,maillog,spooler}
do
[ -f $n ] && continue
umask 066 && touch $n
done
%systemd_post rsyslog.service
%preun
%systemd_preun rsyslog.service
%postun
%systemd_postun_with_restart rsyslog.service
%files
%defattr(-,root,root,-)
%doc AUTHORS ChangeLog README.md
%doc %{rsyslog_docdir}/html
%doc %{rsyslog_docdir}/mysql-createDB.sql
%doc %{rsyslog_docdir}/pgsql-createDB.sql
%license COPYING*
%{rsyslog_docdir}
%dir %{_libdir}/rsyslog
%dir %{_sysconfdir}/rsyslog.d
%dir %{rsyslog_statedir}
%dir %{rsyslog_pkidir}
%{_sbindir}/rsyslogd
%attr(500,root,root) %{_bindir}/os_rotate_and_save_log.sh
%attr(500,root,root) %{_bindir}/os_check_timezone_for_rsyslog.sh
/etc/cron.d/timezone.cron
%{_unitdir}/rsyslog.service
%config(noreplace) %{_sysconfdir}/rsyslog.conf
%config(noreplace) %{_sysconfdir}/sysconfig/rsyslog
%config(noreplace) %{_sysconfdir}/logrotate.d/rsyslog
%{_bindir}/rscryutil
%{_libdir}/rsyslog/fmhttp.so
%{_libdir}/rsyslog/fmhash.so
%{_libdir}/rsyslog/imfile.so
%{_libdir}/rsyslog/imgssapi.so
%{_libdir}/rsyslog/imjournal.so
%{_libdir}/rsyslog/imklog.so
%{_libdir}/rsyslog/immark.so
%{_libdir}/rsyslog/impstats.so
%{_libdir}/rsyslog/imptcp.so
%{_libdir}/rsyslog/imtcp.so
%{_libdir}/rsyslog/imudp.so
%{_libdir}/rsyslog/imuxsock.so
%{_libdir}/rsyslog/lmcry_gcry.so
%{_libdir}/rsyslog/lmgssutil.so
%{_libdir}/rsyslog/lmnet.so
%{_libdir}/rsyslog/lmnetstrms.so
%{_libdir}/rsyslog/lmnsd_gtls.so
%{_libdir}/rsyslog/lmnsd_ptcp.so
%{_libdir}/rsyslog/lmregexp.so
%{_libdir}/rsyslog/lmtcpclt.so
%{_libdir}/rsyslog/lmtcpsrv.so
%{_libdir}/rsyslog/lmzlibw.so
%{_libdir}/rsyslog/mmanon.so
%{_libdir}/rsyslog/mmaudit.so
%{_libdir}/rsyslog/mmcount.so
%{_libdir}/rsyslog/mmexternal.so
%{_libdir}/rsyslog/mmjsonparse.so
%{_libdir}/rsyslog/mmsnmptrapd.so
%{_libdir}/rsyslog/ommail.so
%{_libdir}/rsyslog/omelasticsearch.so
%{_libdir}/rsyslog/omgssapi.so
%{_libdir}/rsyslog/omlibdbi.so
%{_libdir}/rsyslog/omjournal.so
%{_libdir}/rsyslog/omudpspoof.so
%{_libdir}/rsyslog/omprog.so
%{_libdir}/rsyslog/omsnmp.so
%{_libdir}/rsyslog/omstdout.so
%{_libdir}/rsyslog/omtesting.so
%{_libdir}/rsyslog/omuxsock.so
%{_libdir}/rsyslog/ommysql.so
%{_libdir}/rsyslog/pmaixforwardedfrom.so
%{_libdir}/rsyslog/pmcisconames.so
%{_libdir}/rsyslog/pmlastmsg.so
%{_libdir}/rsyslog/pmsnare.so
%exclude %{rsyslog_docdir}/html
%exclude %{rsyslog_docdir}/mysql-createDB.sql
%exclude %{rsyslog_docdir}/pgsql-createDB.sql
%exclude %{_libdir}/rsyslog/imdiag.so
%files hiredis
%{_libdir}/rsyslog/omhiredis.so
%files kafka
%{_libdir}/rsyslog/omkafka.so
%files mmnormalize
%{_libdir}/rsyslog/mmnormalize.so
%files mmkubernetes
%{_libdir}/rsyslog/mmkubernetes.so
%files mongodb
%{_bindir}/logctl
%{_libdir}/rsyslog/ommongodb.so
%files omamqp1
%{_libdir}/rsyslog/omamqp1.so
%files pgsql
%doc %{rsyslog_docdir}/pgsql-createDB.sql
%{_libdir}/rsyslog/ompgsql.so
%files rabbitmq
%{_libdir}/rsyslog/omrabbitmq.so
%files relp
%{_libdir}/rsyslog/imrelp.so
%{_libdir}/rsyslog/omrelp.so
%files help
%{_mandir}/man5/rsyslog.conf.5.gz
%{_mandir}/man8/rsyslogd.8.gz
%{_mandir}/man1/rscryutil.1.gz
%changelog
* Tue Sep 10 2019 openEuler Buildteam <buildteam@openeuler.org> - version-release
- Package init

5
rsyslog.sysconfig Normal file
View File

@ -0,0 +1,5 @@
# Options for rsyslogd
# Syslogd options are deprecated since rsyslog v3.
# If you want to use them, switch to compatibility mode 2 by "-c 2"
# See rsyslogd(8) for more details
SYSLOGD_OPTIONS=""

1
timezone.cron Normal file
View File

@ -0,0 +1 @@
-*/15 * * * * root /bin/bash /usr/bin/os_check_timezone_for_rsyslog.sh 1>/dev/null 2>&1

View File

@ -0,0 +1,44 @@
From 1b1efc640a57a757d1c7c64fd60d2187e3940060 Mon Sep 17 00:00:00 2001
From: guoxiaoqi <guoxiaoqi2@huawei.com>
Date: Sat, 26 Jan 2019 15:27:29 +0000
Subject: [PATCH] rsyslog-8.24.0, set permission of syslogd dot pid to 0644
reason: rsyslog-8.24.0, set permission of syslogd dot pid to 0644
Signed-off-by: guoxiaoqi <guoxiaoqi2@huawei.com>
---
tools/rsyslogd.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/tools/rsyslogd.c b/tools/rsyslogd.c
index ccc114b..1f1328e 100644
--- a/tools/rsyslogd.c
+++ b/tools/rsyslogd.c
@@ -28,6 +28,7 @@
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
+#include <fcntl.h>
#include <errno.h>
#ifdef ENABLE_LIBLOGGING_STDLOG
# include <liblogging/stdlog.h>
@@ -265,6 +266,7 @@ static rsRetVal
writePidFile(void)
{
FILE *fp;
+ int fd;
DEFiRet;
const char *tmpPidFile;
@@ -278,7 +280,8 @@ writePidFile(void)
if(tmpPidFile == NULL)
tmpPidFile = PidFile;
DBGPRINTF("rsyslogd: writing pidfile '%s'.\n", tmpPidFile);
- if((fp = fopen((char*) tmpPidFile, "w")) == NULL) {
+ if ( ((fd = open(tmpPidFile, O_WRONLY|O_CREAT|O_CLOEXEC, 0644)) == -1)
+ || ((fp = fdopen(fd, "w")) == NULL) ) {
perror("rsyslogd: error writing pid file (creation stage)\n");
ABORT_FINALIZE(RS_RET_ERR);
}
--
2.19.1