Parcourir la source

Secondary script which tries to renew letsencrypt certs after failure

Bob Mottram il y a 9 ans
Parent
révision
70158b613b
1 fichiers modifiés avec 45 ajouts et 0 suppressions
  1. 45
    0
      src/freedombone

+ 45
- 0
src/freedombone Voir le fichier

@@ -1678,15 +1678,20 @@ function get_cjdns_password {
1678 1678
 # script to automatically renew any Let's Encrypt certificates
1679 1679
 function letsencrypt_renewals {
1680 1680
     renewals_script=/etc/cron.monthly/letsencrypt
1681
+    renewals_retry_script=/etc/cron.daily/letsencrypt
1681 1682
     renewal_failure_msg=$'The certificate for $LETSENCRYPT_DOMAIN could not be renewed'
1682 1683
     renewal_email_title=$'${PROJECT_NAME} Lets Encrypt certificate renewal'
1683 1684
 
1685
+    # the main script tries to renew once per month
1684 1686
     echo '#!/bin/bash' > $renewals_script
1685 1687
     echo '' >> $renewals_script
1686 1688
     echo "PROJECT_NAME='${PROJECT_NAME}'" >> $renewals_script
1687 1689
     echo 'COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt' >> $renewals_script
1688 1690
     echo '' >> $renewals_script
1689 1691
     echo 'if [ -d /etc/letsencrypt ]; then' >> $renewals_script
1692
+    echo '    if [ -f ~/letsencrypt_failed ]; then' >> $renewals_script
1693
+    echo '        rm ~/letsencrypt_failed' >> $renewals_script
1694
+    echo '    fi' >> $renewals_script
1690 1695
     echo -n '    ADMIN_USERNAME=$(cat $COMPLETION_FILE | grep "Admin user" | ' >> $renewals_script
1691 1696
     echo -n "awk -F ':' '{print " >> $renewals_script
1692 1697
     echo -n '$2' >> $renewals_script
@@ -1705,11 +1710,51 @@ function letsencrypt_renewals {
1705 1710
     echo -n "                cat ~/temp_renewletsencrypt.txt | mail -s \"${renewal_email_title}\" " >> $renewals_script
1706 1711
     echo '$ADMIN_EMAIL_ADDRESS' >> $renewals_script
1707 1712
     echo '               rm ~/temp_renewletsencrypt.txt' >> $renewals_script
1713
+    echo '               if [ ! -f ~/letsencrypt_failed ]; then' >> $renewals_script
1714
+    echo '                   touch ~/letsencrypt_failed' >> $renewals_script
1715
+    echo '               fi' >> $renewals_script
1708 1716
     echo '            fi' >> $renewals_script
1709 1717
     echo '        fi' >> $renewals_script
1710 1718
     echo '    done' >> $renewals_script
1711 1719
     echo 'fi' >> $renewals_script
1712 1720
     chmod +x $renewals_script
1721
+
1722
+    # a secondary script keeps trying to renew after a failure
1723
+    echo '#!/bin/bash' > $renewals_retry_script
1724
+    echo '' >> $renewals_retry_script
1725
+    echo "PROJECT_NAME='${PROJECT_NAME}'" >> $renewals_retry_script
1726
+    echo 'COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt' >> $renewals_retry_script
1727
+    echo '' >> $renewals_retry_script
1728
+    echo 'if [ -d /etc/letsencrypt ]; then' >> $renewals_retry_script
1729
+    echo '    if [ -f ~/letsencrypt_failed ]; then' >> $renewals_retry_script
1730
+    echo '        rm ~/letsencrypt_failed' >> $renewals_retry_script
1731
+    echo -n '        ADMIN_USERNAME=$(cat $COMPLETION_FILE | grep "Admin user" | ' >> $renewals_retry_script
1732
+    echo -n "awk -F ':' '{print " >> $renewals_retry_script
1733
+    echo -n '$2' >> $renewals_retry_script
1734
+    echo "}')" >> $renewals_retry_script
1735
+    echo '        ADMIN_EMAIL_ADDRESS=$ADMIN_USERNAME@$HOSTNAME' >> $renewals_retry_script
1736
+    echo '        for d in /etc/letsencrypt/live/*/ ; do' >> $renewals_retry_script
1737
+    echo -n '            LETSENCRYPT_DOMAIN=$(echo "$d" | ' >> $renewals_retry_script
1738
+    echo -n "awk -F '/' '{print " >> $renewals_retry_script
1739
+    echo -n '$5' >> $renewals_retry_script
1740
+    echo "}')" >> $renewals_retry_script
1741
+    echo '            if [ -f /etc/nginx/sites-available/$LETSENCRYPT_DOMAIN ]; then' >> $renewals_retry_script
1742
+    echo '                ${PROJECT_NAME}-renew-cert -h $LETSENCRYPT_DOMAIN -p letsencrypt' >> $renewals_retry_script
1743
+    echo '                if [ ! "$?" = "0" ]; then' >> $renewals_retry_script
1744
+    echo "                   echo \"${renewal_failure_msg}\n\n\" > ~/temp_renewletsencrypt.txt" >> $renewals_retry_script
1745
+    echo '                   ${PROJECT_NAME}-renew-cert -h $LETSENCRYPT_DOMAIN -p letsencrypt >> ~/temp_renewletsencrypt.txt' >> $renewals_retry_script
1746
+    echo -n "                    cat ~/temp_renewletsencrypt.txt | mail -s \"${renewal_email_title}\" " >> $renewals_retry_script
1747
+    echo '$ADMIN_EMAIL_ADDRESS' >> $renewals_retry_script
1748
+    echo '                   rm ~/temp_renewletsencrypt.txt' >> $renewals_retry_script
1749
+    echo '                   if [ ! -f ~/letsencrypt_failed ]; then' >> $renewals_retry_script
1750
+    echo '                       touch ~/letsencrypt_failed' >> $renewals_retry_script
1751
+    echo '                   fi' >> $renewals_retry_script
1752
+    echo '                fi' >> $renewals_retry_script
1753
+    echo '            fi' >> $renewals_retry_script
1754
+    echo '        done' >> $renewals_retry_script
1755
+    echo '    fi' >> $renewals_retry_script
1756
+    echo 'fi' >> $renewals_retry_script
1757
+    chmod +x $renewals_retry_script
1713 1758
 }
1714 1759
 
1715 1760
 function save_firewall_settings {