aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Gundersen <teg@jklm.no>2011-10-26 23:11:20 +0200
committerTom Gundersen <teg@jklm.no>2011-10-29 17:28:45 +0200
commit00070eca730dec9c6d587cc1639f6abaca83fa34 (patch)
treed92216f8eac2a780be29bb8d06cc99a59528427c
parentfbff8c64e2be9cbb24bd7f824552842d0bd6442d (diff)
downloadinitscripts-00070eca730dec9c6d587cc1639f6abaca83fa34.tar.xz
minilogd: kill
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@jklm.no> Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--.gitignore2
-rw-r--r--Makefile10
-rw-r--r--PKGBUILD2
-rw-r--r--minilogd.c202
-rwxr-xr-xrc.sysinit3
5 files changed, 6 insertions, 213 deletions
diff --git a/.gitignore b/.gitignore
index d07d3f9..5200eb7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,3 @@
-minilogd
-minilogd.o
tags
*.tar.xz*
pkg/
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 415b482..1c74bd9 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