Compare commits

..
48 Commits
Author SHA1 Message Date
Claudio Matsuoka 7360ef1f08 Fix distribution filelist
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-08-21 15:31:38 -03:00
Claudio Matsuoka 529224153f Update docs for 0.5
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-08-21 15:30:34 -03:00
Claudio Matsuoka 0f8393ef0e Start dbus directly instead of calling initscript
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-08-20 13:13:10 -03:00
Claudio Matsuoka a1d7e48225 Improve profiling messages
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-08-19 15:11:47 -03:00
Claudio Matsuoka 938773765c Add some profiling aids
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-08-19 13:58:19 -03:00
Claudio Matsuoka 367049a11c Set time value before using it!
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-08-19 13:41:16 -03:00
Claudio Matsuoka efcdc141c8 Use relative timestamp
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-08-19 13:25:10 -03:00
Claudio Matsuoka dfed328d47 Timestamp fixes
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-08-19 10:27:42 -03:00
Claudio Matsuoka 804aa3c747 Add timestamps to debug messages to help profiling
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-08-19 10:25:42 -03:00
Claudio Matsuoka 3ce7638dab Update changelog
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-08-15 19:08:39 -03:00
Claudio Matsuoka b0746f5220 Add bloat for gnome-volume-manager: start dbus and consolekit
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-08-15 18:59:49 -03:00
Claudio Matsuoka c324eff01a New README with better SNR
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-08-13 15:56:59 -03:00
Claudio Matsuoka a6f534621c Fix filesystem initialization order
Fsck filesystems before mounting root as read-write. Mountdev and
device creation can stay there because they're tmpfs.

Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-08-13 13:14:33 -03:00
Claudio Matsuoka b0e3dbc47f Add .gitignore
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-08-12 18:01:44 -03:00
Claudio Matsuoka 220b2c9ae3 Create basic device nodes when mounting /dev as tmpfs
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-08-12 18:00:37 -03:00
Claudio Matsuoka 173853ca17 finit.conf commands accepts multiple parameters
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-08-11 19:02:55 -03:00
Claudio Matsuoka 9f83bbe788 Allow creation of device nodes from configuration file
Using command "mknod", same syntax as mknod(1)

Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-08-11 18:03:52 -03:00
Claudio Matsuoka a187b88dd9 Final changes to boot Guillemot
- call shutdown() directly instead of raising signal
- use blino's sanity check for /dev/null

Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-07-04 17:24:25 -03:00
Claudio Matsuoka 134d9f3463 Mount /dev as tmpfs before creating directories inside
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-06-27 08:56:47 -03:00
Claudio Matsuoka 25e9d84673 Add experimental mountdev option
If "mountdev" is specified in /etc/finit.conf, finit-alt will try
to mount tmpfs on /dev prior to creating device nodes.

Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-06-25 19:10:36 -03:00
Claudio Matsuoka 765bef0991 Don't fix /dev/null permissions if it fails in creation
By doing so we'll be masking a symptom of the problem instead of fixing
it. If permissions of /dev/null fail, most likely other problems will
also happen (e.g. pts permissions). Keep /dev/null alarm (which leads
to X server starting problems) to alert us if something is wrong.

Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-06-18 11:39:38 -03:00
Claudio Matsuoka 7d10388158 Conditional build of /etc/resolveconf/run support
Xandros actually uses it.

Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-06-18 11:34:52 -03:00
Claudio Matsuoka a0382dfab8 Keep /etc/resolveconf/run code commented until we check Xandros
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-06-13 20:31:49 -03:00
Claudio Matsuoka ead2eb7076 Merge branch 'master' of claudio@git.mandriva.com:/people/blino/finit 2008-06-13 20:15:21 -03:00
Claudio Matsuoka 0f2a14bf4f Remove old code to load AGP drivers
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-06-13 19:58:31 -03:00
Claudio Matsuoka 4e8be438e9 Use smurfy's /dev/initctl handler
If we handle it using pselect() in the parent process we'll end up
with a lot of zombie processes because SIGCHLD is not handled correctly.

Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-06-13 19:55:34 -03:00
Olivier Blin 2f3404165f make sure /dev/null is world-writable 2008-06-06 18:35:44 +02:00
Olivier Blin ca9ee99f59 create resolv.conf symlink in /var 2008-06-06 17:52:00 +02:00
Olivier Blin 0ab62c8871 create /var/run/resolvconf/interface 2008-06-06 17:52:00 +02:00
Olivier Blin efdac3fc2d remove useless /etc/resolvconfig/run clean, it's a symlink to /var/run which is tmpfs 2008-06-06 17:52:00 +02:00
Olivier Blin c127735e2d do not create useless resolvconf and network dirs in /dev/shm 2008-06-06 17:51:53 +02:00
Olivier Blin d621b0ba15 include limits.h for INT_MAX 2008-06-06 17:42:26 +02:00
Claudio Matsuoka 33469873a5 Don't build vanilla finit
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-06-02 18:20:03 -03:00
Claudio Matsuoka 36043c04f9 Fix permission of utmp
Also remove other redundant or seemingly unneeded permission settings

Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-06-02 17:28:31 -03:00
Claudio Matsuoka ec10fecd8d Add pterjan's services.sh
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-06-02 17:28:16 -03:00
Claudio Matsuoka 0fc7654a83 Set owner of /var/run/utmp to root:utmp
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-06-02 17:22:35 -03:00
Claudio Matsuoka ba9c897e83 Ajusted options for eeeXubuntu
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-05-31 16:28:19 -03:00
Claudio Matsuoka 4948844f82 Merged usplash support from smurfy's port
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-05-31 10:56:40 -03:00
Claudio Matsuoka 9f99f38561 Initial eeeXubuntu port merged from smurfy's port
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-05-31 10:43:43 -03:00
Claudio Matsuoka f516108ca6 Merge branch 'master' of cmatsuoka@helllabs.org:git/eeepc 2008-05-29 11:13:44 -03:00
Claudio Matsuoka 04b91da9f9 Remove unused variables
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-05-28 19:24:18 -03:00
Claudio Matsuoka f94504ad96 Write runlevel to utmp
This is needed by Printerdrake (by Pascal Terjan)

Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-05-28 12:51:30 -03:00
Claudio Matsuoka 698c5a1852 Changelog updates
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-05-27 16:45:20 -03:00
Claudio Matsuoka d5037d1352 Finit-alt listens to /dev/initctl
This allows us to use the standard reboot utility in Linux to perform
a fast reboot.

Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-05-27 16:29:34 -03:00
Claudio Matsuoka 57ad91136b Build finit-alt from finit-alt.c
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-05-26 20:09:25 -03:00
Claudio Matsuoka 9488e65998 Merge branch 'master' of cmatsuoka@helllabs.org:git/eeepc 2008-05-18 22:36:50 -03:00
Claudio Matsuoka 19540d148e Cosmetic coding style fix
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-05-18 22:36:21 -03:00
Claudio Matsuoka df14fd5255 Post-0.4
Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
2008-05-16 16:23:19 -03:00
11 changed files with 420 additions and 76 deletions
+2
View File
@@ -0,0 +1,2 @@
*.o
*.gz
+9
View File
@@ -1,3 +1,12 @@
0.5 (20080821)
- add option to start dbus and consolekit before the X server
- finit-alt listens to /dev/initctl to work with reboot(8) (smurfy)
- write runlevel to utmp, needed by Printerdrake (Pascal Terjan)
- fix ownership of /var/run/utmp (reported by Pascal Terjan)
- remove obsolete code to load AGP drivers
- conditional build of /etc/resolveconf/run support
- add support to /var/run/resolvconf in Mandriva (blino)
O.4 (20080516) O.4 (20080516)
- default username for finit-alt configurable in Makefile - default username for finit-alt configurable in Makefile
- create loopback device node in finit-alt (for squashfs) - create loopback device node in finit-alt (for squashfs)
+14 -3
View File
@@ -3,11 +3,11 @@ CFLAGS = -Os -Wall -DVERSION=\"$(VERSION)\" -DWHOAMI=\"`whoami`@`hostname`\"
LD = gcc LD = gcc
LDFLAGS = LDFLAGS =
LIBS = LIBS =
VERSION = 0.4 VERSION = 0.5
PKG = finit-$(VERSION) PKG = finit-$(VERSION)
DFILES = Makefile README finit.c finit-mod.c finit-alt.c helpers.c helpers.h \ DFILES = Makefile README finit.c finit-mod.c finit-alt.c helpers.c helpers.h \
patches/*patch contrib/services.sh* patches/*patch contrib/services.sh* contrib/Makefile.*
BINS = finit finit-mod finit-mdv BINS = finit-mod finit-alt finit-mdv #finit-exb
@@ -51,6 +51,10 @@ finit-mod: finit-mod.o helpers.o
$(LD) $(LDFLAGS) -o $@ $+ $(LIBS) $(LD) $(LDFLAGS) -o $@ $+ $(LIBS)
strip $@ strip $@
finit-alt: finit-alt.o helpers.o
$(LD) $(LDFLAGS) -o $@ $+ $(LIBS)
strip $@
finit-mdv: finit-mdv.o helpers.o finit-mdv: finit-mdv.o helpers.o
$(LD) $(LDFLAGS) -o $@ $+ $(LIBS) $(LD) $(LDFLAGS) -o $@ $+ $(LIBS)
strip $@ strip $@
@@ -58,6 +62,13 @@ finit-mdv: finit-mdv.o helpers.o
finit-mdv.o: finit-alt.c Makefile finit-mdv.o: finit-alt.c Makefile
$(CC) -c $(CFLAGS) -DDIST_MDV -o $@ finit-alt.c $(CC) -c $(CFLAGS) -DDIST_MDV -o $@ finit-alt.c
finit-exb: finit-exb.o helpers.o
$(LD) $(LDFLAGS) -o $@ $+ $(LIBS)
strip $@
finit-exb.o: finit-alt.c Makefile
$(CC) -c $(CFLAGS) -DDIST_EEEXUBUNTU -o $@ finit-alt.c
clean: clean:
rm -f *.o core *~ $(BINS) rm -f *.o core *~ $(BINS)
+30 -50
View File
@@ -1,68 +1,48 @@
Eeepc "fastinit" reimplementations Finit is a reimplementation of the Eeepc "fastinit" program based on its
---------------------------------- system calls with gaps filled with frog DNA.
finit.c is a reimplementation of the Asus Eeepc fastinit program based Finit's purpose is to build upon the general workings of fastinit and
on its library calls. It tries to be an accurate re-creation and keeps improve/optimize it for Xandros or alternative distributions running on
the original bugs and unoptimized calls. the Eeepc. Finit comes in three flavors: finit is a replica of the Asus
fastinit, finit-mod is an improved drop-in replacement for fastinit,
and finit-alt is a generic replacement for other systems. Finit-mod
and finit-alt were much improved with patches from Metalshark.
finit-mod.c is a fixed/improved version of finit.c intended to be a drop-in See more information at http://helllabs.org/finit/
replacement for the original Eeepc OS.
finit-alt.c is a fixed/improved version of finit.c for alternative Linux
distributions running on the Eeepc (previously ffinit.c). It's currently
able to boot Mandriva Linux 2008.0/2008.1.
See Makefile for configurable parameters to better suit your system.
* Eeepc boot process Usage scenarios
---------------
The essential steps in the boot process carried out in initramfs are: 1. Replace the original Eeepc 702 fastinit (finit-mod)
ROOT=`sed 's!.*root=\([^ ]*\).*!\1!' < /proc/cmdline` 2. Allow fast booting in alternative Linux distributions running on the
mount -t proc proc /proc Eeepc and other netbooks (finit-alt)
mount -t ext2 -o ro $ROOT /mnt-system
mount -t ext3 -o rw /dev/sda2 /mnt-user
mount -t unionfs -o dirs=/mnt-user=rw:/mnt-system=ro unionfs /mnt
mount --move /mnt-system /mnt/mnt
umount -l /mnt-user
umount /proc
exec switch_root /mnt /sbin/fastinit "$@" </mnt/dev/console >/mnt/dev/console
If mounting the root filesystem fails, execute a maintenance shell. If
mounting the user filesystem fails, fsck and reboot.
* Utilities available in the Eeepc initramfs busybox: Finit-alt is distribution-specific. Currently it generates a finit-mdv
executable for Mandriva 2008/2008.1 systems. Smurfy ported it to
[ cat cp cut dd eeeXubuntu, and parts of his port have been merged to finit-alt.
dmesg echo env expr false
grep insmod ln losetup ls
mdev mkdir mknod mount mv
pivot_root realpath rm rmmod sed
sh sleep switch_root test true
umount vi
* Devices in the Eeepc initramfs /dev: Finit-alt features
------------------
console fb null ram0 sda1 sda2 sda3 sr0 tty0 Finit-alt reads configuration information from /etc/finit.conf. See
the source code for available options.
Reboot and poweroff Rebooting and halting
------------------- ---------------------
Stock reboot and poweroff utilities of a modern Linux distribution may not Finit handles SIGUSR1 and SIGUSR2 for reboot and halt, and listens to
work correctly with finit. You can replace them with simple scripts that /dev/initctl so standard Linux reboot and halt commands should also
send SIGUSR1 to finit for reboot, SIGUSR2 for poweroff. work.
Using finit with KDE Debugging
-------------------- ---------
If you use finit to start KDE with auto-login enabled, hal-based device
automounting may not work correctly. That happens because the session
is started before the system message bus, so add a "dcop kded mediamanager
reloadBackends" call in the user AutoStart to restart the client.
Add finit_debug to the kernel parameter line to enable trace messages
and to run a shell after the X server.
+4
View File
@@ -0,0 +1,4 @@
Experimental eeeXubuntu support merged from smurfy's port, see
http://forum.eeeuser.com/viewtopic.php?id=15685
+88
View File
@@ -0,0 +1,88 @@
CC = gcc
CFLAGS = -Os -Wall -DVERSION=\"$(VERSION)\" -DWHOAMI=\"`whoami`@`hostname`\"
LD = gcc
LDFLAGS =
LIBS =
VERSION = 0.5-pre
PKG = finit-$(VERSION)
DFILES = Makefile README finit.c finit-mod.c finit-alt.c helpers.c helpers.h \
patches/*patch contrib/services.sh*
BINS = finit-mod finit-alt finit-mdv #finit-exb
#### Configurable parameters
# Default user for finit-alt if not "user"
#DEFUSER = fred
# Use -march=pentium-m to build for Eeepc
#CFLAGS += -march=pentium-m
# Omit the first /sbin/hwclock if CONFIG_RTC_HCTOSYS is enabled in the kernel
CFLAGS += -DNO_HCTOSYS
# Append -directisa to /sbin/hwclock lines if the user has disabled
# CONFIG_GENRTC and enabled CONFIG_RTC but not enabled CONFIG_HPET_TIMER
# and CONFIG_HPET_RTC_IRQ.
#CFLAGS += -DDIRECTISA
# Use built-in run-parts instead of /bin/run-parts
CFLAGS += -DBUILTIN_RUNPARTS
#### End of configurable parameters
ifneq ($(DEFUSER),)
CFLAGS += -DDEFUSER=\"$(DEFUSER)\"
endif
.c.o:
$(CC) -c $(CFLAGS) -o $*.o $<
all: $(BINS)
finit: finit.o
$(LD) $(LDFLAGS) -o $@ $+ $(LIBS)
strip $@
finit-mod: finit-mod.o helpers.o
$(LD) $(LDFLAGS) -o $@ $+ $(LIBS)
strip $@
finit-alt: finit-alt.o helpers.o
$(LD) $(LDFLAGS) -o $@ $+ $(LIBS)
strip $@
finit-mdv: finit-mdv.o helpers.o
$(LD) $(LDFLAGS) -o $@ $+ $(LIBS)
strip $@
finit-mdv.o: finit-alt.c Makefile
$(CC) -c $(CFLAGS) -DDIST_MDV -o $@ finit-alt.c
finit-exb: finit-exb.o helpers.o
$(LD) $(LDFLAGS) -o $@ $+ $(LIBS)
strip $@
finit-exb.o: finit-alt.c Makefile
$(CC) -c $(CFLAGS) -DDIST_EEEXUBUNTU -o $@ finit-alt.c
clean:
rm -f *.o core *~ $(BINS)
finit.o: finit.c Makefile
finit-mod.o: finit-mod.c Makefile
helpers.o: helpers.c Makefile
dist:
rm -Rf $(PKG)
mkdir -p $(PKG)/contrib $(PKG)/patches
for i in $(DFILES); do cp $$i $(PKG)/`dirname $$i`; done
tar cf - $(PKG) | gzip -c > $(PKG).tar.gz
rm -Rf $(PKG)
ls -l $(PKG).tar.gz
+28
View File
@@ -0,0 +1,28 @@
#!/bin/sh
# Else oocalc will crash
mknod /dev/random c 1 8
mkdir /var/lock/subsys
chmod 1777 /var/lock/subsys
mkdir /var/run/dbus
mkdir /var/run/netreport
/etc/init.d/messagebus start
/sbin/start_udev.simple
for module in `/bin/grep -hv '#' /etc/modprobe.preload /etc/modprobe.preload.d/*`; do
/sbin/modprobe $module
done
# Need to find a way to apply udev config
chmod 0666 /dev/ptmx
/etc/init.d/network-up start
/etc/init.d/network start
/etc/init.d/acpid start
/etc/init.d/haldaemon start
sleep 10
for i in /etc/rc5.d/S*; do
$i status > /dev/null 2>&1 || $i start
done
+227 -18
View File
@@ -37,6 +37,7 @@ THE SOFTWARE.
#include <sys/reboot.h> #include <sys/reboot.h>
#include <sys/wait.h> #include <sys/wait.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <utmp.h>
#include "helpers.h" #include "helpers.h"
@@ -46,7 +47,7 @@ THE SOFTWARE.
/* Distribution configuration */ /* Distribution configuration */
#ifdef DIST_MDV /* Mandriva */ #if defined DIST_MDV /* Mandriva */
#define RANDOMSEED "/var/lib/random-seed" #define RANDOMSEED "/var/lib/random-seed"
#define SYSROOT "/sysroot" #define SYSROOT "/sysroot"
#define GETTY "/usr/bin/openvt /sbin/mingetty tty2" #define GETTY "/usr/bin/openvt /sbin/mingetty tty2"
@@ -54,12 +55,28 @@ THE SOFTWARE.
#define REMOUNT_ROOTFS_RW #define REMOUNT_ROOTFS_RW
#define MAKE_DEVICES #define MAKE_DEVICES
#define PAM_CONSOLE #define PAM_CONSOLE
#define LISTEN_INITCTL
#define RUNLEVEL 5
#define USE_VAR_RUN_RESOLVCONF
#define USE_MESSAGE_BUS
#define USE_CONSOLEKIT
#elif defined DIST_EEEXUBUNTU /* eeeXubuntu */
#define RANDOMSEED "/var/lib/urandom/random-seed"
#define SYSROOT "/sysroot"
#define GETTY "/usr/bin/openvt /sbin/getty 38400 tty2"
#define RUNPARTS "/bin/run-parts"
#define REMOUNT_ROOTFS_RW
#define MAKE_DEVICES
#define TOUCH_ETC_NETWORK_RUN_IFSTATE
#define LISTEN_INITCTL
#define USE_USPLASH
#else /* original Eeepc distribution */ #else /* original Eeepc distribution */
#define RANDOMSEED "/var/lib/urandom/random-seed" #define RANDOMSEED "/var/lib/urandom/random-seed"
#define SYSROOT "/mnt" #define SYSROOT "/mnt"
#define GETTY "/usr/bin/openvt /sbin/getty 38400 tty2" #define GETTY "/usr/bin/openvt /sbin/getty 38400 tty2"
#define RUNPARTS "/bin/run-parts" #define RUNPARTS "/bin/run-parts"
#define TOUCH_ETC_NETWORK_RUN_IFSTATE #define TOUCH_ETC_NETWORK_RUN_IFSTATE
#define USE_ETC_RESOLVCONF_RUN
#endif #endif
#ifdef DIRECTISA #ifdef DIRECTISA
@@ -79,6 +96,20 @@ THE SOFTWARE.
sigaction(sig, &sa, NULL); \ sigaction(sig, &sa, NULL); \
} while (0) } while (0)
#ifdef LISTEN_INITCTL
#define INIT_MAGIC 0x03091969
#define INIT_CMD_RUNLVL 1
struct init_request {
int magic; /* Magic number */
int cmd; /* What kind of request */
int runlevel; /* Runlevel to change to */
int sleeptime; /* Time between TERM and KILL */
char data[368];
};
#endif
#define touch(x) mknod((x), S_IFREG|0644, 0) #define touch(x) mknod((x), S_IFREG|0644, 0)
#define chardev(x,m,maj,min) mknod((x), S_IFCHR|(m), makedev((maj),(min))) #define chardev(x,m,maj,min) mknod((x), S_IFCHR|(m), makedev((maj),(min)))
#define blkdev(x,m,maj,min) mknod((x), S_IFBLK|(m), makedev((maj),(min))) #define blkdev(x,m,maj,min) mknod((x), S_IFBLK|(m), makedev((maj),(min)))
@@ -95,7 +126,44 @@ void shutdown(int);
void signal_handler(int); void signal_handler(int);
void chld_handler(int); void chld_handler(int);
#ifdef DEBUG_TIMESTAMP /* For profiling */
#include <time.h>
#include <stdarg.h>
static int debug = 1;
static struct timeval t0;
void _d(char *fmt, ...)
{
va_list ap;
struct timeval t;
int s, ms;
if (!debug)
return;
va_start(ap, fmt);
gettimeofday(&t, NULL);
s = t.tv_sec - t0.tv_sec;
ms = (t.tv_usec - t0.tv_usec) / 1000;
if (ms < 0) {
ms += 1000;
s -= 1;
}
printf("[%d.%03d] ", s, ms);
vprintf(fmt, ap);
printf("\n");
va_end(ap);
}
#else
#define _d(x...) do { if (debug) { printf(x); printf("\n"); } } while (0)
static int debug = 0; static int debug = 0;
#endif
static void build_cmd(char *cmd, char *x, int len) static void build_cmd(char *cmd, char *x, int len)
{ {
@@ -103,30 +171,90 @@ static void build_cmd(char *cmd, char *x, int len)
char *c; char *c;
c = cmd + strlen(cmd); c = cmd + strlen(cmd);
/* skip spaces */
for (; *x && (*x == ' ' || *x == '\t'); x++); for (; *x && (*x == ' ' || *x == '\t'); x++);
for (l = 0; *x && *x != ' ' && *x != '\t' && l < len; l++)
/* copy next arg */
for (l = 0; *x && *x != '#' && *x != '\t' && l < len; l++)
*c++ = *x++; *c++ = *x++;
*c = 0; *c = 0;
if (debug)
printf("cmd = %s\n", cmd); _d("cmd = %s", cmd);
} }
#ifdef LISTEN_INITCTL
/* Standard reboot/shutdown utilities talk to init using /dev/initctl.
* We should check if the fifo was recreated and reopen it.
*/
static void listen_initctl()
{
if (!fork()) {
int ctl;
fd_set fds;
struct init_request request;
mkfifo("/dev/initctl", 0600);
ctl = open("/dev/initctl", O_RDONLY);
while (1) {
FD_ZERO(&fds);
FD_SET(ctl, &fds);
if (select(ctl + 1, &fds, NULL, NULL, NULL) <= 0)
continue;
read(ctl, &request, sizeof(request));
if (request.magic != INIT_MAGIC)
continue;
if (request.cmd == INIT_CMD_RUNLVL) {
switch (request.runlevel) {
case '0':
shutdown(SIGUSR2);
break;
case '6':
shutdown(SIGUSR1);
}
}
}
}
}
#endif
int main() int main()
{ {
int i; int i;
FILE *f; FILE *f;
char line[LINE_SIZE]; char line[LINE_SIZE];
int fd; int fd;
DIR *dir;
struct dirent *d;
struct sigaction sa, act; struct sigaction sa, act;
sigset_t nmask, nmask2; sigset_t nmask, nmask2;
char username[USERNAME_SIZE] = DEFUSER; char username[USERNAME_SIZE] = DEFUSER;
char hostname[HOSTNAME_SIZE] = "eviltwin"; char hostname[HOSTNAME_SIZE] = "eviltwin";
char cmd[CMD_SIZE]; char cmd[CMD_SIZE];
#ifdef USE_ETC_RESOLVCONF_RUN
DIR *dir;
struct dirent *d;
#endif
#ifdef RUNLEVEL
struct utmp entry;
#endif
puts("finit-alt " VERSION " (built " __DATE__ " by " WHOAMI ")"); #ifdef DEBUG_TIMESTAMP
gettimeofday(&t0, NULL);
#endif
puts("finit-alt " VERSION " (built " __DATE__ " " __TIME__
" by " WHOAMI ")");
#ifdef USE_USPLASH
system("usplash_write \"TEXT-URGENT finit " VERSION " (build "__DATE__ " " __TIME__ ") \"");
system("usplash_write \"PROGRESS 80\"");
#endif
chdir("/"); chdir("/");
umask(022); umask(022);
@@ -172,6 +300,8 @@ int main()
fclose(f); fclose(f);
} }
setsid();
/* /*
* Parse configuration file * Parse configuration file
*/ */
@@ -181,9 +311,9 @@ int main()
fgets(line, LINE_SIZE, f); fgets(line, LINE_SIZE, f);
chomp(line); chomp(line);
if (debug) _d("conf: %s", line);
printf("conf: %s\n", line);
/* Do this before mounting / read-write */
if (MATCH_CMD(line, "check ", x)) { if (MATCH_CMD(line, "check ", x)) {
strcpy(cmd, "/sbin/fsck -C -a "); strcpy(cmd, "/sbin/fsck -C -a ");
build_cmd(cmd, x, CMD_SIZE); build_cmd(cmd, x, CMD_SIZE);
@@ -206,15 +336,42 @@ int main()
system(cmd); system(cmd);
continue; continue;
} }
#ifdef MAKE_DEVICES
/* This is used if the system uses udev and doesn't
* mount /dev as tmpfs in the initrd, or if it doesn't
* use an initrd. Mount /dev as tmpfs and create basic
* device nodes.
*/
if (MATCH_CMD(line, "mountdev", x)) {
mount("none", "/dev", "tmpfs", 0, "mode=0755");
blkdev("/dev/sda", 0660, 8, 0);
blkdev("/dev/sda1", 0660, 8, 1);
blkdev("/dev/sda2", 0660, 8, 2);
blkdev("/dev/sda3", 0660, 8, 3);
blkdev("/dev/sda4", 0660, 8, 4);
blkdev("/dev/sda5", 0660, 8, 5);
blkdev("/dev/sda6", 0660, 8, 6);
continue;
}
/* This works only if /dev is tmpfs! If not, create
* devices statically on the filesystem
*/
if (MATCH_CMD(line, "mknod ", x)) {
strcpy(cmd, "/bin/mknod ");
build_cmd(cmd, x, CMD_SIZE);
system(cmd);
continue;
}
#endif
} }
fclose(f); fclose(f);
} }
setsid();
/* /*
* Mount filesystems * Mount filesystems
*/ */
_d("mount filesystems");
#ifdef REMOUNT_ROOTFS_RW #ifdef REMOUNT_ROOTFS_RW
system("/bin/mount -n -o remount,rw /"); system("/bin/mount -n -o remount,rw /");
#endif #endif
@@ -234,15 +391,18 @@ int main()
mount("none", "/proc/bus/usb", "usbfs", 0, NULL); mount("none", "/proc/bus/usb", "usbfs", 0, NULL);
mount(SYSROOT, "/", NULL, MS_MOVE, NULL); mount(SYSROOT, "/", NULL, MS_MOVE, NULL);
_d("make devices");
#ifdef MAKE_DEVICES #ifdef MAKE_DEVICES
mkdir("/dev/input", 0755); mkdir("/dev/input", 0755);
chardev("/dev/urandom", 0666, 1, 9); chardev("/dev/urandom", 0666, 1, 9);
chardev("/dev/ptmx", 0666, 5, 2); chardev("/dev/ptmx", 0666, 5, 2);
chardev("/dev/null", 0666, 1, 3); chardev("/dev/null", 0666, 1, 3);
chmod("/dev/null", 0666);
chardev("/dev/mem", 0640, 1, 1); chardev("/dev/mem", 0640, 1, 1);
chmod("/dev/null", 0667);
chmod("/dev/mem", 0640);
chardev("/dev/tty0", 0660, 4, 0); chardev("/dev/tty0", 0660, 4, 0);
chardev("/dev/tty1", 0660, 4, 1);
chardev("/dev/tty2", 0660, 4, 2);
chardev("/dev/tty3", 0660, 4, 3);
chardev("/dev/input/mice", 0660, 13, 63); chardev("/dev/input/mice", 0660, 13, 63);
chardev("/dev/input/event0", 0660, 13, 64); chardev("/dev/input/event0", 0660, 13, 64);
chardev("/dev/agpgart", 0660, 10, 175); chardev("/dev/agpgart", 0660, 10, 175);
@@ -261,13 +421,18 @@ int main()
write(fd, "0.0 0 0.0\n", 10); write(fd, "0.0 0 0.0\n", 10);
close(fd); close(fd);
} }
_d("adjust clock");
#ifndef NO_HCTOSYS #ifndef NO_HCTOSYS
#ifndef DEBUG_TIMESTAMP
system("/sbin/hwclock --hctosys --localtime" HWCLOCK_DIRECTISA); system("/sbin/hwclock --hctosys --localtime" HWCLOCK_DIRECTISA);
#endif
#endif #endif
/* /*
* Network stuff * Network stuff
*/ */
#ifdef USE_ETC_RESOLVCONF_RUN
makepath("/dev/shm/network"); makepath("/dev/shm/network");
makepath("/dev/shm/resolvconf/interface"); makepath("/dev/shm/resolvconf/interface");
@@ -282,8 +447,26 @@ int main()
closedir(dir); closedir(dir);
} }
#endif
#ifdef USE_VAR_RUN_RESOLVCONF
makepath("/var/run/resolvconf/interface");
symlink("../../../etc/resolv.conf", "/var/run/resolvconf/resolv.conf");
#endif
touch("/var/run/utmp"); touch("/var/run/utmp");
chown("/var/run/utmp", 0, getgroup("utmp"));
chmod("/var/run/utmp", 0664);
#ifdef RUNLEVEL
memset(&entry, 0, sizeof(struct utmp));
entry.ut_type = RUN_LVL;
entry.ut_pid = '0' + RUNLEVEL;
setutent();
pututline(&entry);
endutent();
#endif
touch("/etc/resolvconf/run/enable-updates"); touch("/etc/resolvconf/run/enable-updates");
chdir("/etc/resolvconf/run/interface"); chdir("/etc/resolvconf/run/interface");
@@ -339,19 +522,26 @@ int main()
mkdir("/tmp/.ICE-unix", 01777); mkdir("/tmp/.ICE-unix", 01777);
umask(022); umask(022);
#ifdef USE_USPLASH
system("usplash_write \"PROGRESS 90\"");
#endif
system(GETTY "&"); system(GETTY "&");
_d("forking");
if (!fork()) { if (!fork()) {
/* child process */ /* child process */
vhangup(); vhangup();
#ifndef DEBUG_TIMESTAMP
close(2); close(2);
close(1); close(1);
close(0); close(0);
if (open("/dev/tty1", O_RDWR) != 0) if (open("/dev/tty1", O_RDWR) != 0)
exit(1); exit(1);
#endif
sigemptyset(&act.sa_mask); sigemptyset(&act.sa_mask);
act.sa_handler = SIG_DFL; act.sa_handler = SIG_DFL;
@@ -363,20 +553,38 @@ int main()
for (i = 1; i < NSIG; i++) for (i = 1; i < NSIG; i++)
sigaction(i, &sa, NULL); sigaction(i, &sa, NULL);
#ifndef DEBUG_TIMESTAMP
dup2(0, 0); dup2(0, 0);
dup2(0, 1); dup2(0, 1);
dup2(0, 2); dup2(0, 2);
#endif
touch("/tmp/nologin"); touch("/tmp/nologin");
#ifdef AGPDRV #ifdef USE_MESSAGE_BUS
system("/sbin/modprobe agpgart"); _d("dbus");
system("/sbin/modprobe " AGPDRV); mkdir("/var/run/dbus", 0755);
mkdir("/var/lock/subsys/messagebus", 0755);
system("dbus-uuidgen --ensure;dbus-daemon --system");
/* dbus-daemon needs this delay, even after checking
* availability of /var/run/dbus/system_bus_socket */
usleep(500000);
#endif #endif
#ifdef USE_CONSOLEKIT
_d("consolekit");
system("/usr/sbin/console-kit-daemon");
#endif
#ifdef LISTEN_INITCTL
listen_initctl();
#endif
while (access("/tmp/shutdown", F_OK) < 0) { while (access("/tmp/shutdown", F_OK) < 0) {
_d("start X as %s\n", username);
#ifdef DEBUG_TIMESTAMP
sleep(10);
#endif
if (debug) { if (debug) {
printf("Starting X as %s\n", username);
snprintf(line, LINE_SIZE, snprintf(line, LINE_SIZE,
"su -c startx -l %s\n", username); "su -c startx -l %s\n", username);
system(line); system(line);
@@ -394,6 +602,7 @@ int main()
/* parent process */ /* parent process */
sleep(1); sleep(1);
system("/usr/sbin/services.sh &>/dev/null&"); system("/usr/sbin/services.sh &>/dev/null&");
+4 -5
View File
@@ -34,12 +34,10 @@ Changelog from the original Eeepc fastinit:
- Add –directisa to hwclock if user has disabled CONFIG_GENRTC and enabled - Add –directisa to hwclock if user has disabled CONFIG_GENRTC and enabled
CONFIG_RTC but not CONFIG_HPET_TIMER and CONFIG_HPET_RTC_IRQ (by Metalshark) CONFIG_RTC but not CONFIG_HPET_TIMER and CONFIG_HPET_RTC_IRQ (by Metalshark)
- Drop system() call to clean /tmp, it's a fresh mounted tmpfs - Drop system() call to clean /tmp, it's a fresh mounted tmpfs
- Change /proc/acpi/sleep to /sys/power/state (by Metalshark)
- Set loopback interface using direct calls instead of system("ifconfig") - Set loopback interface using direct calls instead of system("ifconfig")
- Copy 4096 data block in C instead of system("cat") or system("dd") - Copy 4096 data block in C instead of system("cat") or system("dd")
- Draw shutdown splash screen using C calls instead of system("echo;cat") - Draw shutdown splash screen using C calls instead of system("echo;cat")
- Change poweroff method from writing 5 to /sys/power/state to - Change poweroff method to reboot(RB_POWER_OFF) (by Metalshark)
reboot(RB_POWER_OFF) (by Metalshark)
- Mount /var/run and /var/lock as tmpfs - Mount /var/run and /var/lock as tmpfs
- Use SIG_IGN instead of empty signal handler (by Metalshark) - Use SIG_IGN instead of empty signal handler (by Metalshark)
- Add built-in run-parts option to be used instead of system("run-parts") - Add built-in run-parts option to be used instead of system("run-parts")
@@ -81,7 +79,7 @@ Changelog from the original Eeepc fastinit:
sa.sa_flags = flags; \ sa.sa_flags = flags; \
sigemptyset(&sa.sa_mask); \ sigemptyset(&sa.sa_mask); \
sigaction(sig, &sa, NULL); \ sigaction(sig, &sa, NULL); \
} while(0) } while (0)
#define touch(x) mknod((x), S_IFREG|0644, 0) #define touch(x) mknod((x), S_IFREG|0644, 0)
@@ -103,7 +101,8 @@ int main()
char *x; char *x;
sigset_t nmask, nmask2; sigset_t nmask, nmask2;
puts("finit-mod " VERSION " (built " __DATE__ " by " WHOAMI ")"); puts("finit-mod " VERSION " (built " __DATE__ " " __TIME__
" by " WHOAMI ")");
chdir("/"); chdir("/");
umask(022); umask(022);
+13
View File
@@ -1,5 +1,6 @@
#include <string.h> #include <string.h>
#include <limits.h>
#include <stdlib.h> #include <stdlib.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/types.h> #include <sys/types.h>
@@ -17,6 +18,8 @@
#include <sys/wait.h> #include <sys/wait.h>
#endif #endif
#include <grp.h>
#include "helpers.h" #include "helpers.h"
/* /*
@@ -157,6 +160,16 @@ int run_parts(char *dir, ...)
return 0; return 0;
} }
int getgroup(char *s)
{
struct group *grp;
if ((grp = getgrnam(s)) == NULL)
return -1;
return grp->gr_gid;
}
/* /*
* Other convenience functions * Other convenience functions
*/ */
+1
View File
@@ -5,6 +5,7 @@ int makepath (char *);
void ifconfig (char *, char *, char *, int); void ifconfig (char *, char *, char *, int);
void copyfile (char *, char *, int); void copyfile (char *, char *, int);
void chomp (char *); void chomp (char *);
int getgroup (char *);
#ifdef BUILTIN_RUNPARTS #ifdef BUILTIN_RUNPARTS
int run_parts (char *, ...); int run_parts (char *, ...);