mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-11-30 12:43:41 +01:00
a99ef24606
TODO: fix clover-genconfig
977 lines
54 KiB
Bash
Executable File
977 lines
54 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# A script for Clover Theme Manager
|
|
# Copyright (C) 2014-2019 Blackosx
|
|
#
|
|
# 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.
|
|
#
|
|
# Extracts bootlog from ioreg and then parses it for theme info.
|
|
# Html is then constructed and injected in to the main template.
|
|
|
|
# v0.76.9
|
|
|
|
# ---------------------------------------------------------------------------------------
|
|
SetHtmlBootlogSectionTemplates()
|
|
{
|
|
[[ DEBUG -eq 1 ]] && WriteLinesToLog
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndent}SetHtmlBootlogSectionTemplates()"
|
|
|
|
blcOpen=$(printf " <div id=\"bandHeader\"><span class=\"infoTitle\">Boot Device Info<\/span><\/div>\r")
|
|
|
|
blcLineDeviceInfoMbr=$(printf " <div id=\"bandDescription\">\r")
|
|
blcLineDeviceInfoMbr="$blcLineDeviceInfoMbr"$(printf " <div id=\"bandColumnLeft\"><span class=\"infoTitle\">Type:<\/span><span class=\"infoBody\">${blBootDeviceType} (${blBootDevicePartType})<\/span><\/div>\r")
|
|
blcLineDeviceInfoMbr="$blcLineDeviceInfoMbr"$(printf " <div id=\"bandColumnLeft\"><span class=\"infoTitle\">Signature:<\/span><span class=\"infoBody\">${blBootDevicePartSignature}<\/span><\/div>\r")
|
|
blcLineDeviceInfoMbr="$blcLineDeviceInfoMbr"$(printf " <div id=\"bandColumnLeft\"><span class=\"infoTitle\">Partition #:<\/span><span class=\"infoBody\">${blBootDevicePartition}<\/span><\/div>\r")
|
|
blcLineDeviceInfoMbr="$blcLineDeviceInfoMbr"$(printf " <div id=\"bandColumnLeft\"><span class=\"infoTitle\">Start:<\/span><span class=\"infoBody\">${blBootDevicePartStartDec}<\/span><\/div>\r")
|
|
blcLineDeviceInfoMbr="$blcLineDeviceInfoMbr"$(printf " <div id=\"bandColumnLeft\"><span class=\"infoTitle\">Size:<\/span><span class=\"infoBody\">${blBootDevicePartSizeDec}<\/span><\/div>\r")
|
|
blcLineDeviceInfoMbr="$blcLineDeviceInfoMbr"$(printf " <\/div>\r")
|
|
blcLineDeviceInfoMbr="$blcLineDeviceInfoMbr"$(printf "\r")
|
|
|
|
blcLineDeviceInfoGpt=$(printf " <div id=\"bandDescription\">\r")
|
|
blcLineDeviceInfoGpt="$blcLineDeviceInfoGpt"$(printf " <div id=\"bandColumnLeft\"><span class=\"infoTitle\">Type:<\/span><span class=\"infoBody\">${blBootDeviceType} (${blBootDevicePartType})<\/span><\/div>\r")
|
|
blcLineDeviceInfoGpt="$blcLineDeviceInfoGpt"$(printf " <div id=\"bandColumnLeft\"><span class=\"infoTitle\">Signature:<\/span><span class=\"infoBody\">${blBootDevicePartSignature}<\/span><\/div>\r")
|
|
blcLineDeviceInfoGpt="$blcLineDeviceInfoGpt"$(printf " <\/div>\r")
|
|
blcLineDeviceInfoGpt="$blcLineDeviceInfoGpt"$(printf "\r")
|
|
|
|
blcLineDevice=$(printf " <div id=\"bandHeader\"><span class=\"infoTitle\">Boot Device<\/span><\/div>\r")
|
|
blcLineDevice="$blcLineDevice"$(printf " <div id=\"bandDescription\">\r")
|
|
blcLineDevice="$blcLineDevice"$(printf " <div id=\"bandIdentifer\"><span class=\"infoTitle\">Identifier:<\/span><span class=\"infoBody\">${gBootDeviceIdentifierPrint}<\/span><\/div>\r")
|
|
blcLineDevice="$blcLineDevice"$(printf " <div id=\"bandMountpoint\"><span class=\"infoTitle\">mountpoint:<\/span><span class=\"infoBody\">${mountpointPrint}<\/span><\/div>\r")
|
|
blcLineDevice="$blcLineDevice"$(printf " <\/div>\r")
|
|
blcLineDevice="$blcLineDevice"$(printf "\r")
|
|
|
|
blcLineDeviceRescan=$(printf " <div id=\"bandHeader\"><span class=\"infoTitle\">Boot Device<\/span><\/div>\r")
|
|
blcLineDeviceRescan="$blcLineDeviceRescan"$(printf " <div id=\"bandDescription\">\r")
|
|
blcLineDeviceRescan="$blcLineDeviceRescan"$(printf " <div id=\"bandIdentifer\"><span class=\"infoTitle\">Identifier:<\/span><span class=\"infoBody\">${gBootDeviceIdentifierPrint}<\/span><\/div>\r")
|
|
blcLineDeviceRescan="$blcLineDeviceRescan"$(printf " <div id=\"bandMountpoint\"><span class=\"infoTitle\">mountpoint:<\/span><span class=\"infoBody\">${mountpointPrint}<\/span><\/div>\r")
|
|
blcLineDeviceRescan="$blcLineDeviceRescan"$(printf " <div id=\"RescanButton\">\r")
|
|
blcLineDeviceRescan="$blcLineDeviceRescan"$(printf " <button type=\"button\" id=\"RescanBootDeviceButton\" class=\"rescanButton\">Rescan Boot Device<\/button>\r")
|
|
blcLineDeviceRescan="$blcLineDeviceRescan"$(printf " <\/div> <!-- End RescanButton -->\r")
|
|
blcLineDeviceRescan="$blcLineDeviceRescan"$(printf " <\/div>\r")
|
|
blcLineDeviceRescan="$blcLineDeviceRescan"$(printf "\r")
|
|
|
|
if [ $blFastOption -eq 0 ]; then
|
|
|
|
# No theme was used so don't we don't know if theme existed or not.
|
|
blcLineNvram=$(printf " <div id=\"bandHeader\"><span class=\"infoTitle\">NVRAM<\/span><\/div>\r")
|
|
blcLineNvram="$blcLineNvram"$(printf " <div id=\"bandDescription\">\r")
|
|
blcLineNvram="$blcLineNvram"$(printf " <div id=\"bandColumnLeft\"><span class=\"infoTitle\">read from:<\/span><span class=\"infoBody\">${blNvramReadFromPrint}<\/span><\/div>\r")
|
|
blcLineNvram="$blcLineNvram"$(printf " <div id=\"bandColumnLeft\"><span class=\"infoTitle\">Clover.Theme:<\/span><span class=\"infoBodyTheme\">${blNvramThemeEntry}<\/span><\/div>\r")
|
|
blcLineNvram="$blcLineNvram"$(printf " <\/div>\r")
|
|
blcLineNvram="$blcLineNvram"$(printf "\r")
|
|
|
|
else
|
|
|
|
blcLineNvram=$(printf " <div id=\"bandHeader\"><span class=\"infoTitle\">NVRAM<\/span><\/div>\r")
|
|
blcLineNvram="$blcLineNvram"$(printf " <div id=\"bandDescription\">\r")
|
|
blcLineNvram="$blcLineNvram"$(printf " <div id=\"bandColumnLeft\"><span class=\"infoTitle\">read from:<\/span><span class=\"infoBody\">${blNvramReadFromPrint}<\/span><\/div>\r")
|
|
blcLineNvram="$blcLineNvram"$(printf " <div id=\"bandColumnLeft\"><span class=\"infoTitle\">Clover.Theme:<\/span><span class=\"infoBodyTheme\">${blNvramThemeEntry}<\/span><\/div>\r")
|
|
blcLineNvram="$blcLineNvram"$(printf " <div id=\"bandColumnLeft\"><span class=\"infoTitle\">theme existed?:<\/span><span class=\"${nvramThemeExistsCssClass}\">${nvramExistText}<\/span><\/div>\r")
|
|
blcLineNvram="$blcLineNvram"$(printf " <\/div>\r")
|
|
blcLineNvram="$blcLineNvram"$(printf "\r")
|
|
|
|
blcLineNvramNoTheme=$(printf " <div id=\"bandHeader\"><span class=\"infoTitle\">NVRAM<\/span><\/div>\r")
|
|
blcLineNvramNoTheme="$blcLineNvramNoTheme"$(printf " <div id=\"bandDescription\">\r")
|
|
blcLineNvramNoTheme="$blcLineNvramNoTheme"$(printf " <div id=\"bandColumnLeft\"><span class=\"infoTitle\">read from:<\/span><span class=\"infoBody\">${blNvramReadFromPrint}<\/span><\/div>\r")
|
|
blcLineNvramNoTheme="$blcLineNvramNoTheme"$(printf " <div id=\"bandColumnLeft\"><span class=\"infoTitle\">Clover.Theme:<\/span><span class=\"infoBodyTheme\"><\/span><\/div>\r")
|
|
blcLineNvramNoTheme="$blcLineNvramNoTheme"$(printf " <\/div>\r")
|
|
blcLineNvramNoTheme="$blcLineNvramNoTheme"$(printf "\r")
|
|
|
|
fi
|
|
|
|
blcLineConfig=$(printf " <div id=\"bandHeader\"><span class=\"infoTitle\">config.plist<\/span><\/div>\r")
|
|
blcLineConfig="$blcLineConfig"$(printf " <div id=\"bandDescription\">\r")
|
|
blcLineConfig="$blcLineConfig"$(printf " <div id=\"bandColumnLeft\"><span class=\"infoTitle\">path:<\/span><span class=\"infoBodyReplaceable\">${blConfigPlistFilePathPrint}<\/span><\/div>\r")
|
|
blcLineConfig="$blcLineConfig"$(printf " <div id=\"bandColumnLeft\"><span class=\"infoTitle\">theme entry:<\/span><span class=\"infoBodyTheme\">${blConfigPlistThemeEntry}<\/span><\/div>\r")
|
|
blcLineConfig="$blcLineConfig"$(printf " <\/div>\r")
|
|
blcLineConfig="$blcLineConfig"$(printf "\r")
|
|
|
|
blcLineThemeAsked=$(printf " <div id=\"bandHeader\"><span class=\"infoTitle\">Theme asked for<\/span><\/div>\r")
|
|
blcLineThemeAsked="$blcLineThemeAsked"$(printf " <div id=\"bandDescription\">\r")
|
|
blcLineThemeAsked="$blcLineThemeAsked"$(printf " <div id=\"bandColumnLeft\"><span class=\"infoTitle\">path:<\/span><span class=\"infoBodyReplaceable\">${blThemeAskedForPathPrint}<\/span><\/div>\r")
|
|
blcLineThemeAsked="$blcLineThemeAsked"$(printf " <div id=\"bandColumnLeft\"><span class=\"infoTitle\">did theme exist?<\/span><span class=\"${themeExistCssClass}\">${blThemeAskedForExisted}<\/span><\/div>\r")
|
|
blcLineThemeAsked="$blcLineThemeAsked"$(printf " <\/div>\r")
|
|
blcLineThemeAsked="$blcLineThemeAsked"$(printf "\r")
|
|
|
|
blcLineThemeUsed=$(printf " <div id=\"bandHeader\"><span class=\"infoTitle\">Theme used<\/span><\/div>\r")
|
|
blcLineThemeUsed="$blcLineThemeUsed"$(printf " <div id=\"bandDescription\">\r")
|
|
blcLineThemeUsed="$blcLineThemeUsed"$(printf " <div id=\"bandColumnLeft\"><span class=\"infoTitle\">path:<\/span><span class=\"infoBodyReplaceable\">${blThemeUsedPathPrint}<\/span><\/div>\r")
|
|
blcLineThemeUsed="$blcLineThemeUsed"$(printf " <div id=\"bandCbandColumnLeftolumnRight\"><span class=\"infoTitle\">Chosen:<\/span><span class=\"infoBodyTheme\">${blThemeNameChosen}<\/span><\/div>\r")
|
|
blcLineThemeUsed="$blcLineThemeUsed"$(printf " <\/div>\r")
|
|
blcLineThemeUsed="$blcLineThemeUsed"$(printf "\r")
|
|
|
|
blcLineOverrideUi=$(printf " <div id=\"bandHeader\"><span class=\"infoTitle\">Override in GUI<\/span><\/div>\r")
|
|
blcLineOverrideUi="$blcLineOverrideUi"$(printf " <div id=\"bandDescription\">\r")
|
|
blcLineOverrideUi="$blcLineOverrideUi"$(printf " <div id=\"bandColumnLeft\"><span class=\"infoTitle\">theme:<\/span><span class=\"infoBody\">${blGuiOverrideTheme}<\/span><\/div>\r")
|
|
blcLineOverrideUi="$blcLineOverrideUi"$(printf " <\/div>\r")
|
|
blcLineOverrideUi="$blcLineOverrideUi"$(printf "\r")
|
|
}
|
|
|
|
# ---------------------------------------------------------------------------------------
|
|
SetBootlogTextColourClasses()
|
|
{
|
|
[[ DEBUG -eq 1 ]] && WriteLinesToLog
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndent}SetBootlogTextColourClasses()"
|
|
|
|
# Set class and text of NVRAM theme exists
|
|
if [ $blNvramThemeExists -eq 0 ]; then
|
|
nvramThemeExistsCssClass="infoBodyGreen"
|
|
nvramExistText="Yes"
|
|
elif [ $blNvramThemeExists -eq 1 ]; then
|
|
nvramThemeExistsCssClass="infoBodyRed"
|
|
nvramExistText="No"
|
|
fi
|
|
|
|
# Set class of 'theme exists' text
|
|
if [ "$blThemeAskedForExisted" == "No" ]; then
|
|
themeExistCssClass="infoBodyRed"
|
|
else
|
|
themeExistCssClass="infoBodyGreen"
|
|
fi
|
|
}
|
|
|
|
# ---------------------------------------------------------------------------------------
|
|
ReadBootLog()
|
|
{
|
|
[[ DEBUG -eq 1 ]] && WriteLinesToLog
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndent}ReadBootLog()"
|
|
|
|
# Set default vars
|
|
blCloverRevision="" # Clover revision
|
|
blBootType="" # Either legacy or UEFI
|
|
blBootDeviceType="-" # Example: USB, SATA, VenHW, NVMe
|
|
blBootDevicePartition="" # Example: 1
|
|
blBootDevicePartType="" # Example: MBR, GPT
|
|
blBootDevicePartSignature="" # Example: GUID (for GPT), 0x00000000 (for MBR)
|
|
blBootDevicePartStart="" # Example: 0x28
|
|
blBootDevicePartSize="" # Example: 0x64000
|
|
blConfigOem="" # Example: OEM
|
|
blEmuVariable=1 # Set to 0 if EmuVariable driver is loaded
|
|
blNvramPlistVolume="" # OS X volume name: Example: Macintosh HD
|
|
blNvramPlistExists=1 # Set to 0 if existence of nvram.plist is detected
|
|
blNvramThemeEntry="" # Theme name from nvram
|
|
blNvramBootArgs=1 # Set to 0 if boot-args found in NVRAM. (Shows NVRAM is working if Clover.Theme var not used).
|
|
blNvramReadFrom="" # Either full path to nvram.plist or 'Native NVRAM'
|
|
blNvramThemeExists=1 # Set to 0 if theme exists
|
|
blNvramThemeAbsent=1 # Set to 0 if theme in nvram is absent
|
|
blConfigPlistFilePath="" # Path for config.plist
|
|
blConfigPlistThemeEntry="" # Theme name from config.plist
|
|
blConfigThemePlistNotFound=1 # Set to 0 if theme plist not found
|
|
blGuiOverrideTheme="" # Theme name if set from GUI
|
|
blGuiOverrideThemeChanged=1 # Set to 0 if theme set in GUI was used
|
|
blThemeAskedForPath="" # Set to path
|
|
blThemeAskedForTitle="" # Set to theme name as it's detected.
|
|
blThemeAskedForExisted="Yes" # Set to 'No' if not exists, or 'Always' if embedded.
|
|
blUsedRandomTheme=1 # Set to 0 if no default theme set and random theme used
|
|
blThemeUsedPath="" # Path of the theme used
|
|
blUsingTheme="" # Theme used
|
|
blThemeNameChosen="" # Name of theme finally chosen
|
|
blUsingEmbedded=1 # Set to 0 if embedded theme used
|
|
blTextOnlyOption=1 # Set to 0 if boot log has TextOnly set to true
|
|
blFastOption=1 # Set to 0 if boot log has Fast Boot set to true
|
|
|
|
# gBootDeviceIdentifier is passed from script.sh # Example disk0s1 or 'Failed'
|
|
# gBootDeviceMountpoint is passed from script.sh
|
|
mountpointPrint=""
|
|
|
|
while read -r lineRead
|
|
do
|
|
|
|
if [[ "$lineRead" == *"Starting Clover"* ]]; then
|
|
blCloverRevision="${lineRead##*Starting Clover revision: }"
|
|
blCloverRevision="${blCloverRevision% on*}"
|
|
blBootType="${lineRead#*on }"
|
|
if [[ "$blBootType" == *"CLOVER EFI"* ]]; then
|
|
blBootType="Legacy"
|
|
else
|
|
blBootType="UEFI"
|
|
fi
|
|
fi
|
|
|
|
#0:100 0:000 SelfDevicePath=PciRoot(0x0)\Pci(0x1F,0x2)\Sata(0x0,0xFFFF,0x0)\HD(1,GPT,BC1B343C-2D6B-4C0C-8B88-71C2AFCF6E65,0x28,0x64000) @C7AA598
|
|
if [[ "$lineRead" == *"SelfDevicePath"* ]]; then
|
|
|
|
oIFS="$IFS"
|
|
# Get device path and split in to parts
|
|
devicePath="${lineRead#*=}"
|
|
declare -a devicePathArr
|
|
IFS=$'\\'
|
|
devicePathArr=($devicePath)
|
|
IFS="$oIFS"
|
|
|
|
# Identify sections
|
|
idx=${#devicePathArr[@]}
|
|
while [[ "${devicePathArr[$idx]}" != "HD("* ]]
|
|
do
|
|
((idx--))
|
|
done
|
|
|
|
blBootDeviceType="${devicePathArr[$((idx-1))]%(*}"
|
|
devicePathHD="${devicePathArr[$idx]%)*}"
|
|
|
|
# Split HD in to parts
|
|
devicePathHD="${devicePathHD#*(}"
|
|
# Should be something like these examples:
|
|
#1,MBR,0x2A482A48,0x2,0x4EFC1B80
|
|
#2,GPT,F55D9AC4-08A8-4269-9A8E-396DBE7C7943,0x64028,0x1C0000
|
|
declare -a hdArr
|
|
IFS=$','
|
|
hdArr=($devicePathHD)
|
|
IFS="$oIFS"
|
|
blBootDevicePartition="${hdArr[0]}"
|
|
blBootDevicePartType="${hdArr[1]}"
|
|
blBootDevicePartSignature="${hdArr[2]}"
|
|
blBootDevicePartStart="${hdArr[3]}"
|
|
blBootDevicePartSize="${hdArr[4]}"
|
|
|
|
if [[ "$blBootDevicePartType" == *GPT* ]]; then
|
|
# Translate Device UUID to mountpoint
|
|
if [ "$gBootDeviceIdentifier" != "" ]; then
|
|
#mountpoint=$( "$partutil" --show-mountpoint "$gBootDeviceIdentifier" )
|
|
if [[ "$gBootDeviceMountpoint" == *$gESPMountPrefix* ]]; then
|
|
mountpointPrint="$gBootDeviceMountpoint (aka /Volumes/EFI)"
|
|
else
|
|
mountpointPrint="$gBootDeviceMountpoint"
|
|
fi
|
|
fi
|
|
elif [[ "$blBootDevicePartType" == *MBR* ]]; then
|
|
if [ "$gBootDeviceIdentifier" != "" ] && [ "$gBootDeviceIdentifier" != "Failed" ]; then
|
|
#mountpoint="/"$( df -laH | grep /dev/"$gBootDeviceIdentifier" | cut -d'/' -f 4- )
|
|
# If only a forward slash then get current volume name
|
|
if [ "$gBootDeviceMountpoint" == "/" ]; then
|
|
gBootDeviceMountpoint="/Volumes/"$(ls -1F /Volumes | sed -n 's:@$::p')
|
|
fi
|
|
mountpointPrint="$gBootDeviceMountpoint"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# 3:539 0:023 Using OEM config.plist at path: EFI\CLOVER\config.plist
|
|
if [[ "$lineRead" == *"config.plist at path:"* ]]; then
|
|
blConfigOem="${lineRead##*Using }"
|
|
blConfigOem="${blConfigOem% config.plist*}"
|
|
fi
|
|
|
|
# 3:539 0:000 EFI\CLOVER\config.plist loaded: Success
|
|
if [[ "$lineRead" == *"config.plist loaded: Success"* ]]; then
|
|
blConfigPlistFilePath=$( echo "$lineRead" | awk '{print $3}' )
|
|
blConfigPlistFilePath="/"$( echo "$blConfigPlistFilePath" | sed 's/\\/\//g' )
|
|
fi
|
|
|
|
# 1:862 0:000 Fast option enabled
|
|
if [[ "$lineRead" == *"Fast option enabled" ]]; then
|
|
blFastOption=0
|
|
fi
|
|
|
|
# 1:862 0:000 TextOnly option enabled
|
|
if [[ "$lineRead" == *"TextOnly option enabled" ]]; then
|
|
blTextOnlyOption=0
|
|
fi
|
|
|
|
# 0:110 0:000 Default theme: red
|
|
if [[ "$lineRead" == *"Default theme"* ]]; then
|
|
blConfigPlistThemeEntry="${lineRead##*: }"
|
|
blThemeAskedForTitle="$blConfigPlistThemeEntry"
|
|
fi
|
|
|
|
# 1:104 0:000 EmuVariable InstallEmulation: orig vars copied, emu.va.....
|
|
if [[ "$lineRead" == *"EmuVariable InstallEmulation"* ]] && [[ "$lineRead" == *"orig vars copied"* ]] ; then
|
|
blEmuVariable=0
|
|
fi
|
|
|
|
# 6:149 0:172 Loading nvram.plist from Vol 'OSX' - loaded, size=2251
|
|
if [[ "$lineRead" == *"Loading nvram.plist"* ]]; then
|
|
blNvramPlistVolume="${lineRead#*\'}"
|
|
blNvramPlistVolume="${blNvramPlistVolume%\'*}"
|
|
fi
|
|
|
|
# 6:167 0:018 PutNvramPlistToRtVars ...
|
|
if [[ "$lineRead" == *"PutNvramPlistToRtVars"* ]]; then
|
|
blNvramPlistExists=0
|
|
fi
|
|
|
|
# 6:167 0:000 Adding Key: Clover.Theme: Size = 11, Data: 62 6C 61 63 6B 5F 67 72 65 65 6E
|
|
if [[ "$lineRead" == *"Adding Key: Clover.Theme:"* ]]; then
|
|
# Remove any trailing spaces
|
|
blNvramThemeEntry=$( echo "${lineRead##*Data:}" | sed 's/ *$//g' )
|
|
# Check for new style boot log
|
|
if [ "${blNvramThemeEntry:0:5}" != " Size" ]; then
|
|
blNvramThemeEntry="${blNvramThemeEntry// /\\x}"
|
|
blNvramThemeEntry="$blNvramThemeEntry\\n"
|
|
blNvramThemeEntry=$( printf "$blNvramThemeEntry" )
|
|
blNvramReadFrom="/Volumes/${blNvramPlistVolume}/nvram.plist"
|
|
blThemeAskedForTitle="$blNvramThemeEntry"
|
|
else # older style boot log
|
|
blNvramThemeEntry="not shown in bootlog"
|
|
blNvramReadFrom="/Volumes/${blNvramPlistVolume}/nvram.plist"
|
|
fi
|
|
fi
|
|
|
|
# 0:718 0:000 theme ios7 chosen from nvram is absent, using theme defined in config: red
|
|
if [[ "$lineRead" == *"chosen from nvram is absent"* ]]; then
|
|
blNvramThemeEntry="${lineRead#*theme }"
|
|
blNvramThemeEntry=$( echo "${blNvramThemeEntry%chosen from*}" | sed 's/ *$//g' )
|
|
if [ "$blNvramReadFrom" == "" ]; then
|
|
blNvramReadFrom="Native NVRAM"
|
|
fi
|
|
blNvramThemeAbsent=0
|
|
blThemeAskedForTitle="$blConfigPlistThemeEntry"
|
|
fi
|
|
|
|
# 0:732 0:000 found boot-args in NVRAM:-v kext-dev-mode=1, size=18
|
|
if [[ "$lineRead" == *"found boot-args in NVRAM"* ]]; then
|
|
blNvramBootArgs=0
|
|
fi
|
|
|
|
if [[ "$lineRead" == *"EDITED:"* ]]; then
|
|
blGuiOverrideTheme="${lineRead##*: }"
|
|
fi
|
|
|
|
if [[ "$lineRead" == *"change theme"* ]]; then
|
|
if [ "$blGuiOverrideTheme" != "" ]; then
|
|
blGuiOverrideThemeChanged=0
|
|
fi
|
|
fi
|
|
|
|
if [[ "$lineRead" == *"no default theme"* ]]; then
|
|
if [[ "$lineRead" == *"get random"* ]]; then
|
|
blUsedRandomTheme=0
|
|
fi
|
|
fi
|
|
|
|
# 1:805 0:000 GlobalConfig: theme.plist not found, get random theme BGM
|
|
if [[ "$lineRead" == *"theme.plist not found, get random theme"* ]]; then
|
|
blConfigThemePlistNotFound=0
|
|
blUsedRandomTheme=0
|
|
fi
|
|
|
|
# 0:718 0:000 Using theme 'red' (EFI\CLOVER\themes\red)
|
|
if [[ "$lineRead" == *"Using theme"* ]]; then
|
|
blUsingTheme="${lineRead#*\'}"
|
|
blUsingTheme="${blUsingTheme%\'*}"
|
|
blThemeUsedPath="${lineRead#*(}"
|
|
blThemeUsedPath="${blThemeUsedPath%)*}"
|
|
blThemeUsedPath=$( echo "$blThemeUsedPath" | sed 's/\\/\//g' )
|
|
blThemeUsedPath="/${blThemeUsedPath%/*}"
|
|
fi
|
|
|
|
# 5:740 0:002 Using vector theme 'Clovy' (EFI\CLOVER\themes\Clovy)
|
|
if [[ "$lineRead" == *"Using vector theme"* ]]; then
|
|
blUsingTheme="${lineRead#*\'}"
|
|
blUsingTheme="${blUsingTheme%\'*}"
|
|
blThemeUsedPath="${lineRead#*(}"
|
|
blThemeUsedPath="${blThemeUsedPath%)*}"
|
|
blThemeUsedPath=$( echo "$blThemeUsedPath" | sed 's/\\/\//g' )
|
|
blThemeUsedPath="/${blThemeUsedPath%/*}"
|
|
fi
|
|
|
|
# 6:208 0:000 theme black_green defined in NVRAM found and theme.plist parsed
|
|
if [[ "$lineRead" == *"defined in NVRAM found"* ]]; then
|
|
blNvramThemeEntry="${lineRead#*theme }"
|
|
blNvramThemeEntry="${blNvramThemeEntry% defined*}"
|
|
if [ "$blNvramReadFrom" == "" ]; then
|
|
blNvramReadFrom="Native NVRAM"
|
|
fi
|
|
blNvramThemeExists=0
|
|
fi
|
|
|
|
# 6:227 0:000 Choosing theme black_green
|
|
if [[ "$lineRead" == *"Choosing theme"* ]]; then
|
|
blThemeNameChosen=$( echo "${lineRead##*Choosing theme }" | sed 's/ *$//' )
|
|
fi
|
|
|
|
# 4:769 0:002 Chosen theme black_green
|
|
if [[ "$lineRead" == *"Chosen theme"* ]]; then
|
|
blThemeNameChosen=$( echo "${lineRead##*Chosen theme }" | sed 's/ *$//' )
|
|
fi
|
|
|
|
# 1:848 0:000 no themes available, using embedded
|
|
if [[ "$lineRead" == *"no themes available, using embedded"* ]]; then
|
|
blUsingEmbedded=0
|
|
fi
|
|
|
|
# 2:963 0:000 using embedded theme
|
|
if [[ "$lineRead" == *"using embedded theme"* ]]; then
|
|
blUsingEmbedded=0
|
|
fi
|
|
|
|
done < "$bootLogFile"
|
|
}
|
|
|
|
# ---------------------------------------------------------------------------------------
|
|
PostProcess()
|
|
{
|
|
[[ DEBUG -eq 1 ]] && WriteLinesToLog
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndent}PostProcess()"
|
|
|
|
# check for random set by user
|
|
if [ "$blConfigPlistThemeEntry" == "random" ] || [ "$blNvramThemeEntry" == "random" ]; then
|
|
if [ "$blThemeNameChosen" == "random" ] && [ "$blUsingTheme" != "" ]; then
|
|
blThemeNameChosen="$blUsingTheme"
|
|
fi
|
|
fi
|
|
|
|
# Was embedded theme used?
|
|
if [ $blUsingEmbedded -eq 0 ]; then
|
|
blThemeUsedPath="internal"
|
|
blThemeNameChosen="embedded"
|
|
fi
|
|
|
|
# Set theme asked for. Nvram setting takes precedence over config.plist
|
|
if [ "$blNvramThemeEntry" != "" ] && [ $blNvramThemeAbsent -eq 1 ]; then
|
|
blThemeAskedForTitle="$blNvramThemeEntry"
|
|
elif [ "$blConfigPlistThemeEntry" != "" ]; then
|
|
blThemeAskedForTitle="$blConfigPlistThemeEntry"
|
|
else
|
|
blThemeAskedForTitle=""
|
|
fi
|
|
|
|
# No theme asked for so no theme could have existed
|
|
if [ "$blThemeAskedForTitle" == "" ]; then
|
|
blThemeAskedForExisted=""
|
|
|
|
# Was theme name asked for, used?
|
|
elif [ "$blThemeAskedForTitle" == "$blUsingTheme" ]; then
|
|
blThemeAskedForPath="${blThemeUsedPath}"/"${blThemeAskedForTitle}"
|
|
|
|
# Was embedded theme asked for?
|
|
elif [ "$blThemeAskedForTitle" == "embedded" ] && [ "$blUsingTheme" == "" ] ; then
|
|
blThemeAskedForPath="internal"
|
|
blThemeAskedForExisted="Always"
|
|
fi
|
|
|
|
# NVRAM entry points to non-existent theme OR no default theme found
|
|
if [ $blNvramThemeAbsent -eq 0 ] && [ $blUsedRandomTheme -eq 0 ]; then
|
|
blThemeAskedForExisted="No"
|
|
fi
|
|
|
|
# Is Native NVRAM working?
|
|
if [ "$blNvramReadFrom" == "Native NVRAM" ]; then
|
|
gNvramWorkingType="Native"
|
|
fi
|
|
|
|
# Is nvram.plist being used?
|
|
if [ $blNvramPlistExists -eq 0 ]; then
|
|
gNvramWorkingType="Fake"
|
|
fi
|
|
|
|
if [ "$blNvramReadFrom" == "" ] && [ $blNvramPlistExists -eq 0 ] && [ "$blNvramThemeEntry" == "" ] && [ "$blNvramPlistVolume" != "" ]; then
|
|
blNvramReadFrom="/Volumes/${blNvramPlistVolume}/nvram.plist"
|
|
fi
|
|
|
|
if [ "$gBootDeviceMountpoint" != "" ] && [ "$blThemeUsedPath" != "" ]; then
|
|
if [[ "$gBootDeviceMountpoint" == *$gESPMountPrefix* ]]; then
|
|
blThemeUsedPath="/Volumes/EFI${blThemeUsedPath}"
|
|
else
|
|
blThemeUsedPath="${gBootDeviceMountpoint}${blThemeUsedPath}"
|
|
fi
|
|
fi
|
|
|
|
if [ "$gBootDeviceMountpoint" != "" ]; then
|
|
if [[ "$gBootDeviceMountpoint" == *$gESPMountPrefix* ]]; then
|
|
blConfigPlistFilePathPrint="/Volumes/EFI${blConfigPlistFilePath}"
|
|
if [ "$blThemeAskedForPath" != "" ]; then
|
|
blThemeAskedForPathPrint="/Volumes/EFI${blThemeAskedForPath}"
|
|
fi
|
|
else
|
|
blConfigPlistFilePathPrint="${gBootDeviceMountpoint}${blConfigPlistFilePath}"
|
|
if [ "$blThemeAskedForPath" == "internal" ]; then
|
|
blThemeAskedForPathPrint="${blThemeAskedForPath}/embedded"
|
|
else
|
|
blThemeAskedForPathPrint="${gBootDeviceMountpoint}${blThemeAskedForPath}"
|
|
fi
|
|
fi
|
|
blConfigPlistFilePath="${gBootDeviceMountpoint}${blConfigPlistFilePath}"
|
|
else
|
|
gBootDeviceMountpoint="not found" && mountpointPrint="not found"
|
|
blConfigPlistFilePathPrint="${blConfigPlistFilePath}"
|
|
if [ "$blThemeAskedForPath" != "" ]; then
|
|
blThemeAskedForPathPrint="${blThemeAskedForPath}"
|
|
fi
|
|
fi
|
|
|
|
# If Fast Boot was used then there will be no NVRAM messages in bootlog linked to themes
|
|
# So if all other checks remain blank and UEFI boot was used without the emulation driver...
|
|
if [ "$blNvramReadFrom" == "" ] && [ "$gNvramWorkingType" == "" ] && [ "$blBootType" == "UEFI" ] && [ $blEmuVariable -eq 1 ] && [ $blFastOption -eq 0 ]; then
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}NVRAM checks are blank but UEFI boot without EmuVariable and FastBoot detected. Setting as working"
|
|
blNvramReadFrom="Native NVRAM"
|
|
gNvramWorkingType="Native"
|
|
|
|
# Added in response to SavageAUS' example where NVRAM was working with UEFI boot but just not being used for themes.
|
|
# So as above but without fast boot.
|
|
elif [ "$blNvramReadFrom" == "" ] && [ "$gNvramWorkingType" == "" ] && [ "$blBootType" == "UEFI" ] && [ $blEmuVariable -eq 1 ]; then
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}NVRAM checks are blank but UEFI boot without EmuVariable. Setting as working"
|
|
blNvramReadFrom="Native NVRAM"
|
|
gNvramWorkingType="Native"
|
|
fi
|
|
|
|
# Convert device hex info to human readable
|
|
blBootDevicePartStartDec=$(echo "ibase=16; ${blBootDevicePartStart#*x}" | bc)
|
|
blBootDevicePartSizeDec=$(echo "ibase=16; ${blBootDevicePartSize#*x}" | bc)
|
|
|
|
if [ "$gBootDeviceIdentifier" == "" ]; then
|
|
gBootDeviceIdentifier="not found"
|
|
else
|
|
gBootDeviceIdentifierPrint="$gBootDeviceIdentifier"
|
|
fi
|
|
[[ "$gBootDeviceIdentifier" == "Failed" ]] && gBootDeviceIdentifierPrint="Failed to detect"
|
|
}
|
|
|
|
# ---------------------------------------------------------------------------------------
|
|
EscapeVarsForHtml()
|
|
{
|
|
[[ DEBUG -eq 1 ]] && WriteLinesToLog
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndent}EscapeVarsForHtml()"
|
|
|
|
gBootDeviceIdentifierPrint=$( echo "$gBootDeviceIdentifierPrint" | sed 's/\//\\\//g' )
|
|
mountpointPrint=$( echo "$mountpointPrint" | sed 's/\//\\\//g' )
|
|
blConfigPlistFilePathPrint=$( echo "$blConfigPlistFilePathPrint" | sed 's/\//\\\//g' )
|
|
blNvramReadFromPrint=$( echo "$blNvramReadFrom" | sed 's/\//\\\//g' )
|
|
blThemeUsedPathPrint=$( echo "$blThemeUsedPath" | sed 's/\//\\\//g' )
|
|
blThemeAskedForPathPrint=$( echo "$blThemeAskedForPathPrint" | sed 's/\//\\\//g' )
|
|
}
|
|
|
|
# ---------------------------------------------------------------------------------------
|
|
CheckNvramIsWorking()
|
|
{
|
|
[[ DEBUG -eq 1 ]] && WriteLinesToLog
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndent}CheckNvramIsWorking()"
|
|
|
|
# $blBootType (either UEFI or Legacy) / $gNvramWorkingType (either Fake or Native)
|
|
if [ "$blBootType" != "" ] && [ "$gNvramWorkingType" != "" ]; then
|
|
|
|
if [ "$blBootType" == "Legacy" ] || [[ "$blBootType" == "UEFI" && $blEmuVariable -eq 0 ]]; then
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}Boot type=$blBootType | blEmuVariable=$blEmuVariable"
|
|
# Check for necessary files to save nvram.plist file to disk
|
|
if [ -f /Library/LaunchDaemons/com.projectosx.clover.daemon.plist ]; then
|
|
local checkState=$( grep -A1 "RunAtLoad" /Library/LaunchDaemons/com.projectosx.clover.daemon.plist)
|
|
if [[ "$checkState" == *true* ]]; then
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}/Library/LaunchDaemons/com.projectosx.clover.daemon.plist exists and set to RunAtLoad"
|
|
if [ -f "/Library/Application Support/Clover/CloverDaemon" ]; then
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}/Library/Application Support/Clover/CloverDaemon exists"
|
|
if [ -f /private/etc/rc.clover.lib ]; then
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}/private/etc/rc.clover.lib exists"
|
|
if [ -f /private/etc/rc.shutdown.d/80.save_nvram_plist.local ]; then
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}/private/etc/rc.shutdown.d/80.save_nvram_plist.local exists"
|
|
local checkMd5=$( md5 /private/etc/rc.shutdown.d/80.save_nvram_plist.local )
|
|
checkMd5="${checkMd5##*= }"
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}/private/etc/rc.shutdown.d/80.save_nvram_plist.local md5=$checkMd5"
|
|
#if [ "$checkMd5" != "" ] && [[ "$checkMd5" = "44b326ce35acbbeb223031a941baf1a8" || "$checkMd5" = "0cf4ee82fd2da0aa20621c289e70939c" ]]; then
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}Fake nvram should be working. Setting gNvramWorking to 0"
|
|
gNvramWorking=0
|
|
#fi
|
|
else
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}/private/etc/rc.shutdown.d/80.save_nvram_plist.local does not exist"
|
|
fi
|
|
else
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}/private/etc/rc.clover.lib does not exist"
|
|
fi
|
|
else
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}/Library/Application Support/Clover/CloverDaemon does not exist"
|
|
fi
|
|
else
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}/Library/LaunchDaemons/com.projectosx.clover.daemon.plist is not set to RunAtLoad"
|
|
fi
|
|
else
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}/Library/LaunchDaemons/com.projectosx.clover.daemon.plist does not exist"
|
|
fi
|
|
fi
|
|
|
|
if [[ "$blBootType" == "UEFI" && $blEmuVariable -eq 1 ]]; then
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}UEFI boot and EmuVariable Driver was not used."
|
|
if [ "$gNvramWorkingType" == "Native" ]; then
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}Native nvram is working. Setting gNvramWorking to 0"
|
|
gNvramWorking=0
|
|
fi
|
|
fi
|
|
else
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}Skipped because blBootType=$blBootType AND gNvramWorkingType=$gNvramWorkingType"
|
|
fi
|
|
}
|
|
|
|
# ---------------------------------------------------------------------------------------
|
|
PrintVarsToLog()
|
|
{
|
|
[[ DEBUG -eq 1 ]] && WriteLinesToLog
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndent}PrintVarsToLog()"
|
|
|
|
WriteToLog "${debugIndentTwo}Read Boot Log"
|
|
WriteToLog "${debugIndentTwo}Clover Revision=$blCloverRevision"
|
|
WriteToLog "${debugIndentTwo}Boot Type=$blBootType"
|
|
WriteToLog "${debugIndentTwo}bootDevice partNo=$blBootDevicePartition"
|
|
WriteToLog "${debugIndentTwo}bootDevice partType=$blBootDevicePartType"
|
|
WriteToLog "${debugIndentTwo}bootDevice partSignature=$blBootDevicePartSignature"
|
|
WriteToLog "${debugIndentTwo}bootDevice partLBA=$blBootDevicePartStart"
|
|
WriteToLog "${debugIndentTwo}bootDevice partSize=$blBootDevicePartSize"
|
|
WriteToLog "${debugIndentTwo}identifier: ${gBootDeviceIdentifier}"
|
|
WriteToLog "${debugIndentTwo}mountpoint: ${gBootDeviceMountpoint}"
|
|
WriteToLog "${debugIndentTwo}Config.plist OEM=$blConfigOem"
|
|
WriteToLog "${debugIndentTwo}Config.plist file path: $blConfigPlistFilePath"
|
|
WriteToLog "${debugIndentTwo}Config.plist Fast Boot? (1=No, 0=Yes): $blFastOption"
|
|
WriteToLog "${debugIndentTwo}Config.plist Text Only? (1=No, 0=Yes): $blTextOnlyOption"
|
|
WriteToLog "${debugIndentTwo}Config.plist theme entry: $blConfigPlistThemeEntry"
|
|
WriteToLog "${debugIndentTwo}EmuVariable Driver used? (1=No, 0=Yes): $blEmuVariable"
|
|
WriteToLog "${debugIndentTwo}NVRAM.plist volume location: $blNvramPlistVolume"
|
|
WriteToLog "${debugIndentTwo}NVRAM.plist exists? (1=No, 0=Yes): $blNvramPlistExists"
|
|
WriteToLog "${debugIndentTwo}NVRAM read from: $blNvramReadFrom"
|
|
WriteToLog "${debugIndentTwo}NVRAM theme entry: $blNvramThemeEntry"
|
|
WriteToLog "${debugIndentTwo}NVRAM theme absent? (1=No, 0=Yes): $blNvramThemeAbsent"
|
|
WriteToLog "${debugIndentTwo}NVRAM theme exist? (1=No, 0=Yes): $blNvramThemeExists"
|
|
WriteToLog "${debugIndentTwo}Using theme: $blUsingTheme"
|
|
WriteToLog "${debugIndentTwo}Theme asked for title: $blThemeAskedForTitle"
|
|
WriteToLog "${debugIndentTwo}Theme asked for full path: $blThemeAskedForPath"
|
|
WriteToLog "${debugIndentTwo}Theme asked for exist: $themeExist"
|
|
WriteToLog "${debugIndentTwo}Theme set in UI? (1=No, 0=Yes): $blGuiOverrideThemeChanged"
|
|
WriteToLog "${debugIndentTwo}theme.plist not found? (1=No, 0=Yes): $blConfigThemePlistNotFound"
|
|
WriteToLog "${debugIndentTwo}Random theme used? (1=No, 0=Yes):$blUsedRandomTheme"
|
|
WriteToLog "${debugIndentTwo}Theme chosen in UI: $blGuiOverrideTheme"
|
|
WriteToLog "${debugIndentTwo}Theme used path: $blThemeUsedPath"
|
|
WriteToLog "${debugIndentTwo}Theme used chosen: $blThemeNameChosen"
|
|
WriteLinesToLog
|
|
WriteToLog "${debugIndentTwo}NVRAM working type: $gNvramWorkingType"
|
|
WriteToLog "${debugIndentTwo}Is nvram working on currently booted system? (1=No, 0=Yes): $gNvramWorking"
|
|
WriteLinesToLog
|
|
WriteToLog "${debugIndentTwo}mountpointPrint=$mountpointPrint"
|
|
WriteToLog "${debugIndentTwo}blConfigPlistFilePathPrint=$blConfigPlistFilePathPrint"
|
|
WriteToLog "${debugIndentTwo}blNvramReadFromPrint=$blNvramReadFromPrint"
|
|
WriteToLog "${debugIndentTwo}blThemeUsedPathPrint=$blThemeUsedPathPrint"
|
|
WriteToLog "${debugIndentTwo}blThemeAskedForPathPrint=$blThemeAskedForPathPrint"
|
|
WriteLinesToLog
|
|
}
|
|
|
|
# ---------------------------------------------------------------------------------------
|
|
PopulateNvramFunctionalityBand()
|
|
{
|
|
[[ DEBUG -eq 1 ]] && WriteLinesToLog
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}PopulateNvramFunctionalityBand() option $1"
|
|
|
|
local message=""
|
|
local fillColour=""
|
|
|
|
if [ "$1" == "0" ]; then
|
|
|
|
if [ $gNvramWorking -eq 0 ]; then
|
|
if [ "$blBootType" == "Legacy" ]; then
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}Launch daemon \& rc scripts appear to be working. NVRAM changes will be saved (to nvram.plist)"
|
|
message="Launch daemon \& rc scripts appear to be working. NVRAM changes will be saved (to nvram.plist)"
|
|
fillColour="nvramFillWorking"
|
|
elif [ "$blBootType" == "UEFI" ]; then
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}Native NVRAM is functional and direct changes will be retained next boot."
|
|
message="Native NVRAM is functional and direct changes will be retained next boot."
|
|
fillColour="nvramFillWorking"
|
|
fi
|
|
elif [ $gNvramWorking -eq 1 ]; then
|
|
if [ "$blBootType" == "Legacy" ]; then
|
|
message="Launch Daemon \& rc scripts not operational. Direct NVRAM changes won't be retained next boot. Run Clover Installer to fix."
|
|
fillColour="nvramFillNotWorking"
|
|
elif [ "$blBootType" == "UEFI" ]; then
|
|
if [ "$gNvramWorkingType" == "" ]; then
|
|
if [ $blNvramBootArgs -eq 0 ]; then
|
|
message="Native NVRAM is working but not being used for default theme choice."
|
|
fillColour="nvramFillWorking"
|
|
else
|
|
message="Bootlog showed NVRAM is not being used for default theme choice."
|
|
fillColour="nvramFillNotWorking"
|
|
fi
|
|
elif [ "$gNvramWorkingType" == "Fake" ] && [ $blEmuVariable -eq 0 ]; then
|
|
message="Launch daemon \& rc scripts are not operational. Direct NVRAM changes won't be retained next boot. Run Clover Installer to fix."
|
|
fillColour="nvramFillNotWorking"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
elif [ "$1" == "1" ]; then
|
|
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}This system was booted using Clover older than r2025."
|
|
message="This system was booted using a Clover revision older than r2025."
|
|
fillColour="nvramFillRed"
|
|
|
|
elif [ "$1" == "2" ]; then
|
|
|
|
if [ ! -f "$bootLogFile" ]; then
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}This system was not booted using Clover."
|
|
else
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}Bootlog file is not Clover bootlog."
|
|
fi
|
|
message="This system was not booted using Clover."
|
|
fillColour="nvramFillRed"
|
|
|
|
fi
|
|
|
|
if [ "$message" != "" ]; then
|
|
|
|
# Create html message
|
|
local htmlToInsert=""
|
|
htmlToInsert="$htmlToInsert"$(printf " <div id=\"NvramFunctionalityBand\" class=\"${fillColour}\">\r")
|
|
htmlToInsert="$htmlToInsert"$(printf " <div id=\"nvramTextArea\">\r")
|
|
htmlToInsert="$htmlToInsert"$(printf " <span class=\"textBody\">${message}<\/span>\r")
|
|
htmlToInsert="$htmlToInsert"$(printf " <\/div>\r")
|
|
htmlToInsert="$htmlToInsert"$(printf " <\/div> <!-- End NvramFunctionalityBand -->\r")
|
|
|
|
# Insert bootlog Html in to placeholder
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}Inserting nvram functionality message HTML in to managethemes.html"
|
|
#LANG=C sed -ie "s/<!--INSERT_NVRAM_MESSAGE_BAND_HERE-->/${htmlToInsert}/g" "${PUBLIC_DIR}"/managethemes.html
|
|
LANG=C sed -ie "s/<!--INSERT_NVRAM_MESSAGE_BAND_HERE-->/${htmlToInsert}/g" "${TEMPDIR}"/managethemes.html
|
|
|
|
# Clean up
|
|
if [ -f "${TEMPDIR}"/managethemes.htmle ]; then
|
|
rm "${TEMPDIR}"/managethemes.htmle
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# ---------------------------------------------------------------------------------------
|
|
PopulateBootLogTitleBand()
|
|
{
|
|
[[ DEBUG -eq 1 ]] && WriteLinesToLog
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndent}PopulateBootLogTitleBand()"
|
|
|
|
# Create bootlog band and title html
|
|
bootlogBandTitleHtml=$(printf " <div id=\"BootLogTitleBar\" class=\"bootlogBandFill\" tabindex=\"1\">\r")
|
|
bandTitle=$(printf " <span class=\"titleBarTextTitle\">LAST BOOT\ \ \&\#x25BE\ \ \ \ |<\/span>")
|
|
bandTitleDescStart=$(printf "<span class=\"titleBarTextDescription\">")
|
|
|
|
if [ $blTextOnlyOption -eq 0 ] && [ $blFastOption -eq 0 ]; then
|
|
bootlogBandTitleHtml="${bootlogBandTitleHtml}${bandTitle}${bandTitleDescStart}${blBootType} Clover ${blCloverRevision} - Fast boot and TextOnly options were both set in config.plist so no theme was loaded<\/span>"
|
|
elif [ $blFastOption -eq 0 ]; then
|
|
bootlogBandTitleHtml="${bootlogBandTitleHtml}${bandTitle}${bandTitleDescStart}${blBootType} Clover ${blCloverRevision} - Fast boot option was set in config.plist so no theme was loaded<\/span>"
|
|
elif [ $blTextOnlyOption -eq 0 ]; then
|
|
bootlogBandTitleHtml="${bootlogBandTitleHtml}${bandTitle}${bandTitleDescStart}${blBootType} Clover ${blCloverRevision} - Text Only option was set in config.plist so no theme was loaded<\/span>"
|
|
else
|
|
|
|
# Was the Christmas or NewYear theme used?
|
|
if [ "$blThemeNameChosen" == "christmas" ] || [ "$blThemeNameChosen" == "newyear" ]; then
|
|
bootlogBandTitleHtml="${bootlogBandTitleHtml}${bandTitle}${bandTitleDescStart}${blBootType} Clover ${blCloverRevision} loaded <span class=\"themeName\">${blThemeNameChosen}<\/span> as it's that time of year. <span class=\"themeAction\">Uninstall theme if not wanted.<\/span><\/span>"
|
|
|
|
# No nvram theme entry and chosen theme matches config.plist entry as long as they're not blank
|
|
elif [ "$blNvramThemeEntry" == "" ] && [ "$blThemeNameChosen" != "" ] && [ "$blConfigPlistThemeEntry" != "" ] && [ "$blThemeNameChosen" == "$blConfigPlistThemeEntry" ]; then
|
|
bootlogBandTitleHtml="${bootlogBandTitleHtml}${bandTitle}${bandTitleDescStart}${blBootType} Clover ${blCloverRevision} loaded <span class=\"themeName\">${blThemeNameChosen}<\/span> as set in ${blConfigPlistFilePathPrint} on device ${gBootDeviceIdentifier}<\/span>"
|
|
|
|
# nvram theme entry was used
|
|
elif [ "$blNvramThemeEntry" != "" ] && [ "$blThemeNameChosen" == "$blNvramThemeEntry" ]; then
|
|
bootlogBandTitleHtml="${bootlogBandTitleHtml}${bandTitle}${bandTitleDescStart}${blBootType} Clover ${blCloverRevision} loaded <span class=\"themeName\">${blThemeNameChosen}<\/span> as set in Clover.Theme var from ${blNvramReadFromPrint}<\/span>"
|
|
|
|
# nvram theme entry points to non-existent theme AND chosen theme matches config.plist entry
|
|
elif [ "$blNvramThemeEntry" != "" ] && [ $blNvramThemeExists -eq 1 ] && [ "$blThemeNameChosen" == "$blConfigPlistThemeEntry" ] && [ "$themeExist" == "Yes" ] && [ $blNvramThemeAbsent -eq 0 ]; then
|
|
bootlogBandTitleHtml="${bootlogBandTitleHtml}${bandTitle}${bandTitleDescStart}${blBootType} Clover ${blCloverRevision} loaded <span class=\"themeName\">${blThemeNameChosen}<\/span> as set in ${blConfigPlistFilePathPrint} as NVRAM theme was absent<\/span>"
|
|
|
|
# Any pointed to theme does not exist AND embedded theme was not used AND random theme was used
|
|
elif [ $blNvramThemeAbsent -eq 0 ] && [ $blUsingEmbedded -eq 1 ] && [ $blUsedRandomTheme -eq 0 ]; then
|
|
bootlogBandTitleHtml="${bootlogBandTitleHtml}${bandTitle}${bandTitleDescStart}${blBootType} Clover ${blCloverRevision} loaded a random theme <span class=\"themeName\">($blThemeNameChosen)<\/span> as it couldn't find the theme asked for<\/span>"
|
|
|
|
# nvram entry was blank AND config.plist entry was blank AND embedded theme was not used AND random theme was used
|
|
elif [ "$blNvramThemeEntry" == "" ] && [ "$blConfigPlistThemeEntry" == "" ] && [ $blUsingEmbedded -eq 1 ] && [ $blUsedRandomTheme -eq 0 ]; then
|
|
bootlogBandTitleHtml="${bootlogBandTitleHtml}${bandTitle}${bandTitleDescStart}${blBootType} Clover ${blCloverRevision} loaded a random theme <span class=\"themeName\">($blThemeNameChosen)<\/span> as no theme was set<\/span>"
|
|
|
|
# Embedded theme was used
|
|
elif [ $blUsingEmbedded -eq 0 ] && [ "$blThemeAskedForTitle" == "embedded" ] && [ "$blUsingTheme" == "" ]; then
|
|
bootlogBandTitleHtml="${bootlogBandTitleHtml}${bandTitle}${bandTitleDescStart}${blBootType} Clover ${blCloverRevision} loaded theme embedded as it couldn't find any themes<\/span>"
|
|
|
|
# Embedded theme was used
|
|
elif [ $blUsingEmbedded -eq 0 ]; then
|
|
bootlogBandTitleHtml="${bootlogBandTitleHtml}${bandTitle}${bandTitleDescStart}${blBootType} Clover ${blCloverRevision} loaded theme embedded as it was asked for<\/span>"
|
|
|
|
# User set random
|
|
elif [ "$blConfigPlistThemeEntry" == "random" ] || [ "$blNvramThemeEntry" == "random" ]; then
|
|
bootlogBandTitleHtml="${bootlogBandTitleHtml}${bandTitle}${bandTitleDescStart}${blBootType} Clover ${blCloverRevision} loaded <span class=\"themeName\">${blThemeNameChosen}<\/span> as a random theme was asked for<\/span>"
|
|
|
|
# theme.plist missing so random theme chosen.
|
|
elif [ $blConfigThemePlistNotFound -eq 0 ] && [ $blUsedRandomTheme -eq 0 ]; then
|
|
bootlogBandTitleHtml="${bootlogBandTitleHtml}${bandTitle}${bandTitleDescStart}${blBootType} Clover ${blCloverRevision} loaded a random theme <span class=\"themeName\">($blThemeNameChosen)<\/span> as theme asked for didn't exist.<\/span>"
|
|
|
|
# was theme overridden from GUI?
|
|
elif [ $blGuiOverrideThemeChanged -eq 0 ] && [ "$blGuiOverrideTheme" != "" ] && [ "$blGuiOverrideTheme" == "$blThemeNameChosen" ]; then
|
|
bootlogBandTitleHtml="${bootlogBandTitleHtml}${bandTitle}${bandTitleDescStart}${blBootType} Clover ${blCloverRevision} loaded theme <span class=\"themeName\">${blThemeNameChosen}<\/span> as chosen in the GUI<\/span>"
|
|
|
|
# was fast boot used?
|
|
elif [ "$blUsingTheme" == "" ] && [ "$blThemeUsedPath" == "" ] && [ "$blThemeNameChosen" == "" ] && [ $blFastOption -eq 0 ]; then
|
|
bootlogBandTitleHtml="${bootlogBandTitleHtml}${bandTitle}${bandTitleDescStart}${blBootType} Clover ${blCloverRevision} - Fast Boot option was set in config.plist so no theme was loaded<\/span>"
|
|
|
|
# Something else happened
|
|
else
|
|
bootlogBandTitleHtml="${bootlogBandTitleHtml}${bandTitle}${bandTitleDescStart}${blBootType} Clover ${blCloverRevision}<\/span>"
|
|
fi
|
|
fi
|
|
|
|
bootlogBandTitleHtml="$bootlogBandTitleHtml"$(printf "\r <\/div> <!-- End BootLogTitleBar -->\r")
|
|
|
|
# Insert bootlog Html in to placeholder
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}Inserting bootlog Band Title HTML in to managethemes.html"
|
|
#LANG=C sed -ie "s/<!--INSERT_BOOTLOG_BAND_TITLE_HERE-->/${bootlogBandTitleHtml}/g" "${PUBLIC_DIR}"/managethemes.html && (( insertCount++ ))
|
|
LANG=C sed -ie "s/<!--INSERT_BOOTLOG_BAND_TITLE_HERE-->/${bootlogBandTitleHtml}/g" "${TEMPDIR}"/managethemes.html && (( insertCount++ ))
|
|
|
|
# Clean up
|
|
if [ -f "${TEMPDIR}"/managethemes.htmle ]; then
|
|
rm "${TEMPDIR}"/managethemes.htmle
|
|
fi
|
|
}
|
|
|
|
# ---------------------------------------------------------------------------------------
|
|
PopulateBootLog()
|
|
{
|
|
[[ DEBUG -eq 1 ]] && WriteLinesToLog
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndent}PopulateBootLog()"
|
|
|
|
# Create bootlog container HTML
|
|
bootlogHtml=$(printf " <div id=\"BootLogContainer\" class=\"nvramFillNone\">\r")
|
|
bootlogHtml="$bootlogHtml"$(printf "\r")
|
|
|
|
# Add HTML for Boot Device Info / Boot Device Sections
|
|
# If boot device was not found then present rescan button.
|
|
if [ "$gBootDeviceIdentifier" != "Failed" ]; then
|
|
if [ "$blBootDevicePartType" == "MBR" ]; then
|
|
bootlogHtml="${bootlogHtml}${blcOpen}${blcLineDeviceInfoMbr}${blcLineDevice}"
|
|
elif [ "$blBootDevicePartType" == "GPT" ]; then
|
|
bootlogHtml="${bootlogHtml}${blcOpen}${blcLineDeviceInfoGpt}${blcLineDevice}"
|
|
fi
|
|
else
|
|
if [ "$blBootDevicePartType" == "MBR" ]; then
|
|
bootlogHtml="${bootlogHtml}${blcOpen}${blcLineDeviceInfoMbr}${blcLineDeviceRescan}"
|
|
elif [ "$blBootDevicePartType" == "GPT" ]; then
|
|
bootlogHtml="${bootlogHtml}${blcOpen}${blcLineDeviceInfoGpt}${blcLineDeviceRescan}"
|
|
fi
|
|
fi
|
|
|
|
# Add HTML for NVRAM section
|
|
if [ "$blNvramReadFrom" != "" ]; then
|
|
if [ "$blNvramThemeEntry" != "" ]; then
|
|
bootlogHtml="${bootlogHtml}${blcLineNvram}"
|
|
else
|
|
bootlogHtml="${bootlogHtml}${blcLineNvramNoTheme}"
|
|
fi
|
|
fi
|
|
|
|
# Add HTML for Config.plist section
|
|
bootlogHtml="${bootlogHtml}${blcLineConfig}"
|
|
|
|
# Add HTML for Theme asked for section (providing a theme was asked for), and Text Only option was not used
|
|
if [ "$blThemeAskedForPath" != "" ] && [ "$blThemeAskedForTitle" != "" ] && [ $blTextOnlyOption -eq 1 ]; then
|
|
bootlogHtml="${bootlogHtml}${blcLineThemeAsked}"
|
|
fi
|
|
|
|
# If GUI was used to override theme then add this HTML section
|
|
if [ $blGuiOverrideThemeChanged -eq 0 ] && [ "$blGuiOverrideTheme" != "" ]; then
|
|
bootlogHtml="${bootlogHtml}${blcLineOverrideUi}"
|
|
fi
|
|
|
|
# If fast boot and text only options were not used then add HTML for Theme used section
|
|
if ([ "$blUsingTheme" != "" ] || [ "$blThemeUsedPath" != "" ] || [ "$blThemeNameChosen" != "" ]) && [ $blFastOption -eq 1 ] && [ $blTextOnlyOption -eq 1 ]; then
|
|
bootlogHtml="${bootlogHtml}${blcLineThemeUsed}"
|
|
fi
|
|
|
|
# Add ending HTML
|
|
bootlogHtml="${bootlogHtml} <\/div> <!-- End BootLogContainer -->"
|
|
|
|
# Insert bootlog Html in to placeholder
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}Inserting bootlog HTML in to managethemes.html"
|
|
#LANG=C sed -ie "s/<!--INSERT_BOOTLOG_INFO_HERE-->/${bootlogHtml}/g" "${PUBLIC_DIR}"/managethemes.html && (( insertCount++ ))
|
|
LANG=C sed -ie "s/<!--INSERT_BOOTLOG_INFO_HERE-->/${bootlogHtml}/g" "${TEMPDIR}"/managethemes.html && (( insertCount++ ))
|
|
|
|
# Clean up
|
|
#if [ -f "${PUBLIC_DIR}"/managethemes.htmle ]; then
|
|
# rm "${PUBLIC_DIR}"/managethemes.htmle
|
|
#fi
|
|
if [ -f "${TEMPDIR}"/managethemes.htmle ]; then
|
|
rm "${TEMPDIR}"/managethemes.htmle
|
|
fi
|
|
}
|
|
|
|
# Resolve path
|
|
SELF_PATH=$(cd -P -- "$(dirname -- "$0")" && pwd -P) && SELF_PATH=$SELF_PATH/$(basename -- "$0")
|
|
source "${SELF_PATH%/*}"/shared.sh
|
|
|
|
# Check for missing temp dir in case of local script testing.
|
|
[[ ! -d $TEMPDIR ]] && mkdir -p $TEMPDIR
|
|
|
|
# *************************************************************************
|
|
# Copy managethemes.html.template for testing only.
|
|
# Comment these two lines out for normal use
|
|
#cp "$PUBLIC_DIR"/managethemes.html.template "$TEMPDIR"/managethemes.html && PUBLIC_DIR="$TEMPDIR"
|
|
# *************************************************************************
|
|
|
|
[[ DEBUG -eq 1 ]] && WriteLinesToLog
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndent}bootlog.sh"
|
|
|
|
gNvramWorkingType=""
|
|
gNvramWorking=1 # Set to 0 if writing to nvram can be saved for next boot
|
|
insertCount=0 # increments each time an html block is injected in to managethemes.html
|
|
gRunInfo="$1" # Will be either 'Init' or 'Rescan'
|
|
gBootDeviceIdentifier="$2" # The boot device identifier (if found)
|
|
gBootDeviceMountpoint="$3" # The boot device mountpoint (if found)
|
|
|
|
if [ -f "$bootLogFile" ]; then
|
|
|
|
# Note: Clover r2025 rebranded rEFIt to Clover.
|
|
# So any log pre r2025 will not be read correctly.
|
|
|
|
checkLog=$( grep -a "Starting Clover" "$bootLogFile" )
|
|
if [ "$checkLog" != "" ]; then
|
|
ReadBootLog
|
|
PostProcess
|
|
CheckNvramIsWorking
|
|
if [ "$gRunInfo" == "Init" ]; then
|
|
EscapeVarsForHtml
|
|
[[ DEBUG -eq 1 ]] && PrintVarsToLog
|
|
|
|
# Write boot device info to file
|
|
echo "${blBootDevicePartition}@${blBootDevicePartType}@${blBootDevicePartSignature}@${blBootDevicePartStartDec}@${blBootDevicePartSizeDec}" > "$bootDeviceInfo"
|
|
|
|
# Create NVRAM functionality band
|
|
PopulateNvramFunctionalityBand "0"
|
|
|
|
# Show user what happened last boot
|
|
PopulateBootLogTitleBand
|
|
SetBootlogTextColourClasses
|
|
SetHtmlBootlogSectionTemplates
|
|
PopulateBootLog
|
|
|
|
# Add message in to log for initialise.js to detect.
|
|
if [ $insertCount -eq 2 ]; then
|
|
WriteToLog "CTM_BootlogOK"
|
|
else
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}insertCount=$insertCount | boot.log html failed to be inserted".
|
|
fi
|
|
elif [ "$gRunInfo" == "Rescan" ]; then
|
|
# Remove paths file, incase this script is run a second time.
|
|
[[ -f "$bootlogScriptOutfile" ]] && rm "$bootlogScriptOutfile"
|
|
fi
|
|
|
|
# Write some vars to file for script.sh to use.
|
|
if [ "$blNvramReadFrom" != "" ]; then
|
|
echo "nvram‡$blNvramReadFrom" >> "$bootlogScriptOutfile"
|
|
elif [ $blNvramBootArgs -eq 0 ]; then
|
|
echo "nvram‡Native NVRAM" >> "$bootlogScriptOutfile"
|
|
fi
|
|
[[ "$blNvramThemeEntry" != "" ]] && echo "nvramThemeEntry‡$blNvramThemeEntry" >> "$bootlogScriptOutfile"
|
|
[[ "$blConfigPlistFilePath" != "" ]] && echo "config‡$blConfigPlistFilePath" >> "$bootlogScriptOutfile"
|
|
[[ "$blBootType" != "" ]] && echo "bootType‡$blBootType" >> "$bootlogScriptOutfile"
|
|
echo "nvramSave‡$gNvramWorking" >> "$bootlogScriptOutfile"
|
|
|
|
else
|
|
checkLog=$( grep -a "Starting rEFIt" "$bootLogFile" )
|
|
if [ "$checkLog" != "" ]; then
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}Found Clover boot.log but revision is older than r2025"
|
|
# Create NVRAM functionality band
|
|
PopulateNvramFunctionalityBand "1"
|
|
else
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}Found boot.log but Not Clover."
|
|
PopulateNvramFunctionalityBand "2"
|
|
fi
|
|
fi
|
|
|
|
else
|
|
# Show message that system was booted without using Clover
|
|
PopulateNvramFunctionalityBand "2"
|
|
|
|
# Add message in to log for initialise.js to detect.
|
|
WriteToLog "CTM_BootlogMissing"
|
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}boot.log does not exist".
|
|
fi |