移植 logrotate

下载需要用到的源码:

ftp://ftp.tw.freebsd.org/distfiles/popt-1.7.tar.gz

https://fedorahosted.org/releases/l/o/logrotate/logrotate-3.8.7.tar.gz


logrotate 编译是需要包含 popt.h 头文件,以及 popt 生成的库文件。先交叉编译 popt 。 并将头文件以及库文件安装到 交叉工具链下

tar xvf popt-1.7.tar.gz 
cd popt-1.7/
./configure --prefix=$PWD/tmp --host=i486-openwrt-linux --build=i686-linux
make
make install
cp include/popt.h /opt/openwrt-i386-glibc-gcc/include/
cp lib/libpopt.* /opt/openwrt-i386-glibc-gcc/lib/

logrotate 源码包并没有 configure 文件可以生成 Makefile 。所以只有直接修改源码包自带的 Makefile 。修改前备份原有的 Makefile

tar xvf logrotate-3.8.7.tar.gz
cd logrotate-3.8.7/
cp Makefile Makefile.bak

修改后的 Makefile 如下:

VERSION = $(shell awk '/Version:/ { print $$2 }' logrotate.spec)
OS_NAME = $(shell uname -s)
LFS = $(shell echo `getconf LFS_CFLAGS 2>/dev/null`)
CFLAGS = -Wall -D_GNU_SOURCE -D$(OS_NAME) -DVERSION=\"$(VERSION)\" $(RPM_OPT_FLAGS) $(LFS)
PROG = logrotate
MAN = logrotate.8
MAN5 = logrotate.conf.5
LOADLIBES = -lpopt
SVNURL= svn+ssh://svn.fedorahosted.org/svn/logrotate
SVNPUBURL = http://svn.fedorahosted.org/svn/logrotate
SVNTAG = r$(subst .,-,$(VERSION))

ifeq ($(WITH_SELINUX),yes)
CFLAGS += -DWITH_SELINUX
LOADLIBES += -lselinux
# See pretest
TEST_SELINUX=1
else
# See pretest
TEST_SELINUX=0
endif

ifeq ($(WITH_ACL),yes)
CFLAGS += -DWITH_ACL
LOADLIBES += -lacl
# See pretest
TEST_ACL=1
else
# See pretest
TEST_ACL=0
endif


# openwrt-i386-glibc GCC
    CFLAGS = -D_GNU_SOURCE -D$(OS_NAME) -DVERSION=\"$(VERSION)\" $(RPM_OPT_FLAGS) $(LFS)
    CC = i486-openwrt-linux-gcc
    CPP = $(CC) -E -M
    INSTALL = /usr/bin/install
    ifeq ($(CC),cc)
        CPP = i486-openwrt-linux-gcc -xM
    endif
    BASEDIR = tmp/usr/local



ifneq ($(POPT_DIR),)
    CFLAGS += -I$(POPT_DIR)
    LOADLIBES += -L$(POPT_DIR)
endif

ifneq ($(STATEFILE),)
    CFLAGS += -DSTATEFILE=\"$(STATEFILE)\"
endif

BINDIR = $(BASEDIR)/sbin
MANDIR ?= $(BASEDIR)/man

#--------------------------------------------------------------------------

OBJS = logrotate.o log.o config.o basenames.o
SOURCES = $(subst .o,.c,$(OBJS) $(LIBOBJS))

ifeq ($(RPM_OPT_FLAGS),)
CFLAGS += -g
LDFLAGS = -g
endif

LDFLAGS += $(EXTRA_LDFLAGS) $(EXTRA_LIBS)
CFLAGS  += $(EXTRA_CPPFLAGS) $(EXTRA_CFLAGS) 

ifeq (.depend,$(wildcard .depend))
TARGET=$(PROG)
else
TARGET=depend $(PROG)
endif

RCSVERSION = $(subst .,-,$(VERSION))

all: $(TARGET) pretest

$(PROG): $(OBJS)

clean:
	rm -f $(OBJS) $(PROG) core* .depend
	rm -f ./test/test.ACL ./test/test.SELINUX ./test/error.log

depend:
	$(CPP) $(CFLAGS) -M $(SOURCES) > .depend

# pretest create the file ./test/test.ACL with
# 0 or 1 according to the WITH_ACL=yes presence.
# The file will be used by ./test/test to decide
# if to do the ACL tests or not.
pretest:
	echo "$(TEST_ACL)" > ./test/test.ACL ;
	echo "$(TEST_SELINUX)" > ./test/test.SELINUX ;

.PHONY : test
test: $(TARGET)
	(cd test; ./test)

install:
	[ -d $(PREFIX)$(BINDIR) ] || mkdir -p $(PREFIX)$(BINDIR)
	[ -d $(PREFIX)$(MANDIR) ] || mkdir -p $(PREFIX)$(MANDIR)
	[ -d $(PREFIX)$(MANDIR)/man8 ] || mkdir -p $(PREFIX)$(MANDIR)/man8
	[ -d $(PREFIX)$(MANDIR)/man5 ] || mkdir -p $(PREFIX)$(MANDIR)/man5

	$(INSTALL) -m 755 $(PROG) $(PREFIX)$(BINDIR); \
	$(INSTALL) -m 644 $(MAN) $(PREFIX)$(MANDIR)/man`echo $(MAN) | sed "s/.*\.//"`/$(MAN); \
	$(INSTALL) -m 644 $(MAN5) $(PREFIX)$(MANDIR)/man`echo $(MAN5) | sed "s/.*\.//"`/$(MAN5); \

co:
	co RCS/*,v
	(cd examples; co RCS/*,v)

svntag:
	svn copy $(SVNURL)/trunk $(SVNURL)/tags/$(SVNTAG) -m "Release $(VERSION)"

create-archive:
	@rm -rf /tmp/logrotate-$(VERSION) /tmp/logrotate
	@cd /tmp; svn export $(SVNPUBURL)/tags/$(SVNTAG) logrotate-$(VERSION)
	@cd /tmp/logrotate-$(VERSION)
	@cd /tmp; tar czSpf logrotate-$(VERSION).tar.gz logrotate-$(VERSION)
	@rm -rf /tmp/logrotate-$(VERSION)
	@cp /tmp/logrotate-$(VERSION).tar.gz .
	@rm -f /tmp/logrotate-$(VERSION).tar.gz
	@echo " "
	@echo "The final archive is ./logrotate-$(VERSION).tar.gz."

archive: clean svntag create-archive

ifeq (.depend,$(wildcard .depend))
include .depend
endif




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
logrotate 是一个 Linux/Unix 系统上的日志切割工具,通常会作为一个计划任务在系统上定期运行。在大多数 Linux 发行版中,logrotate 的计划任务是通过 cron 服务来实现的。 cron 是一个 Linux 系统上的定时任务服务,可以在指定的时间周期性地运行指定的命令。logrotate 的计划任务通常会在每天的凌晨运行,以便在系统空闲时对日志文件进行切割。 在 Ubuntu 和 Debian 等 Debian 系统中,logrotate 的计划任务配置文件位于 /etc/cron.daily/logrotate,这个文件会在每天的凌晨被自动执行。在 Red Hat、CentOS 等系统中,logrotate 的计划任务配置文件位于 /etc/cron.daily/logrotate.cron,这个文件也会在每天的凌晨被自动执行。 logrotate 的计划任务会自动读取配置文件中指定的日志文件,并按照配置文件中指定的规则对日志文件进行切割和压缩。如果需要手动运行 logrotate,可以使用以下命令: ``` logrotate -f /etc/logrotate.conf ``` 其中,-f 参数用于强制运行 logrotate,即使没有达到轮换周期也会强制进行日志切割。/etc/logrotate.conf 是 logrotate 的配置文件路径,可以根据实际情况替换为其他配置文件路径。 除了通过计划任务定期运行 logrotate,也可以手动运行 logrotate 进行日志切割,例如: ``` logrotate /etc/logrotate.d/nginx ``` 这个命令会对 /etc/logrotate.d/nginx 配置文件中指定的日志文件进行切割和压缩。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值