mirror of
https://github.com/Poltern/lfs-ru.git
synced 2024-10-18 11:50:21 +03:00
Added bootscripts
This commit is contained in:
parent
8bc6a8314e
commit
b9127d642e
1179
bootscripts/ChangeLog
Normal file
1179
bootscripts/ChangeLog
Normal file
File diff suppressed because it is too large
Load Diff
132
bootscripts/Makefile
Normal file
132
bootscripts/Makefile
Normal file
@ -0,0 +1,132 @@
|
||||
ETCDIR=${DESTDIR}/etc
|
||||
LIBDIR=${DESTDIR}/lib
|
||||
SERVICEDIR=${LIBDIR}/services
|
||||
MAN8=${DESTDIR}/usr/share/man/man8
|
||||
SBIN=${DESTDIR}/sbin
|
||||
MODE=754
|
||||
DIRMODE=755
|
||||
CONFMODE=644
|
||||
|
||||
all: links
|
||||
|
||||
install: all
|
||||
|
||||
create-dirs:
|
||||
install -d -m ${DIRMODE} ${ETCDIR}/rc.d/rc0.d
|
||||
install -d -m ${DIRMODE} ${ETCDIR}/rc.d/rc1.d
|
||||
install -d -m ${DIRMODE} ${ETCDIR}/rc.d/rc2.d
|
||||
install -d -m ${DIRMODE} ${ETCDIR}/rc.d/rc3.d
|
||||
install -d -m ${DIRMODE} ${ETCDIR}/rc.d/rc4.d
|
||||
install -d -m ${DIRMODE} ${ETCDIR}/rc.d/rc5.d
|
||||
install -d -m ${DIRMODE} ${ETCDIR}/rc.d/rc6.d
|
||||
install -d -m ${DIRMODE} ${ETCDIR}/rc.d/rcS.d
|
||||
install -d -m ${DIRMODE} ${ETCDIR}/rc.d/init.d
|
||||
install -d -m ${DIRMODE} ${ETCDIR}/sysconfig
|
||||
install -d -m ${DIRMODE} ${LIBDIR}
|
||||
install -d -m ${DIRMODE} ${SERVICEDIR}
|
||||
install -d -m ${DIRMODE} ${MAN8}
|
||||
install -d -m ${DIRMODE} ${SBIN}
|
||||
ln -sfn services ${LIBDIR}/lsb
|
||||
ln -sfn rc.d/init.d ${ETCDIR}/init.d
|
||||
|
||||
files: create-dirs
|
||||
install -m ${MODE} lfs/init.d/checkfs ${ETCDIR}/rc.d/init.d/
|
||||
install -m ${MODE} lfs/init.d/cleanfs ${ETCDIR}/rc.d/init.d/
|
||||
install -m ${MODE} lfs/init.d/halt ${ETCDIR}/rc.d/init.d/
|
||||
install -m ${MODE} lfs/init.d/console ${ETCDIR}/rc.d/init.d/
|
||||
install -m ${MODE} lfs/init.d/localnet ${ETCDIR}/rc.d/init.d/
|
||||
install -m ${MODE} lfs/init.d/modules ${ETCDIR}/rc.d/init.d/
|
||||
install -m ${MODE} lfs/init.d/mountfs ${ETCDIR}/rc.d/init.d/
|
||||
install -m ${MODE} lfs/init.d/mountvirtfs ${ETCDIR}/rc.d/init.d/
|
||||
install -m ${MODE} lfs/init.d/network ${ETCDIR}/rc.d/init.d/
|
||||
install -m ${MODE} lfs/init.d/rc ${ETCDIR}/rc.d/init.d/
|
||||
install -m ${MODE} lfs/init.d/reboot ${ETCDIR}/rc.d/init.d/
|
||||
install -m ${MODE} lfs/init.d/sendsignals ${ETCDIR}/rc.d/init.d/
|
||||
install -m ${MODE} lfs/init.d/setclock ${ETCDIR}/rc.d/init.d/
|
||||
install -m ${MODE} lfs/init.d/swap ${ETCDIR}/rc.d/init.d/
|
||||
install -m ${MODE} lfs/init.d/sysctl ${ETCDIR}/rc.d/init.d/
|
||||
install -m ${MODE} lfs/init.d/sysklogd ${ETCDIR}/rc.d/init.d/
|
||||
install -m ${MODE} lfs/init.d/template ${ETCDIR}/rc.d/init.d/
|
||||
install -m ${MODE} lfs/init.d/udev ${ETCDIR}/rc.d/init.d/
|
||||
install -m ${MODE} lfs/init.d/udev_retry ${ETCDIR}/rc.d/init.d/
|
||||
install -m ${MODE} lfs/sbin/ifup ${SBIN}
|
||||
install -m ${MODE} lfs/sbin/ifdown ${SBIN}
|
||||
install -m ${CONFMODE} lfs/sbin/ifup.8 ${MAN8}
|
||||
ln -sf ifup.8 ${MAN8}/ifdown.8
|
||||
install -m ${MODE} lfs/lib/services/ipv4-static-route ${SERVICEDIR}
|
||||
install -m ${MODE} lfs/lib/services/ipv4-static ${SERVICEDIR}
|
||||
install -m ${CONFMODE} lfs/lib/services/init-functions ${SERVICEDIR}
|
||||
|
||||
if [ ! -f ${ETCDIR}/sysconfig/createfiles ]; then \
|
||||
install -m ${CONFMODE} lfs/sysconfig/createfiles ${ETCDIR}/sysconfig/ ;\
|
||||
fi
|
||||
if [ ! -f ${ETCDIR}/sysconfig/modules ]; then \
|
||||
install -m ${CONFMODE} lfs/sysconfig/modules ${ETCDIR}/sysconfig/ ;\
|
||||
fi
|
||||
if [ ! -f ${ETCDIR}/sysconfig/udev_retry ]; then \
|
||||
install -m ${CONFMODE} lfs/sysconfig/udev_retry ${ETCDIR}/sysconfig/ ;\
|
||||
fi
|
||||
if [ ! -f ${ETCDIR}/sysconfig/rc.site ]; then \
|
||||
install -m ${CONFMODE} lfs/sysconfig/rc.site ${ETCDIR}/sysconfig/ ;\
|
||||
fi
|
||||
|
||||
links: rcS rc0 rc1 rc2 rc3 rc4 rc5 rc6
|
||||
|
||||
rcS: files
|
||||
ln -sf ../init.d/mountvirtfs ${ETCDIR}/rc.d/rcS.d/S00mountvirtfs
|
||||
ln -sf ../init.d/modules ${ETCDIR}/rc.d/rcS.d/S05modules
|
||||
ln -sf ../init.d/localnet ${ETCDIR}/rc.d/rcS.d/S08localnet
|
||||
ln -sf ../init.d/udev ${ETCDIR}/rc.d/rcS.d/S10udev
|
||||
ln -sf ../init.d/swap ${ETCDIR}/rc.d/rcS.d/S20swap
|
||||
ln -sf ../init.d/checkfs ${ETCDIR}/rc.d/rcS.d/S30checkfs
|
||||
ln -sf ../init.d/mountfs ${ETCDIR}/rc.d/rcS.d/S40mountfs
|
||||
ln -sf ../init.d/cleanfs ${ETCDIR}/rc.d/rcS.d/S45cleanfs
|
||||
ln -sf ../init.d/udev_retry ${ETCDIR}/rc.d/rcS.d/S50udev_retry
|
||||
ln -sf ../init.d/console ${ETCDIR}/rc.d/rcS.d/S70console
|
||||
ln -sf ../init.d/sysctl ${ETCDIR}/rc.d/rcS.d/S90sysctl
|
||||
|
||||
rc0: files
|
||||
ln -sf ../init.d/network ${ETCDIR}/rc.d/rc0.d/K80network
|
||||
ln -sf ../init.d/sysklogd ${ETCDIR}/rc.d/rc0.d/K90sysklogd
|
||||
ln -sf ../init.d/sendsignals ${ETCDIR}/rc.d/rc0.d/K92sendsignals
|
||||
ln -sf ../init.d/swap ${ETCDIR}/rc.d/rc0.d/K94swap
|
||||
ln -sf ../init.d/mountfs ${ETCDIR}/rc.d/rc0.d/K96mountfs
|
||||
ln -sf ../init.d/localnet ${ETCDIR}/rc.d/rc0.d/K98localnet
|
||||
ln -sf ../init.d/halt ${ETCDIR}/rc.d/rc0.d/S99halt
|
||||
|
||||
rc1: files
|
||||
ln -sf ../init.d/network ${ETCDIR}/rc.d/rc1.d/K80network
|
||||
ln -sf ../init.d/sysklogd ${ETCDIR}/rc.d/rc1.d/K90sysklogd
|
||||
|
||||
rc2: files
|
||||
ln -sf ../init.d/network ${ETCDIR}/rc.d/rc2.d/S10network
|
||||
ln -sf ../init.d/sysklogd ${ETCDIR}/rc.d/rc2.d/S20sysklogd
|
||||
|
||||
rc3: files
|
||||
ln -sf ../init.d/sysklogd ${ETCDIR}/rc.d/rc3.d/S10sysklogd
|
||||
ln -sf ../init.d/network ${ETCDIR}/rc.d/rc3.d/S20network
|
||||
|
||||
rc4: files
|
||||
ln -sf ../init.d/sysklogd ${ETCDIR}/rc.d/rc4.d/S10sysklogd
|
||||
ln -sf ../init.d/network ${ETCDIR}/rc.d/rc4.d/S20network
|
||||
|
||||
rc5: files
|
||||
ln -sf ../init.d/sysklogd ${ETCDIR}/rc.d/rc5.d/S10sysklogd
|
||||
ln -sf ../init.d/network ${ETCDIR}/rc.d/rc5.d/S20network
|
||||
|
||||
rc6: files
|
||||
ln -sf ../init.d/network ${ETCDIR}/rc.d/rc6.d/K80network
|
||||
ln -sf ../init.d/sysklogd ${ETCDIR}/rc.d/rc6.d/K90sysklogd
|
||||
ln -sf ../init.d/sendsignals ${ETCDIR}/rc.d/rc6.d/K92sendsignals
|
||||
ln -sf ../init.d/swap ${ETCDIR}/rc.d/rc6.d/K94swap
|
||||
ln -sf ../init.d/mountfs ${ETCDIR}/rc.d/rc6.d/K96mountfs
|
||||
ln -sf ../init.d/localnet ${ETCDIR}/rc.d/rc6.d/K98localnet
|
||||
ln -sf ../init.d/reboot ${ETCDIR}/rc.d/rc6.d/S99reboot
|
||||
|
||||
uninstall:
|
||||
rm -rf ${DESTDIR}/lib/services ${DESTDIR}/lib/lsb ${ETCDIR}/rc.d ${ETCDIR}/init.d \
|
||||
${SBIN}/ifup ${SBIN}/ifdown ${MAN8}/ifup.8 ${MAN8}/ifdown.8 \
|
||||
${ETCDIR}/sysconfig/rc
|
||||
|
||||
.PHONY: all create-dirs install files links rcS rc0 rc1 rc2 rc3 rc4 rc5 rc6 uninstall
|
||||
|
74
bootscripts/README
Normal file
74
bootscripts/README
Normal file
@ -0,0 +1,74 @@
|
||||
Network Configuration:
|
||||
Script Files:
|
||||
/etc/rc.d/init.d/*
|
||||
/sbin/ifup
|
||||
/sbin/ifdown
|
||||
/lib/lsb/*
|
||||
|
||||
Configuration Files:
|
||||
/etc/sysconfig/ifconfig.*
|
||||
Note: ifconfig.* files will be processed
|
||||
in alphanumerical order on boot, and reversed on shutdown.
|
||||
- IFACE : The interface that is being configured (e.g. eth0)
|
||||
- SERVICE: Which script to run in services directory.
|
||||
- ONBOOT : If set to yes, this interface will be started on bootup
|
||||
|
||||
/etc/sysconfig/network
|
||||
- HOSTNAME: Value of the system's hostname (From LFS Book)
|
||||
This value may also be set in /etc/sysconfig/rc.site
|
||||
|
||||
Additional Configuration:
|
||||
SERVICE ipv4-static:
|
||||
- IP : Static IP Address
|
||||
- GATEWAY : Specifies the IP Address of the gateway server
|
||||
- PREFIX : CIDR prefix of IP Address, defaults to 24 if not set
|
||||
- PEER : IP Address of peer (for point-to-point connections and tunnels)
|
||||
- BROADCAST: Broadcast address
|
||||
|
||||
SERVICE ipv4-static-route:
|
||||
- TYPE : network (default type if not specified), default, host or unreachable
|
||||
- IP : IP Address of target (for network, host and unreachable)
|
||||
- PREFIX : CIDR prefix of target (for network, host and unreachable)
|
||||
- GATEWAY: IP Address of gateway to reach target (for network and default)
|
||||
|
||||
|
||||
SetClock configuration:
|
||||
|
||||
Configuration Files:
|
||||
/etc/sysconfig/clock or /etc/sysconfig/rc.site
|
||||
- UTC: 1 assumes hwclock is in UTC
|
||||
0 assumes hwclock is in local time
|
||||
- CLOCKPARAMS: any additional options to be passed to hwclock
|
||||
|
||||
CleanFS configuration:
|
||||
Script Files:
|
||||
/etc/rc.d/init.d/cleanfs
|
||||
|
||||
Configuration Files:
|
||||
/etc/sysconfig/rc.site
|
||||
- SKIPTMPCLEAN: skips cleaning of /tmp directory
|
||||
|
||||
/etc/sysconfig/createfiles
|
||||
Each line is parsed, using space as a deliminator.
|
||||
[NAME] [TYPE] [PERMISSIONS] [USER] [GROUP]
|
||||
The below fields are currently only used on dev type.
|
||||
([DEV TYPE] [MAJOR#] [MINOR#])
|
||||
Name:
|
||||
File/Directory/Device name
|
||||
Type:
|
||||
dir: creates a directory
|
||||
file: creates a file
|
||||
dev: creates a device
|
||||
Permissions:
|
||||
chmod the created file
|
||||
User/Group:
|
||||
chown the created file/dir to this user/group
|
||||
Dev Type:
|
||||
char: character [needs MAJOR#, MINOR#]
|
||||
block: block [needs MAJOR#, MINOR#]
|
||||
pipe: pipe
|
||||
Major#:
|
||||
Used by character and block devices.
|
||||
Minor#:
|
||||
Used by character and block devices.
|
||||
|
149
bootscripts/lfs/init.d/checkfs
Normal file
149
bootscripts/lfs/init.d/checkfs
Normal file
@ -0,0 +1,149 @@
|
||||
#!/bin/sh
|
||||
########################################################################
|
||||
# Begin checkfs
|
||||
#
|
||||
# Description : File System Check
|
||||
#
|
||||
# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
|
||||
# A. Luebke - luebke@users.sourceforge.net
|
||||
# DJ Lucas - dj@linuxfromscratch.org
|
||||
# Update : Bruce Dubbs - bdubbs@linuxfromscratch.org
|
||||
#
|
||||
# Version : LFS 7.0
|
||||
#
|
||||
# Based on checkfs script from LFS-3.1 and earlier.
|
||||
#
|
||||
# From man fsck
|
||||
# 0 - No errors
|
||||
# 1 - File system errors corrected
|
||||
# 2 - System should be rebooted
|
||||
# 4 - File system errors left uncorrected
|
||||
# 8 - Operational error
|
||||
# 16 - Usage or syntax error
|
||||
# 32 - Fsck canceled by user request
|
||||
# 128 - Shared library error
|
||||
#
|
||||
#########################################################################
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: checkfs
|
||||
# Required-Start: udev swap
|
||||
# Should-Start:
|
||||
# Required-Stop:
|
||||
# Should-Stop:
|
||||
# Default-Start: S
|
||||
# Default-Stop:
|
||||
# Short-Description: Checks local filesystems before mounting.
|
||||
# Description: Checks local filesystmes before mounting.
|
||||
# X-LFS-Provided-By: LFS
|
||||
### END INIT INFO
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
case "${1}" in
|
||||
start)
|
||||
if [ -f /fastboot ]; then
|
||||
msg="/fastboot found, will omit "
|
||||
msg="${msg} file system checks as requested.\n"
|
||||
log_info_msg "${msg}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
log_info_msg "Mounting root file system in read-only mode... "
|
||||
mount -n -o remount,ro / >/dev/null
|
||||
|
||||
if [ ${?} != 0 ]; then
|
||||
log_failure_msg2
|
||||
msg="\n\nCannot check root "
|
||||
msg="${msg}filesystem because it could not be mounted "
|
||||
msg="${msg}in read-only mode.\n\n"
|
||||
msg="${msg}After you press Enter, this system will be "
|
||||
msg="${msg}halted and powered off.\n\n"
|
||||
log_failure_msg "${msg}"
|
||||
|
||||
log_info_msg "Press Enter to continue..."
|
||||
wait_for_user
|
||||
/etc/rc.d/init.d/halt stop
|
||||
else
|
||||
log_success_msg2
|
||||
fi
|
||||
|
||||
if [ -f /forcefsck ]; then
|
||||
msg="/forcefsck found, forcing file"
|
||||
msg="${msg} system checks as requested."
|
||||
log_success_msg "$msg"
|
||||
options="-f"
|
||||
else
|
||||
options=""
|
||||
fi
|
||||
|
||||
log_info_msg "Checking file systems..."
|
||||
# Note: -a option used to be -p; but this fails e.g. on fsck.minix
|
||||
if is_true "$VERBOSE_FSCK"; then
|
||||
fsck ${options} -a -A -C -T
|
||||
else
|
||||
fsck ${options} -a -A -C -T >/dev/null
|
||||
fi
|
||||
|
||||
error_value=${?}
|
||||
|
||||
if [ "${error_value}" = 0 ]; then
|
||||
log_success_msg2
|
||||
fi
|
||||
|
||||
if [ "${error_value}" = 1 ]; then
|
||||
msg="\nWARNING:\n\nFile system errors "
|
||||
msg="${msg}were found and have been corrected.\n"
|
||||
msg="${msg} You may want to double-check that "
|
||||
msg="${msg}everything was fixed properly."
|
||||
log_warning_msg "$msg"
|
||||
fi
|
||||
|
||||
if [ "${error_value}" = 2 -o "${error_value}" = 3 ]; then
|
||||
msg="\nWARNING:\n\nFile system errors "
|
||||
msg="${msg}were found and have been been "
|
||||
msg="${msg}corrected, but the nature of the "
|
||||
msg="${msg}errors require this system to be rebooted.\n\n"
|
||||
msg="${msg}After you press enter, "
|
||||
msg="${msg}this system will be rebooted\n\n"
|
||||
log_failure_msg "$msg"
|
||||
|
||||
log_info_msg "Press Enter to continue..."
|
||||
wait_for_user
|
||||
reboot -f
|
||||
fi
|
||||
|
||||
if [ "${error_value}" -gt 3 -a "${error_value}" -lt 16 ]; then
|
||||
msg="\nFAILURE:\n\nFile system errors "
|
||||
msg="${msg}were encountered that could not be "
|
||||
msg="${msg}fixed automatically.\nThis system "
|
||||
msg="${msg}cannot continue to boot and will "
|
||||
msg="${msg}therefore be halted until those "
|
||||
msg="${msg}errors are fixed manually by a "
|
||||
msg="${msg}System Administrator.\n\n"
|
||||
msg="${msg}After you press Enter, this system will be "
|
||||
msg="${msg}halted and powered off.\n\n"
|
||||
log_failure_msg "$msg"
|
||||
|
||||
log_info_msg "Press Enter to continue..."
|
||||
wait_for_user
|
||||
/etc/rc.d/init.d/halt stop
|
||||
fi
|
||||
|
||||
if [ "${error_value}" -ge 16 ]; then
|
||||
msg="FAILURE:\n\nUnexpected failure "
|
||||
msg="${msg}running fsck. Exited with error "
|
||||
msg="${msg} code: ${error_value}.\n"
|
||||
log_info_msg $msg
|
||||
exit ${error_value}
|
||||
fi
|
||||
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "Usage: ${0} {start}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# End checkfs
|
122
bootscripts/lfs/init.d/cleanfs
Normal file
122
bootscripts/lfs/init.d/cleanfs
Normal file
@ -0,0 +1,122 @@
|
||||
#!/bin/sh
|
||||
########################################################################
|
||||
# Begin cleanfs
|
||||
#
|
||||
# Description : Clean file system
|
||||
#
|
||||
# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
|
||||
# DJ Lucas - dj@linuxfromscratch.org
|
||||
# Update : Bruce Dubbs - bdubbs@linuxfromscratch.org
|
||||
#
|
||||
# Version : LFS 7.0
|
||||
#
|
||||
########################################################################
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: cleanfs
|
||||
# Required-Start: $local_fs
|
||||
# Should-Start:
|
||||
# Required-Stop:
|
||||
# Should-Stop:
|
||||
# Default-Start: S
|
||||
# Default-Stop:
|
||||
# Short-Description: Cleans temporary directories early in the boot process.
|
||||
# Description: Cleans temporary directories /run, /var/lock, and
|
||||
# optionally, /tmp. cleanfs also creates /run/utmp
|
||||
# and any files defined in /etc/sysconfig/createfiles.
|
||||
# X-LFS-Provided-By: LFS
|
||||
### END INIT INFO
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
# Function to create files/directory on boot.
|
||||
create_files()
|
||||
{
|
||||
# Input to file descriptor 9 and output to stdin (redirection)
|
||||
exec 9>&0 < /etc/sysconfig/createfiles
|
||||
|
||||
while read name type perm usr grp dtype maj min junk
|
||||
do
|
||||
# Ignore comments and blank lines.
|
||||
case "${name}" in
|
||||
""|\#*) continue ;;
|
||||
esac
|
||||
|
||||
# Ignore existing files.
|
||||
if [ ! -e "${name}" ]; then
|
||||
# Create stuff based on its type.
|
||||
case "${type}" in
|
||||
dir)
|
||||
mkdir "${name}"
|
||||
;;
|
||||
file)
|
||||
:> "${name}"
|
||||
;;
|
||||
dev)
|
||||
case "${dtype}" in
|
||||
char)
|
||||
mknod "${name}" c ${maj} ${min}
|
||||
;;
|
||||
block)
|
||||
mknod "${name}" b ${maj} ${min}
|
||||
;;
|
||||
pipe)
|
||||
mknod "${name}" p
|
||||
;;
|
||||
*)
|
||||
log_warning_msg "\nUnknown device type: ${dtype}"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
log_warning_msg "\nUnknown type: ${type}"
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
|
||||
# Set up the permissions, too.
|
||||
chown ${usr}:${grp} "${name}"
|
||||
chmod ${perm} "${name}"
|
||||
fi
|
||||
done
|
||||
|
||||
# Close file descriptor 9 (end redirection)
|
||||
exec 0>&9 9>&-
|
||||
return 0
|
||||
}
|
||||
|
||||
case "${1}" in
|
||||
start)
|
||||
log_info_msg "Cleaning file systems:"
|
||||
|
||||
if [ "${SKIPTMPCLEAN}" = "" ]; then
|
||||
log_info_msg2 " /tmp"
|
||||
cd /tmp &&
|
||||
find . -xdev -mindepth 1 ! -name lost+found -delete || failed=1
|
||||
fi
|
||||
|
||||
> /run/utmp
|
||||
|
||||
if grep -q '^utmp:' /etc/group ; then
|
||||
chmod 664 /run/utmp
|
||||
chgrp utmp /run/utmp
|
||||
fi
|
||||
|
||||
(exit ${failed})
|
||||
evaluate_retval
|
||||
|
||||
if grep -E -qv '^(#|$)' /etc/sysconfig/createfiles 2>/dev/null; then
|
||||
log_info_msg "Creating files and directories... "
|
||||
create_files # Always returns 0
|
||||
evaluate_retval
|
||||
fi
|
||||
|
||||
exit $failed
|
||||
;;
|
||||
*)
|
||||
echo "Usage: ${0} {start}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# End cleanfs
|
107
bootscripts/lfs/init.d/console
Normal file
107
bootscripts/lfs/init.d/console
Normal file
@ -0,0 +1,107 @@
|
||||
#!/bin/sh
|
||||
########################################################################
|
||||
# Begin console
|
||||
#
|
||||
# Description : Sets keymap and screen font
|
||||
#
|
||||
# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
|
||||
# Alexander E. Patrakov
|
||||
# DJ Lucas - dj@linuxfromscratch.org
|
||||
# Update : Bruce Dubbs - bdubbs@linuxfromscratch.org
|
||||
#
|
||||
# Version : LFS 7.0
|
||||
#
|
||||
########################################################################
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: console
|
||||
# Required-Start: $local_fs
|
||||
# Should-Start: udev_retry
|
||||
# Required-Stop:
|
||||
# Should-Stop:
|
||||
# Default-Start: S
|
||||
# Default-Stop:
|
||||
# Short-Description: Sets up a localised console.
|
||||
# Description: Sets up fonts and language settings for the user's
|
||||
# local as defined by /etc/sysconfig/console.
|
||||
# X-LFS-Provided-By: LFS
|
||||
### END INIT INFO
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
# Native English speakers probably don't have /etc/sysconfig/console at all
|
||||
[ -r /etc/sysconfig/console ] && . /etc/sysconfig/console
|
||||
|
||||
failed=0
|
||||
|
||||
case "${1}" in
|
||||
start)
|
||||
# See if we need to do anything
|
||||
if [ -z "${KEYMAP}" ] && [ -z "${KEYMAP_CORRECTIONS}" ] &&
|
||||
[ -z "${FONT}" ] && [ -z "${LEGACY_CHARSET}" ] &&
|
||||
! is_true "${UNICODE}"; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# There should be no bogus failures below this line!
|
||||
log_info_msg "Setting up Linux console..."
|
||||
|
||||
# Figure out if a framebuffer console is used
|
||||
[ -d /sys/class/graphics/fb0 ] && use_fb=1 || use_fb=0
|
||||
|
||||
# Figure out the command to set the console into the
|
||||
# desired mode
|
||||
is_true "${UNICODE}" &&
|
||||
MODE_COMMAND="echo -en '\033%G' && kbd_mode -u" ||
|
||||
MODE_COMMAND="echo -en '\033%@\033(K' && kbd_mode -a"
|
||||
|
||||
# On framebuffer consoles, font has to be set for each vt in
|
||||
# UTF-8 mode. This doesn't hurt in non-UTF-8 mode also.
|
||||
|
||||
! is_true "${use_fb}" || [ -z "${FONT}" ] ||
|
||||
MODE_COMMAND="${MODE_COMMAND} && setfont ${FONT}"
|
||||
|
||||
# Apply that command to all consoles mentioned in
|
||||
# /etc/inittab. Important: in the UTF-8 mode this should
|
||||
# happen before setfont, otherwise a kernel bug will
|
||||
# show up and the unicode map of the font will not be
|
||||
# used.
|
||||
|
||||
for TTY in `grep '^[^#].*respawn:/sbin/agetty' /etc/inittab |
|
||||
grep -o '\btty[[:digit:]]*\b'`
|
||||
do
|
||||
openvt -f -w -c ${TTY#tty} -- \
|
||||
/bin/sh -c "${MODE_COMMAND}" || failed=1
|
||||
done
|
||||
|
||||
# Set the font (if not already set above) and the keymap
|
||||
[ "${use_fb}" == "1" ] || [ -z "${FONT}" ] || setfont $FONT || failed=1
|
||||
|
||||
[ -z "${KEYMAP}" ] ||
|
||||
loadkeys ${KEYMAP} >/dev/null 2>&1 ||
|
||||
failed=1
|
||||
|
||||
[ -z "${KEYMAP_CORRECTIONS}" ] ||
|
||||
loadkeys ${KEYMAP_CORRECTIONS} >/dev/null 2>&1 ||
|
||||
failed=1
|
||||
|
||||
# Convert the keymap from $LEGACY_CHARSET to UTF-8
|
||||
[ -z "$LEGACY_CHARSET" ] ||
|
||||
dumpkeys -c "$LEGACY_CHARSET" | loadkeys -u >/dev/null 2>&1 ||
|
||||
failed=1
|
||||
|
||||
# If any of the commands above failed, the trap at the
|
||||
# top would set $failed to 1
|
||||
( exit $failed )
|
||||
evaluate_retval
|
||||
|
||||
exit $failed
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: ${0} {start}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# End console
|
43
bootscripts/lfs/init.d/halt
Normal file
43
bootscripts/lfs/init.d/halt
Normal file
@ -0,0 +1,43 @@
|
||||
#!/bin/sh
|
||||
########################################################################
|
||||
# Begin halt
|
||||
#
|
||||
# Description : Halt Script
|
||||
#
|
||||
# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
|
||||
# DJ Lucas - dj@linuxfromscratch.org
|
||||
# Update : Bruce Dubbs - bdubbs@linuxfromscratch.org
|
||||
# : Pierre Labastie - pierre@linuxfromscratch.org
|
||||
#
|
||||
# Version : LFS 7.0
|
||||
#
|
||||
# Notes : Update March 24th, 2022: change "stop" to "start".
|
||||
# Add the $last facility to Required-start
|
||||
#
|
||||
########################################################################
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: halt
|
||||
# Required-Start: $last
|
||||
# Should-Start:
|
||||
# Required-Stop:
|
||||
# Should-Stop:
|
||||
# Default-Start: 0
|
||||
# Default-Stop:
|
||||
# Short-Description: Halts the system.
|
||||
# Description: Halts the System.
|
||||
# X-LFS-Provided-By: LFS
|
||||
### END INIT INFO
|
||||
|
||||
case "${1}" in
|
||||
start)
|
||||
halt -d -f -i -p
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: {start}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# End halt
|
70
bootscripts/lfs/init.d/localnet
Normal file
70
bootscripts/lfs/init.d/localnet
Normal file
@ -0,0 +1,70 @@
|
||||
#!/bin/sh
|
||||
########################################################################
|
||||
# Begin localnet
|
||||
#
|
||||
# Description : Loopback device
|
||||
#
|
||||
# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
|
||||
# DJ Lucas - dj@linuxfromscratch.org
|
||||
# Update : Bruce Dubbs - bdubbs@linuxfromscratch.org
|
||||
#
|
||||
# Version : LFS 7.0
|
||||
#
|
||||
########################################################################
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: localnet
|
||||
# Required-Start: mountvirtfs
|
||||
# Should-Start: modules
|
||||
# Required-Stop:
|
||||
# Should-Stop:
|
||||
# Default-Start: S
|
||||
# Default-Stop: 0 6
|
||||
# Short-Description: Starts the local network.
|
||||
# Description: Sets the hostname of the machine and starts the
|
||||
# loopback interface.
|
||||
# X-LFS-Provided-By: LFS
|
||||
### END INIT INFO
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
[ -r /etc/sysconfig/network ] && . /etc/sysconfig/network
|
||||
[ -r /etc/hostname ] && HOSTNAME=`cat /etc/hostname`
|
||||
|
||||
case "${1}" in
|
||||
start)
|
||||
log_info_msg "Bringing up the loopback interface..."
|
||||
ip addr add 127.0.0.1/8 label lo dev lo
|
||||
ip link set lo up
|
||||
evaluate_retval
|
||||
|
||||
log_info_msg "Setting hostname to ${HOSTNAME}..."
|
||||
hostname ${HOSTNAME}
|
||||
evaluate_retval
|
||||
;;
|
||||
|
||||
stop)
|
||||
log_info_msg "Bringing down the loopback interface..."
|
||||
ip link set lo down
|
||||
evaluate_retval
|
||||
;;
|
||||
|
||||
restart)
|
||||
${0} stop
|
||||
sleep 1
|
||||
${0} start
|
||||
;;
|
||||
|
||||
status)
|
||||
echo "Hostname is: $(hostname)"
|
||||
ip link show lo
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: ${0} {start|stop|restart|status}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# End localnet
|
82
bootscripts/lfs/init.d/modules
Normal file
82
bootscripts/lfs/init.d/modules
Normal file
@ -0,0 +1,82 @@
|
||||
#!/bin/sh
|
||||
########################################################################
|
||||
# Begin modules
|
||||
#
|
||||
# Description : Module auto-loading script
|
||||
#
|
||||
# Authors : Zack Winkles
|
||||
# DJ Lucas - dj@linuxfromscratch.org
|
||||
# Update : Bruce Dubbs - bdubbs@linuxfromscratch.org
|
||||
#
|
||||
# Version : LFS 7.0
|
||||
#
|
||||
########################################################################
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: modules
|
||||
# Required-Start: mountvirtfs
|
||||
# Should-Start:
|
||||
# Required-Stop:
|
||||
# Should-Stop:
|
||||
# Default-Start: S
|
||||
# Default-Stop:
|
||||
# Short-Description: Loads required modules.
|
||||
# Description: Loads modules listed in /etc/sysconfig/modules.
|
||||
# X-LFS-Provided-By: LFS
|
||||
### END INIT INFO
|
||||
|
||||
# Assure that the kernel has module support.
|
||||
[ -e /proc/modules ] || exit 0
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
case "${1}" in
|
||||
start)
|
||||
# Exit if there's no modules file or there are no
|
||||
# valid entries
|
||||
[ -r /etc/sysconfig/modules ] || exit 0
|
||||
grep -E -qv '^($|#)' /etc/sysconfig/modules || exit 0
|
||||
|
||||
log_info_msg "Loading modules:"
|
||||
|
||||
# Only try to load modules if the user has actually given us
|
||||
# some modules to load.
|
||||
|
||||
while read module args; do
|
||||
|
||||
# Ignore comments and blank lines.
|
||||
case "$module" in
|
||||
""|"#"*) continue ;;
|
||||
esac
|
||||
|
||||
# Attempt to load the module, passing any arguments provided.
|
||||
modprobe ${module} ${args} >/dev/null
|
||||
|
||||
# Print the module name if successful, otherwise take note.
|
||||
if [ $? -eq 0 ]; then
|
||||
log_info_msg2 " ${module}"
|
||||
else
|
||||
failedmod="${failedmod} ${module}"
|
||||
fi
|
||||
done < /etc/sysconfig/modules
|
||||
|
||||
# Print a message about successfully loaded modules on the correct line.
|
||||
log_success_msg2
|
||||
|
||||
# Print a failure message with a list of any modules that
|
||||
# may have failed to load.
|
||||
if [ -n "${failedmod}" ]; then
|
||||
log_failure_msg "Failed to load modules:${failedmod}"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: ${0} {start}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# End modules
|
78
bootscripts/lfs/init.d/mountfs
Normal file
78
bootscripts/lfs/init.d/mountfs
Normal file
@ -0,0 +1,78 @@
|
||||
#!/bin/sh
|
||||
########################################################################
|
||||
# Begin mountfs
|
||||
#
|
||||
# Description : File System Mount Script
|
||||
#
|
||||
# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
|
||||
# DJ Lucas - dj@linuxfromscratch.org
|
||||
# Update : Bruce Dubbs - bdubbs@linuxfromscratch.org
|
||||
#
|
||||
# Version : LFS 7.0
|
||||
#
|
||||
########################################################################
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: $local_fs
|
||||
# Required-Start: udev checkfs
|
||||
# Should-Start: modules
|
||||
# Required-Stop: localnet
|
||||
# Should-Stop:
|
||||
# Default-Start: S
|
||||
# Default-Stop: 0 6
|
||||
# Short-Description: Mounts/unmounts local filesystems defined in /etc/fstab.
|
||||
# Description: Remounts root filesystem read/write and mounts all
|
||||
# remaining local filesystems defined in /etc/fstab on
|
||||
# start. Remounts root filesystem read-only and unmounts
|
||||
# remaining filesystems on stop.
|
||||
# X-LFS-Provided-By: LFS
|
||||
### END INIT INFO
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
case "${1}" in
|
||||
start)
|
||||
log_info_msg "Remounting root file system in read-write mode..."
|
||||
mount --options remount,rw / >/dev/null
|
||||
evaluate_retval
|
||||
|
||||
# Remove fsck-related file system watermarks.
|
||||
rm -f /fastboot /forcefsck
|
||||
|
||||
# Make sure /dev/pts exists
|
||||
mkdir -p /dev/pts
|
||||
|
||||
# This will mount all filesystems that do not have _netdev in
|
||||
# their option list. _netdev denotes a network filesystem.
|
||||
|
||||
log_info_msg "Mounting remaining file systems..."
|
||||
failed=0
|
||||
mount --all --test-opts no_netdev >/dev/null || failed=1
|
||||
evaluate_retval
|
||||
exit $failed
|
||||
;;
|
||||
|
||||
stop)
|
||||
# Don't unmount virtual file systems like /run
|
||||
log_info_msg "Unmounting all other currently mounted file systems..."
|
||||
# Ensure any loop devies are removed
|
||||
losetup -D
|
||||
umount --all --detach-loop --read-only \
|
||||
--types notmpfs,nosysfs,nodevtmpfs,noproc,nodevpts >/dev/null
|
||||
evaluate_retval
|
||||
|
||||
# Make sure / is mounted read only (umount bug)
|
||||
mount --options remount,ro /
|
||||
|
||||
# Make all LVM volume groups unavailable, if appropriate
|
||||
# This fails if swap or / are on an LVM partition
|
||||
#if [ -x /sbin/vgchange ]; then /sbin/vgchange -an > /dev/null; fi
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: ${0} {start|stop}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# End mountfs
|
74
bootscripts/lfs/init.d/mountvirtfs
Normal file
74
bootscripts/lfs/init.d/mountvirtfs
Normal file
@ -0,0 +1,74 @@
|
||||
#!/bin/sh
|
||||
########################################################################
|
||||
# Begin mountvirtfs
|
||||
#
|
||||
# Description : Ensure proc, sysfs, run, and dev are mounted
|
||||
#
|
||||
# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
|
||||
# DJ Lucas - dj@linuxfromscratch.org
|
||||
# Update : Bruce Dubbs - bdubbs@linuxfromscratch.org
|
||||
#
|
||||
# Version : LFS 7.0
|
||||
#
|
||||
########################################################################
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: mountvirtfs
|
||||
# Required-Start: $first
|
||||
# Should-Start:
|
||||
# Required-Stop:
|
||||
# Should-Stop:
|
||||
# Default-Start: S
|
||||
# Default-Stop:
|
||||
# Short-Description: Mounts various special fs needed at start
|
||||
# Description: Mounts /sys and /proc virtual (kernel) filesystems.
|
||||
# Mounts /run (tmpfs) and /dev (devtmpfs).
|
||||
# This is done only if they are not already mounted.
|
||||
# with the kernel config proposed in the book, dev
|
||||
# should be automatically mounted by the kernel.
|
||||
# X-LFS-Provided-By: LFS
|
||||
### END INIT INFO
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
case "${1}" in
|
||||
start)
|
||||
# Make sure /run is available before logging any messages
|
||||
if ! mountpoint /run >/dev/null; then
|
||||
mount /run || failed=1
|
||||
fi
|
||||
|
||||
mkdir -p /run/lock /run/shm
|
||||
chmod 1777 /run/shm /run/lock
|
||||
|
||||
log_info_msg "Mounting virtual file systems: ${INFO}/run"
|
||||
|
||||
if ! mountpoint /proc >/dev/null; then
|
||||
log_info_msg2 " ${INFO}/proc"
|
||||
mount -o nosuid,noexec,nodev /proc || failed=1
|
||||
fi
|
||||
|
||||
if ! mountpoint /sys >/dev/null; then
|
||||
log_info_msg2 " ${INFO}/sys"
|
||||
mount -o nosuid,noexec,nodev /sys || failed=1
|
||||
fi
|
||||
|
||||
if ! mountpoint /dev >/dev/null; then
|
||||
log_info_msg2 " ${INFO}/dev"
|
||||
mount -o mode=0755,nosuid /dev || failed=1
|
||||
fi
|
||||
|
||||
ln -sfn /run/shm /dev/shm
|
||||
|
||||
(exit ${failed})
|
||||
evaluate_retval
|
||||
exit $failed
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: ${0} {start}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# End mountvirtfs
|
90
bootscripts/lfs/init.d/network
Normal file
90
bootscripts/lfs/init.d/network
Normal file
@ -0,0 +1,90 @@
|
||||
#!/bin/sh
|
||||
########################################################################
|
||||
# Begin network
|
||||
#
|
||||
# Description : Network Control Script
|
||||
#
|
||||
# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
|
||||
# Nathan Coulson - nathan@linuxfromscratch.org
|
||||
# Kevin P. Fleming - kpfleming@linuxfromscratch.org
|
||||
# DJ Lucas - dj@linuxfromscratch.org
|
||||
# Update : Bruce Dubbs - bdubbs@linuxfromscratch.org
|
||||
#
|
||||
# Version : LFS 7.0
|
||||
#
|
||||
########################################################################
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: $network
|
||||
# Required-Start: $local_fs localnet swap
|
||||
# Should-Start: $syslog firewalld iptables nftables
|
||||
# Required-Stop: $local_fs localnet swap
|
||||
# Should-Stop: $syslog firewalld iptables nftables
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Short-Description: Starts and configures network interfaces.
|
||||
# Description: Starts and configures network interfaces.
|
||||
# X-LFS-Provided-By: LFS
|
||||
### END INIT INFO
|
||||
|
||||
case "${1}" in
|
||||
start)
|
||||
# if the default route exists, network is already configured
|
||||
if ip route | grep -q "^default"; then return 0; fi
|
||||
# Start all network interfaces
|
||||
for file in /etc/sysconfig/ifconfig.*
|
||||
do
|
||||
interface=${file##*/ifconfig.}
|
||||
|
||||
# Skip if $file is * (because nothing was found)
|
||||
if [ "${interface}" = "*" ]; then continue; fi
|
||||
|
||||
/sbin/ifup ${interface}
|
||||
done
|
||||
;;
|
||||
|
||||
stop)
|
||||
# Unmount any network mounted file systems
|
||||
umount --all --force --types nfs,cifs,nfs4
|
||||
|
||||
# Reverse list
|
||||
net_files=""
|
||||
for file in /etc/sysconfig/ifconfig.*
|
||||
do
|
||||
net_files="${file} ${net_files}"
|
||||
done
|
||||
|
||||
# Stop all network interfaces
|
||||
for file in ${net_files}
|
||||
do
|
||||
interface=${file##*/ifconfig.}
|
||||
|
||||
# Skip if $file is * (because nothing was found)
|
||||
if [ "${interface}" = "*" ]; then continue; fi
|
||||
|
||||
# See if interface exists
|
||||
if [ ! -e /sys/class/net/$interface ]; then continue; fi
|
||||
|
||||
# Is interface UP?
|
||||
ip link show $interface 2>/dev/null | grep -q "state UP"
|
||||
if [ $? -ne 0 ]; then continue; fi
|
||||
|
||||
/sbin/ifdown ${interface}
|
||||
done
|
||||
;;
|
||||
|
||||
restart)
|
||||
${0} stop
|
||||
sleep 1
|
||||
${0} start
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: ${0} {start|stop|restart}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# End network
|
227
bootscripts/lfs/init.d/rc
Normal file
227
bootscripts/lfs/init.d/rc
Normal file
@ -0,0 +1,227 @@
|
||||
#!/bin/bash
|
||||
########################################################################
|
||||
# Begin rc
|
||||
#
|
||||
# Description : Main Run Level Control Script
|
||||
#
|
||||
# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
|
||||
# : DJ Lucas - dj@linuxfromscratch.org
|
||||
# Updates : Bruce Dubbs - bdubbs@linuxfromscratch.org
|
||||
# : Pierre Labastie - pierre@linuxfromscratch.org
|
||||
#
|
||||
# Version : LFS 7.0
|
||||
#
|
||||
# Notes : Updates March 24th, 2022: new semantics of S/K files
|
||||
# - Instead of testing that S scripts were K scripts in the
|
||||
# previous runlevel, test that they were not S scripts
|
||||
# - Instead of testing that K scripts were S scripts in the
|
||||
# previous runlevel, test that they were not K scripts
|
||||
# - S scripts in runlevel 0 or 6 are now run with
|
||||
# "script start" (was "script stop" previously).
|
||||
########################################################################
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
print_error_msg()
|
||||
{
|
||||
log_failure_msg
|
||||
# $i is set when called
|
||||
MSG="FAILURE:\n\nYou should not be reading this error message.\n\n"
|
||||
MSG="${MSG}It means that an unforeseen error took place in\n"
|
||||
MSG="${MSG}${i},\n"
|
||||
MSG="${MSG}which exited with a return value of ${error_value}.\n"
|
||||
|
||||
MSG="${MSG}If you're able to track this error down to a bug in one of\n"
|
||||
MSG="${MSG}the files provided by the ${DISTRO_MINI} book,\n"
|
||||
MSG="${MSG}please be so kind to inform us at ${DISTRO_CONTACT}.\n"
|
||||
log_failure_msg "${MSG}"
|
||||
|
||||
log_info_msg "Press Enter to continue..."
|
||||
wait_for_user
|
||||
}
|
||||
|
||||
check_script_status()
|
||||
{
|
||||
# $i is set when called
|
||||
if [ ! -f ${i} ]; then
|
||||
log_warning_msg "${i} is not a valid symlink."
|
||||
SCRIPT_STAT="1"
|
||||
fi
|
||||
|
||||
if [ ! -x ${i} ]; then
|
||||
log_warning_msg "${i} is not executable, skipping."
|
||||
SCRIPT_STAT="1"
|
||||
fi
|
||||
}
|
||||
|
||||
run()
|
||||
{
|
||||
if [ -z $interactive ]; then
|
||||
${1} ${2}
|
||||
return $?
|
||||
fi
|
||||
|
||||
while true; do
|
||||
read -p "Run ${1} ${2} (Yes/no/continue)? " -n 1 runit
|
||||
echo
|
||||
|
||||
case ${runit} in
|
||||
c | C)
|
||||
interactive=""
|
||||
${i} ${2}
|
||||
ret=${?}
|
||||
break;
|
||||
;;
|
||||
|
||||
n | N)
|
||||
return 0
|
||||
;;
|
||||
|
||||
y | Y)
|
||||
${i} ${2}
|
||||
ret=${?}
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
return $ret
|
||||
}
|
||||
|
||||
# Read any local settings/overrides
|
||||
[ -r /etc/sysconfig/rc.site ] && source /etc/sysconfig/rc.site
|
||||
|
||||
DISTRO=${DISTRO:-"Linux From Scratch"}
|
||||
DISTRO_CONTACT=${DISTRO_CONTACT:-"lfs-dev@lists.linuxfromscratch.org (Registration required)"}
|
||||
DISTRO_MINI=${DISTRO_MINI:-"LFS"}
|
||||
IPROMPT=${IPROMPT:-"no"}
|
||||
|
||||
# These 3 signals will not cause our script to exit
|
||||
trap "" INT QUIT TSTP
|
||||
|
||||
[ "${1}" != "" ] && runlevel=${1}
|
||||
|
||||
if [ "${runlevel}" == "" ]; then
|
||||
echo "Usage: ${0} <runlevel>" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
previous=${PREVLEVEL}
|
||||
[ "${previous}" == "" ] && previous=N
|
||||
|
||||
if [ ! -d /etc/rc.d/rc${runlevel}.d ]; then
|
||||
log_info_msg "/etc/rc.d/rc${runlevel}.d does not exist.\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$runlevel" == "6" -o "$runlevel" == "0" ]; then IPROMPT="no"; fi
|
||||
|
||||
# Note: In ${LOGLEVEL:-7}, it is ':' 'dash' '7', not minus 7
|
||||
if [ "$runlevel" == "S" ]; then
|
||||
[ -r /etc/sysconfig/console ] && source /etc/sysconfig/console
|
||||
dmesg -n "${LOGLEVEL:-7}"
|
||||
fi
|
||||
|
||||
if [ "${IPROMPT}" == "yes" -a "${runlevel}" == "S" ]; then
|
||||
# The total length of the distro welcome string, without escape codes
|
||||
wlen=${wlen:-$(echo "Welcome to ${DISTRO}" | wc -c )}
|
||||
welcome_message=${welcome_message:-"Welcome to ${INFO}${DISTRO}${NORMAL}"}
|
||||
|
||||
# The total length of the interactive string, without escape codes
|
||||
ilen=${ilen:-$(echo "Press 'I' to enter interactive startup" | wc -c )}
|
||||
i_message=${i_message:-"Press '${FAILURE}I${NORMAL}' to enter interactive startup"}
|
||||
|
||||
|
||||
# dcol and icol are spaces before the message to center the message
|
||||
# on screen. itime is the amount of wait time for the user to press a key
|
||||
wcol=$(( ( ${COLUMNS} - ${wlen} ) / 2 ))
|
||||
icol=$(( ( ${COLUMNS} - ${ilen} ) / 2 ))
|
||||
itime=${itime:-"3"}
|
||||
|
||||
echo -e "\n\n"
|
||||
echo -e "\\033[${wcol}G${welcome_message}"
|
||||
echo -e "\\033[${icol}G${i_message}${NORMAL}"
|
||||
echo ""
|
||||
read -t "${itime}" -n 1 interactive 2>&1 > /dev/null
|
||||
fi
|
||||
|
||||
# Make lower case
|
||||
[ "${interactive}" == "I" ] && interactive="i"
|
||||
[ "${interactive}" != "i" ] && interactive=""
|
||||
|
||||
# Read the state file if it exists from runlevel S
|
||||
[ -r /run/interactive ] && source /run/interactive
|
||||
|
||||
# Stop all services marked as K, except if marked as K in the previous
|
||||
# runlevel: it is the responsibility of the script to not try to kill
|
||||
# a non running service
|
||||
if [ "${previous}" != "N" ]; then
|
||||
for i in $(ls -v /etc/rc.d/rc${runlevel}.d/K* 2> /dev/null)
|
||||
do
|
||||
check_script_status
|
||||
if [ "${SCRIPT_STAT}" == "1" ]; then
|
||||
SCRIPT_STAT="0"
|
||||
continue
|
||||
fi
|
||||
|
||||
suffix=${i#/etc/rc.d/rc${runlevel}.d/K[0-9][0-9]}
|
||||
[ -e /etc/rc.d/rc${previous}.d/K[0-9][0-9]$suffix ] && continue
|
||||
|
||||
run ${i} stop
|
||||
error_value=${?}
|
||||
|
||||
if [ "${error_value}" != "0" ]; then print_error_msg; fi
|
||||
done
|
||||
fi
|
||||
|
||||
if [ "${previous}" == "N" ]; then export IN_BOOT=1; fi
|
||||
|
||||
if [ "$runlevel" == "6" -a -n "${FASTBOOT}" ]; then
|
||||
touch /fastboot
|
||||
fi
|
||||
|
||||
|
||||
# Start all services marked as S in this runlevel, except if marked as
|
||||
# S in the previous runlevel
|
||||
# it is the responsabily of the script to not try to start an already running
|
||||
# service
|
||||
for i in $( ls -v /etc/rc.d/rc${runlevel}.d/S* 2> /dev/null)
|
||||
do
|
||||
|
||||
if [ "${previous}" != "N" ]; then
|
||||
suffix=${i#/etc/rc.d/rc${runlevel}.d/S[0-9][0-9]}
|
||||
[ -e /etc/rc.d/rc${previous}.d/S[0-9][0-9]$suffix ] && continue
|
||||
fi
|
||||
|
||||
check_script_status
|
||||
if [ "${SCRIPT_STAT}" == "1" ]; then
|
||||
SCRIPT_STAT="0"
|
||||
continue
|
||||
fi
|
||||
|
||||
run ${i} start
|
||||
|
||||
error_value=${?}
|
||||
|
||||
if [ "${error_value}" != "0" ]; then print_error_msg; fi
|
||||
done
|
||||
|
||||
# Store interactive variable on switch from runlevel S and remove if not
|
||||
if [ "${runlevel}" == "S" -a "${interactive}" == "i" ]; then
|
||||
echo "interactive=\"i\"" > /run/interactive
|
||||
else
|
||||
rm -f /run/interactive 2> /dev/null
|
||||
fi
|
||||
|
||||
# Copy the boot log on initial boot only
|
||||
if [ "${previous}" == "N" -a "${runlevel}" != "S" ]; then
|
||||
cat $BOOTLOG >> /var/log/boot.log
|
||||
|
||||
# Mark the end of boot
|
||||
echo "--------" >> /var/log/boot.log
|
||||
|
||||
# Remove the temporary file
|
||||
rm -f $BOOTLOG 2> /dev/null
|
||||
fi
|
||||
|
||||
# End rc
|
47
bootscripts/lfs/init.d/reboot
Normal file
47
bootscripts/lfs/init.d/reboot
Normal file
@ -0,0 +1,47 @@
|
||||
#!/bin/sh
|
||||
########################################################################
|
||||
# Begin reboot
|
||||
#
|
||||
# Description : Reboot Scripts
|
||||
#
|
||||
# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
|
||||
# DJ Lucas - dj@linuxfromscratch.org
|
||||
# Updates : Bruce Dubbs - bdubbs@linuxfromscratch.org
|
||||
# : Pierre Labastie - pierre@linuxfromscratch.org
|
||||
#
|
||||
# Version : LFS 7.0
|
||||
#
|
||||
# Notes : Update March 24th, 2022: change "stop" to "start".
|
||||
# Add the $last facility to Required-start
|
||||
#
|
||||
########################################################################
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: reboot
|
||||
# Required-Start: $last
|
||||
# Should-Start:
|
||||
# Required-Stop:
|
||||
# Should-Stop:
|
||||
# Default-Start: 6
|
||||
# Default-Stop:
|
||||
# Short-Description: Reboots the system.
|
||||
# Description: Reboots the System.
|
||||
# X-LFS-Provided-By: LFS
|
||||
### END INIT INFO
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
case "${1}" in
|
||||
start)
|
||||
log_info_msg "Restarting system..."
|
||||
reboot -d -f -i
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: ${0} {start}"
|
||||
exit 1
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
# End reboot
|
69
bootscripts/lfs/init.d/sendsignals
Normal file
69
bootscripts/lfs/init.d/sendsignals
Normal file
@ -0,0 +1,69 @@
|
||||
#!/bin/sh
|
||||
########################################################################
|
||||
# Begin sendsignals
|
||||
#
|
||||
# Description : Sendsignals Script
|
||||
#
|
||||
# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
|
||||
# DJ Lucas - dj@linuxfromscratch.org
|
||||
# Update : Bruce Dubbs - bdubbs@linuxfromscratch.org
|
||||
#
|
||||
# Version : LFS 7.0
|
||||
#
|
||||
########################################################################
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: sendsignals
|
||||
# Required-Start:
|
||||
# Should-Start:
|
||||
# Required-Stop: $local_fs swap localnet
|
||||
# Should-Stop:
|
||||
# Default-Start:
|
||||
# Default-Stop: 0 6
|
||||
# Short-Description: Attempts to kill remaining processes.
|
||||
# Description: Attempts to kill remaining processes.
|
||||
# X-LFS-Provided-By: LFS
|
||||
### END INIT INFO
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
case "${1}" in
|
||||
stop)
|
||||
omit=$(pidof mdmon)
|
||||
[ -n "$omit" ] && omit="-o $omit"
|
||||
|
||||
log_info_msg "Sending all processes the TERM signal..."
|
||||
killall5 -15 $omit
|
||||
error_value=${?}
|
||||
|
||||
sleep ${KILLDELAY}
|
||||
|
||||
if [ "${error_value}" = 0 -o "${error_value}" = 2 ]; then
|
||||
log_success_msg
|
||||
else
|
||||
log_failure_msg
|
||||
fi
|
||||
|
||||
log_info_msg "Sending all processes the KILL signal..."
|
||||
killall5 -9 $omit
|
||||
error_value=${?}
|
||||
|
||||
sleep ${KILLDELAY}
|
||||
|
||||
if [ "${error_value}" = 0 -o "${error_value}" = 2 ]; then
|
||||
log_success_msg
|
||||
else
|
||||
log_failure_msg
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: ${0} {stop}"
|
||||
exit 1
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# End sendsignals
|
63
bootscripts/lfs/init.d/setclock
Normal file
63
bootscripts/lfs/init.d/setclock
Normal file
@ -0,0 +1,63 @@
|
||||
#!/bin/sh
|
||||
########################################################################
|
||||
# Begin setclock
|
||||
#
|
||||
# Description : Setting Linux Clock
|
||||
#
|
||||
# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
|
||||
# DJ Lucas - dj@linuxfromscratch.org
|
||||
# Update : Bruce Dubbs - bdubbs@linuxfromscratch.org
|
||||
#
|
||||
# Version : LFS 7.0
|
||||
#
|
||||
########################################################################
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides:
|
||||
# Required-Start:
|
||||
# Should-Start: modules
|
||||
# Required-Stop:
|
||||
# Should-Stop: $syslog
|
||||
# Default-Start: S
|
||||
# Default-Stop:
|
||||
# Short-Description: Stores and restores time from the hardware clock
|
||||
# Description: On boot, system time is obtained from hwclock. The
|
||||
# hardware clock can also be set on shutdown.
|
||||
# X-LFS-Provided-By: LFS
|
||||
### END INIT INFO
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
[ -r /etc/sysconfig/clock ] && . /etc/sysconfig/clock
|
||||
|
||||
|
||||
case "${UTC}" in
|
||||
yes|true|1)
|
||||
CLOCKPARAMS="${CLOCKPARAMS} --utc"
|
||||
;;
|
||||
|
||||
no|false|0)
|
||||
CLOCKPARAMS="${CLOCKPARAMS} --localtime"
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
case ${1} in
|
||||
start)
|
||||
hwclock --hctosys ${CLOCKPARAMS} >/dev/null
|
||||
;;
|
||||
|
||||
stop)
|
||||
log_info_msg "Setting hardware clock..."
|
||||
hwclock --systohc ${CLOCKPARAMS} >/dev/null
|
||||
evaluate_retval
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: ${0} {start|stop}"
|
||||
exit 1
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
exit 0
|
63
bootscripts/lfs/init.d/swap
Normal file
63
bootscripts/lfs/init.d/swap
Normal file
@ -0,0 +1,63 @@
|
||||
#!/bin/sh
|
||||
########################################################################
|
||||
# Begin swap
|
||||
#
|
||||
# Description : Swap Control Script
|
||||
#
|
||||
# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
|
||||
# DJ Lucas - dj@linuxfromscratch.org
|
||||
# Update : Bruce Dubbs - bdubbs@linuxfromscratch.org
|
||||
#
|
||||
# Version : LFS 7.0
|
||||
#
|
||||
########################################################################
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: swap
|
||||
# Required-Start: udev
|
||||
# Should-Start: modules
|
||||
# Required-Stop: localnet
|
||||
# Should-Stop: $local_fs
|
||||
# Default-Start: S
|
||||
# Default-Stop: 0 6
|
||||
# Short-Description: Mounts and unmounts swap partitions.
|
||||
# Description: Mounts and unmounts swap partitions defined in
|
||||
# /etc/fstab.
|
||||
# X-LFS-Provided-By: LFS
|
||||
### END INIT INFO
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
case "${1}" in
|
||||
start)
|
||||
log_info_msg "Activating all swap files/partitions..."
|
||||
swapon -a
|
||||
evaluate_retval
|
||||
;;
|
||||
|
||||
stop)
|
||||
log_info_msg "Deactivating all swap files/partitions..."
|
||||
swapoff -a
|
||||
evaluate_retval
|
||||
;;
|
||||
|
||||
restart)
|
||||
${0} stop
|
||||
sleep 1
|
||||
${0} start
|
||||
;;
|
||||
|
||||
status)
|
||||
log_success_msg "Retrieving swap status."
|
||||
swapon -s
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: ${0} {start|stop|restart|status}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# End swap
|
54
bootscripts/lfs/init.d/sysctl
Normal file
54
bootscripts/lfs/init.d/sysctl
Normal file
@ -0,0 +1,54 @@
|
||||
#!/bin/sh
|
||||
########################################################################
|
||||
# Begin sysctl
|
||||
#
|
||||
# Description : File uses /etc/sysctl.conf to set kernel runtime
|
||||
# parameters
|
||||
#
|
||||
# Authors : Nathan Coulson (nathan@linuxfromscratch.org)
|
||||
# Matthew Burgress (matthew@linuxfromscratch.org)
|
||||
# DJ Lucas - dj@linuxfromscratch.org
|
||||
# Update : Bruce Dubbs - bdubbs@linuxfromscratch.org
|
||||
#
|
||||
# Version : LFS 7.0
|
||||
#
|
||||
########################################################################
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: sysctl
|
||||
# Required-Start: mountvirtfs
|
||||
# Should-Start: console
|
||||
# Required-Stop:
|
||||
# Should-Stop:
|
||||
# Default-Start: S
|
||||
# Default-Stop:
|
||||
# Short-Description: Makes changes to the proc filesystem
|
||||
# Description: Makes changes to the proc filesystem as defined in
|
||||
# /etc/sysctl.conf. See 'man sysctl(8)'.
|
||||
# X-LFS-Provided-By: LFS
|
||||
### END INIT INFO
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
case "${1}" in
|
||||
start)
|
||||
if [ -f "/etc/sysctl.conf" ]; then
|
||||
log_info_msg "Setting kernel runtime parameters..."
|
||||
sysctl -q -p
|
||||
evaluate_retval
|
||||
fi
|
||||
;;
|
||||
|
||||
status)
|
||||
sysctl -a
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: ${0} {start|status}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# End sysctl
|
79
bootscripts/lfs/init.d/sysklogd
Normal file
79
bootscripts/lfs/init.d/sysklogd
Normal file
@ -0,0 +1,79 @@
|
||||
#!/bin/sh
|
||||
########################################################################
|
||||
# Begin sysklogd
|
||||
#
|
||||
# Description : Sysklogd loader
|
||||
#
|
||||
# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
|
||||
# DJ Lucas - dj@linuxfromscratch.org
|
||||
# Update : Bruce Dubbs - bdubbs@linuxfromscratch.org
|
||||
#
|
||||
# Version : LFS 7.0
|
||||
#
|
||||
########################################################################
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: $syslog
|
||||
# Required-Start: $first localnet
|
||||
# Should-Start:
|
||||
# Required-Stop: $local_fs
|
||||
# Should-Stop: sendsignals
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Short-Description: Starts kernel and system log daemons.
|
||||
# Description: Starts kernel and system log daemons.
|
||||
# /etc/fstab.
|
||||
# X-LFS-Provided-By: LFS
|
||||
### END INIT INFO
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
case "${1}" in
|
||||
start)
|
||||
log_info_msg "Starting system log daemon..."
|
||||
parms=${SYSKLOGD_PARMS-'-m 0'}
|
||||
start_daemon /sbin/syslogd $parms
|
||||
evaluate_retval
|
||||
|
||||
log_info_msg "Starting kernel log daemon..."
|
||||
start_daemon /sbin/klogd
|
||||
evaluate_retval
|
||||
;;
|
||||
|
||||
stop)
|
||||
log_info_msg "Stopping kernel log daemon..."
|
||||
killproc /sbin/klogd
|
||||
evaluate_retval
|
||||
|
||||
log_info_msg "Stopping system log daemon..."
|
||||
killproc /sbin/syslogd
|
||||
evaluate_retval
|
||||
;;
|
||||
|
||||
reload)
|
||||
log_info_msg "Reloading system log daemon config file..."
|
||||
pid=`pidofproc syslogd`
|
||||
kill -HUP "${pid}"
|
||||
evaluate_retval
|
||||
;;
|
||||
|
||||
restart)
|
||||
${0} stop
|
||||
sleep 1
|
||||
${0} start
|
||||
;;
|
||||
|
||||
status)
|
||||
statusproc /sbin/syslogd
|
||||
statusproc klogd
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: ${0} {start|stop|reload|restart|status}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# End sysklogd
|
69
bootscripts/lfs/init.d/template
Normal file
69
bootscripts/lfs/init.d/template
Normal file
@ -0,0 +1,69 @@
|
||||
#!/bin/sh
|
||||
########################################################################
|
||||
# Begin scriptname
|
||||
#
|
||||
# Description :
|
||||
#
|
||||
# Authors :
|
||||
#
|
||||
# Version : LFS x.x
|
||||
#
|
||||
# Notes :
|
||||
#
|
||||
########################################################################
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: template
|
||||
# Required-Start:
|
||||
# Should-Start:
|
||||
# Required-Stop:
|
||||
# Should-Stop:
|
||||
# Default-Start:
|
||||
# Default-Stop:
|
||||
# Short-Description:
|
||||
# Description:
|
||||
# X-LFS-Provided-By:
|
||||
### END INIT INFO
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
case "${1}" in
|
||||
start)
|
||||
log_info_msg "Starting..."
|
||||
# if it is possible to use start_daemon
|
||||
start_daemon fully_qualified_path
|
||||
# if it is not possible to use start_daemon
|
||||
# (command to start the daemon is not simple enough)
|
||||
if ! pidofproc daemon_name_as_reported_by_ps >/dev/null; then
|
||||
command_to_start_the_service
|
||||
fi
|
||||
evaluate_retval
|
||||
;;
|
||||
|
||||
stop)
|
||||
log_info_msg "Stopping..."
|
||||
# if it is possible to use killproc
|
||||
killproc fully_qualified_path
|
||||
# if it is not possible to use killproc
|
||||
# (the daemon shoudn't be stopped by killing it)
|
||||
if pidofproc daemon_name_as_reported_by_ps >/dev/null; then
|
||||
command_to_stop_the_service
|
||||
fi
|
||||
evaluate_retval
|
||||
;;
|
||||
|
||||
restart)
|
||||
${0} stop
|
||||
sleep 1
|
||||
${0} start
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: ${0} {start|stop|restart}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# End scriptname
|
76
bootscripts/lfs/init.d/udev
Normal file
76
bootscripts/lfs/init.d/udev
Normal file
@ -0,0 +1,76 @@
|
||||
#!/bin/sh
|
||||
########################################################################
|
||||
# Begin udev
|
||||
#
|
||||
# Description : Udev cold-plugging script
|
||||
#
|
||||
# Authors : Zack Winkles, Alexander E. Patrakov
|
||||
# DJ Lucas - dj@linuxfromscratch.org
|
||||
# Update : Bruce Dubbs - bdubbs@linuxfromscratch.org
|
||||
#
|
||||
# Version : LFS 7.0
|
||||
#
|
||||
########################################################################
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: udev $time
|
||||
# Required-Start: localnet
|
||||
# Should-Start: modules
|
||||
# Required-Stop:
|
||||
# Should-Stop:
|
||||
# Default-Start: S
|
||||
# Default-Stop:
|
||||
# Short-Description: Populates /dev with device nodes.
|
||||
# Description: Mounts a tempfs on /dev and starts the udevd daemon.
|
||||
# Device nodes are created as defined by udev.
|
||||
# X-LFS-Provided-By: LFS
|
||||
### END INIT INFO
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
case "${1}" in
|
||||
start)
|
||||
log_info_msg "Populating /dev with device nodes... "
|
||||
if ! grep -q '[[:space:]]sysfs' /proc/mounts; then
|
||||
log_failure_msg2
|
||||
msg="FAILURE:\n\nUnable to create "
|
||||
msg="${msg}devices without a SysFS filesystem\n\n"
|
||||
msg="${msg}After you press Enter, this system "
|
||||
msg="${msg}will be halted and powered off.\n\n"
|
||||
log_info_msg "$msg"
|
||||
log_info_msg "Press Enter to continue..."
|
||||
wait_for_user
|
||||
/etc/rc.d/init.d/halt stop
|
||||
fi
|
||||
|
||||
# Start the udev daemon to continually watch for, and act on,
|
||||
# uevents
|
||||
/sbin/udevd --daemon
|
||||
|
||||
# Now traverse /sys in order to "coldplug" devices that have
|
||||
# already been discovered
|
||||
/sbin/udevadm trigger --action=add --type=subsystems
|
||||
/sbin/udevadm trigger --action=add --type=devices
|
||||
/sbin/udevadm trigger --action=change --type=devices
|
||||
|
||||
# Now wait for udevd to process the uevents we triggered
|
||||
if ! is_true "$OMIT_UDEV_SETTLE"; then
|
||||
/sbin/udevadm settle
|
||||
fi
|
||||
|
||||
# If any LVM based partitions are on the system, ensure they
|
||||
# are activated so they can be used.
|
||||
if [ -x /sbin/vgchange ]; then /sbin/vgchange -a y >/dev/null; fi
|
||||
|
||||
log_success_msg2
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage ${0} {start}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# End udev
|
75
bootscripts/lfs/init.d/udev_retry
Normal file
75
bootscripts/lfs/init.d/udev_retry
Normal file
@ -0,0 +1,75 @@
|
||||
#!/bin/sh
|
||||
########################################################################
|
||||
# Begin udev_retry
|
||||
#
|
||||
# Description : Udev cold-plugging script (retry)
|
||||
#
|
||||
# Authors : Alexander E. Patrakov
|
||||
# DJ Lucas - dj@linuxfromscratch.org
|
||||
# Update : Bruce Dubbs - bdubbs@linuxfromscratch.org
|
||||
# Bryan Kadzban -
|
||||
#
|
||||
# Version : LFS 7.0
|
||||
#
|
||||
########################################################################
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: udev_retry
|
||||
# Required-Start: udev
|
||||
# Should-Start: $local_fs cleanfs
|
||||
# Required-Stop:
|
||||
# Should-Stop:
|
||||
# Default-Start: S
|
||||
# Default-Stop:
|
||||
# Short-Description: Replays failed uevents and creates additional devices.
|
||||
# Description: Replays any failed uevents that were skipped due to
|
||||
# slow hardware initialization, and creates those needed
|
||||
# device nodes
|
||||
# X-LFS-Provided-By: LFS
|
||||
### END INIT INFO
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
case "${1}" in
|
||||
start)
|
||||
log_info_msg "Retrying failed uevents, if any..."
|
||||
|
||||
# As of udev-186, the --run option is no longer valid
|
||||
#rundir=$(/sbin/udevadm info --run)
|
||||
rundir=/run/udev
|
||||
# From Debian: "copy the rules generated before / was mounted
|
||||
# read-write":
|
||||
|
||||
for file in ${rundir}/tmp-rules--*; do
|
||||
dest=${file##*tmp-rules--}
|
||||
[ "$dest" = '*' ] && break
|
||||
cat $file >> /etc/udev/rules.d/$dest
|
||||
rm -f $file
|
||||
done
|
||||
|
||||
# Re-trigger the uevents that may have failed,
|
||||
# in hope they will succeed now
|
||||
/bin/sed -e 's/#.*$//' /etc/sysconfig/udev_retry | /bin/grep -v '^$' | \
|
||||
while read line ; do
|
||||
for subsystem in $line ; do
|
||||
/sbin/udevadm trigger --subsystem-match=$subsystem --action=add
|
||||
done
|
||||
done
|
||||
|
||||
# Now wait for udevd to process the uevents we triggered
|
||||
if ! is_true "$OMIT_UDEV_RETRY_SETTLE"; then
|
||||
/sbin/udevadm settle
|
||||
fi
|
||||
|
||||
evaluate_retval
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage ${0} {start}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# End udev_retry
|
810
bootscripts/lfs/lib/services/init-functions
Normal file
810
bootscripts/lfs/lib/services/init-functions
Normal file
@ -0,0 +1,810 @@
|
||||
#!/bin/sh
|
||||
########################################################################
|
||||
#
|
||||
# Begin /lib/lsb/init-funtions
|
||||
#
|
||||
# Description : Run Level Control Functions
|
||||
#
|
||||
# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
|
||||
# : DJ Lucas - dj@linuxfromscratch.org
|
||||
# Update : Bruce Dubbs - bdubbs@linuxfromscratch.org
|
||||
#
|
||||
# Version : LFS 7.0
|
||||
#
|
||||
# Notes : With code based on Matthias Benkmann's simpleinit-msb
|
||||
# http://winterdrache.de/linux/newboot/index.html
|
||||
#
|
||||
# The file should be located in /lib/lsb
|
||||
#
|
||||
########################################################################
|
||||
|
||||
## Environmental setup
|
||||
# Setup default values for environment
|
||||
umask 022
|
||||
export PATH="/bin:/usr/bin:/sbin:/usr/sbin"
|
||||
|
||||
## Set color commands, used via echo
|
||||
# Please consult `man console_codes for more information
|
||||
# under the "ECMA-48 Set Graphics Rendition" section
|
||||
#
|
||||
# Warning: when switching from a 8bit to a 9bit font,
|
||||
# the linux console will reinterpret the bold (1;) to
|
||||
# the top 256 glyphs of the 9bit font. This does
|
||||
# not affect framebuffer consoles
|
||||
|
||||
NORMAL="\\033[0;39m" # Standard console grey
|
||||
SUCCESS="\\033[1;32m" # Success is green
|
||||
WARNING="\\033[1;33m" # Warnings are yellow
|
||||
FAILURE="\\033[1;31m" # Failures are red
|
||||
INFO="\\033[1;36m" # Information is light cyan
|
||||
BRACKET="\\033[1;34m" # Brackets are blue
|
||||
|
||||
# Use a colored prefix
|
||||
BMPREFIX=" "
|
||||
SUCCESS_PREFIX="${SUCCESS} * ${NORMAL} "
|
||||
FAILURE_PREFIX="${FAILURE}*****${NORMAL} "
|
||||
WARNING_PREFIX="${WARNING} *** ${NORMAL} "
|
||||
SKIP_PREFIX="${INFO} S ${NORMAL}"
|
||||
|
||||
SUCCESS_SUFFIX="${BRACKET}[${SUCCESS} OK ${BRACKET}]${NORMAL}"
|
||||
FAILURE_SUFFIX="${BRACKET}[${FAILURE} FAIL ${BRACKET}]${NORMAL}"
|
||||
WARNING_SUFFIX="${BRACKET}[${WARNING} WARN ${BRACKET}]${NORMAL}"
|
||||
SKIP_SUFFIX="${BRACKET}[${INFO} SKIP ${BRACKET}]${NORMAL}"
|
||||
|
||||
BOOTLOG=/run/bootlog
|
||||
KILLDELAY=3
|
||||
SCRIPT_STAT="0"
|
||||
|
||||
# Set any user specified environment variables e.g. HEADLESS
|
||||
[ -r /etc/sysconfig/rc.site ] && . /etc/sysconfig/rc.site
|
||||
|
||||
## Screen Dimensions
|
||||
# Find current screen size
|
||||
if [ -z "${COLUMNS}" ]; then
|
||||
COLUMNS=$(stty size)
|
||||
COLUMNS=${COLUMNS##* }
|
||||
fi
|
||||
|
||||
# When using remote connections, such as a serial port, stty size returns 0
|
||||
if [ "${COLUMNS}" = "0" ]; then
|
||||
COLUMNS=80
|
||||
fi
|
||||
|
||||
## Measurements for positioning result messages
|
||||
COL=$((${COLUMNS} - 8))
|
||||
WCOL=$((${COL} - 2))
|
||||
|
||||
## Set Cursor Position Commands, used via echo
|
||||
SET_COL="\\033[${COL}G" # at the $COL char
|
||||
SET_WCOL="\\033[${WCOL}G" # at the $WCOL char
|
||||
CURS_UP="\\033[1A\\033[0G" # Up one line, at the 0'th char
|
||||
CURS_ZERO="\\033[0G"
|
||||
|
||||
################################################################################
|
||||
# start_daemon() #
|
||||
# Usage: start_daemon [-f] [-n nicelevel] [-p pidfile] pathname [args...] #
|
||||
# #
|
||||
# Purpose: This runs the specified program as a daemon #
|
||||
# #
|
||||
# Inputs: -f: (force) run the program even if it is already running. #
|
||||
# -n nicelevel: specify a nice level. See 'man nice(1)'. #
|
||||
# -p pidfile: use the specified file to determine PIDs. #
|
||||
# pathname: the complete path to the specified program #
|
||||
# args: additional arguments passed to the program (pathname) #
|
||||
# #
|
||||
# Return values (as defined by LSB exit codes): #
|
||||
# 0 - program is running or service is OK #
|
||||
# 1 - generic or unspecified error #
|
||||
# 2 - invalid or excessive argument(s) #
|
||||
# 5 - program is not installed #
|
||||
################################################################################
|
||||
start_daemon()
|
||||
{
|
||||
local force=""
|
||||
local nice="0"
|
||||
local pidfile=""
|
||||
local pidlist=""
|
||||
local retval=""
|
||||
|
||||
# Process arguments
|
||||
while true
|
||||
do
|
||||
case "${1}" in
|
||||
|
||||
-f)
|
||||
force="1"
|
||||
shift 1
|
||||
;;
|
||||
|
||||
-n)
|
||||
nice="${2}"
|
||||
shift 2
|
||||
;;
|
||||
|
||||
-p)
|
||||
pidfile="${2}"
|
||||
shift 2
|
||||
;;
|
||||
|
||||
-*)
|
||||
return 2
|
||||
;;
|
||||
|
||||
*)
|
||||
program="${1}"
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Check for a valid program
|
||||
if [ ! -e "${program}" ]; then return 5; fi
|
||||
|
||||
# Execute
|
||||
if [ -z "${force}" ]; then
|
||||
if [ -z "${pidfile}" ]; then
|
||||
# Determine the pid by discovery
|
||||
pidlist=`pidofproc "${1}"`
|
||||
retval="${?}"
|
||||
else
|
||||
# The PID file contains the needed PIDs
|
||||
# Note that by LSB requirement, the path must be given to pidofproc,
|
||||
# however, it is not used by the current implementation or standard.
|
||||
pidlist=`pidofproc -p "${pidfile}" "${1}"`
|
||||
retval="${?}"
|
||||
fi
|
||||
|
||||
# Return a value ONLY
|
||||
# It is the init script's (or distribution's functions) responsibilty
|
||||
# to log messages!
|
||||
case "${retval}" in
|
||||
|
||||
0)
|
||||
# Program is already running correctly, this is a
|
||||
# successful start.
|
||||
return 0
|
||||
;;
|
||||
|
||||
1)
|
||||
# Program is not running, but an invalid pid file exists
|
||||
# remove the pid file and continue
|
||||
rm -f "${pidfile}"
|
||||
;;
|
||||
|
||||
3)
|
||||
# Program is not running and no pidfile exists
|
||||
# do nothing here, let start_deamon continue.
|
||||
;;
|
||||
|
||||
*)
|
||||
# Others as returned by status values shall not be interpreted
|
||||
# and returned as an unspecified error.
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Do the start!
|
||||
nice -n "${nice}" "${@}"
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# killproc() #
|
||||
# Usage: killproc [-p pidfile] pathname [signal] #
|
||||
# #
|
||||
# Purpose: Send control signals to running processes #
|
||||
# #
|
||||
# Inputs: -p pidfile, uses the specified pidfile #
|
||||
# pathname, pathname to the specified program #
|
||||
# signal, send this signal to pathname #
|
||||
# #
|
||||
# Return values (as defined by LSB exit codes): #
|
||||
# 0 - program (pathname) has stopped/is already stopped or a #
|
||||
# running program has been sent specified signal and stopped #
|
||||
# successfully #
|
||||
# 1 - generic or unspecified error #
|
||||
# 2 - invalid or excessive argument(s) #
|
||||
# 5 - program is not installed #
|
||||
# 7 - program is not running and a signal was supplied #
|
||||
################################################################################
|
||||
killproc()
|
||||
{
|
||||
local pidfile
|
||||
local program
|
||||
local prefix
|
||||
local progname
|
||||
local signal="-TERM"
|
||||
local fallback="-KILL"
|
||||
local nosig
|
||||
local pidlist
|
||||
local retval
|
||||
local pid
|
||||
local delay="30"
|
||||
local piddead
|
||||
local dtime
|
||||
|
||||
# Process arguments
|
||||
while true; do
|
||||
case "${1}" in
|
||||
-p)
|
||||
pidfile="${2}"
|
||||
shift 2
|
||||
;;
|
||||
|
||||
*)
|
||||
program="${1}"
|
||||
if [ -n "${2}" ]; then
|
||||
signal="${2}"
|
||||
fallback=""
|
||||
else
|
||||
nosig=1
|
||||
fi
|
||||
|
||||
# Error on additional arguments
|
||||
if [ -n "${3}" ]; then
|
||||
return 2
|
||||
else
|
||||
break
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Check for a valid program
|
||||
if [ ! -e "${program}" ]; then return 5; fi
|
||||
|
||||
# Check for a valid signal
|
||||
check_signal "${signal}"
|
||||
if [ "${?}" -ne "0" ]; then return 2; fi
|
||||
|
||||
# Get a list of pids
|
||||
if [ -z "${pidfile}" ]; then
|
||||
# determine the pid by discovery
|
||||
pidlist=`pidofproc "${1}"`
|
||||
retval="${?}"
|
||||
else
|
||||
# The PID file contains the needed PIDs
|
||||
# Note that by LSB requirement, the path must be given to pidofproc,
|
||||
# however, it is not used by the current implementation or standard.
|
||||
pidlist=`pidofproc -p "${pidfile}" "${1}"`
|
||||
retval="${?}"
|
||||
fi
|
||||
|
||||
# Return a value ONLY
|
||||
# It is the init script's (or distribution's functions) responsibilty
|
||||
# to log messages!
|
||||
case "${retval}" in
|
||||
|
||||
0)
|
||||
# Program is running correctly
|
||||
# Do nothing here, let killproc continue.
|
||||
;;
|
||||
|
||||
1)
|
||||
# Program is not running, but an invalid pid file exists
|
||||
# Remove the pid file.
|
||||
|
||||
progname=${program##*/}
|
||||
|
||||
if [[ -e "/run/${progname}.pid" ]]; then
|
||||
pidfile="/run/${progname}.pid"
|
||||
rm -f "${pidfile}"
|
||||
fi
|
||||
|
||||
# This is only a success if no signal was passed.
|
||||
if [ -n "${nosig}" ]; then
|
||||
return 0
|
||||
else
|
||||
return 7
|
||||
fi
|
||||
;;
|
||||
|
||||
3)
|
||||
# Program is not running and no pidfile exists
|
||||
# This is only a success if no signal was passed.
|
||||
if [ -n "${nosig}" ]; then
|
||||
return 0
|
||||
else
|
||||
return 7
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
# Others as returned by status values shall not be interpreted
|
||||
# and returned as an unspecified error.
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Perform different actions for exit signals and control signals
|
||||
check_sig_type "${signal}"
|
||||
|
||||
if [ "${?}" -eq "0" ]; then # Signal is used to terminate the program
|
||||
|
||||
# Account for empty pidlist (pid file still exists and no
|
||||
# signal was given)
|
||||
if [ "${pidlist}" != "" ]; then
|
||||
|
||||
# Kill the list of pids
|
||||
for pid in ${pidlist}; do
|
||||
|
||||
kill -0 "${pid}" 2> /dev/null
|
||||
|
||||
if [ "${?}" -ne "0" ]; then
|
||||
# Process is dead, continue to next and assume all is well
|
||||
continue
|
||||
else
|
||||
kill "${signal}" "${pid}" 2> /dev/null
|
||||
|
||||
# Wait up to ${delay}/10 seconds to for "${pid}" to
|
||||
# terminate in 10ths of a second
|
||||
|
||||
while [ "${delay}" -ne "0" ]; do
|
||||
kill -0 "${pid}" 2> /dev/null || piddead="1"
|
||||
if [ "${piddead}" = "1" ]; then break; fi
|
||||
sleep 0.1
|
||||
delay="$(( ${delay} - 1 ))"
|
||||
done
|
||||
|
||||
# If a fallback is set, and program is still running, then
|
||||
# use the fallback
|
||||
if [ -n "${fallback}" -a "${piddead}" != "1" ]; then
|
||||
kill "${fallback}" "${pid}" 2> /dev/null
|
||||
sleep 1
|
||||
# Check again, and fail if still running
|
||||
kill -0 "${pid}" 2> /dev/null && return 1
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# Check for and remove stale PID files.
|
||||
if [ -z "${pidfile}" ]; then
|
||||
# Find the basename of $program
|
||||
prefix=`echo "${program}" | sed 's/[^/]*$//'`
|
||||
progname=`echo "${program}" | sed "s@${prefix}@@"`
|
||||
|
||||
if [ -e "/run/${progname}.pid" ]; then
|
||||
rm -f "/run/${progname}.pid" 2> /dev/null
|
||||
fi
|
||||
else
|
||||
if [ -e "${pidfile}" ]; then rm -f "${pidfile}" 2> /dev/null; fi
|
||||
fi
|
||||
|
||||
# For signals that do not expect a program to exit, simply
|
||||
# let kill do its job, and evaluate kill's return for value
|
||||
|
||||
else # check_sig_type - signal is not used to terminate program
|
||||
for pid in ${pidlist}; do
|
||||
kill "${signal}" "${pid}"
|
||||
if [ "${?}" -ne "0" ]; then return 1; fi
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# pidofproc() #
|
||||
# Usage: pidofproc [-p pidfile] pathname #
|
||||
# #
|
||||
# Purpose: This function returns one or more pid(s) for a particular daemon #
|
||||
# #
|
||||
# Inputs: -p pidfile, use the specified pidfile instead of pidof #
|
||||
# pathname, path to the specified program #
|
||||
# #
|
||||
# Return values (as defined by LSB status codes): #
|
||||
# 0 - Success (PIDs to stdout) #
|
||||
# 1 - Program is dead, PID file still exists (remaining PIDs output) #
|
||||
# 3 - Program is not running (no output) #
|
||||
################################################################################
|
||||
pidofproc()
|
||||
{
|
||||
local pidfile
|
||||
local program
|
||||
local prefix
|
||||
local progname
|
||||
local pidlist
|
||||
local lpids
|
||||
local exitstatus="0"
|
||||
|
||||
# Process arguments
|
||||
while true; do
|
||||
case "${1}" in
|
||||
|
||||
-p)
|
||||
pidfile="${2}"
|
||||
shift 2
|
||||
;;
|
||||
|
||||
*)
|
||||
program="${1}"
|
||||
if [ -n "${2}" ]; then
|
||||
# Too many arguments
|
||||
# Since this is status, return unknown
|
||||
return 4
|
||||
else
|
||||
break
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# If a PID file is not specified, try and find one.
|
||||
if [ -z "${pidfile}" ]; then
|
||||
# Get the program's basename
|
||||
prefix=`echo "${program}" | sed 's/[^/]*$//'`
|
||||
|
||||
if [ -z "${prefix}" ]; then
|
||||
progname="${program}"
|
||||
else
|
||||
progname=`echo "${program}" | sed "s@${prefix}@@"`
|
||||
fi
|
||||
|
||||
# If a PID file exists with that name, assume that is it.
|
||||
if [ -e "/run/${progname}.pid" ]; then
|
||||
pidfile="/run/${progname}.pid"
|
||||
fi
|
||||
fi
|
||||
|
||||
# If a PID file is set and exists, use it.
|
||||
if [ -n "${pidfile}" -a -e "${pidfile}" ]; then
|
||||
|
||||
# Use the value in the first line of the pidfile
|
||||
pidlist=`/bin/head -n1 "${pidfile}"`
|
||||
# This can optionally be written as 'sed 1q' to repalce 'head -n1'
|
||||
# should LFS move /bin/head to /usr/bin/head
|
||||
else
|
||||
# Use pidof
|
||||
pidlist=`pidof "${program}"`
|
||||
fi
|
||||
|
||||
# Figure out if all listed PIDs are running.
|
||||
for pid in ${pidlist}; do
|
||||
kill -0 ${pid} 2> /dev/null
|
||||
|
||||
if [ "${?}" -eq "0" ]; then
|
||||
lpids="${lpids}${pid} "
|
||||
else
|
||||
exitstatus="1"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -z "${lpids}" -a ! -f "${pidfile}" ]; then
|
||||
return 3
|
||||
else
|
||||
echo "${lpids}"
|
||||
return "${exitstatus}"
|
||||
fi
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# statusproc() #
|
||||
# Usage: statusproc [-p pidfile] pathname #
|
||||
# #
|
||||
# Purpose: This function prints the status of a particular daemon to stdout #
|
||||
# #
|
||||
# Inputs: -p pidfile, use the specified pidfile instead of pidof #
|
||||
# pathname, path to the specified program #
|
||||
# #
|
||||
# Return values: #
|
||||
# 0 - Status printed #
|
||||
# 1 - Input error. The daemon to check was not specified. #
|
||||
################################################################################
|
||||
statusproc()
|
||||
{
|
||||
local pidfile
|
||||
local pidlist
|
||||
|
||||
if [ "${#}" = "0" ]; then
|
||||
echo "Usage: statusproc [-p pidfle] {program}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Process arguments
|
||||
while true; do
|
||||
case "${1}" in
|
||||
|
||||
-p)
|
||||
pidfile="${2}"
|
||||
shift 2
|
||||
;;
|
||||
|
||||
*)
|
||||
if [ -n "${2}" ]; then
|
||||
echo "Too many arguments"
|
||||
return 1
|
||||
else
|
||||
break
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -n "${pidfile}" ]; then
|
||||
pidlist=`pidofproc -p "${pidfile}" $@`
|
||||
else
|
||||
pidlist=`pidofproc $@`
|
||||
fi
|
||||
|
||||
# Trim trailing blanks
|
||||
pidlist=`echo "${pidlist}" | sed -r 's/ +$//'`
|
||||
|
||||
base="${1##*/}"
|
||||
|
||||
if [ -n "${pidlist}" ]; then
|
||||
/bin/echo -e "${INFO}${base} is running with Process" \
|
||||
"ID(s) ${pidlist}.${NORMAL}"
|
||||
else
|
||||
if [ -n "${base}" -a -e "/run/${base}.pid" ]; then
|
||||
/bin/echo -e "${WARNING}${1} is not running but" \
|
||||
"/run/${base}.pid exists.${NORMAL}"
|
||||
else
|
||||
if [ -n "${pidfile}" -a -e "${pidfile}" ]; then
|
||||
/bin/echo -e "${WARNING}${1} is not running" \
|
||||
"but ${pidfile} exists.${NORMAL}"
|
||||
else
|
||||
/bin/echo -e "${INFO}${1} is not running.${NORMAL}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# timespec() #
|
||||
# #
|
||||
# Purpose: An internal utility function to format a timestamp #
|
||||
# a boot log file. Sets the STAMP variable. #
|
||||
# #
|
||||
# Return value: Not used #
|
||||
################################################################################
|
||||
timespec()
|
||||
{
|
||||
STAMP="$(echo `date +"%b %d %T %:z"` `hostname`) "
|
||||
return 0
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# log_success_msg() #
|
||||
# Usage: log_success_msg ["message"] #
|
||||
# #
|
||||
# Purpose: Print a successful status message to the screen and #
|
||||
# a boot log file. #
|
||||
# #
|
||||
# Inputs: $@ - Message #
|
||||
# #
|
||||
# Return values: Not used #
|
||||
################################################################################
|
||||
log_success_msg()
|
||||
{
|
||||
/bin/echo -n -e "${BMPREFIX}${@}"
|
||||
/bin/echo -e "${CURS_ZERO}${SUCCESS_PREFIX}${SET_COL}${SUCCESS_SUFFIX}"
|
||||
|
||||
# Strip non-printable characters from log file
|
||||
logmessage=`echo "${@}" | sed 's/\\\033[^a-zA-Z]*.//g'`
|
||||
|
||||
timespec
|
||||
/bin/echo -e "${STAMP} ${logmessage} OK" >> ${BOOTLOG}
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
log_success_msg2()
|
||||
{
|
||||
/bin/echo -n -e "${BMPREFIX}${@}"
|
||||
/bin/echo -e "${CURS_ZERO}${SUCCESS_PREFIX}${SET_COL}${SUCCESS_SUFFIX}"
|
||||
|
||||
echo " OK" >> ${BOOTLOG}
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# log_failure_msg() #
|
||||
# Usage: log_failure_msg ["message"] #
|
||||
# #
|
||||
# Purpose: Print a failure status message to the screen and #
|
||||
# a boot log file. #
|
||||
# #
|
||||
# Inputs: $@ - Message #
|
||||
# #
|
||||
# Return values: Not used #
|
||||
################################################################################
|
||||
log_failure_msg()
|
||||
{
|
||||
/bin/echo -n -e "${BMPREFIX}${@}"
|
||||
/bin/echo -e "${CURS_ZERO}${FAILURE_PREFIX}${SET_COL}${FAILURE_SUFFIX}"
|
||||
|
||||
# Strip non-printable characters from log file
|
||||
|
||||
timespec
|
||||
logmessage=`echo "${@}" | sed 's/\\\033[^a-zA-Z]*.//g'`
|
||||
/bin/echo -e "${STAMP} ${logmessage} FAIL" >> ${BOOTLOG}
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
log_failure_msg2()
|
||||
{
|
||||
/bin/echo -n -e "${BMPREFIX}${@}"
|
||||
/bin/echo -e "${CURS_ZERO}${FAILURE_PREFIX}${SET_COL}${FAILURE_SUFFIX}"
|
||||
|
||||
echo "FAIL" >> ${BOOTLOG}
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# log_warning_msg() #
|
||||
# Usage: log_warning_msg ["message"] #
|
||||
# #
|
||||
# Purpose: Print a warning status message to the screen and #
|
||||
# a boot log file. #
|
||||
# #
|
||||
# Return values: Not used #
|
||||
################################################################################
|
||||
log_warning_msg()
|
||||
{
|
||||
/bin/echo -n -e "${BMPREFIX}${@}"
|
||||
/bin/echo -e "${CURS_ZERO}${WARNING_PREFIX}${SET_COL}${WARNING_SUFFIX}"
|
||||
|
||||
# Strip non-printable characters from log file
|
||||
logmessage=`echo "${@}" | sed 's/\\\033[^a-zA-Z]*.//g'`
|
||||
timespec
|
||||
/bin/echo -e "${STAMP} ${logmessage} WARN" >> ${BOOTLOG}
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
log_skip_msg()
|
||||
{
|
||||
/bin/echo -n -e "${BMPREFIX}${@}"
|
||||
/bin/echo -e "${CURS_ZERO}${SKIP_PREFIX}${SET_COL}${SKIP_SUFFIX}"
|
||||
|
||||
# Strip non-printable characters from log file
|
||||
logmessage=`echo "${@}" | sed 's/\\\033[^a-zA-Z]*.//g'`
|
||||
/bin/echo "SKIP" >> ${BOOTLOG}
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# log_info_msg() #
|
||||
# Usage: log_info_msg message #
|
||||
# #
|
||||
# Purpose: Print an information message to the screen and #
|
||||
# a boot log file. Does not print a trailing newline character. #
|
||||
# #
|
||||
# Return values: Not used #
|
||||
################################################################################
|
||||
log_info_msg()
|
||||
{
|
||||
/bin/echo -n -e "${BMPREFIX}${@}"
|
||||
|
||||
# Strip non-printable characters from log file
|
||||
logmessage=`echo "${@}" | sed 's/\\\033[^a-zA-Z]*.//g'`
|
||||
timespec
|
||||
/bin/echo -n -e "${STAMP} ${logmessage}" >> ${BOOTLOG}
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
log_info_msg2()
|
||||
{
|
||||
/bin/echo -n -e "${@}"
|
||||
|
||||
# Strip non-printable characters from log file
|
||||
logmessage=`echo "${@}" | sed 's/\\\033[^a-zA-Z]*.//g'`
|
||||
/bin/echo -n -e "${logmessage}" >> ${BOOTLOG}
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# evaluate_retval() #
|
||||
# Usage: Evaluate a return value and print success or failure as appropriate #
|
||||
# #
|
||||
# Purpose: Convenience function to terminate an info message #
|
||||
# #
|
||||
# Return values: Not used #
|
||||
################################################################################
|
||||
evaluate_retval()
|
||||
{
|
||||
local error_value="${?}"
|
||||
|
||||
if [ ${error_value} = 0 ]; then
|
||||
log_success_msg2
|
||||
else
|
||||
log_failure_msg2
|
||||
fi
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# check_signal() #
|
||||
# Usage: check_signal [ -{signal} ] #
|
||||
# #
|
||||
# Purpose: Check for a valid signal. This is not defined by any LSB draft, #
|
||||
# however, it is required to check the signals to determine if the #
|
||||
# signals chosen are invalid arguments to the other functions. #
|
||||
# #
|
||||
# Inputs: Accepts a single string value in the form of -{signal} #
|
||||
# #
|
||||
# Return values: #
|
||||
# 0 - Success (signal is valid #
|
||||
# 1 - Signal is not valid #
|
||||
################################################################################
|
||||
check_signal()
|
||||
{
|
||||
local valsig
|
||||
|
||||
# Add error handling for invalid signals
|
||||
valsig=" -ALRM -HUP -INT -KILL -PIPE -POLL -PROF -TERM -USR1 -USR2"
|
||||
valsig="${valsig} -VTALRM -STKFLT -PWR -WINCH -CHLD -URG -TSTP -TTIN"
|
||||
valsig="${valsig} -TTOU -STOP -CONT -ABRT -FPE -ILL -QUIT -SEGV -TRAP"
|
||||
valsig="${valsig} -SYS -EMT -BUS -XCPU -XFSZ -0 -1 -2 -3 -4 -5 -6 -8 -9"
|
||||
valsig="${valsig} -11 -13 -14 -15 "
|
||||
|
||||
echo "${valsig}" | grep -- " ${1} " > /dev/null
|
||||
|
||||
if [ "${?}" -eq "0" ]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# check_sig_type() #
|
||||
# Usage: check_signal [ -{signal} | {signal} ] #
|
||||
# #
|
||||
# Purpose: Check if signal is a program termination signal or a control signal #
|
||||
# This is not defined by any LSB draft, however, it is required to #
|
||||
# check the signals to determine if they are intended to end a #
|
||||
# program or simply to control it. #
|
||||
# #
|
||||
# Inputs: Accepts a single string value in the form or -{signal} or {signal} #
|
||||
# #
|
||||
# Return values: #
|
||||
# 0 - Signal is used for program termination #
|
||||
# 1 - Signal is used for program control #
|
||||
################################################################################
|
||||
check_sig_type()
|
||||
{
|
||||
local valsig
|
||||
|
||||
# The list of termination signals (limited to generally used items)
|
||||
valsig=" -ALRM -INT -KILL -TERM -PWR -STOP -ABRT -QUIT -2 -3 -6 -9 -14 -15 "
|
||||
|
||||
echo "${valsig}" | grep -- " ${1} " > /dev/null
|
||||
|
||||
if [ "${?}" -eq "0" ]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# wait_for_user() #
|
||||
# #
|
||||
# Purpose: Wait for the user to respond if not a headless system #
|
||||
# #
|
||||
################################################################################
|
||||
wait_for_user()
|
||||
{
|
||||
# Wait for the user by default
|
||||
[ "${HEADLESS=0}" = "0" ] && read ENTER
|
||||
return 0
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# is_true() #
|
||||
# #
|
||||
# Purpose: Utility to test if a variable is true | yes | 1 #
|
||||
# #
|
||||
################################################################################
|
||||
is_true()
|
||||
{
|
||||
[ "$1" = "1" ] || [ "$1" = "yes" ] || [ "$1" = "true" ] || [ "$1" = "y" ] ||
|
||||
[ "$1" = "t" ]
|
||||
}
|
||||
|
||||
# End /lib/lsb/init-functions
|
81
bootscripts/lfs/lib/services/ipv4-static
Normal file
81
bootscripts/lfs/lib/services/ipv4-static
Normal file
@ -0,0 +1,81 @@
|
||||
#!/bin/sh
|
||||
########################################################################
|
||||
# Begin /lib/services/ipv4-static
|
||||
#
|
||||
# Description : IPV4 Static Boot Script
|
||||
#
|
||||
# Authors : Nathan Coulson - nathan@linuxfromscratch.org
|
||||
# Kevin P. Fleming - kpfleming@linuxfromscratch.org
|
||||
# Update : Bruce Dubbs - bdubbs@linuxfromscratch.org
|
||||
#
|
||||
# Version : LFS 7.0
|
||||
#
|
||||
########################################################################
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
. ${IFCONFIG}
|
||||
|
||||
if [ -z "${IP}" ]; then
|
||||
log_failure_msg "\nIP variable missing from ${IFCONFIG}, cannot continue."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "${PREFIX}" -a -z "${PEER}" ]; then
|
||||
log_warning_msg "\nPREFIX variable missing from ${IFCONFIG}, assuming 24."
|
||||
PREFIX=24
|
||||
args="${args} ${IP}/${PREFIX}"
|
||||
|
||||
elif [ -n "${PREFIX}" -a -n "${PEER}" ]; then
|
||||
log_failure_msg "\nPREFIX and PEER both specified in ${IFCONFIG}, cannot continue."
|
||||
exit 1
|
||||
|
||||
elif [ -n "${PREFIX}" ]; then
|
||||
args="${args} ${IP}/${PREFIX}"
|
||||
|
||||
elif [ -n "${PEER}" ]; then
|
||||
args="${args} ${IP} peer ${PEER}"
|
||||
fi
|
||||
|
||||
if [ -n "${LABEL}" ]; then
|
||||
args="${args} label ${LABEL}"
|
||||
fi
|
||||
|
||||
if [ -n "${BROADCAST}" ]; then
|
||||
args="${args} broadcast ${BROADCAST}"
|
||||
fi
|
||||
|
||||
case "${2}" in
|
||||
up)
|
||||
if [ "$(ip addr show ${1} 2>/dev/null | grep ${IP}/)" = "" ]; then
|
||||
log_info_msg "Adding IPv4 address ${IP} to the ${1} interface..."
|
||||
ip addr add ${args} dev ${1}
|
||||
evaluate_retval
|
||||
else
|
||||
log_warning_msg "Cannot add IPv4 address ${IP} to ${1}. Already present."
|
||||
fi
|
||||
;;
|
||||
|
||||
down)
|
||||
if [ "$(ip addr show ${1} 2>/dev/null | grep ${IP}/)" != "" ]; then
|
||||
log_info_msg "Removing IPv4 address ${IP} from the ${1} interface..."
|
||||
ip addr del ${args} dev ${1}
|
||||
evaluate_retval
|
||||
fi
|
||||
|
||||
if [ -n "${GATEWAY}" ]; then
|
||||
# Only remove the gateway if there are no remaining ipv4 addresses
|
||||
if [ "$(ip addr show ${1} 2>/dev/null | grep 'inet ')" != "" ]; then
|
||||
log_info_msg "Removing default gateway..."
|
||||
ip route del default
|
||||
evaluate_retval
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: ${0} [interface] {up|down}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# End /lib/services/ipv4-static
|
98
bootscripts/lfs/lib/services/ipv4-static-route
Normal file
98
bootscripts/lfs/lib/services/ipv4-static-route
Normal file
@ -0,0 +1,98 @@
|
||||
#!/bin/sh
|
||||
########################################################################
|
||||
# Begin /lib/services/ipv4-static-route
|
||||
#
|
||||
# Description : IPV4 Static Route Script
|
||||
#
|
||||
# Authors : Kevin P. Fleming - kpfleming@linuxfromscratch.org
|
||||
# DJ Lucas - dj@linuxfromscratch.org
|
||||
# Update : Bruce Dubbs - bdubbs@linuxfromscratch.org
|
||||
#
|
||||
# Version : LFS 7.0
|
||||
#
|
||||
########################################################################
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
. ${IFCONFIG}
|
||||
|
||||
case "${TYPE}" in
|
||||
("" | "network")
|
||||
need_ip=1
|
||||
need_gateway=1
|
||||
;;
|
||||
|
||||
("default")
|
||||
need_gateway=1
|
||||
args="${args} default"
|
||||
desc="default"
|
||||
;;
|
||||
|
||||
("host")
|
||||
need_ip=1
|
||||
;;
|
||||
|
||||
("unreachable")
|
||||
need_ip=1
|
||||
args="${args} unreachable"
|
||||
desc="unreachable "
|
||||
;;
|
||||
|
||||
(*)
|
||||
log_failure_msg "Unknown route type (${TYPE}) in ${IFCONFIG}, cannot continue."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -n "${GATEWAY}" ]; then
|
||||
MSG="The GATEWAY variable cannot be set in ${IFCONFIG} for static routes.\n"
|
||||
log_failure_msg "$MSG Use STATIC_GATEWAY only, cannot continue"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -n "${need_ip}" ]; then
|
||||
if [ -z "${IP}" ]; then
|
||||
log_failure_msg "IP variable missing from ${IFCONFIG}, cannot continue."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "${PREFIX}" ]; then
|
||||
log_failure_msg "PREFIX variable missing from ${IFCONFIG}, cannot continue."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
args="${args} ${IP}/${PREFIX}"
|
||||
desc="${desc}${IP}/${PREFIX}"
|
||||
fi
|
||||
|
||||
if [ -n "${need_gateway}" ]; then
|
||||
if [ -z "${STATIC_GATEWAY}" ]; then
|
||||
log_failure_msg "STATIC_GATEWAY variable missing from ${IFCONFIG}, cannot continue."
|
||||
exit 1
|
||||
fi
|
||||
args="${args} via ${STATIC_GATEWAY}"
|
||||
fi
|
||||
|
||||
if [ -n "${SOURCE}" ]; then
|
||||
args="${args} src ${SOURCE}"
|
||||
fi
|
||||
|
||||
case "${2}" in
|
||||
up)
|
||||
log_info_msg "Adding '${desc}' route to the ${1} interface..."
|
||||
ip route add ${args} dev ${1}
|
||||
evaluate_retval
|
||||
;;
|
||||
|
||||
down)
|
||||
log_info_msg "Removing '${desc}' route from the ${1} interface..."
|
||||
ip route del ${args} dev ${1}
|
||||
evaluate_retval
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: ${0} [interface] {up|down}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# End /lib/services/ipv4-static-route
|
100
bootscripts/lfs/sbin/ifdown
Normal file
100
bootscripts/lfs/sbin/ifdown
Normal file
@ -0,0 +1,100 @@
|
||||
#!/bin/bash
|
||||
########################################################################
|
||||
# Begin /sbin/ifdown
|
||||
#
|
||||
# Description : Interface Down
|
||||
#
|
||||
# Authors : Nathan Coulson - nathan@linuxfromscratch.org
|
||||
# Kevin P. Fleming - kpfleming@linuxfromscratch.org
|
||||
# Update : Bruce Dubbs - bdubbs@linuxfromscratch.org
|
||||
#
|
||||
# Version : LFS 7.0
|
||||
#
|
||||
# Notes : the IFCONFIG variable is passed to the scripts found
|
||||
# in the /lib/services directory, to indicate what file the
|
||||
# service should source to get interface specifications.
|
||||
#
|
||||
########################################################################
|
||||
|
||||
RELEASE="7.0"
|
||||
|
||||
USAGE="Usage: $0 [ -hV ] [--help] [--version] interface"
|
||||
VERSTR="LFS ifdown, version ${RELEASE}"
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
--help | -h) help="y"; break ;;
|
||||
|
||||
--version | -V) echo "${VERSTR}"; exit 0 ;;
|
||||
|
||||
-*) echo "ifup: ${1}: invalid option" >&2
|
||||
echo "${USAGE}" >& 2
|
||||
exit 2 ;;
|
||||
|
||||
*) break ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -n "$help" ]; then
|
||||
echo "${VERSTR}"
|
||||
echo "${USAGE}"
|
||||
echo
|
||||
cat << HERE_EOF
|
||||
ifdown is used to bring down a network interface. The interface
|
||||
parameter, e.g. eth0 or eth0:2, must match the trailing part of the
|
||||
interface specifications file, e.g. /etc/sysconfig/ifconfig.eth0:2.
|
||||
|
||||
HERE_EOF
|
||||
exit 0
|
||||
fi
|
||||
|
||||
file=/etc/sysconfig/ifconfig.${1}
|
||||
|
||||
# Skip backup files
|
||||
[ "${file}" = "${file%""~""}" ] || exit 0
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
if [ ! -r "${file}" ]; then
|
||||
log_warning_msg "${file} is missing or cannot be accessed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
. ${file}
|
||||
|
||||
if [ "$IFACE" = "" ]; then
|
||||
log_failure_msg "${file} does not define an interface [IFACE]."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# We only need to first service to bring down the interface
|
||||
S=`echo ${SERVICE} | cut -f1 -d" "`
|
||||
|
||||
if ip link show ${IFACE} > /dev/null 2>&1; then
|
||||
if [ -n "${S}" -a -x "/lib/services/${S}" ]; then
|
||||
IFCONFIG=${file} /lib/services/${S} ${IFACE} down
|
||||
else
|
||||
MSG="Unable to process ${file}. Either "
|
||||
MSG="${MSG}the SERVICE variable was not set "
|
||||
MSG="${MSG}or the specified service cannot be executed."
|
||||
log_failure_msg "$MSG"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
log_warning_msg "Interface ${1} doesn't exist."
|
||||
fi
|
||||
|
||||
# Leave the interface up if there are additional interfaces in the device
|
||||
link_status=`ip link show ${IFACE} 2>/dev/null`
|
||||
|
||||
if [ -n "${link_status}" ]; then
|
||||
if [ "$(echo "${link_status}" | grep UP)" != "" ]; then
|
||||
if [ "$(ip addr show ${IFACE} | grep 'inet ')" == "" ]; then
|
||||
log_info_msg "Bringing down the ${IFACE} interface..."
|
||||
ip link set ${IFACE} down
|
||||
evaluate_retval
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# End /sbin/ifdown
|
150
bootscripts/lfs/sbin/ifup
Normal file
150
bootscripts/lfs/sbin/ifup
Normal file
@ -0,0 +1,150 @@
|
||||
#!/bin/sh
|
||||
########################################################################
|
||||
# Begin /sbin/ifup
|
||||
#
|
||||
# Description : Interface Up
|
||||
#
|
||||
# Authors : Nathan Coulson - nathan@linuxfromscratch.org
|
||||
# Kevin P. Fleming - kpfleming@linuxfromscratch.org
|
||||
# Update : Bruce Dubbs - bdubbs@linuxfromscratch.org
|
||||
# DJ Lucas - dj@linuxfromscratch.org
|
||||
#
|
||||
# Version : LFS 7.7
|
||||
#
|
||||
# Notes : The IFCONFIG variable is passed to the SERVICE script
|
||||
# in the /lib/services directory, to indicate what file the
|
||||
# service should source to get interface specifications.
|
||||
#
|
||||
########################################################################
|
||||
|
||||
up()
|
||||
{
|
||||
log_info_msg "Bringing up the ${1} interface..."
|
||||
|
||||
if ip link show $1 > /dev/null 2>&1; then
|
||||
link_status=`ip link show $1`
|
||||
|
||||
if [ -n "${link_status}" ]; then
|
||||
if ! echo "${link_status}" | grep -q UP; then
|
||||
ip link set $1 up
|
||||
fi
|
||||
fi
|
||||
|
||||
else
|
||||
log_failure_msg "Interface ${IFACE} doesn't exist."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
evaluate_retval
|
||||
}
|
||||
|
||||
RELEASE="7.7"
|
||||
|
||||
USAGE="Usage: $0 [ -hV ] [--help] [--version] interface"
|
||||
VERSTR="LFS ifup, version ${RELEASE}"
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
--help | -h) help="y"; break ;;
|
||||
|
||||
--version | -V) echo "${VERSTR}"; exit 0 ;;
|
||||
|
||||
-*) echo "ifup: ${1}: invalid option" >&2
|
||||
echo "${USAGE}" >& 2
|
||||
exit 2 ;;
|
||||
|
||||
*) break ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -n "$help" ]; then
|
||||
echo "${VERSTR}"
|
||||
echo "${USAGE}"
|
||||
echo
|
||||
cat << HERE_EOF
|
||||
ifup is used to bring up a network interface. The interface
|
||||
parameter, e.g. eth0 or eth0:2, must match the trailing part of the
|
||||
interface specifications file, e.g. /etc/sysconfig/ifconfig.eth0:2.
|
||||
|
||||
HERE_EOF
|
||||
exit 0
|
||||
fi
|
||||
|
||||
file=/etc/sysconfig/ifconfig.${1}
|
||||
|
||||
# Skip backup files
|
||||
[ "${file}" = "${file%""~""}" ] || exit 0
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
if [ ! -r "${file}" ]; then
|
||||
log_failure_msg "Unable to bring up ${1} interface! ${file} is missing or cannot be accessed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
. $file
|
||||
|
||||
if [ "$IFACE" = "" ]; then
|
||||
log_failure_msg "Unable to bring up ${1} interface! ${file} does not define an interface [IFACE]."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Do not process this service if started by boot, and ONBOOT
|
||||
# is not set to yes
|
||||
if [ "${IN_BOOT}" = "1" -a "${ONBOOT}" != "yes" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Bring up the interface
|
||||
if [ "$VIRTINT" != "yes" ]; then
|
||||
up ${IFACE}
|
||||
fi
|
||||
|
||||
for S in ${SERVICE}; do
|
||||
if [ ! -x "/lib/services/${S}" ]; then
|
||||
MSG="\nUnable to process ${file}. Either "
|
||||
MSG="${MSG}the SERVICE '${S} was not present "
|
||||
MSG="${MSG}or cannot be executed."
|
||||
log_failure_msg "$MSG"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "${SERVICE}" = "wpa" ]; then log_success_msg; fi
|
||||
|
||||
# Create/configure the interface
|
||||
for S in ${SERVICE}; do
|
||||
IFCONFIG=${file} /lib/services/${S} ${IFACE} up
|
||||
done
|
||||
|
||||
# Set link up virtual interfaces
|
||||
if [ "${VIRTINT}" == "yes" ]; then
|
||||
up ${IFACE}
|
||||
fi
|
||||
|
||||
# Bring up any additional interface components
|
||||
for I in $INTERFACE_COMPONENTS; do up $I; done
|
||||
|
||||
# Set MTU if requested. Check if MTU has a "good" value.
|
||||
if test -n "${MTU}"; then
|
||||
if [[ ${MTU} =~ ^[0-9]+$ ]] && [[ $MTU -ge 68 ]] ; then
|
||||
for I in $IFACE $INTERFACE_COMPONENTS; do
|
||||
ip link set dev $I mtu $MTU;
|
||||
done
|
||||
else
|
||||
log_info_msg2 "Invalid MTU $MTU"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Set the route default gateway if requested
|
||||
if [ -n "${GATEWAY}" ]; then
|
||||
if ip route | grep -q default; then
|
||||
log_warning_msg "Gateway already setup; skipping."
|
||||
else
|
||||
log_info_msg "Adding default gateway ${GATEWAY} to the ${IFACE} interface..."
|
||||
ip route add default via ${GATEWAY} dev ${IFACE}
|
||||
evaluate_retval
|
||||
fi
|
||||
fi
|
||||
|
||||
# End /sbin/ifup
|
185
bootscripts/lfs/sbin/ifup.8
Normal file
185
bootscripts/lfs/sbin/ifup.8
Normal file
@ -0,0 +1,185 @@
|
||||
ifup(8) ifup(8)
|
||||
|
||||
NAME
|
||||
ifup - bring a network interface up
|
||||
ifdown - take a network interface down
|
||||
|
||||
SYNOPSIS
|
||||
ifup IFACE
|
||||
ifup -h|--help
|
||||
ifup -V|--version
|
||||
|
||||
ifdown IFACE
|
||||
ifdown -h|--help
|
||||
ifdown -V|--version
|
||||
|
||||
DESCRIPTION
|
||||
The ifup and ifdown commands may be used to configure
|
||||
(or, respectively, deconfigure) a network interface based
|
||||
on interface definitions in the file
|
||||
/etc/sysconfig/ifconfig.IFACE.
|
||||
|
||||
OPTIONS
|
||||
A summary of options is included below.
|
||||
|
||||
-h, --help
|
||||
Show summary of options.
|
||||
|
||||
-V, --version
|
||||
Show version information.
|
||||
|
||||
EXAMPLES
|
||||
ifup eth0
|
||||
Bring up the interface defined in the file
|
||||
/etc/sysconfig/ifconfig.eth0
|
||||
|
||||
ONBOOT=no
|
||||
IFACE=eth0
|
||||
SERVICE=ipv4-static
|
||||
IP=192.168.1.22
|
||||
GATEWAY=192.168.1.1
|
||||
PREFIX=24
|
||||
BROADCAST=192.168.1.255
|
||||
|
||||
ifdown eth0:2
|
||||
Bring down the interface defined in the file
|
||||
/etc/sysconfig/ifconfig.eth0:2
|
||||
|
||||
ONBOOT=no
|
||||
IFACE=eth0
|
||||
LABEL=eth0:2
|
||||
SERVICE=dhcpcd
|
||||
|
||||
DHCP_START="--waitip"
|
||||
DHCP_STOP="-k"
|
||||
|
||||
# Set PRINTIP="yes" to have the script print the DHCP IP address
|
||||
PRINTIP="yes"
|
||||
|
||||
# Set PRINTALL="yes" to print the DHCP assigned values for
|
||||
# IP, SM, DG, and 1st NS.
|
||||
PRINTALL="no"
|
||||
|
||||
ifup br0
|
||||
Bring up the interface defined in the file
|
||||
/etc/sysconfig/ifconfig.br0
|
||||
|
||||
ONBOOT=yes
|
||||
IFACE=br0
|
||||
SERVICE="bridge ipv4-static"
|
||||
IP=192.168.1.22
|
||||
GATEWAY=192.168.1.1
|
||||
PREFIX=24
|
||||
BROADCAST=192.168.1.255
|
||||
STP=no # Spanning tree protocol, default no
|
||||
INTERFACE_COMPONENTS=eth0 # Add to IFACE
|
||||
IP_FORWARD=true
|
||||
|
||||
NOTES
|
||||
The program does not configure network interfaces direct-
|
||||
ly. It runs scripts defined by the SERVICE variable in
|
||||
the network configuration file.
|
||||
|
||||
The configuration files must have the following environ-
|
||||
ment variables set:
|
||||
|
||||
IFACE - The interface to configure, e.g. eth0. It must
|
||||
be available in /sys/class/net.
|
||||
|
||||
SERVICE - The service script to run to bring up the inter-
|
||||
face. Standard services are ipv4-static and
|
||||
ipv4-static-route. Other services such as dhcp
|
||||
or bridge may be installed. This value may
|
||||
be a list of services when the interface is a
|
||||
compound device such as a bridge.
|
||||
|
||||
ONBOOT - If set to 'yes', the specified interface is
|
||||
configured by the netowrk boot script.
|
||||
|
||||
GATEWAY - The default IP address to use for routing if
|
||||
the destination IP address is not in a static
|
||||
route or on a local network, e.g., 192.168.1.1.
|
||||
For secondary IP addresses on an interface, this
|
||||
parameter should not be specified. If the service
|
||||
is ipv4-static-route, this parameter must NOT
|
||||
be set.
|
||||
|
||||
STATIC_GATEWAY - The default IP address to use for routing
|
||||
when setting a static routing address.
|
||||
|
||||
INTERFACE_COMPONENTS - A list of component interfaces
|
||||
only needed for a compound device such as a bridge.
|
||||
This list is normally a single value, e.g. eth0,
|
||||
for use with a virtual host such as kvm.
|
||||
|
||||
Other paramters that are service specific include:
|
||||
|
||||
ipv4-static
|
||||
|
||||
IP - The IP address of the interface,
|
||||
e.g. 192.168.1.2.
|
||||
|
||||
PREFIX - The number of bits that specify the network
|
||||
number of the interface. The default, if not
|
||||
specified, is 24.
|
||||
|
||||
LABEL - The label to be assigned to the interface.
|
||||
This is normally specified for assigning
|
||||
additional IP addresses to a network
|
||||
device. Example: eth0:2 (optional)
|
||||
|
||||
BROADCAST - The brodcast address for this interface,
|
||||
e.g 192.168.1.255. If not specified,
|
||||
the broadcast address will be calculated
|
||||
from the IP and PREFIX.
|
||||
|
||||
ipv4-static-route
|
||||
|
||||
TYPE - The type of route, typically 'default',
|
||||
'network', 'or host'.
|
||||
|
||||
IP - The IP address for a network or host, if the
|
||||
TYPE is not 'default'.
|
||||
|
||||
PREFIX - The prefix for the associated IP address.
|
||||
|
||||
STATIC_GATEWAY - The IP address for a network route.
|
||||
|
||||
SOURCE - The source IP address to prefer when sending
|
||||
to the destinations covered by the specified
|
||||
route. (optional)
|
||||
|
||||
dhcp/dhclient
|
||||
|
||||
DHCP_START - Optional parameters to pass to the dhcp client
|
||||
at startup.
|
||||
|
||||
DHCP_STOP - Optional paremeters to pass to the dhcp client
|
||||
at shutdown.
|
||||
|
||||
PRINTIP - Flag to print the dhcp address to stdout
|
||||
|
||||
PRINTALL - Flag to print all obtained dhcp data to stdout
|
||||
|
||||
bridge
|
||||
|
||||
IP_FORWARD - An optional flag to enable the system to forward
|
||||
inbound IP packets received by one interface to
|
||||
another outbound interface.
|
||||
|
||||
STP - Set bridge spanning tree protocol. Default is no.
|
||||
|
||||
FILES
|
||||
/etc/sysconfig/ifconfig.*
|
||||
definitions of network interfaces
|
||||
|
||||
AUTHORS
|
||||
The ifup/ifdown suite was written by Nathan Coulson
|
||||
<nathan@linuxfromscratch.org> and Kevin P. Fleming
|
||||
<kpfleming@linuxfromscratch.org>
|
||||
and updated by Bruce Dubbs <bdubbs@linuxfromscratch>.
|
||||
|
||||
SEE ALSO
|
||||
ip(8).
|
||||
|
||||
IFUP/IFDOWN 8 February 2015 ifup(8)
|
31
bootscripts/lfs/sysconfig/createfiles
Normal file
31
bootscripts/lfs/sysconfig/createfiles
Normal file
@ -0,0 +1,31 @@
|
||||
########################################################################
|
||||
# Begin /etc/sysconfig/createfiles
|
||||
#
|
||||
# Description : Createfiles script config file
|
||||
#
|
||||
# Authors :
|
||||
#
|
||||
# Version : 00.00
|
||||
#
|
||||
# Notes : The syntax of this file is as follows:
|
||||
# if type is equal to "file" or "dir"
|
||||
# <filename> <type> <permissions> <user> <group>
|
||||
# if type is equal to "dev"
|
||||
# <filename> <type> <permissions> <user> <group> <devtype>
|
||||
# <major> <minor>
|
||||
#
|
||||
# <filename> is the name of the file which is to be created
|
||||
# <type> is either file, dir, or dev.
|
||||
# file creates a new file
|
||||
# dir creates a new directory
|
||||
# dev creates a new device
|
||||
# <devtype> is either block, char or pipe
|
||||
# block creates a block device
|
||||
# char creates a character deivce
|
||||
# pipe creates a pipe, this will ignore the <major> and
|
||||
# <minor> fields
|
||||
# <major> and <minor> are the major and minor numbers used for
|
||||
# the device.
|
||||
########################################################################
|
||||
|
||||
# End /etc/sysconfig/createfiles
|
18
bootscripts/lfs/sysconfig/modules
Normal file
18
bootscripts/lfs/sysconfig/modules
Normal file
@ -0,0 +1,18 @@
|
||||
########################################################################
|
||||
# Begin /etc/sysconfig/modules
|
||||
#
|
||||
# Description : Module auto-loading configuration
|
||||
#
|
||||
# Authors :
|
||||
#
|
||||
# Version : 00.00
|
||||
#
|
||||
# Notes : The syntax of this file is as follows:
|
||||
# <module> [<arg1> <arg2> ...]
|
||||
#
|
||||
# Each module should be on its own line, and any options that you want
|
||||
# passed to the module should follow it. The line deliminator is either
|
||||
# a space or a tab.
|
||||
########################################################################
|
||||
|
||||
# End /etc/sysconfig/modules
|
92
bootscripts/lfs/sysconfig/rc.site
Normal file
92
bootscripts/lfs/sysconfig/rc.site
Normal file
@ -0,0 +1,92 @@
|
||||
# rc.site
|
||||
# Optional parameters for boot scripts.
|
||||
|
||||
# Distro Information
|
||||
# These values, if specified here, override the defaults
|
||||
#DISTRO="Linux From Scratch" # The distro name
|
||||
#DISTRO_CONTACT="lfs-dev@lists.linuxfromscratch.org" # Bug report address
|
||||
#DISTRO_MINI="LFS" # Short name used in filenames for distro config
|
||||
|
||||
# Define custom colors used in messages printed to the screen
|
||||
|
||||
# Please consult `man console_codes` for more information
|
||||
# under the "ECMA-48 Set Graphics Rendition" section
|
||||
#
|
||||
# Warning: when switching from a 8bit to a 9bit font,
|
||||
# the linux console will reinterpret the bold (1;) to
|
||||
# the top 256 glyphs of the 9bit font. This does
|
||||
# not affect framebuffer consoles
|
||||
|
||||
# These values, if specified here, override the defaults
|
||||
#BRACKET="\\033[1;34m" # Blue
|
||||
#FAILURE="\\033[1;31m" # Red
|
||||
#INFO="\\033[1;36m" # Cyan
|
||||
#NORMAL="\\033[0;39m" # Grey
|
||||
#SUCCESS="\\033[1;32m" # Green
|
||||
#WARNING="\\033[1;33m" # Yellow
|
||||
|
||||
# Use a colored prefix
|
||||
# These values, if specified here, override the defaults
|
||||
#BMPREFIX=" "
|
||||
#SUCCESS_PREFIX="${SUCCESS} * ${NORMAL} "
|
||||
#FAILURE_PREFIX="${FAILURE}*****${NORMAL} "
|
||||
#WARNING_PREFIX="${WARNING} *** ${NORMAL} "
|
||||
|
||||
# Manually seet the right edge of message output (characters)
|
||||
# Useful when resetting console font during boot to override
|
||||
# automatic screen width detection
|
||||
#COLUMNS=120
|
||||
|
||||
# Interactive startup
|
||||
#IPROMPT="yes" # Whether to display the interactive boot prompt
|
||||
#itime="3" # The amount of time (in seconds) to display the prompt
|
||||
|
||||
# The total length of the distro welcome string, without escape codes
|
||||
#wlen=$(echo "Welcome to ${DISTRO}" | wc -c )
|
||||
#welcome_message="Welcome to ${INFO}${DISTRO}${NORMAL}"
|
||||
|
||||
# The total length of the interactive string, without escape codes
|
||||
#ilen=$(echo "Press 'I' to enter interactive startup" | wc -c )
|
||||
#i_message="Press '${FAILURE}I${NORMAL}' to enter interactive startup"
|
||||
|
||||
# Set scripts to skip the file system check on reboot
|
||||
#FASTBOOT=yes
|
||||
|
||||
# Skip reading from the console
|
||||
#HEADLESS=yes
|
||||
|
||||
# Write out fsck progress if yes
|
||||
#VERBOSE_FSCK=no
|
||||
|
||||
# Speed up boot without waiting for settle in udev
|
||||
#OMIT_UDEV_SETTLE=y
|
||||
|
||||
# Speed up boot without waiting for settle in udev_retry
|
||||
#OMIT_UDEV_RETRY_SETTLE=yes
|
||||
|
||||
# Skip cleaning /tmp if yes
|
||||
#SKIPTMPCLEAN=no
|
||||
|
||||
# For setclock
|
||||
#UTC=1
|
||||
#CLOCKPARAMS=
|
||||
|
||||
# For consolelog (Note that the default, 7=debug, is noisy)
|
||||
#LOGLEVEL=7
|
||||
|
||||
# For network
|
||||
#HOSTNAME=mylfs
|
||||
|
||||
# Delay between TERM and KILL signals at shutdown
|
||||
#KILLDELAY=3
|
||||
|
||||
# Optional sysklogd parameters
|
||||
#SYSKLOGD_PARMS="-m 0"
|
||||
|
||||
# Console parameters
|
||||
#UNICODE=1
|
||||
#KEYMAP="de-latin1"
|
||||
#KEYMAP_CORRECTIONS="euro2"
|
||||
#FONT="lat0-16 -m 8859-15"
|
||||
#LEGACY_CHARSET=
|
||||
|
19
bootscripts/lfs/sysconfig/udev_retry
Normal file
19
bootscripts/lfs/sysconfig/udev_retry
Normal file
@ -0,0 +1,19 @@
|
||||
########################################################################
|
||||
# Begin /etc/sysconfig/udev_retry
|
||||
#
|
||||
# Description : udev_retry script configuration
|
||||
#
|
||||
# Authors :
|
||||
#
|
||||
# Version : 00.00
|
||||
#
|
||||
# Notes : Each subsystem that may need to be re-triggered after mountfs
|
||||
# runs should be listed in this file. Probable subsystems to be
|
||||
# listed here are rtc (due to /var/lib/hwclock/adjtime) and sound
|
||||
# (due to both /var/lib/alsa/asound.state and /usr/sbin/alsactl).
|
||||
# Entries are whitespace-separated.
|
||||
########################################################################
|
||||
|
||||
rtc
|
||||
|
||||
# End /etc/sysconfig/udev_retry
|
Loading…
Reference in New Issue
Block a user