diff --git a/recipes/rc/Makefile b/recipes/rc/Makefile new file mode 100644 index 0000000..dada9fc --- /dev/null +++ b/recipes/rc/Makefile @@ -0,0 +1,17 @@ +name = rc +version = 0.0.1 + +rc_stuff = rc rc.conf rc.fix rc.local rc.modules rc.multi rc.shutdown rc.single +sources = $(rc_stuff) group inittab mdev.conf passwd sysctl.conf profile + +create_steps = create_fake_root_dir fake_root_install_custom package_base clean_working_dir + +fake_root_install_custom: + $(Q)mkdir -p '$(pkg_fake_root_dir)/proc' + $(Q)mkdir -p '$(pkg_fake_root_dir)/sys' + $(Q)mkdir -p '$(pkg_fake_root_dir)/dev' + $(Q)mkdir -p '$(pkg_fake_root_dir)/etc' + $(Q)cp $(sources) '$(pkg_fake_root_dir)/etc/' + +SYSCONF ?= ../../ +include $(SYSCONF)/package.mk diff --git a/recipes/rc/group b/recipes/rc/group new file mode 100644 index 0000000..a69f97d --- /dev/null +++ b/recipes/rc/group @@ -0,0 +1,27 @@ +root::0:root +bin::1:root,bin,daemon +daemon::2:root,bin,daemon +sys::3:root,bin +adm::4:root,daemon +tty::5: +disk::6:root +lp::7:daemon +mem::8: +kmem::9: +wheel::10:root +ftp::11: +mail::12: +mlocate::13: +dialout::14: +www::15: +audio::16: +video::17: +floppy::18: +tape::19: +scanner::20: +cdrom::21: +input::22: +kvm::23: +nobody::99: +messagebus::81: +users::100: diff --git a/recipes/rc/inittab b/recipes/rc/inittab new file mode 100644 index 0000000..8a1fa2c --- /dev/null +++ b/recipes/rc/inittab @@ -0,0 +1,19 @@ +# +# /etc/inittab: init(8) configuration. +# + +::sysinit:/etc/rc +::wait:/etc/rc.multi +::shutdown:/etc/rc.shutdown + +tty1::respawn:/sbin/getty 38400 tty1 linux +tty2::respawn:/sbin/getty 38400 tty2 linux +tty3::respawn:/sbin/getty 38400 tty3 linux +tty4::respawn:/sbin/getty 38400 tty4 linux +tty5::respawn:/sbin/getty 38400 tty5 linux +tty6::respawn:/sbin/getty 38400 tty6 linux +::respawn:/sbin/getty 38400 ttyS0 vt100 + +::ctrlaltdel:/sbin/reboot + +# End of file diff --git a/recipes/rc/mdev.conf b/recipes/rc/mdev.conf new file mode 100644 index 0000000..9ab69e7 --- /dev/null +++ b/recipes/rc/mdev.conf @@ -0,0 +1,118 @@ +# mdev-like-a-boss + +# Syntax: +# [-]devicename_regex user:group mode [=path]|[>path]|[!] [@|$|*cmd args...] +# [-]$ENVVAR=regex user:group mode [=path]|[>path]|[!] [@|$|*cmd args...] +# [-]@maj,min[-min2] user:group mode [=path]|[>path]|[!] [@|$|*cmd args...] +# +# [-]: do not stop on this match, continue reading mdev.conf +# =: move, >: move and create a symlink +# !: do not create device node +# @|$|*: run cmd if $ACTION=remove, @cmd if $ACTION=add, *cmd in all cases + +# support module loading on hotplug +$MODALIAS=.* root:root 660 @modprobe -b "$MODALIAS" + +# null may already exist; therefore ownership has to be changed with command +null root:root 666 @chmod 666 $MDEV +zero root:root 666 +full root:root 666 +random root:root 444 +urandom root:root 444 +hwrandom root:root 444 +grsec root:root 660 + +# Kernel-based Virtual Machine. +kvm root:kvm 660 + +# vhost-net, to be used with kvm. +vhost-net root:kvm 660 + +kmem root:root 640 +mem root:root 640 +port root:root 640 +# console may already exist; therefore ownership has to be changed with command +console root:tty 600 @chmod 600 $MDEV +ptmx root:tty 666 +pty.* root:tty 660 + +# Typical devices +tty root:tty 666 +tty[0-9]* root:tty 660 +vcsa*[0-9]* root:tty 660 +ttyS[0-9]* root:tty 660 + +# block devices +ram([0-9]*) root:disk 660 >rd/%1 +loop([0-9]+) root:disk 660 >loop/%1 +sd[a-z].* root:disk 660 */opt/mdev/helpers/storage-device +vd[a-z].* root:disk 660 */opt/mdev/helpers/storage-device +hd[a-z].* root:disk 660 */opt/mdev/helpers/storage-device +md[0-9]* root:disk 660 */opt/mdev/helpers/storage-device +dm-[0-9]* root:disk 660 */opt/mdev/helpers/storage-device +bcache[0-9]* root:disk 660 */opt/mdev/helpers/storage-device +mmcblk[0-9].* root:disk 660 */opt/mdev/helpers/storage-device +sr[0-9]* root:cdrom 660 @ln -sf $MDEV cdrom +fd[0-9]* root:floppy 660 + +# Run settle-nics every time new NIC appear. +# If you don't want to auto-populate /etc/mactab with NICs, run 'settle-nis' without '--write-mactab' param. +-SUBSYSTEM=net;DEVPATH=.*/net/.*;.* root:root 600 @/opt/mdev/helpers/settle-nics --write-mactab + +net/tun[0-9]* root:kvm 660 +net/tap[0-9]* root:root 600 + +# alsa sound devices and audio stuff +SUBSYSTEM=sound;.* root:audio 660 @/opt/mdev/helpers/sound-control + +adsp root:audio 660 >sound/ +audio root:audio 660 >sound/ +dsp root:audio 660 >sound/ +mixer root:audio 660 >sound/ +sequencer.* root:audio 660 >sound/ + + +# raid controllers +cciss!(.*) root:disk 660 =cciss/%1 +ida!(.*) root:disk 660 =ida/%1 +rd!(.*) root:disk 660 =rd/%1 + + +fuse root:root 666 + +card[0-9] root:video 660 =dri/ + +agpgart root:root 660 >misc/ +psaux root:root 660 >misc/ +rtc root:root 664 >misc/ + +# input stuff +SUBSYSTEM=input;.* root:input 660 + +# v4l stuff +vbi[0-9] root:video 660 >v4l/ +video[0-9] root:video 660 >v4l/ + +# dvb stuff +dvb.* root:video 660 + +# drm etc +dri/.* root:video 660 + +# Don't create old usbdev* devices. +usbdev[0-9].[0-9]* root:root 660 ! + +# Stop creating x:x:x:x which looks like /dev/dm-* +[0-9]+\:[0-9]+\:[0-9]+\:[0-9]+ root:root 660 ! + +# /dev/cpu support. +microcode root:root 600 =cpu/ +cpu([0-9]+) root:root 600 =cpu/%1/cpuid +msr([0-9]+) root:root 600 =cpu/%1/msr + +# Populate /dev/bus/usb. +SUBSYSTEM=usb;DEVTYPE=usb_device;.* root:root 660 */opt/mdev/helpers/dev-bus-usb + +# Catch-all other devices, Right now useful only for debuging. +#.* root:root 660 */opt/mdev/helpers/catch-all + diff --git a/recipes/rc/passwd b/recipes/rc/passwd new file mode 100644 index 0000000..3b0f587 --- /dev/null +++ b/recipes/rc/passwd @@ -0,0 +1,8 @@ +root:x:0:0:root:/root:/usr/bin/zsh +bin:x:1:1:bin:/bin: +daemon:x:2:2:daemon:/sbin: +mail:x:8:12:mail:/var/spool/mail: +ftp:x:14:11:ftp:/var/ftp: +www:x:15:15:www:/var/www:/bin/false +messagebus:x:81:81::/var/empty:/bin/false +nobody:x:99:99:nobody:/: diff --git a/recipes/rc/profile b/recipes/rc/profile new file mode 100644 index 0000000..2085e1e --- /dev/null +++ b/recipes/rc/profile @@ -0,0 +1,56 @@ +#!/bin/sh + +path_sanitize() { + echo "${1}" | /bin/sed 's|//|/|g' +} + +path_add() { + path="$1" + entry="$(path_sanitize "$2")" + + if [ -z "$path" ]; then + echo "$entry" + else + echo "$path:$entry" + fi +} + +path_remove() { + path="$1" + entry="$(path_sanitize "$2")" + + # If $entry is the last entry. + if [ "${path##*:}" = "$entry" ]; then + echo "${path%:*}" + return 0 + fi + + echo "$path" | /bin/sed "s|$entry:||" +} + +prefix_add() { + prefix="$1" + + PATH="$(path_add "$PATH" "$prefix/bin")" + PATH="$(path_add "$PATH" "$prefix/sbin")" +} + +prefix_remove() { + prefix="$1" + + PATH="$(path_remove "$PATH" "$prefix/bin")" + PATH="$(path_remove "$PATH" "$prefix/sbin")" +} + +PATH= + +# Latest will usually be used first. More can be added with new calls +# to prefix_add. +prefix_add / +prefix_add /usr/weirdos +prefix_add /usr/local + +# Use these instructions to remove already defined prefixes. +#prefix_remove /usr/weirdos +#prefix_remove /usr/local + diff --git a/recipes/rc/rc b/recipes/rc/rc new file mode 100755 index 0000000..101be93 --- /dev/null +++ b/recipes/rc/rc @@ -0,0 +1,121 @@ +#!/bin/zsh +# +# /etc/rc: system boot script +# + +echo "The system is coming up. Please wait." + +# Load configuration +. /etc/rc.conf + +/bin/mount -t proc none /proc +/bin/mount -t sysfs none /sys +/bin/mount -t devtmpfs none /dev + +# Start udev +/sbin/mdev -s +if [ -e /proc/sys/kernel/hotplug ]; then + echo "hotplug: mdev" + echo "/sbin/mdev" > /proc/sys/kernel/hotplug +fi + +# Create device-mapper device nodes and scan for LVM volume groups +if [ -x /sbin/lvm ]; then + /sbin/vgscan --mknodes --ignorelockingfailure + /sbin/vgchange --sysinit -a y +fi + +# Mount root read-only +/bin/mount -o remount,ro / + +if [ -f /forcefsck ]; then +FORCEFSCK="-f" +fi + +# Check filesystems +/sbin/fsck $FORCEFSCK -A -T -a +if [ $? -gt 1 ]; then + 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 + echo "Automatic reboot in progress..." + /bin/umount -a -r + /bin/mount -o remount,ro / + /sbin/reboot -f + exit 0 +fi + +# Mount local filesystems +/bin/mount -o remount,rw / +/bin/mount -a -O no_netdev + +# Activate swap +/sbin/swapon -a + +# Clean up misc files +: > /var/run/utmp +/bin/rm -rf /forcefsck /fastboot /etc/nologin /etc/shutdownpid +(cd /var/run && /usr/bin/find . -name "*.pid" -delete) +(cd /var/lock && /usr/bin/find . ! -type d -delete) +(cd /tmp && /usr/bin/find . ! -name . -delete) +/bin/mkdir -m 1777 /tmp/.ICE-unix + +# Set kernel variables +/sbin/sysctl -p > /dev/null + +# Configure host name +if [ "$HOSTNAME" ]; then + echo "hostname: $HOSTNAME" + /bin/hostname $HOSTNAME +fi + +# Load random seed +/bin/cat /var/lib/urandom/seed > /dev/urandom + +# Configure system clock +if [ "$TIMEZONE" ]; then + /bin/ln -snf /usr/share/zoneinfo/$TIMEZONE /etc/localtime +fi +/sbin/hwclock --hctosys + +# Load console font +if [ "$FONT" ]; then + echo "font: $FONT" + /usr/sbin/setfont $FONT +fi + +# Load console keymap +if [ "$KEYMAP" ]; then + echo "keyboard: $KEYMAP" + + local KEYMAP_FILE + if [ -f "$KEYMAP" ]; then + KEYMAP_FILE="$KEYMAP" + else + KEYMAP_FILE=/usr/share/kbd/keymaps/$KEYMAP.map.gz + fi + + zcat $KEYMAP_FILE | loadkmap +fi + +# Screen blanks after 15 minutes idle time +#/usr/bin/setterm -blank 15 + +# Run module initialization script +if [ -x /etc/rc.modules ]; then + /etc/rc.modules +fi + +# Save boot messages +/bin/dmesg > /var/log/boot + +# End of file diff --git a/recipes/rc/rc.conf b/recipes/rc/rc.conf new file mode 100644 index 0000000..d51106d --- /dev/null +++ b/recipes/rc/rc.conf @@ -0,0 +1,12 @@ +# +# /etc/rc.conf: system configuration +# + +#FONT=default +#KEYMAP=us +#TIMEZONE=UTC +HOSTNAME=host +SYSLOG=sysklogd +SERVICES=() + +# End of file diff --git a/recipes/rc/rc.fix b/recipes/rc/rc.fix new file mode 100755 index 0000000..18d3ec8 --- /dev/null +++ b/recipes/rc/rc.fix @@ -0,0 +1,24 @@ +#!/bin/zsh +# +# /etc/rc.fix: adjustements startup file (multi-user) +# + + +####################################################################### +# X11 font-related checks +####################################################################### +if [ -d /usr/share/fonts/X11 ]; then + for i in `/bin/ls -d /usr/share/fonts/X11/*`; do + if [ ! -f $i/fonts.dir ]; then + mkfontdir $i &> /dev/null + mkfontscale $i &> /dev/null + fi + done +fi + +if [ -d /var/cache/fontconfig ] && [ -z "`/bin/ls /var/cache/fontconfig/`" ]; then + fc-cache --system-only &> /dev/null +fi + + +# End of file diff --git a/recipes/rc/rc.local b/recipes/rc/rc.local new file mode 100755 index 0000000..8f6c40f --- /dev/null +++ b/recipes/rc/rc.local @@ -0,0 +1,6 @@ +#!/bin/bash +# +# /etc/rc.local: local startup script +# + +# End of file diff --git a/recipes/rc/rc.modules b/recipes/rc/rc.modules new file mode 100755 index 0000000..776ae7a --- /dev/null +++ b/recipes/rc/rc.modules @@ -0,0 +1,12 @@ +#!/bin/zsh +# +# /etc/rc.modules: module initialization script +# + +/sbin/depmod -a + +# FIXME: Is this even necessary? Is this even *desirable*? +/bin/busybox find /sys -name modalias -type f -print0 | xargs -0 sort -u \ + | /bin/bin/busybox xargs modprobe -b -a 2> /dev/null + +# End of file diff --git a/recipes/rc/rc.multi b/recipes/rc/rc.multi new file mode 100755 index 0000000..bd48b92 --- /dev/null +++ b/recipes/rc/rc.multi @@ -0,0 +1,36 @@ +#!/bin/zsh +# +# /etc/rc.multi: startup script +# + + +# Load configuration +. /etc/rc.conf + +# Run fixes startup file +if [ -x /etc/rc.fix ]; then + /etc/rc.fix +fi + +# Start services +if [ "$SYSLOG" -o "${SERVICES[*]}" ]; then + echo -n "starting services:" + if [ -f /etc/rc.d/$SYSLOG -a -x /etc/rc.d/$SYSLOG ]; then + echo -n " $SYSLOG" + /etc/rc.d/$SYSLOG start &> /dev/null || echo -n "[ERROR]" + fi + for service in ${SERVICES[@]}; do + echo -n " $service" + /etc/rc.d/$service start &> /tmp/rc.$$ || echo -n "[ERROR]" + /usr/bin/logger -t $service < /tmp/rc.$$ + /bin/rm -f /tmp/rc.$$ + done + echo +fi + +# Run local startup script +if [ -x /etc/rc.local ]; then + /etc/rc.local +fi + +# End of file diff --git a/recipes/rc/rc.shutdown b/recipes/rc/rc.shutdown new file mode 100755 index 0000000..4a17de8 --- /dev/null +++ b/recipes/rc/rc.shutdown @@ -0,0 +1,60 @@ +#!/bin/zsh +# +# /etc/rc.shutdown: system shutdown script +# + +# Load configuration +. /etc/rc.conf + +# Set linefeed mode to avoid staircase effect +/bin/stty onlcr + +echo "The system is coming down. Please wait." + +# Shutdown services +if [ "${SERVICES[*]}" ]; then + for service in "${SERVICES[@]}"; do + R_SERVICES=($service ${R_SERVICES[@]}) + done + for service in "${R_SERVICES[@]}"; do + /etc/rc.d/$service stop &> /tmp/rc.$$ + /usr/bin/logger -t $service < /tmp/rc.$$ + /bin/rm -f /tmp/rc.$$ + done +fi + +# Terminate all processes +/usr/sbin/killall5 -15 +/bin/sleep 5 +/usr/sbin/killall5 -9 + +# Save random seed +/bin/dd if=/dev/urandom of=/var/lib/urandom/seed count=1 2> /dev/null + +# Save system clock +/sbin/hwclock --systohc + +# Write to wtmp file before unmounting +/sbin/halt -w + +# Turn off swap +/sbin/swapoff -a + +# Unmount file systems +/bin/umount -a -d -r -t nosysfs,noproc,nodevtmpfs +if [ -x /sbin/lvm ]; then + /sbin/vgchange --ignorelockingfailure -a n +fi +/bin/umount -a -r + +# Remount root filesystem read-only +/bin/mount -o remount,ro / + +# Power off or reboot +if [ "$RUNLEVEL" = "0" ]; then + /sbin/poweroff -d -f -i +else + /sbin/reboot -d -f -i +fi + +# End of file diff --git a/recipes/rc/rc.single b/recipes/rc/rc.single new file mode 100755 index 0000000..9df0203 --- /dev/null +++ b/recipes/rc/rc.single @@ -0,0 +1,49 @@ +#!/bin/zsh +# +# /etc/rc.single: single-user startup script +# + +# Load configuration +. /etc/rc.conf + +if [ "$PREVLEVEL" = "2" ]; then + # Shutdown services + if [ "${SERVICES[*]}" ]; then + for service in "${SERVICES[@]}"; do + R_SERVICES=($service ${R_SERVICES[@]}) + done + for service in "${R_SERVICES[@]}"; do + /etc/rc.d/$service stop &> /tmp/rc.$$ + /usr/bin/logger -t $service -f /tmp/rc.$$ + /bin/rm -f /tmp/rc.$$ + done + fi +fi + +if [ "$PREVLEVEL" != "N" ]; then + # Terminate all processes + /sbin/killall5 -15 + /bin/sleep 5 + /sbin/killall5 -9 + + if ! /bin/mountpoint -q /proc ; then + /bin/mount -n -t proc none /proc + fi + if ! /bin/mountpoint -q /sys ; then + /bin/mount -n -t sysfs none /sys + fi + + # Start udev + /sbin/start_udev + + if [ -f /etc/rc.d/$SYSLOG -a -x /etc/rc.d/$SYSLOG ]; then + /etc/rc.d/$SYSLOG start &> /dev/null + fi +fi + +if [ "$RUNLEVEL" = "1" ]; then + # Enter single-user mode + exec /sbin/init -t1 S +fi + +# End of file diff --git a/recipes/rc/sysctl.conf b/recipes/rc/sysctl.conf new file mode 100644 index 0000000..48c0484 --- /dev/null +++ b/recipes/rc/sysctl.conf @@ -0,0 +1,5 @@ +# +# /etc/sysctl.conf: configuration for system variables, see sysctl.conf(5) +# + +# End of file