[arch-projects] [PATCH 7/7] minilogd: kill

Dan McGee dpmcgee at gmail.com
Wed Oct 26 20:21:29 EDT 2011


On Wed, Oct 26, 2011 at 6:38 PM, Tom Gundersen <teg at jklm.no> wrote:
> This is not very useful, is not maintained, has open serious bugs. Better
> to admit that it does not work and just remove it. Someone could easily
> make an AUR package with a hook, if they want it and can make it work
> as expected.
>
> The only case where this would be useful is in case lvm monitoring is in use
> and dmeventd sends out a message to syslog before syslog-ng is started
> (there is a very small window). However, not even this works atm (as far
> as I know) due to bugs in minilogd.
>
> Signed-off-by: Tom Gundersen <teg at jklm.no>
If you also update .gitignore and remove the two relevant entries,
Signed-off-by: Dan McGee <dan at archlinux.org>

> ---
>  Makefile   |   10 +--
>  PKGBUILD   |    2 +-
>  minilogd.c |  202 ------------------------------------------------------------
>  rc.sysinit |    3 +-
>  4 files changed, 6 insertions(+), 211 deletions(-)
>  delete mode 100644 minilogd.c
>
> diff --git a/Makefile b/Makefile
> index c7eaa5f..7da89e3 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -15,21 +15,19 @@ DIRS := \
>        /usr/share/zsh/site-functions \
>        /usr/share/man/man8
>
> -all: minilogd doc
> -
> -minilogd: minilogd.o
> +all: doc
>
>  installdirs:
>        install -dm755 $(foreach DIR, $(DIRS), $(DESTDIR)$(DIR))
>
> -install: minilogd installdirs doc
> +install: installdirs doc
>        install -m644 -t $(DESTDIR)/etc inittab rc.conf
>        install -m755 -t $(DESTDIR)/etc rc.local rc.local.shutdown rc.multi rc.shutdown rc.single rc.sysinit
>        install -m644 -t $(DESTDIR)/etc/logrotate.d bootlog
>        install -m644 -t $(DESTDIR)/etc/rc.d functions
>        install -m755 -t $(DESTDIR)/etc/rc.d hwclock network netfs
>        install -m755 -t $(DESTDIR)/etc/profile.d locale.sh
> -       install -m755 -t $(DESTDIR)/usr/sbin minilogd rc.d
> +       install -m755 -t $(DESTDIR)/usr/sbin rc.d
>        install -m644 -t ${DESTDIR}/usr/share/man/man8 rc.d.8
>        install -m755 -t $(DESTDIR)/usr/lib/initscripts arch-tmpfiles arch-sysctl
>        install -m644 tmpfiles.conf $(DESTDIR)/usr/lib/tmpfiles.d/arch.conf
> @@ -42,7 +40,7 @@ rc.d.8: rc.d.8.txt
>  doc: rc.d.8
>
>  clean:
> -       rm -f minilogd minilogd.o rc.d.8
> +       rm -f rc.d.8
>
>  release:
>        git archive HEAD --prefix=initscripts-$(VER)/ | xz > initscripts-$(VER).tar.xz
> diff --git a/PKGBUILD b/PKGBUILD
> index 0c5b71d..deddbd5 100644
> --- a/PKGBUILD
> +++ b/PKGBUILD
> @@ -2,7 +2,7 @@ pkgname=initscripts-git
>  pkgver=$(date +%s)
>  pkgrel=$(git log -1 --pretty=format:%h)
>  pkgdesc="System initialization/bootup scripts"
> -arch=('i686' 'x86_64')
> +arch=('any')
>  url="http://www.archlinux.org"
>  license=('GPL')
>  groups=('base')
> diff --git a/minilogd.c b/minilogd.c
> deleted file mode 100644
> index c86ab23..0000000
> --- a/minilogd.c
> +++ /dev/null
> @@ -1,202 +0,0 @@
> -/* minilogd.c
> - *
> - * A pale imitation of syslogd. Most notably, doesn't write anything
> - * anywhere except possibly back to syslogd.
> - *
> - */
> -
> -#include <errno.h>
> -#include <fcntl.h>
> -#include <signal.h>
> -#include <stdio.h>
> -#include <stdlib.h>
> -#include <string.h>
> -#include <strings.h>
> -#include <stdarg.h>
> -#include <syslog.h>
> -#ifndef  __USE_BSD
> -#  define __USE_BSD
> -#endif
> -#include <unistd.h>
> -
> -#include <sys/poll.h>
> -#include <sys/socket.h>
> -#include <sys/stat.h>
> -#include <sys/un.h>
> -
> -#define MAX_BUF_LINES 10000
> -#define BUF_LINE_SIZE 8192
> -
> -static int we_own_log=0;
> -static char **buffer=NULL;
> -static int buflines=0;
> -
> -int debug;
> -
> -int recvsock;
> -
> -void alarm_handler(int x) {
> -       alarm(0);
> -       close(recvsock);
> -       recvsock = -1;
> -}
> -
> -void freeBuffer() {
> -       struct sockaddr_un addr;
> -       int sock;
> -       int x=0,conn;
> -
> -       memset(&addr, 0, sizeof(addr));
> -       addr.sun_family = AF_LOCAL;
> -       strncpy(addr.sun_path,_PATH_LOG,sizeof(addr.sun_path)-1);
> -       /* wait for klogd to hit syslog */
> -       sleep(2);
> -       sock = socket(AF_LOCAL, SOCK_STREAM,0);
> -       conn=connect(sock,(struct sockaddr *) &addr,(socklen_t)sizeof(addr));
> -       while (x<buflines) {
> -               if (!conn) {
> -                       /*printf("to syslog: %s\n", buffer[x]);*/
> -                       write(sock,buffer[x],strlen(buffer[x])+1);
> -               }
> -               free(buffer[x]);
> -               x++;
> -       }
> -       free(buffer);
> -}
> -
> -void cleanup(int exitcode) {
> -       /* If we own the log, unlink it before trying to free our buffer.
> -        * Otherwise, sending the buffer to /dev/log doesn't make much sense.... */
> -       if (we_own_log) {
> -               perror("wol");
> -               unlink(_PATH_LOG);
> -       }
> -       /* Don't try to free buffer if we were called from a signal handler */
> -       if (exitcode<=0) {
> -               if (buffer)
> -                       freeBuffer();
> -               exit(exitcode);
> -       } else
> -               exit(exitcode+128);
> -}
> -
> -void runDaemon(int sock) {
> -       struct sockaddr_un addr;
> -       int x,done=0;
> -       ssize_t len;
> -       socklen_t addrlen = (socklen_t)sizeof(struct sockaddr_un);
> -       char *message = NULL;
> -       struct stat s1,s2;
> -       struct pollfd pfds;
> -
> -       daemon(0,-1);
> -       /* try not to leave stale sockets lying around */
> -       /* Hopefully, we won't actually get any of these */
> -       signal(SIGHUP,cleanup);
> -       signal(SIGINT,cleanup);
> -       signal(SIGQUIT,cleanup);
> -       signal(SIGILL,cleanup);
> -       signal(SIGABRT,cleanup);
> -       signal(SIGFPE,cleanup);
> -       signal(SIGSEGV,cleanup);
> -       signal(SIGPIPE,cleanup);
> -       signal(SIGBUS,cleanup);
> -       signal(SIGTERM,cleanup);
> -       done = 0;
> -       /* Get stat info on /dev/log so we can later check to make sure we
> -        * still own it... */
> -       if (stat(_PATH_LOG,&s1) != 0)
> -               memset(&s1, 0, sizeof(struct stat));
> -       while (!done) {
> -               pfds.fd = sock;
> -               pfds.events = POLLIN|POLLPRI;
> -               pfds.revents = 0;
> -               if ( ( (x=poll(&pfds,1,500))==-1) && errno !=EINTR) {
> -                       perror("poll");
> -                       cleanup(-1);
> -               }
> -               if ( (x>0) && (pfds.revents & (POLLIN | POLLPRI))) {
> -                       if (message == NULL) {
> -                               message = calloc(BUF_LINE_SIZE,sizeof(char));
> -                       }
> -                       recvsock = accept(sock,(struct sockaddr *) &addr, &addrlen);
> -                       alarm(2);
> -                       signal(SIGALRM, alarm_handler);
> -                       len = read(recvsock,message,BUF_LINE_SIZE);
> -                       alarm(0);
> -                       close(recvsock);
> -                       if (len>0) {
> -                               /*printf("line recv'd: %s\n", message);*/
> -                               if (buflines < MAX_BUF_LINES) {
> -                                       if (buffer)
> -                                               buffer = realloc(buffer,(buflines+1)*sizeof(char *));
> -                                       else
> -                                               buffer = malloc(sizeof(char *));
> -                                       message[strlen(message)]='\n';
> -                                       buffer[buflines]=message;
> -                                       message = NULL;
> -                                       buflines++;
> -                               }
> -                       }
> -                       else {
> -                               recvsock=-1;
> -                       }
> -               }
> -               if ( (x>0) && ( pfds.revents & (POLLHUP | POLLNVAL)) )
> -                       done = 1;
> -               /* Check to see if syslogd's yanked our socket out from under us */
> -               if ( (stat(_PATH_LOG,&s2)!=0) ||
> -                               (s1.st_ino != s2.st_ino ) || (s1.st_ctime != s2.st_ctime) ||
> -                               (s1.st_mtime != s2.st_mtime) ) { /*|| (s1.st_atime != s2.st_atime) ) {*/
> -                       done = 1;
> -                       we_own_log = 0;
> -                       /*printf("someone stole our %s\n", _PATH_LOG);
> -                       printf("st_ino:   %d %d\n", s1.st_ino, s2.st_ino);
> -                       printf("st_ctime: %d %d\n", s1.st_ctime, s2.st_ctime);
> -                       printf("st_atime: %d %d\n", s1.st_atime, s2.st_atime);
> -                       printf("st_mtime: %d %d\n", s1.st_mtime, s2.st_mtime);*/
> -               }
> -       }
> -       free(message);
> -       cleanup(0);
> -}
> -
> -int main(int argc, char **argv) {
> -       struct sockaddr_un addr;
> -       int sock;
> -       int pid;
> -
> -       /* option processing made simple... */
> -       if (argc>1) debug=1;
> -       /* just in case */
> -       sock = open("/dev/null",O_RDWR);
> -       dup2(sock,0);
> -       dup2(sock,1);
> -       dup2(sock,2);
> -
> -       memset(&addr, 0, sizeof(addr));
> -       addr.sun_family = AF_LOCAL;
> -       strncpy(addr.sun_path,_PATH_LOG,sizeof(addr.sun_path)-1);
> -       sock = socket(AF_LOCAL, SOCK_STREAM,0);
> -       unlink(_PATH_LOG);
> -       /* Bind socket before forking, so we know if the server started */
> -       if (!bind(sock,(struct sockaddr *) &addr, (socklen_t)sizeof(addr))) {
> -               we_own_log = 1;
> -               listen(sock,5);
> -               if ((pid=fork())==-1) {
> -                       perror("fork");
> -                       exit(3);
> -               }
> -               if (pid) {
> -                       exit(0);
> -               } else {
> -                       /*printf("starting daemon...\n");*/
> -                       runDaemon(sock);
> -                       /* shouldn't get back here... */
> -                       exit(4);
> -               }
> -       } else {
> -               exit(5);
> -       }
> -}
> -/* vim: set ts=2 noet: */
> diff --git a/rc.sysinit b/rc.sysinit
> index f82368a..d802f3f 100755
> --- a/rc.sysinit
> +++ b/rc.sysinit
> @@ -31,8 +31,7 @@ findmnt / --options ro &>/dev/null ||
>
>  run_hook sysinit_start
>
> -# start up our mini logger until syslog takes over
> -minilogd
> +# log all console messages
>  bootlogd -p /run/bootlogd.pid
>
>  if [[ ! -a /usr/lib ]] ; then
> --
> 1.7.7.1


More information about the arch-projects mailing list