From a71e42c461da1672582143a829654049399616e7 Mon Sep 17 00:00:00 2001 From: Judd Vinet Date: Sun, 21 Dec 2003 00:48:23 +0000 Subject: upgpkg: initscripts 0.6 --- inittab | 14 ++--- minilogd.c | 184 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ rc.conf | 2 +- rc.shutdown | 14 +++-- rc.single | 21 ++++--- rc.sysinit | 75 +++++++++++++++---------- 6 files changed, 257 insertions(+), 53 deletions(-) create mode 100644 minilogd.c diff --git a/inittab b/inittab index 3844d74..234ee38 100644 --- a/inittab +++ b/inittab @@ -3,13 +3,13 @@ # # Runlevels: -# 0 Halt -# 1(S) Single-user -# 2 Not used -# 3 Multi-user -# 4 Not used -# 5 X11 -# 6 Reboot +# 0 Halt +# 1(S) Single-user +# 2 Not used +# 3 Multi-user +# 4 Not used +# 5 X11 +# 6 Reboot id:3:initdefault: diff --git a/minilogd.c b/minilogd.c new file mode 100644 index 0000000..76e4a9c --- /dev/null +++ b/minilogd.c @@ -0,0 +1,184 @@ + +/* minilogd.c + * + * A pale imitation of syslogd. Most notably, doesn't write anything + * anywhere except possibly back to syslogd. + * + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +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; + + bzero(&addr,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_DGRAM,0); + conn=connect(sock,(struct sockaddr *) &addr,sizeof(addr)); + while (x0) && pfds.revents & (POLLIN | POLLPRI)) { + message = calloc(8192,sizeof(char)); + recvsock = accept(sock,(struct sockaddr *) &addr, &addrlen); + alarm(2); + signal(SIGALRM, alarm_handler); + len = read(recvsock,message,8192); + alarm(0); + close(recvsock); + if (len>0) { + /*printf("line recv'd: %s\n", message);*/ + if (buflines < 200000) { + if (buffer) + buffer = realloc(buffer,(buflines+1)*sizeof(char *)); + else + buffer = malloc(sizeof(char *)); + message[strlen(message)]='\n'; + buffer[buflines]=message; + 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);*/ + } + } + 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); + + bzero(&addr, 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, 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); + } +} diff --git a/rc.conf b/rc.conf index 6b37163..d1c9501 100644 --- a/rc.conf +++ b/rc.conf @@ -51,6 +51,6 @@ ROUTES=(!gateway) # Daemons to start at boot-up (in this order) # (prefix a daemon with a ! to disable it) # -DAEMONS=(!pcmcia network crond inetd) +DAEMONS=(syslogd klogd !pcmcia network crond) # End of file diff --git a/rc.shutdown b/rc.shutdown index 78c85bb..4f6b6d6 100755 --- a/rc.shutdown +++ b/rc.shutdown @@ -42,6 +42,7 @@ stat_done stat_busy "Sending SIGKILL To Processes" /sbin/killall5 -9 &> /dev/null +/usr/bin/sleep 1 stat_done stat_busy "Saving Random Seed" @@ -70,21 +71,24 @@ stat_done stat_busy "Remounting Root Filesystem Read-only" /bin/mount -n -o remount,ro / stat_done -echo "" # Power off or reboot if [ "$RUNLEVEL" = "0" ]; then if [ "$USECOLOR" = "YES" -o "$USECOLOR" = "yes" ]; then - echo -e ">>> \033[1;33mPOWER OFF\033[1;0m" + echo -e "\033[1;32m|\033[1;0m" + echo -e "\033[1;31m| \033[1;33mPOWER OFF\033[1;0m" else - echo ">>> POWER OFF" + echo "|" + echo "| POWER OFF" fi /sbin/poweroff -d -f -i else if [ "$USECOLOR" = "YES" -o "$USECOLOR" = "yes" ]; then - echo -e ">>> \033[1;33mREBOOTING\033[1;0m" + echo -e "\033[1;32m|\033[1;0m" + echo -e "\033[1;31m| \033[1;33mREBOOTING\033[1;0m" else - echo ">>> REBOOTING" + echo "|" + echo "| REBOOTING" fi /sbin/reboot -d -f -i fi diff --git a/rc.single b/rc.single index f96c0fe..3b0e610 100755 --- a/rc.single +++ b/rc.single @@ -30,21 +30,24 @@ if [ "$PREVLEVEL" != "N" ]; then stat_done stat_busy "Sending SIGKILL To Processes" - /sbin/killall5 -9 &> /dev/null + /sbin/killall5 -9 + /usr/bin/sleep 1 stat_done - stat_busy "Starting DevFS Daemon" - /sbin/devfsd /dev - stat_done + status "Starting DevFS Daemon" /sbin/devfsd /dev - stat_busy "Starting Log Daemons" - /usr/sbin/syslogd -m 0 - /usr/sbin/klogd -c 4 - stat_done + [ -x /etc/rc.d/syslogd ] && /etc/rc.d/syslogd start + [ -x /etc/rc.d/klogd ] && /etc/rc.d/klogd start fi if [ "$RUNLEVEL" = "1" ]; then - echo "Entering single-user mode..." + if [ "$USECOLOR" = "YES" -o "$USECOLOR" = "yes" ]; then + echo -e "\033[1;32m|\033[1;0m" + echo -e "\033[1;31m| \033[1;33mEntering single-user mode...\033[1;0m" + else + echo "|" + echo "| Entering single-user mode..." + fi exec /sbin/init -t1 S fi diff --git a/rc.sysinit b/rc.sysinit index e9d6e9d..747c321 100755 --- a/rc.sysinit +++ b/rc.sysinit @@ -7,22 +7,30 @@ . /etc/rc.d/functions if [ "$USECOLOR" = "YES" -o "$USECOLOR" = "yes" ]; then - echo -e "\n\033[1;32mArch Linux v0.5 \033[1;37m(\033[1;33mNova\033[1;37m)" + echo -e "\n\033[1;32mArch Linux v0.6 \033[1;37m(\033[1;33mWidget\033[1;37m)" echo -e "\033[1;32m|\033[1;0m" echo -e "\033[1;32m|\033[1;37m http://www.archlinux.org\033[1;0m" echo -e "\033[1;32m|\033[1;0m Copyright 2002-2003 Judd Vinet" echo -e "\033[1;32m|\033[1;0m Distributed under the GNU General Public License (GPL)" echo -e "\033[1;32m|\033[1;0m" else - echo -e "\nArch Linux v0.5 (Nova)" + echo -e "\nArch Linux v0.6 (Widget)" echo "|" echo "| http://www.archlinux.org" echo "| Copyright 2002-2003 Judd Vinet" - echo "| Distributed under the GNU Public License (GPL)" + echo "| Distributed under the GNU General Public License (GPL)" echo "|" fi -status "Starting DevFS Daemon" /sbin/devfsd /dev +# start up our mini logger until syslog takes over +/sbin/minilogd + +# anything more serious than KERN_WARNING goes to the console +/bin/dmesg -n 3 + +if [ -e /dev/.devfsd -a -x /sbin/devfsd ]; then + status "Starting DevFS Daemon" /sbin/devfsd /dev +fi if [ -f /etc/lvmtab ]; then # /proc is temporarily mounted to check for LVM support - it is @@ -40,36 +48,41 @@ status "Activating Swap" /sbin/swapon -a status "Mounting Root Read-only" /bin/mount -n -o remount,ro / -stat_busy "Checking Filesystems" -/sbin/fsck -A -T -C -a -if [ $? -gt 1 ]; then - stat_fail - echo - echo "***************** FILESYSTEM CHECK FAILED ****************" - echo "* *" - echo "* Please repair manually and reboot. Note that the root *" - echo "* file system is currently mounted read-only. To remount *" - echo "* it read-write type: mount -n -o remount,rw / *" - echo "* When you exit the maintainance shell the system will *" - echo "* reboot automatically. *" - echo "* *" - echo "************************************************************" - echo - /sbin/sulogin -p - echo "Automatic reboot in progress..." - /bin/umount -a - /bin/mount -n -o remount,ro / - /sbin/reboot -f - exit 0 +if [ -x /sbin/fsck ]; then + stat_busy "Checking Filesystems" + /sbin/fsck -A -T -C -a + if [ $? -gt 1 ]; then + stat_fail + echo + echo "***************** FILESYSTEM CHECK FAILED ****************" + echo "* *" + echo "* Please repair manually and reboot. Note that the root *" + echo "* file system is currently mounted read-only. To remount *" + echo "* it read-write type: mount -n -o remount,rw / *" + echo "* When you exit the maintenance shell the system will *" + echo "* reboot automatically. *" + echo "* *" + echo "************************************************************" + echo + /sbin/sulogin -p + echo "Automatic reboot in progress..." + /bin/umount -a + /bin/mount -n -o remount,ro / + /sbin/reboot -f + exit 0 + fi + stat_done fi -stat_done stat_busy "Mounting Local Filesystems" /bin/mount -n -o remount,rw / /bin/rm -f /etc/mtab* +/bin/mount /proc /bin/mount -a -t nonfs stat_done +/usr/bin/logger "LOGGER TEST!" + stat_busy "Configuring System Clock" if [ "$HARDWARECLOCK" = "UTC" ]; then /sbin/hwclock --utc --hctosys @@ -77,7 +90,7 @@ else /sbin/hwclock --localtime --hctosys fi if [ ! -f /var/lib/hwclock/adjtime ]; then - echo "0.0 0 0.0" > /var/lib/hwclock/adjtime + echo "0.0 0 0.0" > /var/lib/hwclock/adjtime fi if [ "$TIMEZONE" != "" ]; then /bin/ln -sf /usr/share/zoneinfo/$TIMEZONE /etc/localtime @@ -100,9 +113,7 @@ if [ "$HOSTNAME" != "" ]; then status "Setting Hostname: $HOSTNAME" /bin/hostname $HOSTNAME fi -status "Starting System Logger" /usr/sbin/syslogd -m 0 - -status "Starting Kernel Logger" /usr/sbin/klogd -c 4 +# syslog kernel_version=`uname -r` if [ -e "/lib/modules/$kernel_version/modules.dep" ]; then @@ -115,7 +126,9 @@ else fi if [ -f /var/run/random-seed ]; then - status "Initializing Random Seed" /bin/cat /var/run/random-seed > /dev/urandom + stat_busy "Initializing Random Seed" + /bin/cat /var/run/random-seed >/dev/urandom + stat_done fi if [ "$KEYMAP" != "" ]; then -- cgit v1.2.3