mirror of
https://github.com/alexbelgium/hassio-addons.git
synced 2026-07-27 00:10:32 +02:00
Leaner code
This commit is contained in:
@@ -7,18 +7,19 @@ set -e
|
|||||||
###############
|
###############
|
||||||
|
|
||||||
echo " "
|
echo " "
|
||||||
bashio::log.info "Ensuring the file structure is correct :"
|
bashio::log.info "Ensuring the file structure is correct:"
|
||||||
|
|
||||||
# Define structure
|
# Create default configuration files if not present
|
||||||
echo "... creating default files"
|
echo "... creating default files"
|
||||||
touch /config/include_species_list.txt # Should be null
|
DEFAULT_FILES=("apprise.txt" "exclude_species_list.txt" "IdentifiedSoFar.txt" "disk_check_exclude.txt" "confirmed_species_list.txt" "blacklisted_images.txt" "whitelist_species_list.txt")
|
||||||
for files in apprise.txt exclude_species_list.txt IdentifiedSoFar.txt disk_check_exclude.txt confirmed_species_list.txt blacklisted_images.txt whitelist_species_list.txt; do
|
for file in "${DEFAULT_FILES[@]}"; do
|
||||||
if [ ! -f /config/"$files" ]; then
|
if [ ! -f "/config/$file" ]; then
|
||||||
echo "" > /config/"$files"
|
echo "" > "/config/$file"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
touch /config/include_species_list.txt # Ensure this is always created
|
||||||
|
|
||||||
# Get BirdSongs folder locations
|
# Set BirdSongs folder location from configuration if specified
|
||||||
BIRDSONGS_FOLDER="/config/BirdSongs"
|
BIRDSONGS_FOLDER="/config/BirdSongs"
|
||||||
if bashio::config.has_value "BIRDSONGS_FOLDER"; then
|
if bashio::config.has_value "BIRDSONGS_FOLDER"; then
|
||||||
BIRDSONGS_FOLDER_OPTION="$(bashio::config "BIRDSONGS_FOLDER")"
|
BIRDSONGS_FOLDER_OPTION="$(bashio::config "BIRDSONGS_FOLDER")"
|
||||||
@@ -28,68 +29,60 @@ if bashio::config.has_value "BIRDSONGS_FOLDER"; then
|
|||||||
if [ -d "$BIRDSONGS_FOLDER_OPTION" ] && [ "$(stat -c '%u:%g' "$BIRDSONGS_FOLDER_OPTION")" == "1000:1000" ]; then
|
if [ -d "$BIRDSONGS_FOLDER_OPTION" ] && [ "$(stat -c '%u:%g' "$BIRDSONGS_FOLDER_OPTION")" == "1000:1000" ]; then
|
||||||
BIRDSONGS_FOLDER="$BIRDSONGS_FOLDER_OPTION"
|
BIRDSONGS_FOLDER="$BIRDSONGS_FOLDER_OPTION"
|
||||||
else
|
else
|
||||||
bashio::log.yellow "BIRDSONGS_FOLDER reverted to /config/BirdSongs"
|
bashio::log.warning "BIRDSONGS_FOLDER reverted to /config/BirdSongs"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Create BirdSongs folder
|
# Create default folders
|
||||||
echo "... creating default folders ; it is highly recommended to store those on a ssd"
|
echo "... creating default folders; it is highly recommended to store these on an SSD"
|
||||||
mkdir -p "$BIRDSONGS_FOLDER"/By_Date
|
mkdir -p "$BIRDSONGS_FOLDER/By_Date" "$BIRDSONGS_FOLDER/Charts"
|
||||||
mkdir -p "$BIRDSONGS_FOLDER"/Charts
|
|
||||||
|
|
||||||
# If tmpfs is installed, use it
|
# Use tmpfs if installed
|
||||||
if df -T /tmp | grep -q "tmpfs"; then
|
if df -T /tmp | grep -q "tmpfs"; then
|
||||||
echo "... tmpfs detected, using it for StreamData and Processed to reduce disk wear"
|
echo "... tmpfs detected, using it for StreamData and Processed to reduce disk wear"
|
||||||
mkdir -p /tmp/StreamData
|
mkdir -p /tmp/StreamData /tmp/Processed
|
||||||
mkdir -p /tmp/Processed
|
[ -d "$HOME/BirdSongs/StreamData" ] && rm -r "$HOME/BirdSongs/StreamData"
|
||||||
if [ -d "$HOME"/BirdSongs/StreamData ]; then
|
[ -d "$HOME/BirdSongs/Processed" ] && rm -r "$HOME/BirdSongs/Processed"
|
||||||
rm -r "$HOME"/BirdSongs/StreamData
|
sudo -u pi ln -fs /tmp/StreamData "$HOME/BirdSongs/StreamData"
|
||||||
fi
|
sudo -u pi ln -fs /tmp/Processed "$HOME/BirdSongs/Processed"
|
||||||
if [ -d "$HOME"/BirdSongs/Processed ]; then
|
|
||||||
rm -r "$HOME"/BirdSongs/Processed
|
|
||||||
fi
|
|
||||||
sudo -u pi ln -fs /tmp/StreamData "$HOME"/BirdSongs/StreamData
|
|
||||||
sudo -u pi ln -fs /tmp/Processed "$HOME"/BirdSongs/Processed
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Permissions for created files and folders
|
# Set permissions for created files and folders
|
||||||
echo "... set permissions to user pi"
|
echo "... setting permissions for user pi"
|
||||||
chown -R pi:pi /config /etc/birdnet "$BIRDSONGS_FOLDER" /tmp
|
chown -R pi:pi /config /etc/birdnet "$BIRDSONGS_FOLDER" /tmp
|
||||||
chmod -R 755 /config /config /etc/birdnet "$BIRDSONGS_FOLDER" /tmp
|
chmod -R 755 /config /etc/birdnet "$BIRDSONGS_FOLDER" /tmp
|
||||||
|
|
||||||
# Save default birdnet.conf to perform sanity check
|
# Backup default birdnet.conf for sanity check
|
||||||
cp "$HOME"/BirdNET-Pi/birdnet.conf "$HOME"/BirdNET-Pi/birdnet.bak
|
cp "$HOME/BirdNET-Pi/birdnet.conf" "$HOME/BirdNET-Pi/birdnet.bak"
|
||||||
|
|
||||||
# Symlink files
|
# Symlink configuration files
|
||||||
echo "... creating symlink"
|
echo "... creating symlinks for configuration files"
|
||||||
for files in "$HOME/BirdNET-Pi/birdnet.conf" "$HOME/BirdNET-Pi/scripts/whitelist_species_list.txt" "$HOME/BirdNET-Pi/blacklisted_images.txt" "$HOME/BirdNET-Pi/scripts/birds.db" "$HOME/BirdNET-Pi/BirdDB.txt" "$HOME/BirdNET-Pi/scripts/disk_check_exclude.txt" "$HOME/BirdNET-Pi/apprise.txt" "$HOME/BirdNET-Pi/exclude_species_list.txt" "$HOME/BirdNET-Pi/include_species_list.txt" "$HOME/BirdNET-Pi/IdentifiedSoFar.txt" "$HOME/BirdNET-Pi/scripts/confirmed_species_list.txt"; do
|
CONFIG_FILES=("$HOME/BirdNET-Pi/birdnet.conf" "$HOME/BirdNET-Pi/scripts/whitelist_species_list.txt" "$HOME/BirdNET-Pi/blacklisted_images.txt" "$HOME/BirdNET-Pi/scripts/birds.db" "$HOME/BirdNET-Pi/BirdDB.txt" "$HOME/BirdNET-Pi/scripts/disk_check_exclude.txt" "$HOME/BirdNET-Pi/apprise.txt" "$HOME/BirdNET-Pi/exclude_species_list.txt" "$HOME/BirdNET-Pi/include_species_list.txt" "$HOME/BirdNET-Pi/IdentifiedSoFar.txt" "$HOME/BirdNET-Pi/scripts/confirmed_species_list.txt")
|
||||||
filename="${files##*/}"
|
|
||||||
if [ ! -f /config/"$filename" ]; then
|
for file in "${CONFIG_FILES[@]}"; do
|
||||||
if [ -f "$files" ]; then
|
filename="${file##*/}"
|
||||||
echo "... copying $filename" && sudo -u pi mv "$files" /config/
|
[ ! -f "/config/$filename" ] && touch "/config/$filename"
|
||||||
else
|
[ -e "$file" ] && rm "$file"
|
||||||
touch /config/"$filename"
|
sudo -u pi ln -fs "/config/$filename" "$file"
|
||||||
fi
|
sudo -u pi ln -fs "/config/$filename" "$HOME/BirdNET-Pi/scripts/$filename"
|
||||||
fi
|
sudo -u pi ln -fs "/config/$filename" "/etc/birdnet/$filename"
|
||||||
if [ -e "$files" ]; then rm "$files"; fi
|
|
||||||
sudo -u pi ln -fs /config/"$filename" "$HOME/BirdNET-Pi/$filename" || bashio::log.fatal "Symlink creation failed for $filename"
|
|
||||||
sudo -u pi ln -fs /config/"$filename" "$HOME/BirdNET-Pi/scripts/$filename" || bashio::log.fatal "Symlink creation failed for $filename"
|
|
||||||
sudo -u pi ln -fs /config/"$filename" /etc/birdnet/"$filename" || bashio::log.fatal "Symlink creation failed for $filename"
|
|
||||||
done
|
done
|
||||||
|
|
||||||
# Symlink folders
|
# Symlink BirdSongs folders
|
||||||
for folders in By_Date Charts; do
|
for folder in By_Date Charts; do
|
||||||
echo "... creating symlink for $BIRDSONGS_FOLDER/$folders"
|
echo "... creating symlink for $BIRDSONGS_FOLDER/$folder"
|
||||||
rm -r "$HOME/BirdSongs/Extracted/${folders:?}"
|
[ -d "$HOME/BirdSongs/Extracted/${folder:?}" ] && rm -r "$HOME/BirdSongs/Extracted/$folder"
|
||||||
sudo -u pi ln -fs "$BIRDSONGS_FOLDER"/"$folders" "$HOME/BirdSongs/Extracted/$folders"
|
sudo -u pi ln -fs "$BIRDSONGS_FOLDER/$folder" "$HOME/BirdSongs/Extracted/$folder"
|
||||||
done
|
done
|
||||||
|
|
||||||
# Permissions for created files and folders
|
# Set permissions for newly created files and folders
|
||||||
echo "... check permissions"
|
echo "... checking and setting permissions"
|
||||||
chmod -R 755 /config/*
|
chmod -R 755 /config/*
|
||||||
chmod 777 /config
|
chmod 777 /config
|
||||||
|
|
||||||
# Permissions for Matplotlabdir
|
# Create Matplotlib configuration directory
|
||||||
|
echo "... setting up Matplotlabdir"
|
||||||
|
MPLCONFIGDIR="${MPLCONFIGDIR:-$HOME/.config/matplotlib}"
|
||||||
mkdir -p "$MPLCONFIGDIR"
|
mkdir -p "$MPLCONFIGDIR"
|
||||||
chown pi:pi "$MPLCONFIGDIR"
|
chown pi:pi "$MPLCONFIGDIR"
|
||||||
chmod 777 "$MPLCONFIGDIR"
|
chmod 777 "$MPLCONFIGDIR"
|
||||||
|
|||||||
Reference in New Issue
Block a user