mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-12-04 13:23:26 +01:00
140 lines
5.0 KiB
Bash
140 lines
5.0 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
# A script for Clover Theme Manager
|
||
|
# Copyright (C) 2014-2015 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.
|
||
|
#
|
||
|
# Scans all mounted volumes for an /EFI/Clover/Themes directory
|
||
|
# Any directories found have the following info saved to file:
|
||
|
# - Disk identifier
|
||
|
# - Unique Partition GUID
|
||
|
# - Mount point
|
||
|
# - Content (type - Apple_HFS, EFI etc.)
|
||
|
# - Full theme path
|
||
|
#
|
||
|
# Credits - JrCs for partutil program.
|
||
|
|
||
|
# Resolve path
|
||
|
SELF_PATH=$(cd -P -- "$(dirname -- "$0")" && pwd -P) && SELF_PATH=$SELF_PATH/$(basename -- "$0")
|
||
|
source "${SELF_PATH%/*}"/shared.sh
|
||
|
|
||
|
# Check for missing files and dirs in case of local script testing.
|
||
|
[[ ! -f "$partutil" ]] && echo "Missing tool: partutil. Expecting to find it in /tmp. Exiting." && exit 1
|
||
|
[[ ! -d "$TEMPDIR" ]] && mkdir -p "$TEMPDIR"
|
||
|
[[ -f "$themeDirInfo" ]] && rm "$themeDirInfo"
|
||
|
[[ -f "$espList" ]] && rm "$espList"
|
||
|
[[ -f "$mbrList" ]] && rm "$mbrList"
|
||
|
|
||
|
[[ DEBUG -eq 1 ]] && WriteLinesToLog
|
||
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndent}findThemeDirs.sh"
|
||
|
|
||
|
declare -a dfMounts
|
||
|
declare -a dfMountpoints
|
||
|
declare -a gpt
|
||
|
declare -a mbr
|
||
|
declare -a espFound
|
||
|
|
||
|
# Send message to UI via log
|
||
|
#WriteToLog "CTM_ThemeDirsScan"
|
||
|
|
||
|
# Get List of mounted devices and mountpoints
|
||
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}Getting list of mounted devices"
|
||
|
|
||
|
oIFS="$IFS"; IFS=$'\r\n'
|
||
|
dfMounts+=( $( df -laH | awk '{print $1}' | tail -n +2 | cut -d '/' -f 3 ))
|
||
|
dfMountpoints+=( /$( df -laH | cut -d'/' -f 4- | tail -n +2 ))
|
||
|
gpt=( $( diskutil list | grep "GUID_partition_scheme" | cut -d 'B' -f 2 | tr -d ' ' ))
|
||
|
mbr=( $( diskutil list | grep "FDisk_partition_scheme" | cut -d 'B' -f 2 | tr -d ' ' ))
|
||
|
IFS="$oIFS"
|
||
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}Check: dfMounts=${#dfMounts[@]}"
|
||
|
|
||
|
#Loop through all disk partitions
|
||
|
for (( s=0; s<${#dfMounts[@]}; s++ ))
|
||
|
do
|
||
|
mp=$( "$partutil" --show-mountpoint /dev/${dfMounts[$s]} )
|
||
|
# If mountpoint is / then populate
|
||
|
if [ "$mp" == "/" ]; then
|
||
|
for vol in /Volumes/*
|
||
|
do
|
||
|
[[ "$(readlink "$vol")" = / ]] && tmp="$vol"
|
||
|
done
|
||
|
mp="${tmp}"
|
||
|
elif [ "$mp" == "" ]; then # partutil does not return mountpoint under OS X 10.7
|
||
|
mp=/${dfMountpoints[$s]}
|
||
|
fi
|
||
|
|
||
|
# Does this device contain /efi/clover/themes directory?
|
||
|
themeDir=$( find "$mp"/EFI/Clover -depth 1 -type d -iname "Themes" 2>/dev/null )
|
||
|
if [ "$themeDir" ]; then
|
||
|
|
||
|
_content=$( "$partutil" --show-contenttype /dev/${dfMounts[$s]} )
|
||
|
# Read and save Volume Name
|
||
|
tmp=$( "$partutil" --show-volumename /dev/${dfMounts[$s]} )
|
||
|
if [ "$tmp" == "" ]; then
|
||
|
_volName=" "
|
||
|
else
|
||
|
_volName="$tmp"
|
||
|
fi
|
||
|
|
||
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}Volume $_volName on mountpoint $mp contains Clover themes directory"
|
||
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}${dfMounts[$s]} | $_volName | $mp | $_content"
|
||
|
|
||
|
# Read and save Unique partition GUID
|
||
|
tmp=$( "$partutil" --show-uuid /dev/${dfMounts[$s]} )
|
||
|
[[ $tmp == "" ]] && tmp="$zeroUUID" # MBR partitioned device do not have UUID's. Fill with zeros
|
||
|
_uniquePartitionGuid="$tmp"
|
||
|
|
||
|
# Write data to file.
|
||
|
echo "${dfMounts[$s]}@${_volName}@${mp}@ @${_uniquePartitionGuid}@${themeDir}" >> "$themeDirInfo"
|
||
|
fi
|
||
|
|
||
|
_content=$( "$partutil" --show-contenttype /dev/${dfMounts[$s]} )
|
||
|
# Record mounted esp info to file.
|
||
|
if [ "$_content" == "C12A7328-F81F-11D2-BA4B-00A0C93EC93B" ]; then
|
||
|
echo "${dfMounts[$s]}@M" >> "$espList"
|
||
|
espFound+=( ${dfMounts[$s]} )
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
# Find any unmounted ESP's
|
||
|
for (( s=0; s<${#gpt[@]}; s++ ))
|
||
|
do
|
||
|
toBeChecked=0
|
||
|
for (( e=0; e<${#espFound[@]}; e++ ))
|
||
|
do
|
||
|
[[ ${espFound[$e]} == *${gpt[$s]}* ]] && toBeChecked=1
|
||
|
done
|
||
|
|
||
|
if [ $toBeChecked -eq 0 ]; then
|
||
|
# Found a disk using GUID_partition_scheme without a mounted ESP
|
||
|
# Does this disk have an ESP?
|
||
|
_content=$( "$partutil" --show-contenttype /dev/${gpt[$s]}s1 )
|
||
|
if [ "$_content" == "C12A7328-F81F-11D2-BA4B-00A0C93EC93B" ]; then
|
||
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}${gpt[$s]}s1@U = unmounted ESP"
|
||
|
echo "${gpt[$s]}s1@U" >> "$espList"
|
||
|
else
|
||
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}${gpt[$s]} does not contain ESP"
|
||
|
fi
|
||
|
else
|
||
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}$e | Already found mounted ESP for ${gpt[$s]}. Skipping"
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
# Print list of MBR partitioned devices
|
||
|
for (( s=0; s<${#mbr[@]}; s++ ))
|
||
|
do
|
||
|
[[ DEBUG -eq 1 ]] && WriteToLog "${debugIndentTwo}Found MBR device:${mbr[$s]}"
|
||
|
echo "${mbr[$s]}" >> "$mbrList"
|
||
|
done
|
||
|
|
||
|
exit 0
|