Files
bpfire/src/initscripts/system/partresize
Arne Fitzenreiter f24ce4558a partresize: enable journal on ssd's and vm's
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>
2023-06-15 09:25:59 +00:00

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