From 322f7bd943230d228b3393817f7c0457cfe974a0 Mon Sep 17 00:00:00 2001 From: Alexandre <44178713+alexbelgium@users.noreply.github.com> Date: Sat, 5 Oct 2024 10:16:26 +0200 Subject: [PATCH] Leaner code --- .../rootfs/etc/cont-init.d/01-structure.sh | 95 +++++++++---------- 1 file changed, 44 insertions(+), 51 deletions(-) diff --git a/birdnet-pi/rootfs/etc/cont-init.d/01-structure.sh b/birdnet-pi/rootfs/etc/cont-init.d/01-structure.sh index 98f5591e0..2ffb75332 100755 --- a/birdnet-pi/rootfs/etc/cont-init.d/01-structure.sh +++ b/birdnet-pi/rootfs/etc/cont-init.d/01-structure.sh @@ -7,18 +7,19 @@ set -e ############### 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" -touch /config/include_species_list.txt # Should be null -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 - if [ ! -f /config/"$files" ]; then - echo "" > /config/"$files" +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 file in "${DEFAULT_FILES[@]}"; do + if [ ! -f "/config/$file" ]; then + echo "" > "/config/$file" fi 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" if bashio::config.has_value "BIRDSONGS_FOLDER"; then 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 BIRDSONGS_FOLDER="$BIRDSONGS_FOLDER_OPTION" else - bashio::log.yellow "BIRDSONGS_FOLDER reverted to /config/BirdSongs" + bashio::log.warning "BIRDSONGS_FOLDER reverted to /config/BirdSongs" fi fi -# Create BirdSongs folder -echo "... creating default folders ; it is highly recommended to store those on a ssd" -mkdir -p "$BIRDSONGS_FOLDER"/By_Date -mkdir -p "$BIRDSONGS_FOLDER"/Charts +# Create default folders +echo "... creating default folders; it is highly recommended to store these on an SSD" +mkdir -p "$BIRDSONGS_FOLDER/By_Date" "$BIRDSONGS_FOLDER/Charts" -# If tmpfs is installed, use it +# Use tmpfs if installed if df -T /tmp | grep -q "tmpfs"; then echo "... tmpfs detected, using it for StreamData and Processed to reduce disk wear" - mkdir -p /tmp/StreamData - mkdir -p /tmp/Processed - if [ -d "$HOME"/BirdSongs/StreamData ]; then - rm -r "$HOME"/BirdSongs/StreamData - fi - 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 + mkdir -p /tmp/StreamData /tmp/Processed + [ -d "$HOME/BirdSongs/StreamData" ] && rm -r "$HOME/BirdSongs/StreamData" + [ -d "$HOME/BirdSongs/Processed" ] && rm -r "$HOME/BirdSongs/Processed" + sudo -u pi ln -fs /tmp/StreamData "$HOME/BirdSongs/StreamData" + sudo -u pi ln -fs /tmp/Processed "$HOME/BirdSongs/Processed" fi -# Permissions for created files and folders -echo "... set permissions to user pi" +# Set permissions for created files and folders +echo "... setting permissions for user pi" 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 -cp "$HOME"/BirdNET-Pi/birdnet.conf "$HOME"/BirdNET-Pi/birdnet.bak +# Backup default birdnet.conf for sanity check +cp "$HOME/BirdNET-Pi/birdnet.conf" "$HOME/BirdNET-Pi/birdnet.bak" -# Symlink files -echo "... creating symlink" -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 - filename="${files##*/}" - if [ ! -f /config/"$filename" ]; then - if [ -f "$files" ]; then - echo "... copying $filename" && sudo -u pi mv "$files" /config/ - else - touch /config/"$filename" - fi - fi - 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" +# Symlink configuration files +echo "... creating symlinks for configuration files" +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") + +for file in "${CONFIG_FILES[@]}"; do + filename="${file##*/}" + [ ! -f "/config/$filename" ] && touch "/config/$filename" + [ -e "$file" ] && rm "$file" + sudo -u pi ln -fs "/config/$filename" "$file" + sudo -u pi ln -fs "/config/$filename" "$HOME/BirdNET-Pi/scripts/$filename" + sudo -u pi ln -fs "/config/$filename" "/etc/birdnet/$filename" done -# Symlink folders -for folders in By_Date Charts; do - echo "... creating symlink for $BIRDSONGS_FOLDER/$folders" - rm -r "$HOME/BirdSongs/Extracted/${folders:?}" - sudo -u pi ln -fs "$BIRDSONGS_FOLDER"/"$folders" "$HOME/BirdSongs/Extracted/$folders" +# Symlink BirdSongs folders +for folder in By_Date Charts; do + echo "... creating symlink for $BIRDSONGS_FOLDER/$folder" + [ -d "$HOME/BirdSongs/Extracted/${folder:?}" ] && rm -r "$HOME/BirdSongs/Extracted/$folder" + sudo -u pi ln -fs "$BIRDSONGS_FOLDER/$folder" "$HOME/BirdSongs/Extracted/$folder" done -# Permissions for created files and folders -echo "... check permissions" +# Set permissions for newly created files and folders +echo "... checking and setting permissions" chmod -R 755 /config/* chmod 777 /config -# Permissions for Matplotlabdir +# Create Matplotlib configuration directory +echo "... setting up Matplotlabdir" +MPLCONFIGDIR="${MPLCONFIGDIR:-$HOME/.config/matplotlib}" mkdir -p "$MPLCONFIGDIR" chown pi:pi "$MPLCONFIGDIR" chmod 777 "$MPLCONFIGDIR"