瀏覽代碼

Merge branch 'stretch' of https://github.com/bashrc/freedombone

Bob Mottram 7 年之前
父節點
當前提交
7a882b93e7

二進制
img/logo_riot.png 查看文件


+ 11
- 0
src/freedombone-adduser 查看文件

@@ -156,6 +156,7 @@ if [ ! -f $MY_GPG_PUBLIC_KEY ]; then
156 156
     userdel -r $ADD_USERNAME
157 157
     exit 7
158 158
 fi
159
+
159 160
 gpg_agent_setup $ADD_USERNAME
160 161
 
161 162
 # add a monkeysphere subkey
@@ -239,8 +240,18 @@ if ! grep -q 'controluser' /home/$ADD_USERNAME/.bashrc; then
239 240
     echo 'controluser' >> /home/$ADD_USERNAME/.bashrc
240 241
 fi
241 242
 
243
+# fix some gpg strangeness when searching for keys
244
+printf '%%Assuan%%\nsocket=/dev/shm/S.dirmngr\n' > /home/$ADD_USERNAME/.gnupg/S.dirmngr
245
+if [ -d /home/$ADD_USERNAME/.gnupg/crls.d ]; then
246
+    chmod +x /home/$ADD_USERNAME/.gnupg/crls.d
247
+fi
248
+
242 249
 ${PROJECT_NAME}-pass -u $ADD_USERNAME -a login -p "$NEW_USER_PASSWORD"
250
+
251
+gpg_agent_enable $ADD_USERNAME
252
+
243 253
 clear
254
+
244 255
 echo $"New user $ADD_USERNAME was created"
245 256
 echo $"Their login password is $NEW_USER_PASSWORD"
246 257
 echo ''

+ 42
- 1
src/freedombone-app-pleroma 查看文件

@@ -140,8 +140,46 @@ function expire_pleroma_posts {
140 140
 
141 141
     pleroma_expire_script=/etc/cron.daily/pleroma-expire
142 142
     echo '#!/bin/bash' > $pleroma_expire_script
143
+    echo 'cd /etc/postgresql' >> $pleroma_expire_script
144
+    echo 'if [ -d /etc/pleroma/tempfiles ]; then' >> $pleroma_expire_script
145
+    echo '    rm -rf /etc/pleroma/tempfiles' >> $pleroma_expire_script
146
+    echo 'fi' >> $pleroma_expire_script
147
+    echo '' >> $pleroma_expire_script
148
+    echo '# make directory to temporarily store local avatars' >> $pleroma_expire_script
149
+    echo 'mkdir /etc/pleroma/tempfiles' >> $pleroma_expire_script
150
+    echo '' >> $pleroma_expire_script
151
+    echo '# get the local avatar files' >> $pleroma_expire_script
152
+    echo "avatars=\$(sudo -u postgres psql -d pleroma -c \"select avatar->>'url' from users where avatar->>'url' like '%${domain_name}%'\")" >> $pleroma_expire_script
153
+    echo '' >> $pleroma_expire_script
154
+    echo '# copy the avatar files to a temporary directory' >> $pleroma_expire_script
155
+    echo 'arr=( $avatars )' >> $pleroma_expire_script
156
+    echo 'for i in "${arr[@]}"; do' >> $pleroma_expire_script
157
+    echo '    if [[ "$i" == *'/media/'* ]]; then' >> $pleroma_expire_script
158
+    echo "        imagefile=/etc/pleroma/uploads/\$(echo \$i | sed 's|\"||g' | sed 's|,||g' | awk -F '/media/' '{print \$2}');" >> $pleroma_expire_script
159
+    echo '        if [ -f $imagefile ]; then' >> $pleroma_expire_script
160
+    echo "            imagedir=/etc/pleroma/uploads/\$(echo \$i | sed 's|\"||g' | sed 's|,||g' | awk -F '/media/' '{print \$2}' | awk -F '/' '{print \$1}')" >> $pleroma_expire_script
161
+    echo '            nowdate=$(date +%s)' >> $pleroma_expire_script
162
+    echo '            sinceepoch=$(date +%s -r $imagefile)' >> $pleroma_expire_script
163
+    echo '            daysold=$((($nowdate - $sinceepoch) / 86400))' >> $pleroma_expire_script
164
+    echo "            if [ \$daysold -ge ${expire_days_files} ]; then" >> $pleroma_expire_script
165
+    echo '                if [ ! -d /etc/pleroma/tempfiles/$imagedir ]; then' >> $pleroma_expire_script
166
+    echo '                    mkdir /etc/pleroma/tempfiles/$imagedir' >> $pleroma_expire_script
167
+    echo '                fi' >> $pleroma_expire_script
168
+    echo '                cp -rp $imagefile /etc/pleroma/tempfiles/$imagedir' >> $pleroma_expire_script
169
+    echo '            fi' >> $pleroma_expire_script
170
+    echo '        fi' >> $pleroma_expire_script
171
+    echo '    fi' >> $pleroma_expire_script
172
+    echo 'done' >> $pleroma_expire_script
173
+    echo '' >> $pleroma_expire_script
174
+    echo '# delete old files' >> $pleroma_expire_script
143 175
     echo "find /etc/pleroma/uploads/* -mtime +${expire_days_files} -exec rm -rf {} +" >> $pleroma_expire_script
144
-    echo "$pleroma_expire_posts_script 2> /dev/null" >> $pleroma_expire_script
176
+    echo '' >> $pleroma_expire_script
177
+    echo '# move avatar files back to uploads' >> $pleroma_expire_script
178
+    echo 'chown -R pleroma:pleroma /etc/pleroma/tempfiles' >> $pleroma_expire_script
179
+    echo 'mv /etc/pleroma/tempfiles/* /etc/pleroma/uploads' >> $pleroma_expire_script
180
+    echo 'rm -rf /etc/pleroma/tempfiles' >> $pleroma_expire_script
181
+    echo '' >> $pleroma_expire_script
182
+    echo '/usr/bin/pleroma-expire-posts 2> /dev/null' >> $pleroma_expire_script
145 183
     chmod +x $pleroma_expire_script
146 184
 
147 185
     # remove any old cron job
@@ -624,6 +662,9 @@ function upgrade_pleroma {
624 662
     read_config_param PLEROMA_DOMAIN_NAME
625 663
     read_config_param PLEROMA_EXPIRE_MONTHS
626 664
 
665
+    if ! grep -q "/media/" /etc/cron.daily/pleroma-expire; then
666
+        rm $pleroma_expire_posts_script
667
+    fi
627 668
     if [ ! -f $pleroma_expire_posts_script ]; then
628 669
         expire_pleroma_posts $PLEROMA_DOMAIN_NAME $PLEROMA_EXPIRE_MONTHS
629 670
     fi

+ 0
- 9
src/freedombone-app-riot 查看文件

@@ -155,15 +155,6 @@ function riot_download {
155 155
     fi
156 156
     cp -r $INSTALL_DIR/${RIOT_FILENAME}/* /var/www/$RIOT_DOMAIN_NAME/htdocs
157 157
 
158
-    # customize the login image
159
-    if [ -f ~/freedombone/img/logo_riot.png ]; then
160
-        cp ~/freedombone/img/logo_riot.png /var/www/$RIOT_DOMAIN_NAME/htdocs/img/logo.png
161
-    else
162
-        if [ -f /home/$MY_USERNAME/freedombone/img/logo_riot.png ]; then
163
-            cp /home/$MY_USERNAME/freedombone/img/logo_riot.png /var/www/$RIOT_DOMAIN_NAME/htdocs/img/logo.png
164
-        fi
165
-    fi
166
-
167 158
     chown -R www-data:www-data /var/www/$RIOT_DOMAIN_NAME/htdocs
168 159
 }
169 160
 

+ 14
- 1
src/freedombone-base-email 查看文件

@@ -1365,7 +1365,8 @@ function configure_gpg {
1365 1365
     if [[ $(is_completed $FUNCNAME) == "1" ]]; then
1366 1366
         return
1367 1367
     fi
1368
-    apt-get -yq install gnupg
1368
+    apt-get -yq install gnupg dirmngr
1369
+    printf '%%Assuan%%\nsocket=/dev/shm/S.dirmngr\n' > ~/.gnupg/S.dirmngr
1369 1370
 
1370 1371
     check_email_address_exists
1371 1372
 
@@ -1390,6 +1391,10 @@ function configure_gpg {
1390 1391
                 chown -R $MY_USERNAME:$MY_USERNAME $gpg_dir
1391 1392
                 chmod 700 $gpg_dir
1392 1393
                 chmod 600 $gpg_dir/*
1394
+                printf '%%Assuan%%\nsocket=/dev/shm/S.dirmngr\n' > /home/$MY_USERNAME/.gnupg/S.dirmngr
1395
+                if [ -d /home/$MY_USERNAME/.gnupg/crls.d ]; then
1396
+                    chmod +x /home/$MY_USERNAME/.gnupg/crls.d
1397
+                fi
1393 1398
                 mark_completed $FUNCNAME
1394 1399
                 return
1395 1400
             fi
@@ -1418,6 +1423,10 @@ function configure_gpg {
1418 1423
     chown -R $MY_USERNAME:$MY_USERNAME $gpg_dir
1419 1424
     chmod 700 $gpg_dir
1420 1425
     chmod 600 $gpg_dir/*
1426
+    printf '%%Assuan%%\nsocket=/dev/shm/S.dirmngr\n' > $gpg_dir/S.dirmngr
1427
+    if [ -d $gpg_dir/crls.d ]; then
1428
+        chmod +x $gpg_dir/crls.d
1429
+    fi
1421 1430
 
1422 1431
     if [[ $MY_GPG_PUBLIC_KEY && $MY_GPG_PRIVATE_KEY ]]; then
1423 1432
         echo $'Importing GPG keys from file'
@@ -1466,6 +1475,10 @@ function configure_gpg {
1466 1475
         cp -r /home/$MY_USERNAME/.gnupg /root/
1467 1476
         chmod 700 /root/.gnupg
1468 1477
         chmod 600 /root/.gnupg/*
1478
+        printf '%%Assuan%%\nsocket=/dev/shm/S.dirmngr\n' > /root/.gnupg/S.dirmngr
1479
+        if [ -d /root/.gnupg/crls.d ]; then
1480
+            chmod +x /root/.gnupg/crls.d
1481
+        fi
1469 1482
     fi
1470 1483
 
1471 1484
     mark_completed $FUNCNAME

+ 1
- 0
src/freedombone-controlpanel-user 查看文件

@@ -923,6 +923,7 @@ function menu_top_level {
923 923
 }
924 924
 
925 925
 sign_keys
926
+gpg_agent_enable $USER
926 927
 menu_top_level
927 928
 clear
928 929
 . ~/.bashrc

+ 650
- 0
src/freedombone-template 查看文件

@@ -0,0 +1,650 @@
1
+#!/bin/bash
2
+#
3
+# .---.                  .              .
4
+# |                      |              |
5
+# |--- .--. .-.  .-.  .-.|  .-. .--.--. |.-.  .-. .--.  .-.
6
+# |    |   (.-' (.-' (   | (   )|  |  | |   )(   )|  | (.-'
7
+# '    '     --'  --'  -' -  -' '  '   -' -'   -' '   -  --'
8
+#
9
+#                    Freedom in the Cloud
10
+#
11
+# Command to create app templates
12
+#
13
+# License
14
+# =======
15
+#
16
+# Copyright (C) 2018 Bob Mottram <bob@freedombone.net>
17
+#
18
+# This program is free software: you can redistribute it and/or modify
19
+# it under the terms of the GNU Affero General Public License as published by
20
+# the Free Software Foundation, either version 3 of the License, or
21
+# (at your option) any later version.
22
+#
23
+# This program is distributed in the hope that it will be useful,
24
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
25
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26
+# GNU Affero General Public License for more details.
27
+#
28
+# You should have received a copy of the GNU Affero General Public License
29
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
30
+
31
+PROJECT_NAME='freedombone'
32
+
33
+app_name='noapp'
34
+app_name_lower="$(tr '[:upper:]' '[:lower:]' <<< ${app_name:0:1})${app_name:1}"
35
+app_name=$app_name_lower
36
+app_name_upper="$(tr '[:lower:]' '[:upper:]' <<< ${app_name:0:1})${app_name:1}"
37
+app_repo="TODO"
38
+app_repo_commit='TODO'
39
+app_php=
40
+app_node=
41
+your_name=''
42
+your_email=''
43
+SHOW_ON_ABOUT=1
44
+database_type=''
45
+
46
+function show_help {
47
+    echo ''
48
+    echo $"${PROJECT_NAME}-template --app [myappname] --php yes -n \"My Name\" -e \"myname@mydomain\" > src/${PROJECT_NAME}-app-myappname"
49
+    echo ''
50
+    echo $'Creates a new app script which can then be filled in'
51
+    echo ''
52
+    echo ''
53
+    echo $'  -h --help                            Show help'
54
+    echo $'  -a --app [name]                      Name of the application'
55
+    echo $'  -n --name [name]                     Your name'
56
+    echo $'  -e --email [address]                 Your email address'
57
+    echo $'  -r --repo [url]                      Git repo url for the app'
58
+    echo $'  -c --commit [hash]                   Git commit'
59
+    echo $'     --node [yes|no]                   Is this a nodejs app?'
60
+    echo $'  -p --php [yes|no]                    Is this a PHP app?'
61
+    echo $'  -d --database [mariadb|postgresql]   Type of database'
62
+    echo ''
63
+    exit 0
64
+}
65
+
66
+while [[ $# > 1 ]]
67
+do
68
+    key="$1"
69
+
70
+    case $key in
71
+        -h|--help)
72
+            show_help
73
+            ;;
74
+        -a|--app|--appname)
75
+            shift
76
+            app_name="$1"
77
+            app_name_lower="$(tr '[:upper:]' '[:lower:]' <<< ${app_name:0:1})${app_name:1}"
78
+            app_name=$app_name_lower
79
+            app_name_upper="$(tr '[:lower:]' '[:upper:]' <<< ${app_name:0:1})${app_name:1}"
80
+            ;;
81
+        -r|--repo)
82
+            shift
83
+            app_repo="$1"
84
+            ;;
85
+        -c|--commit)
86
+            shift
87
+            app_repo_commit="$1"
88
+            ;;
89
+        -n|--name)
90
+            shift
91
+            your_name="$1"
92
+            ;;
93
+        -e|--email)
94
+            shift
95
+            your_email="$1"
96
+            ;;
97
+        -d|--database)
98
+            shift
99
+            database_type="$1"
100
+            ;;
101
+        -p|--php)
102
+            shift
103
+            app_php="$1"
104
+            ;;
105
+        --node|--nodejs)
106
+            shift
107
+            app_node="$1"
108
+            ;;
109
+        *)
110
+            # unknown option
111
+            ;;
112
+    esac
113
+    shift
114
+done
115
+
116
+if [[ "$app_name" == 'noapp' ]]; then
117
+    show_help
118
+    exit 1
119
+fi
120
+
121
+if [[ "$app_name" == *' '* ]]; then
122
+    echo $'app name should not contain any spaces'
123
+    exit 2
124
+fi
125
+
126
+if [[ "$app_name" == *'_'* ]]; then
127
+    echo $'app name should not contain any underscore characters'
128
+    exit 3
129
+fi
130
+
131
+if [[ "$app_name" == *'-'* ]]; then
132
+    echo $'app name should not contain any hyphen characters'
133
+    exit 4
134
+fi
135
+
136
+if [ ${#app_name} -lt 3 ]; then
137
+    echo $'app name should be at least three characters'
138
+    exit 5
139
+fi
140
+
141
+if [ ${#your_name} -lt 2 ]; then
142
+    echo $'Specify your name with --name'
143
+    exit 6
144
+fi
145
+
146
+if [ ${#your_email} -lt 3 ]; then
147
+    echo $'Specify your email address with --email'
148
+    exit 7
149
+fi
150
+
151
+if [[ "$your_email" != *'@'* ]]; then
152
+    echo $"That doesn't look like an email address"
153
+    exit 8
154
+fi
155
+
156
+echo '#!/bin/bash'
157
+echo '#'
158
+echo '# .---.                  .              .'
159
+echo '# |                      |              |'
160
+echo '# |--- .--. .-.  .-.  .-.|  .-. .--.--. |.-.  .-. .--.  .-.'
161
+echo "# |    |   (.-' (.-' (   | (   )|  |  | |   )(   )|  | (.-'"
162
+echo "# '    '     --'  --'  -' -  -' '  '   -' -'   -' '   -  --'"
163
+echo '#'
164
+echo '#                    Freedom in the Cloud'
165
+echo '#'
166
+echo '# License'
167
+echo '# ======='
168
+echo '#'
169
+echo "# Copyright (C) $(date +%Y) ${your_name} <${your_email}>"
170
+echo '#'
171
+echo '# This program is free software: you can redistribute it and/or modify'
172
+echo '# it under the terms of the GNU Affero General Public License as published by'
173
+echo '# the Free Software Foundation, either version 3 of the License, or'
174
+echo '# (at your option) any later version.'
175
+echo '#'
176
+echo '# This program is distributed in the hope that it will be useful,'
177
+echo '# but WITHOUT ANY WARRANTY; without even the implied warranty of'
178
+echo '# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the'
179
+echo '# GNU Affero General Public License for more details.'
180
+echo '#'
181
+echo '# You should have received a copy of the GNU Affero General Public License'
182
+echo '# along with this program.  If not, see <http://www.gnu.org/licenses/>.'
183
+echo ''
184
+echo "VARIANTS='full full-vim'"
185
+echo ''
186
+echo 'IN_DEFAULT_INSTALL=0'
187
+echo "SHOW_ON_ABOUT=${SHOW_ON_ABOUT}"
188
+echo ''
189
+echo "${app_name_upper}_DOMAIN_NAME="
190
+echo "${app_name_upper}_CODE="
191
+echo "${app_name_upper}_ONION_PORT=$(( ( RANDOM % 1000 )  + 9010 ))"
192
+echo "${app_name_upper}_REPO=\"${app_repo}\""
193
+echo "${app_name_upper}_COMMIT='${app_repo_commit}'"
194
+echo ''
195
+echo "${app_name}=(ONION_ONLY"
196
+echo "             ${app_name_upper}_DOMAIN_NAME"
197
+echo "             ${app_name_upper}_CODE"
198
+echo '             DDNS_PROVIDER'
199
+echo "             MY_USERNAME)"
200
+echo ''
201
+echo "function logging_on_${app_name} {"
202
+echo "    echo -n ''"
203
+echo "}"
204
+echo ''
205
+echo "function logging_off_${app_name} {"
206
+echo "    echo -n ''"
207
+echo '}'
208
+echo ''
209
+echo "function remove_user_${app_name} {"
210
+echo '    remove_username="$1"'
211
+echo ''
212
+echo "    \${PROJECT_NAME}-pass -u \$remove_username --rmapp ${app_name}"
213
+echo '}'
214
+echo ''
215
+echo "function add_user_${app_name} {"
216
+echo '    new_username="$1"'
217
+echo '    new_user_password="$2"'
218
+echo ''
219
+echo "    \${PROJECT_NAME}-pass -u \$new_username -a ${app_name} -p \"\$new_user_password\""
220
+echo "    echo '0'"
221
+echo '}'
222
+echo ''
223
+echo "function install_interactive_${app_name} {"
224
+echo '    if [ ! $ONION_ONLY ]; then'
225
+echo "        ONION_ONLY='no'"
226
+echo '    fi'
227
+echo ''
228
+echo '    if [[ $ONION_ONLY != "no" ]]; then'
229
+echo "        ${app_name_upper}_DOMAIN_NAME='${app_name}.local'"
230
+echo "        write_config_param \"${app_name_upper}_DOMAIN_NAME\" \"\$${app_name_upper}_DOMAIN_NAME\""
231
+echo '    else'
232
+echo "        interactive_site_details \"${app_name}\" \"${app_name_upper}_DOMAIN_NAME\" \"${app_name}_CODE\""
233
+echo '    fi'
234
+echo '    APP_INSTALLED=1'
235
+echo '}'
236
+echo ''
237
+echo "function change_password_${app_name} {"
238
+echo '    curr_username="$1"'
239
+echo '    new_user_password="$2"'
240
+echo ''
241
+echo "    read_config_param '${app_name_upper}_DOMAIN_NAME'"
242
+echo ''
243
+echo "    \${PROJECT_NAME}-pass -u \"\$curr_username\" -a ${app_name} -p \"\$new_user_password\""
244
+echo '}'
245
+
246
+if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" || "$database_type" == "postgres"* ]]; then
247
+    echo ''
248
+    echo "function ${app_name}_create_database {"
249
+    echo '    if [ -f $IMAGE_PASSWORD_FILE ]; then'
250
+    echo "        ${app_name_upper}_ADMIN_PASSWORD=\"\$(printf `cat $IMAGE_PASSWORD_FILE`)\""
251
+    echo '    else'
252
+    echo "        if [ ! \$${app_name_upper}_ADMIN_PASSWORD ]; then"
253
+    echo "            ${app_name_upper}_ADMIN_PASSWORD=\"\$(create_password \${MINIMUM_PASSWORD_LENGTH})\""
254
+    echo '        fi'
255
+    echo '    fi'
256
+    echo "    if [ ! \$${app_name_upper}_ADMIN_PASSWORD ]; then"
257
+    echo '        return'
258
+    echo '    fi'
259
+    echo ''
260
+    if [[ "$database_type" != "postgres"* ]]; then
261
+        echo "    create_database ${app_name} \"\$${app_name_upper}_ADMIN_PASSWORD\" \$MY_USERNAME"
262
+    else
263
+        echo '    systemctl restart postgresql'
264
+        echo "    run_system_query_postgresql \"CREATE USER peertube WITH PASSWORD '\$${app_name_upper}_ADMIN_PASSWORD';\""
265
+        echo "    run_system_query_postgresql \"CREATE DATABASE ${app_name} OWNER ${app_name};\""
266
+        echo "    run_system_query_postgresql \"GRANT ALL PRIVILEGES ON DATABASE ${app_name} to ${app_name};\""
267
+        echo "    run_system_query_postgresql \"set statement_timeout to 40000;\""
268
+    fi
269
+    echo '}'
270
+fi
271
+echo ''
272
+echo "function reconfigure_${app_name} {"
273
+echo '    # This is used if you need to switch identity. Dump old keys and generate new ones'
274
+echo "    echo -n ''"
275
+echo '}'
276
+echo ''
277
+echo "function configure_interactive_${app_name} {"
278
+echo '    while true'
279
+echo '    do'
280
+echo '        data=$(tempfile 2>/dev/null)'
281
+echo '        trap "rm -f $data" 0 1 2 5 15'
282
+echo "        dialog --backtitle \$\"Freedombone Control Panel\" \\"
283
+echo "               --title \$\"${app_name}\" \\"
284
+echo "               --radiolist \$\"Choose an operation:\" 16 70 3 \\"
285
+echo '               1 $"Option 1" off \'
286
+echo '               2 $"Option 2" off \'
287
+echo '               3 $"Exit" on 2> $data'
288
+echo '        sel=$?'
289
+echo '        case $sel in'
290
+echo '            1) return;;'
291
+echo '            255) return;;'
292
+echo '        esac'
293
+echo '        case $(cat $data) in'
294
+echo '            1) # call some function for option 1'
295
+echo '               ;;'
296
+echo '            2) # call some function for option 2'
297
+echo '               ;;'
298
+echo '            3) break;;'
299
+echo '        esac'
300
+echo '    done'
301
+echo '}'
302
+echo ''
303
+echo "function upgrade_${app_name} {"
304
+echo "    CURR_${app_name_upper}_COMMIT=\$(get_completion_param \"${app_name} commit\")"
305
+echo "    if [[ \"\$CURR_${app_name_upper}_COMMIT\" == \"\$${app_name_upper}_COMMIT\" ]]; then"
306
+echo '        return'
307
+echo '    fi'
308
+echo ''
309
+echo "    if grep -q \"${app_name} domain\" \$COMPLETION_FILE; then"
310
+echo "        ${app_name_upper}_DOMAIN_NAME=\$(get_completion_param \"${app_name} domain\")"
311
+echo '    fi'
312
+echo ''
313
+echo '    # update to the next commit'
314
+echo "    set_repo_commit /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs \"${app_name} commit\" \"\$${app_name_upper}_COMMIT\" \$${app_name_upper}_REPO"
315
+echo "    chown -R www-data:www-data /var/www/\${${app_name_upper}_DOMAIN_NAME}/htdocs"
316
+echo '}'
317
+echo ''
318
+echo "function backup_local_${app_name} {"
319
+echo "    ${app_name_upper}_DOMAIN_NAME='${app_name}'"
320
+echo "    if grep -q \"${app_name} domain\" \$COMPLETION_FILE; then"
321
+echo "        ${app_name_upper}_DOMAIN_NAME=\$(get_completion_param \"${app_name} domain\")"
322
+echo '    fi'
323
+echo ''
324
+echo "    source_directory=/var/www/\${${app_name_upper}_DOMAIN_NAME}/htdocs"
325
+echo ''
326
+echo "    suspend_site \${${app_name_upper}_DOMAIN_NAME}"
327
+echo ''
328
+echo "    dest_directory=${app_name}"
329
+echo '    backup_directory_to_usb $source_directory $dest_directory'
330
+echo ''
331
+if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" ]]; then
332
+    echo "    backup_database_to_usb ${app_name}"
333
+    echo ''
334
+fi
335
+if [[ "$database_type" == "postgres"* ]]; then
336
+    echo '    USE_POSTGRESQL=1'
337
+    echo "    backup_database_to_usb ${app_name}"
338
+    echo ''
339
+fi
340
+echo '    restart_site'
341
+echo '}'
342
+echo ''
343
+echo "function restore_local_${app_name} {"
344
+echo "    if ! grep -q \"${app_name} domain\" \$COMPLETION_FILE; then"
345
+echo '        return'
346
+echo '    fi'
347
+echo "    ${app_name_upper}_DOMAIN_NAME=\$(get_completion_param \"${app_name} domain\")"
348
+echo "    if [ \$${app_name_upper}_DOMAIN_NAME ]; then"
349
+echo "        temp_restore_dir=/root/temp${app_name}"
350
+echo "        ${app_name}_dir=/var/www/\${${app_name_upper}_DOMAIN_NAME}/htdocs"
351
+echo ''
352
+if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" ]]; then
353
+    echo "        ${app_name}_create_database"
354
+    echo ''
355
+    echo "        restore_database ${app_name}"
356
+    echo '        if [ -d $temp_restore_dir ]; then'
357
+    echo '            rm -rf $temp_restore_dir'
358
+    echo '        fi'
359
+    echo ''
360
+fi
361
+if [[ "$database_type" == "postgres"* ]]; then
362
+    echo "        ${app_name}_create_database"
363
+    echo ''
364
+    echo '        USE_POSTGRESQL=1'
365
+    echo "        restore_database ${app_name}"
366
+    echo '        if [ -d $temp_restore_dir ]; then'
367
+    echo '            rm -rf $temp_restore_dir'
368
+    echo '        fi'
369
+    echo ''
370
+fi
371
+echo "        restore_directory_from_usb \$temp_restore_dir ${app_name}"
372
+echo '        if [ -d $temp_restore_dir ]; then'
373
+echo "            if [ -d cp \$temp_restore_dir\$${app_name}_dir ]; then"
374
+echo "                cp -rp \$temp_restore_dir\$${app_name}_dir/* \$${app_name}_dir/"
375
+echo '            else'
376
+echo "                if [ ! -d \$${app_name}_dir ]; then"
377
+echo "                    mkdir \$${app_name}_dir"
378
+echo '                fi'
379
+echo "                cp -rp \$temp_restore_dir/* \$${app_name}_dir/"
380
+echo '            fi'
381
+echo "            chown -R www-data:www-data \$${app_name}_dir"
382
+echo '            rm -rf $temp_restore_dir'
383
+echo '        fi'
384
+echo ''
385
+echo '    fi'
386
+echo '}'
387
+echo ''
388
+echo "function backup_remote_${app_name} {"
389
+echo "    ${app_name_upper}_DOMAIN_NAME='${app_name}'"
390
+echo "    if grep -q \"${app_name} domain\" \$COMPLETION_FILE; then"
391
+echo "        ${app_name_upper}_DOMAIN_NAME=\$(get_completion_param \"${app_name} domain\")"
392
+echo '    fi'
393
+echo ''
394
+echo "    source_directory=/var/www/\${${app_name_upper}_DOMAIN_NAME}/htdocs"
395
+echo ''
396
+echo "    suspend_site \${${app_name_upper}_DOMAIN_NAME}"
397
+echo ''
398
+echo "    dest_directory=${app_name}"
399
+echo '    backup_directory_to_friend $source_directory $dest_directory'
400
+echo ''
401
+if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" ]]; then
402
+    echo "    backup_database_to_friend ${app_name}"
403
+fi
404
+if [[ "$database_type" == "postgres"* ]]; then
405
+    echo '    USE_POSTGRESQL=1'
406
+    echo "    backup_database_to_friend ${app_name}"
407
+    echo ''
408
+fi
409
+echo ''
410
+echo '    restart_site'
411
+echo '}'
412
+echo ''
413
+echo "function restore_remote_${app_name} {"
414
+echo "    if ! grep -q \"${app_name} domain\" \$COMPLETION_FILE; then"
415
+echo '        return'
416
+echo '    fi'
417
+echo "    ${app_name_upper}_DOMAIN_NAME=\$(get_completion_param \"${app_name} domain\")"
418
+echo "    if [ \$${app_name_upper}_DOMAIN_NAME ]; then"
419
+echo "        temp_restore_dir=/root/temp${app_name}"
420
+echo "        ${app_name}_dir=/var/www/\${${app_name_upper}_DOMAIN_NAME}/htdocs"
421
+echo ''
422
+if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" ]]; then
423
+    echo "        ${app_name}_create_database"
424
+    echo ''
425
+    echo "        restore_database_from_friend ${app_name}"
426
+    echo '        if [ -d $temp_restore_dir ]; then'
427
+    echo '            rm -rf $temp_restore_dir'
428
+    echo '        fi'
429
+    echo ''
430
+fi
431
+if [[ "$database_type" == "postgres"* ]]; then
432
+    echo "        ${app_name}_create_database"
433
+    echo ''
434
+    echo '        USE_POSTGRESQL=1'
435
+    echo "        restore_database_from_friend ${app_name}"
436
+    echo '        if [ -d $temp_restore_dir ]; then'
437
+    echo '            rm -rf $temp_restore_dir'
438
+    echo '        fi'
439
+    echo ''
440
+fi
441
+echo "        restore_directory_from_friend \$temp_restore_dir ${app_name}"
442
+echo '        if [ -d $temp_restore_dir ]; then'
443
+echo "            if [ -d cp \$temp_restore_dir\$${app_name}_dir ]; then"
444
+echo "                cp -rp \$temp_restore_dir\$${app_name}_dir/* \$${app_name}_dir/"
445
+echo '            else'
446
+echo "                if [ ! -d \$${app_name}_dir ]; then"
447
+echo "                    mkdir \$${app_name}_dir"
448
+echo '                fi'
449
+echo "                cp -rp \$temp_restore_dir/* \$${app_name}_dir/"
450
+echo '            fi'
451
+echo "            chown -R www-data:www-data \$${app_name}_dir"
452
+echo '            rm -rf $temp_restore_dir'
453
+echo '        fi'
454
+echo ''
455
+echo '    fi'
456
+echo '}'
457
+echo ''
458
+echo "function remove_${app_name} {"
459
+if [[ "$app_node" == 'yes' ]]; then
460
+    echo "    remove_nodejs ${app_name}"
461
+    echo ''
462
+fi
463
+echo "    nginx_dissite \$${app_name_upper}_DOMAIN_NAME"
464
+echo "    remove_certs \$${app_name_upper}_DOMAIN_NAME"
465
+echo ''
466
+echo "    if [ -d /var/www/\$${app_name_upper}_DOMAIN_NAME ]; then"
467
+echo "        rm -rf /var/www/\$${app_name_upper}_DOMAIN_NAME"
468
+echo '    fi'
469
+echo "    if [ -f /etc/nginx/sites-available/\$${app_name_upper}_DOMAIN_NAME ]; then"
470
+echo "        rm /etc/nginx/sites-available/\$${app_name_upper}_DOMAIN_NAME"
471
+echo '    fi'
472
+if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" ]]; then
473
+    echo "    drop_database ${app_name}"
474
+fi
475
+if [[ "$database_type" == "postgres"* ]]; then
476
+    echo "    drop_database_postgresql ${app_name}"
477
+fi
478
+echo "    remove_onion_service ${app_name} \${${app_name_upper}_ONION_PORT}"
479
+echo "    if grep -q \"${app_name}\" /etc/crontab; then"
480
+echo "        sed -i \"/${app_name}/d\" /etc/crontab"
481
+echo '    fi'
482
+echo "    remove_app ${app_name}"
483
+echo "    remove_completion_param install_${app_name}"
484
+echo "    sed -i '/${app_name}/d' \$COMPLETION_FILE"
485
+echo ''
486
+echo "    if grep -q '${app_name}-firewall' /etc/crontab; then"
487
+echo "        sed -i '/${app_name}-firewall/d' /etc/crontab"
488
+echo '    fi'
489
+echo ''
490
+echo "    remove_ddns_domain \$${app_name_upper}_DOMAIN_NAME"
491
+echo '}'
492
+echo ''
493
+echo "function install_${app_name} {"
494
+if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" ]]; then
495
+    echo '    install_mariadb'
496
+    echo ''
497
+    echo '    get_mariadb_password'
498
+    echo ''
499
+fi
500
+if [[ "$database_type" == "postgres"* ]]; then
501
+    echo '    install_postgresql'
502
+    echo ''
503
+fi
504
+if [[ "$app_node" == 'yes' ]]; then
505
+    echo "install_nodejs ${app_name}"
506
+fi
507
+if [[ "$app_php" == 'yes' ]]; then
508
+    echo '    apt-get -yq install php-gettext php-curl php-gd php-mysql git curl'
509
+    echo '    apt-get -yq install memcached php-memcached php-intl exiftool libfcgi0ldbl'
510
+    echo ''
511
+fi
512
+echo "    if [ ! -d /var/www/\$${app_name_upper}_DOMAIN_NAME ]; then"
513
+echo "        mkdir /var/www/\$${app_name_upper}_DOMAIN_NAME"
514
+echo '    fi'
515
+echo "    if [ ! -d /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs ]; then"
516
+echo "        if [ -d /repos/${app_name} ]; then"
517
+echo "            mkdir /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs"
518
+echo "            cp -r -p /repos/${app_name}/. /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs"
519
+echo "            cd /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs"
520
+echo '            git pull'
521
+echo '        else'
522
+echo "            git_clone \$${app_name_upper}_REPO /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs"
523
+echo '        fi'
524
+echo ''
525
+echo "        if [ ! -d /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs ]; then"
526
+echo "            echo \$'Unable to clone ${app_name} repo'"
527
+echo '            exit 87525'
528
+echo '        fi'
529
+echo '    fi'
530
+echo ''
531
+echo "    cd /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs"
532
+echo "    git checkout \$${app_name_upper}_COMMIT -b \$${app_name_upper}_COMMIT"
533
+echo "    set_completion_param \"${app_name} commit\" \"\$${app_name_upper}_COMMIT\""
534
+echo ''
535
+echo "    chmod g+w /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs"
536
+echo "    chown -R www-data:www-data /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs"
537
+
538
+if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" ]]; then
539
+    echo ''
540
+    echo "    ${app_name}_create_database"
541
+fi
542
+echo ''
543
+echo "    add_ddns_domain \$${app_name_upper}_DOMAIN_NAME"
544
+echo ''
545
+echo "    ${app_name_upper}_ONION_HOSTNAME=\$(add_onion_service ${app_name} 80 \${${app_name_upper}_ONION_PORT})"
546
+echo ''
547
+echo "    ${app_name}_nginx_site=/etc/nginx/sites-available/\$${app_name_upper}_DOMAIN_NAME"
548
+echo '    if [[ $ONION_ONLY == "no" ]]; then'
549
+if [[ "$app_php" == 'yes' ]]; then
550
+    echo "        nginx_http_redirect \$${app_name_upper}_DOMAIN_NAME \"index index.php\""
551
+else
552
+    echo "        nginx_http_redirect \$${app_name_upper}_DOMAIN_NAME \"index index.html\""
553
+fi
554
+echo "        echo 'server {' >> \$${app_name}_nginx_site"
555
+echo "        echo '  listen 443 ssl;' >> \$${app_name}_nginx_site"
556
+echo "        echo '  listen [::]:443 ssl;' >> \$${app_name}_nginx_site"
557
+echo "        echo \"  server_name \$${app_name_upper}_DOMAIN_NAME;\" >> \$${app_name}_nginx_site"
558
+echo "        echo '' >> \$${app_name}_nginx_site"
559
+echo "        nginx_compress \$${app_name_upper}_DOMAIN_NAME"
560
+echo "        echo '' >> \$${app_name}_nginx_site"
561
+echo "        echo '  # Security' >> \$${app_name}_nginx_site"
562
+echo "        nginx_ssl \$${app_name_upper}_DOMAIN_NAME"
563
+echo ''
564
+echo "        nginx_disable_sniffing \$${app_name_upper}_DOMAIN_NAME"
565
+echo ''
566
+echo "        echo '  add_header Strict-Transport-Security max-age=15768000;' >> \$${app_name}_nginx_site"
567
+echo "        echo '' >> \$${app_name}_nginx_site"
568
+echo "        echo '  # Logs' >> \$${app_name}_nginx_site"
569
+echo "        echo '  access_log /dev/null;' >> \$${app_name}_nginx_site"
570
+echo "        echo '  error_log /dev/null;' >> \$${app_name}_nginx_site"
571
+echo "        echo '' >> \$${app_name}_nginx_site"
572
+echo "        echo '  # Root' >> \$${app_name}_nginx_site"
573
+echo "        echo \"  root /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs;\" >> \$${app_name}_nginx_site"
574
+echo "        echo '' >> \$${app_name}_nginx_site"
575
+if [[ "$app_php" == 'yes' ]]; then
576
+    echo "        echo '  index index.php;' >> \$${app_name}_nginx_site"
577
+    echo "        echo '  location ~ \.php {' >> \$${app_name}_nginx_site"
578
+    echo "        echo '    include snippets/fastcgi-php.conf;' >> \$${app_name}_nginx_site"
579
+    echo "        echo '    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;' >> \$${app_name}_nginx_site"
580
+    echo "        echo '    fastcgi_read_timeout 30;' >> \$${app_name}_nginx_site"
581
+    echo "        echo '  }' >> \$${app_name}_nginx_site"
582
+    echo "        echo '' >> \$${app_name}_nginx_site"
583
+else
584
+    echo "        echo '  index index.html;' >> \$${app_name}_nginx_site"
585
+fi
586
+echo "        echo '  # Location' >> \$${app_name}_nginx_site"
587
+echo "        echo '  location / {' >> \$${app_name}_nginx_site"
588
+echo "        nginx_limits \$${app_name_upper}_DOMAIN_NAME '15m'"
589
+echo "        echo '    try_files \$uri \$uri/ @${app_name};' >> \$${app_name}_nginx_site"
590
+echo "        echo '  }' >> \$${app_name}_nginx_site"
591
+echo "        echo '}' >> \$${app_name}_nginx_site"
592
+echo '    else'
593
+echo "        echo -n '' > \$${app_name}_nginx_site"
594
+echo '    fi'
595
+echo "    echo 'server {' >> \$${app_name}_nginx_site"
596
+echo "    echo \"    listen 127.0.0.1:\$${app_name_upper}_ONION_PORT default_server;\" >> \$${app_name}_nginx_site"
597
+echo "    echo \"    server_name \$${app_name_upper}_ONION_HOSTNAME;\" >> \$${app_name}_nginx_site"
598
+echo "    echo '' >> \$${app_name}_nginx_site"
599
+echo "    nginx_compress \$${app_name_upper}_DOMAIN_NAME"
600
+echo "    echo '' >> \$${app_name}_nginx_site"
601
+echo "    nginx_disable_sniffing \$${app_name_upper}_DOMAIN_NAME"
602
+echo "    echo '' >> \$${app_name}_nginx_site"
603
+echo "    echo '  # Logs' >> \$${app_name}_nginx_site"
604
+echo "    echo '  access_log /dev/null;' >> \$${app_name}_nginx_site"
605
+echo "    echo '  error_log /dev/null;' >> \$${app_name}_nginx_site"
606
+echo "    echo '' >> \$${app_name}_nginx_site"
607
+echo "    echo '  # Root' >> \$${app_name}_nginx_site"
608
+echo "    echo \"  root /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs;\" >> \$${app_name}_nginx_site"
609
+echo "    echo '' >> \$${app_name}_nginx_site"
610
+if [[ "$app_php" == 'yes' ]]; then
611
+    echo "    echo '  index index.php;' >> \$${app_name}_nginx_site"
612
+    echo "    echo '  location ~ \.php {' >> \$${app_name}_nginx_site"
613
+    echo "    echo '    include snippets/fastcgi-php.conf;' >> \$${app_name}_nginx_site"
614
+    echo "    echo '    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;' >> \$${app_name}_nginx_site"
615
+    echo "    echo '    fastcgi_read_timeout 30;' >> \$${app_name}_nginx_site"
616
+    echo "    echo '  }' >> \$${app_name}_nginx_site"
617
+    echo "    echo '' >> \$${app_name}_nginx_site"
618
+else
619
+    echo "        echo '  index index.html;' >> \$${app_name}_nginx_site"
620
+fi
621
+echo "    echo '  # Location' >> \$${app_name}_nginx_site"
622
+echo "    echo '  location / {' >> \$${app_name}_nginx_site"
623
+echo "    nginx_limits \$${app_name_upper}_DOMAIN_NAME '15m'"
624
+echo "    echo '    try_files \$uri \$uri/ @${app_name};' >> \$${app_name}_nginx_site"
625
+echo "    echo '  }' >> \$${app_name}_nginx_site"
626
+echo "    echo '}' >> \$${app_name}_nginx_site"
627
+if [[ "$app_php" == 'yes' ]]; then
628
+    echo ''
629
+    echo '    configure_php'
630
+fi
631
+echo ''
632
+echo "    create_site_certificate \$${app_name_upper}_DOMAIN_NAME 'yes'"
633
+echo ''
634
+echo "    nginx_ensite \$${app_name_upper}_DOMAIN_NAME"
635
+echo ''
636
+if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" ]]; then
637
+    echo '    systemctl restart mariadb'
638
+fi
639
+if [[ "$app_php" == 'yes' ]]; then
640
+    echo '    systemctl restart php7.0-fpm'
641
+fi
642
+echo '    systemctl restart nginx'
643
+echo ''
644
+echo "    \${PROJECT_NAME}-pass -u \$MY_USERNAME -a ${app_name} -p \"\$${app_name_upper}_ADMIN_PASSWORD\""
645
+echo "    set_completion_param \"${app_name} domain\" \"\$${app_name_upper}_DOMAIN_NAME\""
646
+echo ''
647
+echo '    APP_INSTALLED=1'
648
+echo '}'
649
+echo ''
650
+echo '# NOTE: deliberately there is no "exit 0"'

+ 2
- 1
src/freedombone-utils-backup 查看文件

@@ -70,7 +70,8 @@ function configure_backup_key {
70 70
     if [[ $(is_completed $FUNCNAME) == "1" ]]; then
71 71
         return
72 72
     fi
73
-    apt-get -yq install gnupg
73
+    apt-get -yq install gnupg dirmngr
74
+    printf '%%Assuan%%\nsocket=/dev/shm/S.dirmngr\n' > ~/.gnupg/S.dirmngr
74 75
 
75 76
     BACKUP_KEY_EXISTS=$(gpg_key_exists "root" "$MY_NAME (backup key)")
76 77
     if [[ $BACKUP_KEY_EXISTS == "yes" ]]; then

+ 40
- 1
src/freedombone-utils-gpg 查看文件

@@ -144,10 +144,18 @@ function gpg_set_permissions {
144 144
     if [[ "$key_username" != 'root' ]]; then
145 145
         chmod 700 /home/$key_username/.gnupg
146 146
         chmod -R 600 /home/$key_username/.gnupg/*
147
+        printf '%%Assuan%%\nsocket=/dev/shm/S.dirmngr\n' > /home/$key_username/.gnupg/S.dirmngr
148
+        if [ -d /home/$key_username/.gnupg/crls.d ]; then
149
+            chmod +x /home/$key_username/.gnupg/crls.d
150
+        fi
147 151
         chown -R $key_username:$key_username /home/$key_username/.gnupg
148 152
     else
149 153
         chmod 700 /root/.gnupg
150 154
         chmod -R 600 /root/.gnupg/*
155
+        printf '%%Assuan%%\nsocket=/dev/shm/S.dirmngr\n' > /root/.gnupg/S.dirmngr
156
+        if [ -d /root/.gnupg/crls.d ]; then
157
+            chmod +x /root/.gnupg/crls.d
158
+        fi
151 159
         chown -R $key_username:$key_username /root/.gnupg
152 160
     fi
153 161
 }
@@ -252,7 +260,38 @@ function gpg_agent_setup {
252 260
         if ! grep -q 'allow-loopback-pinentry' /home/$gpg_username/.gnupg/gpg-agent.conf; then
253 261
             echo 'allow-loopback-pinentry' >> /home/$gpg_username/.gnupg/gpg-agent.conf
254 262
         fi
255
-        su -c "echo RELOADAGENT | gpg-connect-agent" - $gpg_username
263
+        if [[ "$gpg_username" != "$USER" ]]; then
264
+            su -c "echo RELOADAGENT | gpg-connect-agent" - $gpg_username
265
+        else
266
+            echo RELOADAGENT | gpg-connect-agent
267
+        fi
268
+    fi
269
+}
270
+
271
+function gpg_agent_enable {
272
+    gpg_username=$1
273
+
274
+    if [[ $gpg_username == 'root' ]]; then
275
+        return
276
+    else
277
+        if grep -q 'GPG_TTY' /home/$gpg_username/.bashrc; then
278
+            sed -i '/GPG_TTY/d' /home/$gpg_username/.bashrc
279
+            chown $gpg_username:$gpg_username /home/$gpg_username/.bashrc
280
+        fi
281
+        if grep -q 'use-agent' /home/$gpg_username/.gnupg/gpg.conf; then
282
+           sed -i '/use-agent/d' /home/$gpg_username/.gnupg/gpg.conf
283
+        fi
284
+        if grep -q 'pinentry-mode loopback' /home/$gpg_username/.gnupg/gpg.conf; then
285
+            sed -i '/pinentry-mode loopback/d' /home/$gpg_username/.gnupg/gpg.conf
286
+        fi
287
+        if [ -f /home/$gpg_username/.gnupg/gpg-agent.conf ]; then
288
+            rm /home/$gpg_username/.gnupg/gpg-agent.conf
289
+        fi
290
+        if [[ "$gpg_username" != "$USER" ]]; then
291
+            su -c "echo RELOADAGENT | gpg-connect-agent" - $gpg_username
292
+        else
293
+            echo RELOADAGENT | gpg-connect-agent
294
+        fi
256 295
     fi
257 296
 }
258 297
 

+ 4
- 0
src/freedombone-utils-keys 查看文件

@@ -264,6 +264,10 @@ function interactive_key_recovery {
264 264
         cp -rf /home/$MY_USERNAME/.gnupg /root
265 265
         chmod 700 /root/.gnupg
266 266
         chmod 600 /root/.gnupg/*
267
+        printf '%%Assuan%%\nsocket=/dev/shm/S.dirmngr\n' > /root/.gnupg/S.dirmngr
268
+        if [ -d /root/.gnupg/crls.d ]; then
269
+            chmod +x /root/.gnupg/crls.d
270
+        fi
267 271
     fi
268 272
 }
269 273
 

+ 1
- 4
src/freedombone-utils-postgresql 查看文件

@@ -145,10 +145,7 @@ function run_query_postgresql_with_output {
145 145
     database_name=$1
146 146
     database_query=$2
147 147
     cd /etc/postgresql
148
-    output=$(sudo -u postgres psql -d $database_name -c << EOF
149
-$database_query
150
-EOF
151
-)
148
+    output=$(sudo -u postgres psql -d $database_name -c "$database_query")
152 149
     echo "$output"
153 150
 }
154 151