提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
系统安全要求,需要收集/var/log/下的系统日志,例如,btmp、messages、tallylog、faillog、lastlog、secure、wtmp等等(文件的详细作用可参考这里),运行rsyslog进程后,将会把对应的日志写入到这些文件中,方便查问题或者查看用户登录信息等。
一、rsyslog 是什么?
rsyslog 是一个快速处理收集系统日志的程序,提供了高性能、安全功能和模块化设计。rsyslog 是syslog 的升级版,它将多种来源输入输出转换结果到目的地。 rsyslog是一个开源工具,被广泛用于Linux系统以通过TCP/UDP协议转发或接收日志消息。rsyslog守护进程可以被配置成两种环境,一种是配置成日志收集服务器,rsyslog进程可以从网络中收集其它主机上的日志数据,这些主机会将日志配置为发送到另外的远程服务器。二、工具交叉编译及实现
1.工具、模块交叉编译
我的目录结构
1.编译libestr
libestr-0.1.11.tar.gz版本源码路径
交叉编译:
cd src
tar -zxf libestr-0.1.11.tar.gz
cd libestr-0.1.11
./configure --host=arm-hisiv400-linux --prefix=$(pwd)/../../install
make clean;make -j;make install
2.编译libfastjson
libfastjson-0.99.9.tar.gz版本源码路径
交叉编译:
cd src
tar -zxf libfastjson-0.99.9.tar.gz
cd libfastjson-0.99.9
./configure --host=arm-hisiv400-linux --prefix=$(pwd)/../../install
make clean;make -j;make install
3.编译libgpg-error
libgpg-error-1.39.tar.gz版本源码路径
交叉编译:
cd src
tar -zxf libgpg-error-1.39.tar.gz
cd libgpg-error-1.39
./configure --host=arm-unknown-linux-gnueabi CC=arm-hisiv400-linux-gcc --prefix=$(pwd)/../../install
make clean;make -j;make install
4.编译zlib
zlib-1.2.11.tar.gz版本源码路径
交叉编译:
cd src
tar -zxf zlib-1.2.11.tar.gz
cd zlib-1.2.11
export CC=arm-hisiv400-linux-gcc
export LD=arm-hisiv400-linux-ld
export AR=arm-hisiv400-linux-ar
./configure --prefix=$(pwd)/../../output
make clean;make -j;make install
unset CC
unset LD
unset AR
5.编译libgcrypt
libgcrypt-1.9.2.tar.gz版本源码路径
交叉编译:
cd src
tar -zxf libgcrypt-1.9.2.tar.gz
cd libgcrypt-1.9.2
./configure --host=arm-hisiv400-linux CC=arm-hisiv400-linux-gcc --with-libgpg-error-prefix=$(pwd)/../../install/ --prefix=$(pwd)/../../install
make clean;make -j;make install
6.编译openssl
openssl-1.1.1g.tar.gz版本源码路径
交叉编译:
cd src
tar -xf openssl-1.1.1g.tar.gz
cd openssl-1.1.1g
./Configure no-shared no-async linux-generic32 no-asm --cross-compile-prefix=arm-hisiv400-linux- --prefix=$(pwd)/../../install
make clean;make -j;make install
7.编译curl
curl-7.75.0.tar.gz版本源码路径
交叉编译:
cd src
tar -xf curl-7.75.0.tar.xz
cd curl-7.75.0
./configure --host=arm-hisiv400-linux --prefix=$(pwd)/../../install
make clean;make -j;make install
8.编译libuuid
libuuid-1.0.3.tar.gz版本源码路径
交叉编译:
cd src
tar -xf libuuid-1.0.3.tar.gz
cd libuuid-1.0.3
./configure --host=arm-hisiv400-linux --prefix=$(pwd)/../../install
make clean;make -j;make install
9.编译rsyslog
rsyslog-8.37.0.tar.gz版本源码网址没找到…之前自己下载的
交叉编译:
cd src
tar -zxf rsyslog-8.37.0.tar.gz
cd rsyslog-8.37.0
./configure --host=arm-hisiv400-linux --prefix=$(pwd)/../../install --sbindir=$(pwd)/../../install/sbin --libdir=/lib --bindir=$(pwd)/../../install/bin PKG_CONFIG_PATH=$(pwd)/../../install/lib/pkgconfig LDFLAGS=-L"$(pwd)/../../install/lib" CFLAGS=-I"$(pwd)/../../install/include" LIBGCRYPT_CONFIG=$(pwd)/../../install/bin/libgcrypt-config
make clean;make -j;
2.编译报错整理
编译rsyslogd时,报
/home/rsyslog/install/v500a7/lib/libfastjson.so: undefined reference to `__isnan'
/home/rsyslog/install/v500a7/lib/libfastjson.so: undefined reference to `__isinf'
/home/rsyslog/install/v500a7/lib/libfastjson.so: undefined reference to `modf'
解决:
undefined reference to `__isnan'是缺少数学函数库你没有链接。再加上 -lm 的选项
在rsyslog-8.37.0/tools/Makefile文件,LIBFASTJSON_LIBS = .....-lfastjson后面,加多个 -lm
3.编译后文件整理
查看命令所依赖的库,可用命令
lance@192:~rsyslog/src/rsyslog-8.37.0/tools$ arm-hisiv400-linux-readelf -a rsyslogd | grep NEEDED
0x00000001 (NEEDED) Shared library: [libz.so.1]
0x00000001 (NEEDED) Shared library: [libpthread.so.0]
0x00000001 (NEEDED) Shared library: [libdl.so.2]
0x00000001 (NEEDED) Shared library: [librt.so.1]
0x00000001 (NEEDED) Shared library: [libestr.so.0]
0x00000001 (NEEDED) Shared library: [libfastjson.so.4]
0x00000001 (NEEDED) Shared library: [libuuid.so.1]
0x00000001 (NEEDED) Shared library: [libc.so.6]
整理所需的文件
因为install目录下太多多余的文件,只整理所需要的文件,创建目录
mkdir -p install/output/bin
mkdir -p install/output/lib/rsyslog
mkdir -p install/output/etc
bin文件
cp src/rsyslog-8.37.0/tools/rsyslogd install/output/bin
配置文件
cp src/rsyslog-8.37.0/platform/redhat/rsyslog.conf install/output/etc
整理库
cp src/rsyslog-8.37.0/plugins/imklog/.libs/imklog.so install/output/lib/rsyslog
cp src/rsyslog-8.37.0/plugins/imuxsock/.libs/imuxsock.so install/output/lib/rsyslog
cp src/rsyslog-8.37.0/runtime/.libs/lmnet.so install/output/lib/rsyslog
cp install/lib/libestr.so* install/output/lib/ -raf
cp install/lib/libfastjson.so* install/output/lib/ -raf
cp install/lib/libuuid.so* install/output/lib/ -raf
cp install/lib/libz.so* install/output/lib/ -raf
整理后的目录对应板子bin、etc、lib目录
板子上运行命令,无提示其它报错,说明运行正常
~ # rsyslogd -n &
rsyslogd: getaddrinfo failed obtaining local hostname - using '(none)' instead; error: System error [v8.37.0]
(这个报错没影响命令运行,未查到原因,后续有更新再改)
修改启动脚本,设置开机启动日志保存,例如,海思的Hi3536
~ # vi /etc/init.d/S36config
(插入以下语句,这是挂载tmpfs,掉电消失,size大小可以根据自身需要修改)
mount -t tmpfs -o nodev,noexec,nosuid -o size=10M tmpfs /var/log
touch /var/log/wtmp
touch /var/log/btmp
touch /var/log/secure
touch /var/log/lastlog
touch /var/log/faillog
touch /var/log/messages
rsyslogd -n &
(重启后查看文件)
~ # ls -lh /var/log/
total 24
-rw-r--r-- 1 root root 0 Jan 1 00:00 btmp
-rw-r--r-- 1 root root 0 Jan 1 00:00 faillog
-rw-r--r-- 1 root root 0 Jan 1 00:00 lastlog
-rw-r--r-- 1 root root 18.5K Jan 1 00:19 messages
-rw-r--r-- 1 root root 0 Jan 1 00:00 secure
-rw-r--r-- 1 root root 384 Jan 1 00:00 wtmp
~ # last /var/log/wtmp
root ttyS000 Thu Jan 1 00:00 still logged in
wtmp begins Thu Jan 1 00:00:39 1970
~ #
~ # cat /var/log/messages
Jan 1 00:00:08 (none) kernel: uart:2: ttyAMA2 at MMIO 0x120a0000 (irq = 40) is a PL011 rev2
Jan 1 00:00:08 (none) rsyslogd: getaddrinfo failed obtaining local hostname - using '(none)' instead; error: System error [v8.37.0]
Jan 1 00:00:08 (none) kernel: uart:3: ttyAMA3 at MMIO 0x120b0000 (irq = 41) is a PL011 rev2
Jan 1 00:00:08 (none) kernel: bio: create slab <bio-0> at 0
Jan 1 00:00:08 (none) kernel: SCSI subsystem initialized
.....(内核启动打印)
4、整个编译、打包过程整理
以上的编译过程有点累,所以我整理成Makefile文件,直接make mk=v400 (具体可修改最顶层的makefile文件,设置编译器),编完自动整理、打包,目录结构如图,
这是下载地址~~
总结
有问题大家一起交流~