海思3536平台上rsyslog交叉编译、使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

系统安全要求,需要收集/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文件,设置编译器),编完自动整理、打包,目录结构如图,
在这里插入图片描述
这是下载地址~~

总结

有问题大家一起交流~

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值