mirror of
https://github.com/lucaspalomodevelop/core.git
synced 2026-03-16 01:24:38 +00:00
If users want read-only media they need to put their own /etc/fstab entries into the system as the MFS options from the config should not work under unknown conditions.
187 lines
5.5 KiB
Bash
Executable File
187 lines
5.5 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Copyright (c) 2014-2018 Franco Fichtner <franco@opnsense.org>
|
|
# Copyright (c) 2004-2010 Scott Ullrich <sullrich@gmail.com>
|
|
# Copyright (c) 2003-2004 Manuel Kasper <mk@neon1.net>
|
|
# All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions
|
|
# are met:
|
|
#
|
|
# 1. Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
#
|
|
# 2. Redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in the
|
|
# documentation and/or other materials provided with the distribution.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
# SUCH DAMAGE.
|
|
|
|
stty status '^T' 2> /dev/null
|
|
|
|
# Set shell to ignore SIGINT (2), but not children;
|
|
# shell catches SIGQUIT (3) and returns to single user.
|
|
#
|
|
trap : 2
|
|
trap "echo 'Boot interrupted'; exit 1" 3
|
|
|
|
HOME=/
|
|
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
|
|
export HOME PATH
|
|
|
|
echo "Mounting filesystems..."
|
|
|
|
# tunefs may refuse otherwise
|
|
mount -fr /
|
|
|
|
GROWFS_MARKER=/.probe.for.growfs.nano
|
|
|
|
while read FS_PART FS_MNT FS_TYPE FS_MORE; do
|
|
# only tune our own file systems
|
|
if [ "${FS_TYPE}" != "ufs" ]; then
|
|
continue;
|
|
fi
|
|
|
|
if echo "${FS_MORE}" | grep -iq nosoft; then
|
|
# appending "# nosoft" to the /etc/fstab entry
|
|
# will allow to strip trim and leave it disabled
|
|
tunefs -n disable ${FS_MNT}
|
|
else
|
|
# enables soft updates
|
|
tunefs -n enable ${FS_MNT}
|
|
fi
|
|
|
|
FS_DEV=$(echo ${FS_PART} | awk 'match($0, /^\/dev\/(gpt|ufs)\/.+$/) { print substr( $0, RSTART + 5, RLENGTH - 5 )}')
|
|
if [ -n "${FS_DEV}" ]; then
|
|
FS_DEV=$(glabel status -as | grep ${FS_DEV} | awk 'match($3, /^[a-z]+[0-9]+/) { print substr( $3, RSTART, RLENGTH )}')
|
|
if [ "${FS_MNT}" = "/" -a -f ${GROWFS_MARKER} ]; then
|
|
# hammertime!
|
|
gpart recover ${FS_DEV}
|
|
gpart resize -i 1 ${FS_DEV}
|
|
growfs -y ${FS_MNT}
|
|
fi
|
|
fi
|
|
if [ -z "${FS_DEV}" ]; then
|
|
FS_DEV=$(echo ${FS_PART} | awk 'match($0, /^\/dev\/[a-z]+[0-9]+/) { print substr( $0, RSTART + 5, RLENGTH - 5 )}')
|
|
fi
|
|
if [ -n "${FS_DEV}" ]; then
|
|
FS_TRIM=$(camcontrol identify ${FS_DEV} | grep TRIM | awk '{ print $5; }')
|
|
if [ "${FS_TRIM}" = "yes" ]; then
|
|
if echo "${FS_MORE}" | grep -iq notrim; then
|
|
# appending "# notrim" to the /etc/fstab entry
|
|
# will allow to strip trim and leave it disabled
|
|
tunefs -t disable ${FS_MNT}
|
|
else
|
|
# enables TRIM
|
|
tunefs -t enable ${FS_MNT}
|
|
fi
|
|
fi
|
|
fi
|
|
done < /etc/fstab
|
|
|
|
attempts=0
|
|
while [ ${attempts} -lt 3 ]; do
|
|
fsck -C -y /
|
|
fsck -C -y /
|
|
if mount -a 2> /dev/null; then
|
|
# bail if all is well
|
|
break
|
|
fi
|
|
attempts=$((attempts+1))
|
|
done
|
|
|
|
# clear growfs marker now that we are read/write
|
|
rm -f ${GROWFS_MARKER}
|
|
|
|
# see if / is writable (aka. non-LiveCD boot)
|
|
if _tmpdir=$(mktemp -d -q /.diskless.XXXXXX); then
|
|
# only remove the directory
|
|
rmdir ${_tmpdir}
|
|
else
|
|
# fake a writeable environment in some subdirs
|
|
for i in boot conf etc home root usr var; do
|
|
mkdir -p /tmp/.cdrom/${i}
|
|
mount_unionfs /tmp/.cdrom/${i} /${i}
|
|
done
|
|
fi
|
|
|
|
# regenerate groups and users for base
|
|
/usr/local/etc/rc.subr.d/recover base > /dev/null
|
|
|
|
# set keyboard map if needed
|
|
/etc/rc.d/syscons onestart
|
|
|
|
# run the config importer during early startup
|
|
/usr/local/etc/rc.importer -b
|
|
|
|
# enable console output if it was muted
|
|
/sbin/conscontrol mute off > /dev/null
|
|
|
|
# all sorts of maintenance tasks for /var
|
|
/usr/local/etc/rc.subr.d/var
|
|
|
|
# write /var/run/dmesg.boot
|
|
/etc/rc.d/dmesg onestart
|
|
|
|
# all sorts of maintenance tasks for /tmp
|
|
/usr/local/etc/rc.subr.d/tmp
|
|
|
|
# set up and recover a crash dump before activating swap
|
|
/usr/local/etc/rc.subr.d/crashdump
|
|
/usr/local/etc/rc.subr.d/swapon
|
|
|
|
echo -n "."
|
|
/sbin/ldconfig -elf /usr/lib /usr/local/lib /lib
|
|
/etc/rc.d/ldconfig start 2> /dev/null
|
|
|
|
# Launching kbdmux(4)
|
|
if [ -f "/dev/kbdmux0" ]; then
|
|
echo -n "."
|
|
/usr/sbin/kbdcontrol -k /dev/kbdmux0 < /dev/console
|
|
[ -c "/dev/atkbd0" ] && kbdcontrol -a atkbd0 < /dev/console
|
|
[ -c "/dev/ukbd0" ] && kbdcontrol -a ukbd0 < /dev/console
|
|
fi
|
|
|
|
echo "done."
|
|
|
|
# Regenerate groups and users for packages
|
|
/usr/local/etc/rc.subr.d/recover pkg > /dev/null 2> /dev/null
|
|
|
|
# Recreate capabilities DB
|
|
/usr/bin/cap_mkdb /etc/login.conf
|
|
|
|
# Execute the early syshook / plugin commands
|
|
/usr/local/etc/rc.syshook early
|
|
|
|
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
# !!! PHP starts working here, not earlier !!!
|
|
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
# Let the PHP-based configuration subsystem set up the system now
|
|
echo -n "Launching the init system..."
|
|
touch /var/run/booting
|
|
/usr/local/etc/rc.bootup || exit 1
|
|
rm /var/run/booting
|
|
|
|
# Execute the normal syshook / plugin commands
|
|
/usr/local/etc/rc.syshook start
|
|
|
|
echo -n "Root file system: "
|
|
mount | grep ' on / ' | awk '{ print $1 }'
|
|
|
|
/usr/local/etc/rc.initial.banner
|
|
/usr/local/etc/rc.subr.d/livemode
|
|
|
|
exit 0
|