mirror of
https://github.com/lucaspalomodevelop/core.git
synced 2026-03-19 19:15:22 +00:00
Requires fiddling with /etc/fstab, at least that is a file that we never touch. It's harder for installs that need TRIM to be off all the time as the first boot does actually enable it. That means after the install is complete it needs to be CTRL+C'ed and the fstab entry modified before reboot. PR: https://forum.opnsense.org/index.php?topic=3044
267 lines
6.4 KiB
Bash
Executable File
267 lines
6.4 KiB
Bash
Executable File
#!/bin/sh
|
||
|
||
# Copyright (c) 2014-2016 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.
|
||
|
||
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 /
|
||
|
||
while read FS_PART FS_MNT FS_TYPE FS_MORE; do
|
||
# only tune our own file systems
|
||
if [ "${FS_TYPE}" != "ufs" ]; then
|
||
continue;
|
||
fi
|
||
|
||
# enables soft updates
|
||
tunefs -n enable ${FS_MNT}
|
||
|
||
# enables TRIM
|
||
FS_DEV=$(echo ${FS_PART} | awk 'match($0, /\/dev\/([a-z]+[0-9]+)/) { print substr( $0, RSTART, RLENGTH )}')
|
||
FS_TRIM=$(camcontrol identify ${FS_DEV} | grep TRIM | awk '{ print $5; }')
|
||
if [ "${FS_TRIM}" = "yes" ]; then
|
||
# appending "# notrim" to the /etc/fstab entry
|
||
# will allow to strip trim and leave it disabled
|
||
if echo "${FS_MORE}" | grep -iq notrim; then
|
||
tunefs -t disable ${FS_MNT}
|
||
else
|
||
tunefs -t enable ${FS_MNT}
|
||
fi
|
||
fi
|
||
done < /etc/fstab
|
||
|
||
attempts=0
|
||
while [ ${attempts} -lt 3 ]; do
|
||
if mount -a 2>/dev/null; then
|
||
# bail if all is well
|
||
break
|
||
fi
|
||
fsck -y /
|
||
attempts=$((attempts+1))
|
||
done
|
||
|
||
# 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 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.recover base > /dev/null
|
||
|
||
# rewrite message of the day
|
||
/etc/rc.d/motd onestart
|
||
|
||
# set keyboard map if needed
|
||
/etc/rc.d/syscons onestart
|
||
|
||
# set up config directory structure
|
||
mkdir -p /conf/backup
|
||
mkdir -p /conf/sshd
|
||
|
||
# Bootstrap config.xml if necessary
|
||
if [ ! -f /conf/config.xml ]; then
|
||
echo -n "Bootstrapping config.xml..."
|
||
cp /usr/local/etc/config.xml /conf/config.xml
|
||
echo "done."
|
||
fi
|
||
|
||
# Bootstrap openssl.cnf for port if necessary
|
||
if [ ! -f /usr/local/openssl/openssl.cnf ]; then
|
||
echo -n "Bootstrapping openssl.cnf..."
|
||
cp /etc/ssl/openssl.cnf /usr/local/openssl/openssl.cnf
|
||
echo "done."
|
||
fi
|
||
|
||
# Enable console output if its muted.
|
||
/sbin/conscontrol mute off >/dev/null
|
||
|
||
setup_mfs_link()
|
||
{
|
||
ROOT=${1}
|
||
MFS=${2}
|
||
NAME=${3}
|
||
|
||
# Create dummy directory to for MFS-bound
|
||
# directories that require a persistent
|
||
# storage underneath to run.
|
||
|
||
if [ ! -d "${ROOT}${MFS}/${NAME}" ]; then
|
||
mkdir -p "${ROOT}${MFS}" "${MFS}/${NAME}"
|
||
mv "${MFS}/${NAME}" "${ROOT}${MFS}"
|
||
# create a symlink underneath as well
|
||
ln -s "${ROOT}${MFS}/${NAME}" "${MFS}/${NAME}"
|
||
fi
|
||
}
|
||
|
||
install_mfs_link()
|
||
{
|
||
ROOT=${1}
|
||
MFS=${2}
|
||
NAME=${3}
|
||
|
||
# Redirect persistent, but MFS-bound
|
||
# directory after tmpfs mount.
|
||
|
||
mkdir -p "${MFS}"
|
||
ln -s "${ROOT}${MFS}/${NAME}" "${MFS}/${NAME}"
|
||
}
|
||
|
||
remove_mfs_link()
|
||
{
|
||
ROOT=${1}
|
||
MFS=${2}
|
||
NAME=${3}
|
||
|
||
# Persistent copies of MFS-bound directories
|
||
# still there must be moved back into place.
|
||
|
||
if [ -d "${ROOT}${MFS}/${NAME}" ]; then
|
||
mkdir -p "${MFS}"
|
||
# reverse the recovery symlink before
|
||
# moving back the original database
|
||
rm -f "${MFS}/${NAME}"
|
||
mv "${ROOT}${MFS}/${NAME}" "${MFS}/"
|
||
fi
|
||
}
|
||
|
||
USE_MFS_TMPVAR=`/usr/bin/grep -c use_mfs_tmpvar /conf/config.xml`
|
||
if [ ${USE_MFS_TMPVAR} -ne 0 ]; then
|
||
echo -n "Setting up memory disks..."
|
||
|
||
setup_mfs_link /root /var/cache opnsense-update
|
||
#setup_mfs_link /root /var/cache pkg
|
||
setup_mfs_link /root /var/db pkg
|
||
setup_mfs_link /root /var crash
|
||
|
||
mount -t tmpfs -o mode=01777 tmpfs /tmp
|
||
mount -t tmpfs tmpfs /var
|
||
|
||
install_mfs_link /root /var/cache opnsense-update
|
||
#install_mfs_link /root /var/cache pkg
|
||
install_mfs_link /root /var/db pkg
|
||
install_mfs_link /root /var crash
|
||
|
||
echo "done."
|
||
else
|
||
remove_mfs_link /root /var/cache opnsense-update
|
||
#remove_mfs_link /root /var/cache pkg
|
||
remove_mfs_link /root /var/db pkg
|
||
remove_mfs_link /root /var crash
|
||
fi
|
||
|
||
# make some directories in /var
|
||
mkdir -p /var/run /var/log /var/etc /var/db/entropy /var/at/jobs \
|
||
/var/empty /var/tmp /var/crash
|
||
|
||
# work around the fact that shutdown(8) doesn't clean up this file
|
||
rm -f /var/run/nologin
|
||
|
||
# set up and recover a crash dump before activating swap
|
||
/usr/local/etc/rc.crashdump
|
||
swapon -a
|
||
|
||
# write /var/run/dmesg.boot
|
||
/etc/rc.d/dmesg onestart
|
||
|
||
rm -rf /tmp/*
|
||
chmod 1777 /tmp
|
||
|
||
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.recover pkg > /dev/null
|
||
|
||
# Recreate capabilities DB
|
||
/usr/bin/cap_mkdb /etc/login.conf
|
||
|
||
# Set up the correct php.ini content
|
||
/usr/local/etc/rc.php_ini_setup
|
||
|
||
# startup configd
|
||
/usr/local/etc/rc.d/configd start
|
||
|
||
# Execute the early syshook / plugin commands
|
||
/usr/local/etc/rc.syshook early
|
||
|
||
# Restore backups from previous shutdown (if any)
|
||
/usr/local/etc/rc.backup_dhcpleases restore
|
||
/usr/local/etc/rc.backup_netflow restore
|
||
/usr/local/etc/rc.backup_rrd restore
|
||
|
||
# let the PHP-based configuration subsystem set up the system now
|
||
echo -n "Launching the init system..."
|
||
rm -f /root/lighttpd*
|
||
touch /var/run/booting
|
||
/usr/local/etc/rc.bootup
|
||
rm /var/run/booting
|
||
|
||
# If a shell was selected from recovery
|
||
# console then just drop to the shell now.
|
||
if [ -f "/tmp/donotbootup" ]; then
|
||
echo "Dropping to recovery shell."
|
||
exit 0
|
||
fi
|
||
|
||
# Execute the normal syshook / plugin commands
|
||
/usr/local/etc/rc.syshook start
|
||
|
||
# 16.1 migration code for stale captive portal files to be removed in 16.7
|
||
rm -rf /var/db/rrd/*-concurrent.rrd
|
||
rm -rf /var/db/rrd/*-loggedin.rrd
|
||
|
||
echo -n "Starting CRON... "
|
||
cd /tmp && /usr/sbin/cron -s 2>/dev/null
|
||
echo "done."
|
||
|
||
# starting standard rc scripts
|
||
/usr/local/etc/rc.opnsense start
|
||
|
||
# Start ping handler every 240 seconds
|
||
/usr/local/bin/minicron 240 /var/run/ping_hosts.pid /usr/local/sbin/ping_hosts.sh
|
||
|
||
# Start account expire handler every hour
|
||
/usr/local/bin/minicron 3600 /var/run/expire_accounts.pid /usr/local/etc/rc.expireaccounts
|
||
|
||
# Start alias url updater every 24 hours
|
||
/usr/local/bin/minicron 86400 /var/run/update_alias_url_data.pid /usr/local/etc/rc.update_alias_url_data
|
||
|
||
/usr/local/sbin/beep.sh start
|
||
|
||
/usr/local/etc/rc.initial.banner
|
||
|
||
exit 0
|