mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-16 22:13:01 +02:00
the flashimage is build without journal to not destroy usb thumbdrives or sd cards. On real ssd's and virtual machines it should enabled for higher data security. So this patch add the journal is drive support smart. Signed-off-by: Arne Fitzenreiter <arne_f@ipfire.org> Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
149 lines
5.3 KiB
Bash
149 lines
5.3 KiB
Bash
#!/bin/sh
|
|
###############################################################################
|
|
# #
|
|
# IPFire.org - A linux based firewall #
|
|
# Copyright (C) 2007-2023 IPFire Team <info@ipfire.org> #
|
|
# #
|
|
# This program is free software: you can redistribute it and/or modify #
|
|
# it under the terms of the GNU General Public License as published by #
|
|
# the Free Software Foundation, either version 3 of the License, or #
|
|
# (at your option) any later version. #
|
|
# #
|
|
# This program is distributed in the hope that it will be useful, #
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
|
# GNU General Public License for more details. #
|
|
# #
|
|
# You should have received a copy of the GNU General Public License #
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>. #
|
|
# #
|
|
###############################################################################
|
|
|
|
. /etc/sysconfig/rc
|
|
. ${rc_functions}
|
|
|
|
case "${1}" in
|
|
start)
|
|
if [ -e "/.partresize" ]; then
|
|
|
|
boot_mesg "Mounting root file system in read/write mode ..."
|
|
mount -o remount,rw / > /dev/null
|
|
evaluate_retval
|
|
|
|
# check if serial console enabled
|
|
scon="off";
|
|
if [ ! "$(grep "console=ttyS0" /proc/cmdline)" == "" ]; then
|
|
scon="on";
|
|
fi
|
|
if [ -e /sys/class/dmi/id/product_name ]; then
|
|
IFS= read -r DMI_PRODUCT_NAME < /sys/class/dmi/id/product_name;
|
|
case ${DMI_PRODUCT_NAME} in
|
|
APU|apu[1-4]|PC\ Engines\ apu[1-4] )
|
|
scon="on";
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
# Enable the serial console on all systems on AWS EC2, Oracle Cloud,
|
|
# Azure and Google Compute Platform
|
|
if running_on_ec2 || running_on_oci || running_on_azure || running_on_gcp; then
|
|
scon="on"
|
|
journal="on"
|
|
fi
|
|
|
|
mount /boot > /dev/null
|
|
case "$(< /proc/device-tree/model )" in
|
|
FriendlyElec\ NanoPi?R1* )
|
|
# Install AP6112 wlan config on NanoPi R1
|
|
cp -f /lib/firmware/brcm/brcmfmac43430-sdio.AP6212.txt \
|
|
/lib/firmware/brcm/brcmfmac43430-sdio.txt
|
|
cp -f /lib/firmware/brcm/brcmfmac43430a0-sdio.ONDA-V80_PLUS.txt \
|
|
/lib/firmware/brcm/brcmfmac43430a0-sdio.txt
|
|
;;
|
|
FriendlyElec\ NanoPi?R2* )
|
|
# Generate MAC address at first boot
|
|
SWMAC=`printf "%1x2:%02x:%02x:%02x:%02x" $[RANDOM%16] $[RANDOM%256] $[RANDOM%256] $[RANDOM%256] $[RANDOM%256]`
|
|
echo ethaddr=$SWMAC:00 >> /boot/uEnv.txt
|
|
echo eth1addr=$SWMAC:01 >> /boot/uEnv.txt
|
|
;;
|
|
FriendlyElec\ NanoPi?R4* )
|
|
# Generate MAC address at first boot
|
|
SWMAC=`printf "%1x2:%02x:%02x:%02x:%02x" $[RANDOM%16] $[RANDOM%256] $[RANDOM%256] $[RANDOM%256] $[RANDOM%256]`
|
|
echo ethaddr=$SWMAC:00 >> /boot/uEnv.txt
|
|
echo eth1addr=$SWMAC:01 >> /boot/uEnv.txt
|
|
;;
|
|
Xunlong\ Orange\ Pi\ R1\ Plus* )
|
|
# Generate MAC address at first boot
|
|
# This board should have mac addresses in rom but uboot
|
|
# doesnt set it for fist nic
|
|
SWMAC=`printf "%1x2:%02x:%02x:%02x:%02x" $[RANDOM%16] $[RANDOM%256] $[RANDOM%256] $[RANDOM%256] $[RANDOM%256]`
|
|
echo ethaddr=$SWMAC:00 >> /boot/uEnv.txt
|
|
echo eth1addr=$SWMAC:01 >> /boot/uEnv.txt
|
|
;;
|
|
esac 2>/dev/null
|
|
|
|
if [ -e /boot/grub/grub.cfg ]; then
|
|
# swtich permanent to serial console if it was selected on first boot
|
|
if [ "${scon}" = "on" ]; then
|
|
# Enable also serial console on GRUB
|
|
echo "GRUB_TERMINAL=\"serial console\"" >> /etc/default/grub
|
|
echo "GRUB_SERIAL_COMMAND=\"serial --unit=0 --speed=115200\"" >> /etc/default/grub
|
|
sed -i -e "s|panic=10|& console=ttyS0,115200n8|g" /etc/default/grub
|
|
fi
|
|
|
|
# Re-generate GRUB configuration
|
|
/usr/sbin/grub-mkconfig -o /boot/grub/grub.cfg
|
|
fi
|
|
umount /boot > /dev/null
|
|
|
|
# Detect device
|
|
mount | while read -r dev tmp1 mountpoint tmp2; do
|
|
[ "${dev}" = "rootfs" ] && continue
|
|
|
|
if [ "${mountpoint}" = "/" ]; then
|
|
# Find root partition number
|
|
part_num="${dev: -1}"
|
|
|
|
# Find path to the root device
|
|
root_dev="${dev::-1}"
|
|
if [ ! -b "${dev::-1}" -a "${root_dev: -1}" = "p" ]; then
|
|
root_dev="${dev::-2}"
|
|
fi
|
|
|
|
# Check if the device support smart
|
|
smartctl --smart=on "${root_dev}" > /dev/null
|
|
if [ ${?} = 0 ]; then
|
|
journal="on"
|
|
fi
|
|
|
|
# Enable journal
|
|
if [ "${journal}" = "on" ]; then
|
|
boot_mesg "Create journal on "${dev}" ..."
|
|
tune2fs -O has_journal "${dev}"
|
|
fi
|
|
|
|
boot_mesg "Growing root partition to maximum size..."
|
|
echo -e ',+' | sfdisk --no-reread -f -N${part_num} "${root_dev}" 2>/dev/null
|
|
|
|
# The filesystem should be resized after
|
|
# this operation
|
|
touch /.resizefs
|
|
|
|
# Remove marker
|
|
rm -f /.partresize
|
|
|
|
# Reboot
|
|
boot_mesg "Rebooting system..."
|
|
mount -o remount,ro / &>/dev/null
|
|
sleep 15
|
|
reboot -f
|
|
fi
|
|
done
|
|
fi
|
|
;;
|
|
*)
|
|
echo "Usage: ${0} {start}"
|
|
exit 1
|
|
;;
|
|
esac
|