rc recipe

master
Philippe Pittoli 2021-03-27 23:53:49 +01:00
parent 540a1a2169
commit d5b6ffccf7
15 changed files with 570 additions and 0 deletions

17
recipes/rc/Makefile Normal file
View File

@ -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

27
recipes/rc/group Normal file
View File

@ -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:

19
recipes/rc/inittab Normal file
View File

@ -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

118
recipes/rc/mdev.conf Normal file
View File

@ -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

8
recipes/rc/passwd Normal file
View File

@ -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:/:

56
recipes/rc/profile Normal file
View File

@ -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

121
recipes/rc/rc Executable file
View File

@ -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

12
recipes/rc/rc.conf Normal file
View File

@ -0,0 +1,12 @@
#
# /etc/rc.conf: system configuration
#
#FONT=default
#KEYMAP=us
#TIMEZONE=UTC
HOSTNAME=host
SYSLOG=sysklogd
SERVICES=()
# End of file

24
recipes/rc/rc.fix Executable file
View File

@ -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

6
recipes/rc/rc.local Executable file
View File

@ -0,0 +1,6 @@
#!/bin/bash
#
# /etc/rc.local: local startup script
#
# End of file

12
recipes/rc/rc.modules Executable file
View File

@ -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

36
recipes/rc/rc.multi Executable file
View File

@ -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

60
recipes/rc/rc.shutdown Executable file
View File

@ -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

49
recipes/rc/rc.single Executable file
View File

@ -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

5
recipes/rc/sysctl.conf Normal file
View File

@ -0,0 +1,5 @@
#
# /etc/sysctl.conf: configuration for system variables, see sysctl.conf(5)
#
# End of file