mirror of
https://github.com/troglobit/finit.git
synced 2026-10-12 10:12:32 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7360ef1f08 | ||
|
|
529224153f | ||
|
|
0f8393ef0e | ||
|
|
a1d7e48225 | ||
|
|
938773765c | ||
|
|
367049a11c | ||
|
|
efcdc141c8 | ||
|
|
dfed328d47 | ||
|
|
804aa3c747 | ||
|
|
3ce7638dab | ||
|
|
b0746f5220 | ||
|
|
c324eff01a | ||
|
|
a6f534621c | ||
|
|
b0e3dbc47f | ||
|
|
220b2c9ae3 | ||
|
|
173853ca17 | ||
|
|
9f83bbe788 | ||
|
|
a187b88dd9 | ||
|
|
134d9f3463 | ||
|
|
25e9d84673 | ||
|
|
765bef0991 | ||
|
|
7d10388158 | ||
|
|
a0382dfab8 | ||
|
|
ead2eb7076 | ||
|
|
0f2a14bf4f | ||
|
|
4e8be438e9 | ||
|
|
2f3404165f | ||
|
|
ca9ee99f59 | ||
|
|
0ab62c8871 | ||
|
|
efdac3fc2d | ||
|
|
c127735e2d | ||
|
|
d621b0ba15 | ||
|
|
33469873a5 | ||
|
|
36043c04f9 | ||
|
|
ec10fecd8d | ||
|
|
0fc7654a83 | ||
|
|
ba9c897e83 | ||
|
|
4948844f82 | ||
|
|
9f99f38561 | ||
|
|
f516108ca6 | ||
|
|
04b91da9f9 | ||
|
|
f94504ad96 | ||
|
|
698c5a1852 | ||
|
|
d5037d1352 | ||
|
|
57ad91136b | ||
|
|
9488e65998 | ||
|
|
19540d148e | ||
|
|
df14fd5255 | ||
|
|
821a6853fe | ||
|
|
dbdf8ccc72 | ||
|
|
b2f143e623 | ||
|
|
2ffafc3d03 | ||
|
|
3158733ced | ||
|
|
1aa6358611 | ||
|
|
ce998373e5 | ||
|
|
d0b6457f01 | ||
|
|
349593d41b | ||
|
|
b8daa9c869 | ||
|
|
f21b0a2580 | ||
|
|
4e18bc3724 | ||
|
|
90c8c73470 | ||
|
|
c8e7b34b4c | ||
|
|
6ff7f2e52b | ||
|
|
b6bf00ed06 | ||
|
|
136dfeb41a | ||
|
|
7867db7b23 | ||
|
|
75d755afad | ||
|
|
01509376cc | ||
|
|
c55afaadb3 | ||
|
|
ccd49f2024 | ||
|
|
0fdf97653f | ||
|
|
9d164ac312 | ||
|
|
5acd2cd441 | ||
|
|
1f7eab37a0 | ||
|
|
d87fb47cf3 | ||
|
|
7caf633259 | ||
|
|
ba6470f5a6 | ||
|
|
fa23155593 | ||
|
|
996cb2ec1e | ||
|
|
4e3d6ec976 | ||
|
|
0857a0846f | ||
|
|
a3ad99798e | ||
|
|
c79b823f17 | ||
|
|
71ce4b98e9 | ||
|
|
9908a6e680 | ||
|
|
f94a76ed17 | ||
|
|
6fc2a6b108 | ||
|
|
a52c932085 | ||
|
|
2e7952645a | ||
|
|
494f182b13 | ||
|
|
5ad9ff48c5 | ||
|
|
b5e2af21a6 | ||
|
|
eb5445628f | ||
|
|
89854a579f | ||
|
|
1c88ae1f61 | ||
|
|
f972ff4d30 | ||
|
|
904c12d06a | ||
|
|
a85b0cf481 | ||
|
|
286711237d | ||
|
|
434ec4c533 | ||
|
|
6371f82fea | ||
|
|
b2233a6f4b | ||
|
|
6c807c3a95 | ||
|
|
e4f675fa1a | ||
|
|
880b5f8a92 | ||
|
|
c8f171556b | ||
|
|
2a9bfa7fd7 | ||
|
|
98624a3d21 | ||
|
|
6565cc67ee | ||
|
|
08d0dc6ee9 | ||
|
|
6e2ea43e97 | ||
|
|
2679c1b1c5 | ||
|
|
d05900368f | ||
|
|
a1de36c163 | ||
|
|
8206803762 | ||
|
|
fb8c341168 | ||
|
|
7137573534 |
@@ -0,0 +1,2 @@
|
|||||||
|
*.o
|
||||||
|
*.gz
|
||||||
@@ -1,5 +1,31 @@
|
|||||||
|
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)
|
||||||
|
|
||||||
0.2 ()
|
O.4 (20080516)
|
||||||
|
- default username for finit-alt configurable in Makefile
|
||||||
|
- create loopback device node in finit-alt (for squashfs)
|
||||||
|
- add option to use built-in run-parts instead of /bin/run-parts
|
||||||
|
- ignore signal instead of setting to an empty handler (Metalshark)
|
||||||
|
- handle pam_console permissions in finit-alt for Mandriva
|
||||||
|
- add services.sh example and nash-hotplug patch for Mandriva
|
||||||
|
- mount /proc/bus/usb in Mandriva
|
||||||
|
- add runtime debug to finit-alt if finit_debug parameter is specified
|
||||||
|
- read configuration from /etc/finit.conf
|
||||||
|
- run getty with openvt on the virtual terminal
|
||||||
|
|
||||||
|
0.3 (20080223)
|
||||||
|
- Change poweroff method to reboot(RB_POWER_OFF) (Metalshark)
|
||||||
|
- Remove duplicate unionctl() reimplementation error
|
||||||
|
- Fix string termination in path creation
|
||||||
|
- Mount /var/lock and /var/run as tmpfs
|
||||||
|
|
||||||
|
0.2 (20080219)
|
||||||
- replace system("touch") with touch() in finit-mod (Metalshark)
|
- replace system("touch") with touch() in finit-mod (Metalshark)
|
||||||
- disable NO_HCTOSYS by default to match stock Eeepc kernel
|
- disable NO_HCTOSYS by default to match stock Eeepc kernel
|
||||||
- drop system("rm -f") to clean /tmp, its a fresh mounted tmpfs
|
- drop system("rm -f") to clean /tmp, its a fresh mounted tmpfs
|
||||||
|
|||||||
@@ -3,17 +3,18 @@ CFLAGS = -Os -Wall -DVERSION=\"$(VERSION)\" -DWHOAMI=\"`whoami`@`hostname`\"
|
|||||||
LD = gcc
|
LD = gcc
|
||||||
LDFLAGS =
|
LDFLAGS =
|
||||||
LIBS =
|
LIBS =
|
||||||
VERSION = 0.2
|
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* contrib/Makefile.*
|
||||||
|
BINS = finit-mod finit-alt finit-mdv #finit-exb
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### Configurable parameters
|
#### Configurable parameters
|
||||||
|
|
||||||
# Add -DDEBUG to build with debug messages, also drops to terminal after X
|
# Default user for finit-alt if not "user"
|
||||||
#CFLAGS += -DDEBUG
|
#DEFUSER = fred
|
||||||
|
|
||||||
# Parameters added by Metalshark
|
|
||||||
|
|
||||||
# Use -march=pentium-m to build for Eeepc
|
# Use -march=pentium-m to build for Eeepc
|
||||||
CFLAGS += -march=pentium-m
|
CFLAGS += -march=pentium-m
|
||||||
@@ -21,17 +22,26 @@ CFLAGS += -march=pentium-m
|
|||||||
# Omit the first /sbin/hwclock if CONFIG_RTC_HCTOSYS is enabled in the kernel
|
# Omit the first /sbin/hwclock if CONFIG_RTC_HCTOSYS is enabled in the kernel
|
||||||
#CFLAGS += -DNO_HCTOSYS
|
#CFLAGS += -DNO_HCTOSYS
|
||||||
|
|
||||||
# Append –directisa to /sbin/hwclock lines if the user has disabled
|
# Append -directisa to /sbin/hwclock lines if the user has disabled
|
||||||
# CONFIG_GENRTC and enabled CONFIG_RTC but not enabled CONFIG_HPET_TIMER
|
# CONFIG_GENRTC and enabled CONFIG_RTC but not enabled CONFIG_HPET_TIMER
|
||||||
# and CONFIG_HPET_RTC_IRQ.
|
# and CONFIG_HPET_RTC_IRQ.
|
||||||
#CFLAGS += -DDIRECTISA
|
#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:
|
.c.o:
|
||||||
$(CC) -c $(CFLAGS) -o $*.o $<
|
$(CC) -c $(CFLAGS) -o $*.o $<
|
||||||
|
|
||||||
all: finit finit-mod finit-mdv
|
all: $(BINS)
|
||||||
|
|
||||||
finit: finit.o
|
finit: finit.o
|
||||||
$(LD) $(LDFLAGS) -o $@ $+ $(LIBS)
|
$(LD) $(LDFLAGS) -o $@ $+ $(LIBS)
|
||||||
@@ -41,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 $@
|
||||||
@@ -48,17 +62,27 @@ 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 *~
|
rm -f *.o core *~ $(BINS)
|
||||||
|
|
||||||
finit.o: finit.c Makefile
|
finit.o: finit.c Makefile
|
||||||
|
|
||||||
finit-mod.o: finit-mod.c Makefile
|
finit-mod.o: finit-mod.c Makefile
|
||||||
|
|
||||||
|
helpers.o: helpers.c Makefile
|
||||||
|
|
||||||
dist:
|
dist:
|
||||||
rm -Rf $(PKG)
|
rm -Rf $(PKG)
|
||||||
mkdir $(PKG)
|
mkdir -p $(PKG)/contrib $(PKG)/patches
|
||||||
cp Makefile $(DFILES) $(PKG)
|
for i in $(DFILES); do cp $$i $(PKG)/`dirname $$i`; done
|
||||||
tar cf - $(PKG) | gzip -c > $(PKG).tar.gz
|
tar cf - $(PKG) | gzip -c > $(PKG).tar.gz
|
||||||
rm -Rf $(PKG)
|
rm -Rf $(PKG)
|
||||||
ls -l $(PKG).tar.gz
|
ls -l $(PKG).tar.gz
|
||||||
|
|
||||||
|
|||||||
@@ -1,75 +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 lack of optimization.
|
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.
|
See more information at http://helllabs.org/finit/
|
||||||
|
|
||||||
finit-alt.c is a fixed/improved version of finit.c for alternative Linux
|
|
||||||
distributions running on the Eeepc (previously ffinit.c). Currently able
|
|
||||||
to boot unmodified Mandriva Linux.
|
|
||||||
|
|
||||||
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.
|
||||||
|
|
||||||
|
|
||||||
|
Rebooting and halting
|
||||||
|
---------------------
|
||||||
|
|
||||||
Using finit with alternative systems
|
Finit handles SIGUSR1 and SIGUSR2 for reboot and halt, and listens to
|
||||||
------------------------------------
|
/dev/initctl so standard Linux reboot and halt commands should also
|
||||||
|
work.
|
||||||
|
|
||||||
Currently tested only with Mandriva 2008. Proceed with caution, there are
|
|
||||||
problems related to udev and pam.
|
|
||||||
|
|
||||||
1 - Add init=/sbin/finit-mdv to the kernel boot line
|
Debugging
|
||||||
|
---------
|
||||||
2 - Provide a suitable /usr/sbin/services.sh, this is the one I use in my
|
|
||||||
test system:
|
|
||||||
|
|
||||||
mkdir /var/lock/subsys
|
|
||||||
chmod 1777 /var/lock/subsys
|
|
||||||
/etc/init.d/network start
|
|
||||||
dhclient eth0
|
|
||||||
/sbin/start_udev&
|
|
||||||
/etc/init.d/portmap start
|
|
||||||
/etc/init.d/nfs-common start
|
|
||||||
|
|
||||||
3 - Provide /etc/hostname if you don't have it already
|
|
||||||
|
|
||||||
4 - Set the pointer device in the X server configuration to /dev/input/mice
|
|
||||||
|
|
||||||
|
Add finit_debug to the kernel parameter line to enable trace messages
|
||||||
|
and to run a shell after the X server.
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
Experimental eeeXubuntu support merged from smurfy's port, see
|
||||||
|
http://forum.eeeuser.com/viewtopic.php?id=15685
|
||||||
|
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
|
||||||
|
Mandriva 2008
|
||||||
|
-------------
|
||||||
|
|
||||||
|
1 - Add init=/sbin/finit-mdv to the kernel boot line
|
||||||
|
|
||||||
|
2 - Provide a suitable /usr/sbin/services.sh, this is the one I use in my
|
||||||
|
test system running e17:
|
||||||
|
|
||||||
|
mkdir /var/lock/subsys
|
||||||
|
chmod 1777 /var/lock/subsys
|
||||||
|
/etc/init.d/network start
|
||||||
|
dhclient eth0
|
||||||
|
/sbin/start_udev&
|
||||||
|
/etc/init.d/portmap start
|
||||||
|
/etc/init.d/nfs-common start
|
||||||
|
|
||||||
|
If you use KDE or need more services, see examples in contrib/
|
||||||
|
|
||||||
|
3 - Create /etc/finit.conf with user, module, filesystems to check and
|
||||||
|
hostname parameters. See the included finit.conf for more information.
|
||||||
|
If no user is specified, user "user" will be used as default.
|
||||||
|
|
||||||
|
4 - Set the pointer device in the X server configuration to /dev/input/mice
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Mandriva 2008.1
|
||||||
|
---------------
|
||||||
|
|
||||||
|
If you have a stuck nash-hotplug consuming 100% of CPU after the boot, you
|
||||||
|
may want to patch mkinitrd using patches/mkinitrd-6.0.34-nash-hotplug.patch
|
||||||
|
|
||||||
@@ -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
|
||||||
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Example /usr/sbin/services.sh that can be used in a Mandriva 2008 system
|
||||||
|
# running KDE
|
||||||
|
|
||||||
|
mkdir /var/lock/subsys
|
||||||
|
chmod 1777 /var/lock/subsys
|
||||||
|
/sbin/start_udev
|
||||||
|
mkdir /var/run/dbus
|
||||||
|
/etc/init.d/messagebus start
|
||||||
|
/etc/init.d/haldaemon start
|
||||||
|
/etc/init.d/alsa start
|
||||||
|
/etc/init.d/sound start
|
||||||
|
/etc/init.d/crond start
|
||||||
|
/etc/init.d/network-up start
|
||||||
|
/etc/init.d/network start
|
||||||
|
#/etc/init.d/sshd start
|
||||||
|
/etc/init.d/syslog start
|
||||||
|
/sbin/pam_console_apply
|
||||||
|
#kbuildsycoca --noincremental
|
||||||
@@ -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
|
||||||
+361
-88
@@ -37,36 +37,46 @@ 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"
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifndef DEFUSER
|
||||||
#define debug(x...) do { \
|
#define DEFUSER "user"
|
||||||
printf("finit: %d: ", __LINE__); printf(x); printf("\n"); \
|
|
||||||
} while (0)
|
|
||||||
#else
|
|
||||||
#define debug(x...)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* 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 "/sbin/mingetty tty3"
|
#define GETTY "/usr/bin/openvt /sbin/mingetty tty2"
|
||||||
#define RUNPARTS "/usr/bin/run-parts --arg=-i"
|
#define RUNPARTS "/usr/bin/run-parts"
|
||||||
#define DEFUSER "user"
|
|
||||||
#define HOMEDEV "/dev/sda6"
|
|
||||||
#define AGPDRV "intel-agp"
|
|
||||||
#define REMOUNT_ROOTFS_RW
|
#define REMOUNT_ROOTFS_RW
|
||||||
#define MAKE_DEVICES
|
#define MAKE_DEVICES
|
||||||
|
#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 "/sbin/getty 38400 tty3"
|
#define GETTY "/usr/bin/openvt /sbin/getty 38400 tty2"
|
||||||
#define RUNPARTS "/bin/run-parts --arg=-i"
|
#define RUNPARTS "/bin/run-parts"
|
||||||
#define DEFUSER "user"
|
|
||||||
#define TOUCH_ETC_NETWORK_RUN_IFSTATE
|
#define TOUCH_ETC_NETWORK_RUN_IFSTATE
|
||||||
|
#define USE_ETC_RESOLVCONF_RUN
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DIRECTISA
|
#ifdef DIRECTISA
|
||||||
@@ -86,30 +96,165 @@ 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 MATCH_CMD(l,c,x) \
|
||||||
|
((!strncmp((l), (c), strlen((c)))) && ((x) = (l) + strlen((c))))
|
||||||
|
|
||||||
|
#define LINE_SIZE 1024
|
||||||
|
#define CMD_SIZE 256
|
||||||
|
#define USERNAME_SIZE 16
|
||||||
|
#define HOSTNAME_SIZE 32
|
||||||
|
|
||||||
void shutdown(int);
|
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;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
static void build_cmd(char *cmd, char *x, int len)
|
||||||
|
{
|
||||||
|
int l;
|
||||||
|
char *c;
|
||||||
|
|
||||||
|
c = cmd + strlen(cmd);
|
||||||
|
|
||||||
|
/* skip spaces */
|
||||||
|
for (; *x && (*x == ' ' || *x == '\t'); x++);
|
||||||
|
|
||||||
|
/* copy next arg */
|
||||||
|
for (l = 0; *x && *x != '#' && *x != '\t' && l < len; l++)
|
||||||
|
*c++ = *x++;
|
||||||
|
*c = 0;
|
||||||
|
|
||||||
|
_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[2096];
|
char line[LINE_SIZE];
|
||||||
int fd;
|
int fd;
|
||||||
|
struct sigaction sa, act;
|
||||||
|
sigset_t nmask, nmask2;
|
||||||
|
char username[USERNAME_SIZE] = DEFUSER;
|
||||||
|
char hostname[HOSTNAME_SIZE] = "eviltwin";
|
||||||
|
char cmd[CMD_SIZE];
|
||||||
|
#ifdef USE_ETC_RESOLVCONF_RUN
|
||||||
DIR *dir;
|
DIR *dir;
|
||||||
struct dirent *d;
|
struct dirent *d;
|
||||||
char filename[1024];
|
#endif
|
||||||
struct sigaction sa, act;
|
#ifdef RUNLEVEL
|
||||||
char hline[1024];
|
struct utmp entry;
|
||||||
char *x;
|
#endif
|
||||||
sigset_t nmask, nmask2;
|
|
||||||
|
|
||||||
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);
|
||||||
@@ -120,15 +265,15 @@ int main()
|
|||||||
for (i = 1; i < NSIG; i++)
|
for (i = 1; i < NSIG; i++)
|
||||||
SETSIG(sa, i, SIG_IGN, SA_RESTART);
|
SETSIG(sa, i, SIG_IGN, SA_RESTART);
|
||||||
|
|
||||||
SETSIG(sa, SIGINT, shutdown, 0);
|
SETSIG(sa, SIGINT, shutdown, 0);
|
||||||
SETSIG(sa, SIGPWR, signal_handler, 0);
|
SETSIG(sa, SIGPWR, SIG_IGN, 0);
|
||||||
SETSIG(sa, SIGUSR1, shutdown, 0);
|
SETSIG(sa, SIGUSR1, shutdown, 0);
|
||||||
SETSIG(sa, SIGUSR2, shutdown, 0);
|
SETSIG(sa, SIGUSR2, shutdown, 0);
|
||||||
SETSIG(sa, SIGTERM, signal_handler, 0);
|
SETSIG(sa, SIGTERM, SIG_IGN, 0);
|
||||||
SETSIG(sa, SIGALRM, signal_handler, 0);
|
SETSIG(sa, SIGALRM, SIG_IGN, 0);
|
||||||
SETSIG(sa, SIGHUP, signal_handler, 0);
|
SETSIG(sa, SIGHUP, SIG_IGN, 0);
|
||||||
SETSIG(sa, SIGCONT, signal_handler, SA_RESTART);
|
SETSIG(sa, SIGCONT, SIG_IGN, SA_RESTART);
|
||||||
SETSIG(sa, SIGCHLD, chld_handler, SA_RESTART);
|
SETSIG(sa, SIGCHLD, chld_handler, SA_RESTART);
|
||||||
|
|
||||||
/* Block sigchild while forking */
|
/* Block sigchild while forking */
|
||||||
sigemptyset(&nmask);
|
sigemptyset(&nmask);
|
||||||
@@ -137,60 +282,136 @@ int main()
|
|||||||
|
|
||||||
reboot(RB_DISABLE_CAD);
|
reboot(RB_DISABLE_CAD);
|
||||||
|
|
||||||
mount("proc", "/proc", "proc", 0, NULL);
|
mount("none", "/proc", "proc", 0, NULL);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Parse kernel parameters
|
* Parse kernel parameters
|
||||||
*/
|
*/
|
||||||
if ((f = fopen("/proc/cmdline", "r")) != NULL) {
|
if ((f = fopen("/proc/cmdline", "r")) != NULL) {
|
||||||
fgets(line, 2095, f);
|
fgets(line, LINE_SIZE, f);
|
||||||
if (strstr(line, "quiet")) {
|
if (strstr(line, "quiet")) {
|
||||||
close(0);
|
close(0);
|
||||||
close(1);
|
close(1);
|
||||||
close(2);
|
close(2);
|
||||||
}
|
}
|
||||||
|
if ((strstr(line, "finit_debug"))) {
|
||||||
|
debug = 1;
|
||||||
|
}
|
||||||
fclose(f);
|
fclose(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
setsid();
|
setsid();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Parse configuration file
|
||||||
|
*/
|
||||||
|
if ((f = fopen("/etc/finit.conf", "r")) != NULL) {
|
||||||
|
char *x;
|
||||||
|
while (!feof(f)) {
|
||||||
|
fgets(line, LINE_SIZE, f);
|
||||||
|
chomp(line);
|
||||||
|
|
||||||
|
_d("conf: %s", line);
|
||||||
|
|
||||||
|
/* Do this before mounting / read-write */
|
||||||
|
if (MATCH_CMD(line, "check ", x)) {
|
||||||
|
strcpy(cmd, "/sbin/fsck -C -a ");
|
||||||
|
build_cmd(cmd, x, CMD_SIZE);
|
||||||
|
system(cmd);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (MATCH_CMD(line, "user ", x)) {
|
||||||
|
*username = 0;
|
||||||
|
build_cmd(username, x, USERNAME_SIZE);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (MATCH_CMD(line, "host ", x)) {
|
||||||
|
*hostname = 0;
|
||||||
|
build_cmd(hostname, x, HOSTNAME_SIZE);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (MATCH_CMD(line, "module ", x)) {
|
||||||
|
strcpy(cmd, "/sbin/modprobe ");
|
||||||
|
build_cmd(cmd, x, CMD_SIZE);
|
||||||
|
system(cmd);
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Mount filesystems
|
* Mount filesystems
|
||||||
*/
|
*/
|
||||||
debug("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
|
||||||
umask(0);
|
umask(0);
|
||||||
|
|
||||||
|
#ifdef MAKE_DEVICES
|
||||||
mkdir("/dev/shm", 0755);
|
mkdir("/dev/shm", 0755);
|
||||||
mkdir("/dev/pts", 0755);
|
mkdir("/dev/pts", 0755);
|
||||||
|
#endif
|
||||||
|
|
||||||
mount("sysfs", "/sys", "sysfs", 0, NULL);
|
mount("none", "/sys", "sysfs", 0, NULL);
|
||||||
mount("devpts", "/dev/pts", "devpts", 0, "gid=5,mode=620");
|
mount("none", "/dev/pts", "devpts", 0, "gid=5,mode=620");
|
||||||
mount("tmpfs", "/dev/shm", "tmpfs", 0, NULL);
|
mount("none", "/dev/shm", "tmpfs", 0, NULL);
|
||||||
mount("tmpfs", "/tmp", "tmpfs", 0, "mode=1777,size=128m");
|
mount("none", "/tmp", "tmpfs", 0, "mode=1777,size=128m");
|
||||||
|
mount("none", "/var/run", "tmpfs", 0, "mode=0755");
|
||||||
|
mount("none", "/var/lock", "tmpfs", 0, "mode=1777");
|
||||||
|
mount("none", "/proc/bus/usb", "usbfs", 0, NULL);
|
||||||
mount(SYSROOT, "/", NULL, MS_MOVE, NULL);
|
mount(SYSROOT, "/", NULL, MS_MOVE, NULL);
|
||||||
|
|
||||||
unlink("/etc/mtab");
|
_d("make devices");
|
||||||
system("mount -a");
|
|
||||||
|
|
||||||
#ifdef MAKE_DEVICES
|
#ifdef MAKE_DEVICES
|
||||||
debug("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);
|
chardev("/dev/tty0", 0660, 4, 0);
|
||||||
chmod("/dev/mem", 0640);
|
chardev("/dev/tty1", 0660, 4, 1);
|
||||||
chardev("/dev/tty", 0666, 5, 0);
|
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);
|
||||||
|
blkdev("/dev/loop0", 0600, 7, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
unlink("/etc/mtab");
|
||||||
|
system("mount -a");
|
||||||
|
|
||||||
umask(0022);
|
umask(0022);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -200,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");
|
||||||
|
|
||||||
@@ -214,19 +440,41 @@ int main()
|
|||||||
while ((d = readdir(dir)) != NULL) {
|
while ((d = readdir(dir)) != NULL) {
|
||||||
if (isalnum(d->d_name[0]))
|
if (isalnum(d->d_name[0]))
|
||||||
continue;
|
continue;
|
||||||
sprintf(filename, "/etc/resolvconf/run/interface/%s",
|
snprintf(line, LINE_SIZE,
|
||||||
d->d_name);
|
"/etc/resolvconf/run/interface/%s", d->d_name);
|
||||||
unlink(filename);
|
unlink(line);
|
||||||
}
|
}
|
||||||
|
|
||||||
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");
|
||||||
system(RUNPARTS " /etc/resolvconf/update.d");
|
#ifdef BUILTIN_RUNPARTS
|
||||||
|
run_parts("/etc/resolvconf/update.d", "-i", NULL);
|
||||||
|
#else
|
||||||
|
system(RUNPARTS " --arg=i /etc/resolvconf/update.d");
|
||||||
|
#endif
|
||||||
chdir("/");
|
chdir("/");
|
||||||
|
|
||||||
#ifdef TOUCH_ETC_NETWORK_RUN_IFSTATE
|
#ifdef TOUCH_ETC_NETWORK_RUN_IFSTATE
|
||||||
@@ -234,14 +482,13 @@ int main()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ((f = fopen("/etc/hostname", "r")) != NULL) {
|
if ((f = fopen("/etc/hostname", "r")) != NULL) {
|
||||||
fgets(hline, 1023, f);
|
fgets(hostname, HOSTNAME_SIZE, f);
|
||||||
if ((x = strchr(hline, 0x0a)) != NULL)
|
chomp(hostname);
|
||||||
*x = 0;
|
|
||||||
|
|
||||||
sethostname(hline, strlen(hline));
|
|
||||||
fclose(f);
|
fclose(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sethostname(hostname, strlen(hostname));
|
||||||
|
|
||||||
ifconfig("lo", "127.0.0.1", "255.0.0.0", 1);
|
ifconfig("lo", "127.0.0.1", "255.0.0.0", 1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -251,30 +498,50 @@ int main()
|
|||||||
unlink(RANDOMSEED);
|
unlink(RANDOMSEED);
|
||||||
umask(077);
|
umask(077);
|
||||||
copyfile("/dev/urandom", RANDOMSEED, 4096);
|
copyfile("/dev/urandom", RANDOMSEED, 4096);
|
||||||
|
umask(0);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Console setup (for X)
|
||||||
|
*/
|
||||||
|
makepath("/var/run/console");
|
||||||
|
snprintf(line, LINE_SIZE, "/var/run/console/%s", username);
|
||||||
|
touch(line);
|
||||||
|
|
||||||
|
#ifdef PAM_CONSOLE
|
||||||
|
if ((fd = open("/var/run/console/console.lock", O_CREAT|O_WRONLY|O_TRUNC, 0644)) >= 0) {
|
||||||
|
write(fd, username, strlen(username));
|
||||||
|
close(fd);
|
||||||
|
system("/sbin/pam_console_apply");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Misc setup
|
* Misc setup
|
||||||
*/
|
*/
|
||||||
unlink("/var/run/.clean");
|
|
||||||
unlink("/var/lock/.clean");
|
|
||||||
umask(0);
|
|
||||||
mkdir("/tmp/.X11-unix", 01777);
|
mkdir("/tmp/.X11-unix", 01777);
|
||||||
mkdir("/tmp/.ICE-unix", 01777);
|
mkdir("/tmp/.ICE-unix", 01777);
|
||||||
umask(022);
|
umask(022);
|
||||||
|
|
||||||
debug("forking");
|
#ifdef USE_USPLASH
|
||||||
|
system("usplash_write \"PROGRESS 90\"");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
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;
|
||||||
@@ -286,25 +553,48 @@ 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) {
|
||||||
debug("start X as " DEFUSER);
|
_d("start X as %s\n", username);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG_TIMESTAMP
|
||||||
system("su -c startx -l " DEFUSER);
|
sleep(10);
|
||||||
system("/bin/sh");
|
|
||||||
#else
|
|
||||||
system("su -c startx -l " DEFUSER " &> /dev/null");
|
|
||||||
#endif
|
#endif
|
||||||
|
if (debug) {
|
||||||
|
snprintf(line, LINE_SIZE,
|
||||||
|
"su -c startx -l %s\n", username);
|
||||||
|
system(line);
|
||||||
|
system("/bin/sh");
|
||||||
|
} else {
|
||||||
|
snprintf(line, LINE_SIZE,
|
||||||
|
"su -c startx -l %s\n &> /dev/null",
|
||||||
|
username);
|
||||||
|
system(line);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
exit(0);
|
exit(0);
|
||||||
@@ -312,7 +602,7 @@ int main()
|
|||||||
|
|
||||||
/* parent process */
|
/* parent process */
|
||||||
|
|
||||||
system(GETTY "&");
|
|
||||||
sleep(1);
|
sleep(1);
|
||||||
system("/usr/sbin/services.sh &>/dev/null&");
|
system("/usr/sbin/services.sh &>/dev/null&");
|
||||||
|
|
||||||
@@ -328,9 +618,6 @@ int main()
|
|||||||
*/
|
*/
|
||||||
void shutdown(int sig)
|
void shutdown(int sig)
|
||||||
{
|
{
|
||||||
int fd;
|
|
||||||
|
|
||||||
debug("shutdown");
|
|
||||||
touch("/tmp/shutdown");
|
touch("/tmp/shutdown");
|
||||||
|
|
||||||
kill(-1, SIGTERM);
|
kill(-1, SIGTERM);
|
||||||
@@ -341,23 +628,18 @@ void shutdown(int sig)
|
|||||||
|
|
||||||
system("/usr/sbin/alsactl store > /dev/null 2>&1");
|
system("/usr/sbin/alsactl store > /dev/null 2>&1");
|
||||||
system("/sbin/hwclock --systohc --localtime" HWCLOCK_DIRECTISA);
|
system("/sbin/hwclock --systohc --localtime" HWCLOCK_DIRECTISA);
|
||||||
system("/sbin/unionctl.static / --remove / > /dev/null 2>&1");
|
|
||||||
|
|
||||||
kill(-1, SIGKILL);
|
kill(-1, SIGKILL);
|
||||||
|
|
||||||
sync();
|
sync();
|
||||||
sync();
|
sync();
|
||||||
system("/bin/mount -n -o remount,ro /");
|
system("/bin/mount -n -o remount,ro /");
|
||||||
|
|
||||||
system("/sbin/unionctl.static / --remove / > /dev/null 2>&1");
|
system("/sbin/unionctl.static / --remove / > /dev/null 2>&1");
|
||||||
|
|
||||||
if (sig == SIGINT || sig == SIGUSR1)
|
if (sig == SIGINT || sig == SIGUSR1)
|
||||||
reboot(RB_AUTOBOOT);
|
reboot(RB_AUTOBOOT);
|
||||||
|
|
||||||
if ((fd = open("/sys/power/state", O_WRONLY)) >= 0) {
|
reboot(RB_POWER_OFF);
|
||||||
write(fd, "5", 1);
|
|
||||||
close(fd);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -374,12 +656,3 @@ void chld_handler(int sig)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We got a signal (PWR TERM ALRM HUP CONT)
|
|
||||||
*/
|
|
||||||
void signal_handler(int sig)
|
|
||||||
{
|
|
||||||
/* do nothing */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
+37
-42
@@ -34,10 +34,15 @@ 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 to reboot(RB_POWER_OFF) (by Metalshark)
|
||||||
|
- Mount /var/run and /var/lock as tmpfs
|
||||||
|
- Use SIG_IGN instead of empty signal handler (by Metalshark)
|
||||||
|
- Add built-in run-parts option to be used instead of system("run-parts")
|
||||||
|
- Reuse cmdline buffer as hostname and filename buffers
|
||||||
|
- Open terminal in vt2 using openvt
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -74,13 +79,13 @@ 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)
|
||||||
|
|
||||||
|
#define LINE_SIZE 1024
|
||||||
|
|
||||||
void shutdown(int);
|
void shutdown(int);
|
||||||
void signal_handler(int);
|
|
||||||
void chld_handler(int);
|
void chld_handler(int);
|
||||||
|
|
||||||
|
|
||||||
@@ -88,17 +93,16 @@ int main()
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
FILE *f;
|
FILE *f;
|
||||||
char line[2096];
|
char line[LINE_SIZE];
|
||||||
int fd;
|
int fd;
|
||||||
DIR *dir;
|
DIR *dir;
|
||||||
struct dirent *d;
|
struct dirent *d;
|
||||||
char filename[1024];
|
|
||||||
struct sigaction sa, act;
|
struct sigaction sa, act;
|
||||||
char hline[1024];
|
|
||||||
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);
|
||||||
@@ -109,15 +113,15 @@ int main()
|
|||||||
for (i = 1; i < NSIG; i++)
|
for (i = 1; i < NSIG; i++)
|
||||||
SETSIG(sa, i, SIG_IGN, SA_RESTART);
|
SETSIG(sa, i, SIG_IGN, SA_RESTART);
|
||||||
|
|
||||||
SETSIG(sa, SIGINT, shutdown, 0);
|
SETSIG(sa, SIGINT, shutdown, 0);
|
||||||
SETSIG(sa, SIGPWR, signal_handler, 0);
|
SETSIG(sa, SIGPWR, SIG_IGN, 0);
|
||||||
SETSIG(sa, SIGUSR1, shutdown, 0);
|
SETSIG(sa, SIGUSR1, shutdown, 0);
|
||||||
SETSIG(sa, SIGUSR2, shutdown, 0);
|
SETSIG(sa, SIGUSR2, shutdown, 0);
|
||||||
SETSIG(sa, SIGTERM, signal_handler, 0);
|
SETSIG(sa, SIGTERM, SIG_IGN, 0);
|
||||||
SETSIG(sa, SIGALRM, signal_handler, 0);
|
SETSIG(sa, SIGALRM, SIG_IGN, 0);
|
||||||
SETSIG(sa, SIGHUP, signal_handler, 0);
|
SETSIG(sa, SIGHUP, SIG_IGN, 0);
|
||||||
SETSIG(sa, SIGCONT, signal_handler, SA_RESTART);
|
SETSIG(sa, SIGCONT, SIG_IGN, SA_RESTART);
|
||||||
SETSIG(sa, SIGCHLD, chld_handler, SA_RESTART);
|
SETSIG(sa, SIGCHLD, chld_handler, SA_RESTART);
|
||||||
|
|
||||||
/* Block sigchild while forking */
|
/* Block sigchild while forking */
|
||||||
sigemptyset(&nmask);
|
sigemptyset(&nmask);
|
||||||
@@ -130,7 +134,7 @@ int main()
|
|||||||
* Parse kernel parameters
|
* Parse kernel parameters
|
||||||
*/
|
*/
|
||||||
if ((f = fopen("/proc/cmdline", "r")) != NULL) {
|
if ((f = fopen("/proc/cmdline", "r")) != NULL) {
|
||||||
fgets(line, 2095, f);
|
fgets(line, LINE_SIZE, f);
|
||||||
if (strstr(line, "quiet")) {
|
if (strstr(line, "quiet")) {
|
||||||
close(0);
|
close(0);
|
||||||
close(1);
|
close(1);
|
||||||
@@ -149,6 +153,8 @@ int main()
|
|||||||
mount("devpts", "/dev/pts", "devpts", 0, "gid=5,mode=620");
|
mount("devpts", "/dev/pts", "devpts", 0, "gid=5,mode=620");
|
||||||
mount("tmpfs", "/dev/shm", "tmpfs", 0, NULL);
|
mount("tmpfs", "/dev/shm", "tmpfs", 0, NULL);
|
||||||
mount("tmpfs", "/tmp", "tmpfs", 0, "mode=1777,size=128m");
|
mount("tmpfs", "/tmp", "tmpfs", 0, "mode=1777,size=128m");
|
||||||
|
mount("tmpfs", "/var/run", "tmpfs", 0, "mode=0755");
|
||||||
|
mount("tmpfs", "/var/lock", "tmpfs", 0, "mode=1777");
|
||||||
mount("/mnt", "/", NULL, MS_MOVE, NULL);
|
mount("/mnt", "/", NULL, MS_MOVE, NULL);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -172,9 +178,9 @@ int main()
|
|||||||
while ((d = readdir(dir)) != NULL) {
|
while ((d = readdir(dir)) != NULL) {
|
||||||
if (isalnum(d->d_name[0]))
|
if (isalnum(d->d_name[0]))
|
||||||
continue;
|
continue;
|
||||||
sprintf(filename, "/etc/resolvconf/run/interface/%s",
|
snprintf(line, LINE_SIZE,
|
||||||
d->d_name);
|
"/etc/resolvconf/run/interface/%s", d->d_name);
|
||||||
unlink(filename);
|
unlink(line);
|
||||||
}
|
}
|
||||||
|
|
||||||
closedir(dir);
|
closedir(dir);
|
||||||
@@ -184,17 +190,21 @@ int main()
|
|||||||
touch("/etc/resolvconf/run/enable-updates");
|
touch("/etc/resolvconf/run/enable-updates");
|
||||||
|
|
||||||
chdir("/etc/resolvconf/run/interface");
|
chdir("/etc/resolvconf/run/interface");
|
||||||
|
#ifdef BUILTIN_RUNPARTS
|
||||||
|
run_parts("/etc/resolvconf/update.d", "-i", NULL);
|
||||||
|
#else
|
||||||
system("/bin/run-parts --arg=-i /etc/resolvconf/update.d");
|
system("/bin/run-parts --arg=-i /etc/resolvconf/update.d");
|
||||||
|
#endif
|
||||||
chdir("/");
|
chdir("/");
|
||||||
|
|
||||||
touch("/etc/network/run/ifstate");
|
touch("/etc/network/run/ifstate");
|
||||||
|
|
||||||
if ((f = fopen("/etc/hostname", "r")) != NULL) {
|
if ((f = fopen("/etc/hostname", "r")) != NULL) {
|
||||||
fgets(hline, 1023, f);
|
fgets(line, LINE_SIZE, f);
|
||||||
if ((x = strchr(hline, 0x0a)) != NULL)
|
if ((x = strchr(line, 0x0a)) != NULL)
|
||||||
*x = 0;
|
*x = 0;
|
||||||
|
|
||||||
sethostname(hline, strlen(hline));
|
sethostname(line, strlen(line));
|
||||||
fclose(f);
|
fclose(f);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -219,6 +229,8 @@ int main()
|
|||||||
mkdir("/tmp/.ICE-unix", 01777);
|
mkdir("/tmp/.ICE-unix", 01777);
|
||||||
umask(022);
|
umask(022);
|
||||||
|
|
||||||
|
system("/usr/bin/openvt /sbin/getty 38400 tty2&");
|
||||||
|
|
||||||
if (!fork()) {
|
if (!fork()) {
|
||||||
/* child process */
|
/* child process */
|
||||||
|
|
||||||
@@ -228,7 +240,7 @@ int main()
|
|||||||
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);
|
||||||
|
|
||||||
sigemptyset(&act.sa_mask);
|
sigemptyset(&act.sa_mask);
|
||||||
@@ -255,7 +267,6 @@ int main()
|
|||||||
|
|
||||||
/* parent process */
|
/* parent process */
|
||||||
|
|
||||||
system("/sbin/getty 38400 tty3&");
|
|
||||||
sleep(1);
|
sleep(1);
|
||||||
system("/usr/sbin/services.sh &>/dev/null&");
|
system("/usr/sbin/services.sh &>/dev/null&");
|
||||||
|
|
||||||
@@ -271,8 +282,6 @@ int main()
|
|||||||
*/
|
*/
|
||||||
void shutdown(int sig)
|
void shutdown(int sig)
|
||||||
{
|
{
|
||||||
int fd;
|
|
||||||
|
|
||||||
touch("/tmp/shutdown");
|
touch("/tmp/shutdown");
|
||||||
|
|
||||||
kill(-1, SIGTERM);
|
kill(-1, SIGTERM);
|
||||||
@@ -283,23 +292,18 @@ void shutdown(int sig)
|
|||||||
|
|
||||||
system("/usr/sbin/alsactl store > /dev/null 2>&1");
|
system("/usr/sbin/alsactl store > /dev/null 2>&1");
|
||||||
system("/sbin/hwclock --systohc --localtime" HWCLOCK_DIRECTISA);
|
system("/sbin/hwclock --systohc --localtime" HWCLOCK_DIRECTISA);
|
||||||
system("/sbin/unionctl.static / --remove / > /dev/null 2>&1");
|
|
||||||
|
|
||||||
kill(-1, SIGKILL);
|
kill(-1, SIGKILL);
|
||||||
|
|
||||||
sync();
|
sync();
|
||||||
sync();
|
sync();
|
||||||
system("/bin/mount -n -o remount,ro /");
|
system("/bin/mount -n -o remount,ro /");
|
||||||
|
|
||||||
system("/sbin/unionctl.static / --remove / > /dev/null 2>&1");
|
system("/sbin/unionctl.static / --remove / > /dev/null 2>&1");
|
||||||
|
|
||||||
if (sig == SIGINT || sig == SIGUSR1)
|
if (sig == SIGINT || sig == SIGUSR1)
|
||||||
reboot(RB_AUTOBOOT);
|
reboot(RB_AUTOBOOT);
|
||||||
|
|
||||||
if ((fd = open("/sys/power/state", O_WRONLY)) >= 0) {
|
reboot(RB_POWER_OFF);
|
||||||
write(fd, "5", 1);
|
|
||||||
close(fd);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -316,12 +320,3 @@ void chld_handler(int sig)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We got a signal (PWR TERM ALRM HUP CONT)
|
|
||||||
*/
|
|
||||||
void signal_handler(int sig)
|
|
||||||
{
|
|
||||||
/* do nothing */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@@ -240,14 +240,12 @@ void shutdown(int sig)
|
|||||||
|
|
||||||
system("/usr/sbin/alsactl store > /dev/null 2>&1");
|
system("/usr/sbin/alsactl store > /dev/null 2>&1");
|
||||||
system("/sbin/hwclock --systohc --localtime");
|
system("/sbin/hwclock --systohc --localtime");
|
||||||
system("/sbin/unionctl.static / --remove / > /dev/null 2>&1");
|
|
||||||
|
|
||||||
kill(-1, SIGKILL);
|
kill(-1, SIGKILL);
|
||||||
|
|
||||||
sync();
|
sync();
|
||||||
sync();
|
sync();
|
||||||
system("/bin/mount -n -o remount,ro /");
|
system("/bin/mount -n -o remount,ro /");
|
||||||
|
|
||||||
system("/sbin/unionctl.static / --remove / > /dev/null 2>&1");
|
system("/sbin/unionctl.static / --remove / > /dev/null 2>&1");
|
||||||
|
|
||||||
if (sig == SIGINT || sig == SIGUSR1)
|
if (sig == SIGINT || sig == SIGUSR1)
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
user fred
|
||||||
|
module intel-agp
|
||||||
|
module p4-clockmod
|
||||||
|
check /dev/sda3
|
||||||
|
host eviltwin
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
@@ -10,6 +12,14 @@
|
|||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
|
#ifdef BUILTIN_RUNPARTS
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <grp.h>
|
||||||
|
|
||||||
#include "helpers.h"
|
#include "helpers.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -25,6 +35,7 @@ int makepath(char *p)
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
do { *x++ = *p++; } while (*p && *p != '/');
|
do { *x++ = *p++; } while (*p && *p != '/');
|
||||||
|
*x = 0;
|
||||||
ret = mkdir(path, 0777);
|
ret = mkdir(path, 0777);
|
||||||
} while (*p && (*p != '/' || *(p + 1))); /* ignore trailing slash */
|
} while (*p && (*p != '/' || *(p + 1))); /* ignore trailing slash */
|
||||||
|
|
||||||
@@ -89,3 +100,86 @@ void copyfile(char *src, char *dst, int size)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef BUILTIN_RUNPARTS
|
||||||
|
|
||||||
|
#define NUM_SCRIPTS 128 /* ought to be enough for anyone */
|
||||||
|
#define NUM_ARGS 16
|
||||||
|
|
||||||
|
static int cmp(const void *s1, const void *s2)
|
||||||
|
{
|
||||||
|
return strcmp(*(char **)s1, *(char **)s2);
|
||||||
|
}
|
||||||
|
|
||||||
|
int run_parts(char *dir, ...)
|
||||||
|
{
|
||||||
|
DIR *d;
|
||||||
|
struct dirent *e;
|
||||||
|
struct stat st;
|
||||||
|
char *ent[NUM_SCRIPTS];
|
||||||
|
int i, num = 0, argnum = 1;
|
||||||
|
char *args[NUM_ARGS];
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
if (chdir(dir))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if ((d = opendir(dir)) == NULL)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
va_start(ap, dir);
|
||||||
|
while (argnum < NUM_ARGS && (args[argnum++] = va_arg(ap, char *)));
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
while ((e = readdir(d))) {
|
||||||
|
if (e->d_type == DT_REG && stat(e->d_name, &st) == 0) {
|
||||||
|
if (st.st_mode & S_IXUSR) {
|
||||||
|
ent[num++] = strdup(e->d_name);
|
||||||
|
if (num >= NUM_SCRIPTS)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
closedir(d);
|
||||||
|
|
||||||
|
if (num == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
qsort(ent, num, sizeof(char *), cmp);
|
||||||
|
|
||||||
|
for (i = 0; i < num; i++) {
|
||||||
|
args[0] = ent[i];
|
||||||
|
if (!fork()) {
|
||||||
|
execv(ent[i], args);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
wait(NULL);
|
||||||
|
free(ent[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int getgroup(char *s)
|
||||||
|
{
|
||||||
|
struct group *grp;
|
||||||
|
|
||||||
|
if ((grp = getgrnam(s)) == NULL)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return grp->gr_gid;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Other convenience functions
|
||||||
|
*/
|
||||||
|
|
||||||
|
void chomp(char *s)
|
||||||
|
{
|
||||||
|
char *x;
|
||||||
|
|
||||||
|
if ((x = strchr((s), 0x0a)) != NULL)
|
||||||
|
*x = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -4,5 +4,11 @@
|
|||||||
int makepath (char *);
|
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 *);
|
||||||
|
int getgroup (char *);
|
||||||
|
|
||||||
|
#ifdef BUILTIN_RUNPARTS
|
||||||
|
int run_parts (char *, ...);
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
Prevent nash-hotplug to keep running after boot using 100% of cpu
|
||||||
|
|
||||||
|
diff -rud mkinitrd-6.0.34-orig/nash/hotplug.c mkinitrd-6.0.34/nash/hotplug.c
|
||||||
|
--- mkinitrd-6.0.34-orig/nash/hotplug.c 2008-03-06 21:20:34.000000000 -0300
|
||||||
|
+++ mkinitrd-6.0.34/nash/hotplug.c 2008-03-12 18:48:46.000000000 -0300
|
||||||
|
@@ -547,7 +547,7 @@
|
||||||
|
nashLogger(nc, NASH_ERROR, "parent exited without telling us\n");
|
||||||
|
close(nc->hp_childfd);
|
||||||
|
nc->hp_childfd = -1;
|
||||||
|
- break;
|
||||||
|
+ exit(1);
|
||||||
|
}
|
||||||
|
count += rc;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user