Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to setup syslog in yocto?

I like to configure syslog. It seems that are more than one way to set up syslog. I am asking for the common way/steps to do that.

I have several use cases. To simplify I like to ask how to configure syslog to write an infinity long log file in /var/log/.

Following steps:

1.) configure what messages

1.1) create own "syslog.conf" (define /var/log/myLog)

1.2) append it to "recipes-core/busybox"

2.) configure how to log

??

I found two possible places to do that:

@meta-poky -> "meta-poky/recipes-core/busybox/busybox/poky-tiny/defconfig"

#
# System Logging Utilities
#
CONFIG_SYSLOGD=y
CONFIG_FEATURE_ROTATE_LOGFILE=y
CONFIG_FEATURE_REMOTE_LOG=y
CONFIG_FEATURE_SYSLOGD_DUP=y
CONFIG_FEATURE_SYSLOGD_CFG=y
CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=256
CONFIG_FEATURE_IPC_SYSLOG=y
CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16
CONFIG_LOGREAD=y
CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y
CONFIG_KLOGD=y
CONFIG_FEATURE_KLOGD_KLOGCTL=y
CONFIG_LOGGER=y

add/change:

"CONFIG_FEATURE_ROTATE_LOGFILE=n" by adding that line to meta-mylayer/conf/layer.conf"

etc.

???

@ "/etc/syslog-startup.conf"

# This configuration file is used by the busybox syslog init script,
# /etc/init.d/syslog[.busybox] to set syslog configuration at start time.

DESTINATION=file        # log destinations (buffer file remote)
LOGFILE=/var/log/messages   # where to log (file)
REMOTE=loghost:514      # where to log (syslog remote)
REDUCE=no           # reduce-size logging
DROPDUPLICATES=no       # whether to drop duplicate log entries
#ROTATESIZE=0           # rotate log if grown beyond X [kByte]
#ROTATEGENS=3           # keep X generations of rotated logs
BUFFERSIZE=64           # size of circular buffer [kByte]
FOREGROUND=no           # run in foreground (don't use!)
#LOGLEVEL=5         # local log level (between 1 and 8)

In the systemV init script "/etc/init.d/syslog.bussybox" the file "/etc/syslog-startup.con" is read and used for configuration.

System behaviour:

When running my system, the log wraps when the logfile reaches 200kBytes. One logfile + one log-rotate file is generated.

Any ideas how to archive that syslog writes an infinite long log-file?

I am working on the Yocto krogoth branch + meta-atmel / meta_openembedded (@ krogoth too).

like image 966
Stefan Jaritz Avatar asked Jan 26 '17 06:01

Stefan Jaritz


2 Answers

By checking the sources of syslog and busybox I found a possible solution. This solution shows how to configure syslog to log in two logs with max 10MByte:

1.) get valid syslog build config

1.1) download busybox -> git/busybox

1.2) build busybox via bitbake -> bitbake busybox

1.3) copy defconfig file to downloaded busybox -> cp /defconfig git/busybox/

1.4) make menueconfig

1.5) goto "System Logging Utilities"

1.6) deselect klogd because it can colide with printk

1.7) save to "defconfig"

#
# System Logging Utilities
#
# CONFIG_KLOGD is not set
# CONFIG_FEATURE_KLOGD_KLOGCTL is not set
CONFIG_LOGGER=y
CONFIG_LOGREAD=y
CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y
CONFIG_SYSLOGD=y
CONFIG_FEATURE_ROTATE_LOGFILE=y
CONFIG_FEATURE_REMOTE_LOG=y
CONFIG_FEATURE_SYSLOGD_DUP=y
CONFIG_FEATURE_SYSLOGD_CFG=y
CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=256
CONFIG_FEATURE_IPC_SYSLOG=y
CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=64
CONFIG_FEATURE_KMSG_SYSLOG=y

2.) setup your log config

Create "syslog.conf" and enter the rules: This is an example:

#
#  /etc/syslog.conf     Configuration file for busybox's syslogd utility
#

kern.notice /var/log/messages


#
# my software messages
#
user.err    /var/log/mySWError
user.*      /var/log/mySWFull
local0.*    /var/log/mySWFull
local0.err  /var/log/mySWError
#
#this prevents from logging to default log file (-O FILE or /var/log/messages)
#
*.*                                     /dev/null

3.) modify configuration for the busybox syslog deamon

This example logs to files which are limited to 10 MBytes. If "ROTATESIZE" is not set syslog set the log filesize automatic to 200 kBytes. The content of "syslog-startup.conf" looks like:

# This configuration file is used by the busybox syslog init script,
# /etc/init.d/syslog[.busybox] to set syslog configuration at start time.

DESTINATION=file        # log destinations (buffer file remote)
#LOGFILE=/var/log/messages  # where to log (file)
REMOTE=loghost:514      # where to log (syslog remote)
REDUCE=no           # reduce-size logging
DROPDUPLICATES=no       # whether to drop duplicate log entries
ROTATESIZE=10000        # rotate log if grown beyond X [kByte]
#ROTATEGENS=3           # keep X generations of rotated logs
BUFFERSIZE=64           # size of circular buffer [kByte]
FOREGROUND=no           # run in foreground (don't use!)
#LOGLEVEL=5         # local log level (between 1 and 8)

4.) get the configuration into yocto build

4.1) create following directory structure in your own layer(meta-custom):

meta-custom/recipes-core/
meta-custom/recipes-core/busybox/
meta-custom/recipes-core/busybox/busybox

4.2) copy into "meta-custom/recipes-core/busybox/busybox":

defconfig
syslog.conf
syslog-startup.conf

4.3) create in "meta-custom/recipes-core/busybox/" "busybox_1.24.1.bbappend". If you using an older/newer version of busybox you need to change the "1.24.1" number to yours. You can find your version in "/poky/meta/recipes-core/busybox/"

Add this two lines to this file:

FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}/poky-tiny:"

5.) build your custom defined syslog

bitbake busybox

and transfer it into the rootfs of the image

bitbake core-image-minimal

Now it should work!

like image 170
Stefan Jaritz Avatar answered Nov 18 '22 07:11

Stefan Jaritz


Adding to the Stefan Jaritz comment, you can skip the download step by just issuing

bitbake busybox -c devshell

Then running make menuconfig and getting the new config file from it. Note that this will use Yocto's defconfig by default, so you don't need to do worry about "what's this default config".

like image 26
cocus Avatar answered Nov 18 '22 08:11

cocus