-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinstall.sh
More file actions
779 lines (704 loc) · 27.1 KB
/
Copy pathinstall.sh
File metadata and controls
779 lines (704 loc) · 27.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
#!/bin/bash
clear
echo
echo "======================================================================="
echo "| |"
echo "| full-stack-apache2-eprints-for-everyone-with-docker-compose |"
echo "| by Erdal ALTIN |"
echo "| |"
echo "======================================================================="
sleep 2
echo
# ----------------------- OS Information -------------------------------------
echo "[+] OS Information"
echo "-----------------------------------------------------------------------"
if [[ -f /etc/os-release ]]; then
. /etc/os-release
echo "Distro : $PRETTY_NAME"
echo "ID : $ID"
echo "ID_LIKE : $ID_LIKE"
id_like=$(grep -Pow 'ID_LIKE=\K[^;]*' /etc/os-release | tr -d '"' | grep -obe 'debian' -e 'ubuntu' -e 'centos' -e 'fedora' -e 'suse' -e 'rhel' | grep -oE '[A-Za-z]+' | head -n 1) 2>&1 > /dev/null
echo "Version : $VERSION_ID"
echo "Codename : $VERSION_CODENAME (or $UBUNTU_CODENAME)"
elif [[ -f /usr/lib/os-release ]]; then
. /usr/lib/os-release
echo "Distro : $PRETTY_NAME"
echo "ID : $ID"
echo "ID_LIKE : $ID_LIKE"
id_like=$(grep -Pow 'ID_LIKE=\K[^;]*' /usr/lib/os-release | tr -d '"' | grep -obe 'debian' -e 'ubuntu' -e 'centos' -e 'fedora' -e 'suse' -e 'rhel' | grep -oE '[A-Za-z]+' | head -n 1) 2>&1 > /dev/null
echo "Version : $VERSION_ID"
echo "Codename : $VERSION_CODENAME (or $UBUNTU_CODENAME)"
else
echo "Cannot detect OS or os-release file not found"
# exit 0
fi
unames=$(sudo uname -s)
unamem=$(sudo uname -m)
echo "Kernel : $(sudo uname -r)"
echo "Architecture : $unamem"
echo "Hostname : $(sudo hostname)"
#echo "Uptime : $(sudo uptime -p 2>/dev/null || uptime)"
operation_system_id=("centos", "debian", "fedora", "raspbian", "rhel", "sles", "static", "ubuntu")
if [[ ${operation_system_id[@]} =~ "$ID" ]]
then
operation_system="$ID"
codename="$VERSION_CODENAME"
else
operation_system="$id_like"
upper_operation_system="${id_like^^}"
declare -n codename="${upper_operation_system}_CODENAME"
fi
echo
echo "Done ✓"
echo "======================================================================="
# the "lpms" is an abbreviation of Linux Package Management System
lpms=""
for i in apk dnf yum apt apt-get dpkg zypper pacman
do
if [ -x "$(command -v $i)" ]; then
if [ "$i" == "apk" ]
then
lpms=$i
sudo apk add --no-cache --upgrade grep
break
elif [ "$i" == "dnf" ] && ([ "$ID" == "fedora" ] || ([ "$ID" != "centos" ] && [[ "$ID_LIKE" == *"fedora"* ]]) || ([[ "$ID_LIKE" == *"rhel"* ]] && [ "$unamem" == "s390x" ]))
then
lpms=$i
break
elif [ "$i" == "yum" ] && ([ "$ID" == "centos" ] || ([ "$ID" != "fedora" ] && [[ "$ID_LIKE" == *"fedora"* ]]) || ([[ "$ID_LIKE" == *"rhel"* ]] && [ "$unamem" == "s390x" ]))
then
lpms=$i
break
elif ([ "$i" == "apt" ] || [ "$i" == "apt-get" ]) && ([[ "$ID" == *"ubuntu"* ]] || [[ "$ID" == *"debian"* ]] || [[ "$ID_LIKE" == *"ubuntu"* ]] || [[ "$ID_LIKE" == *"debian"* ]])
then
lpms=$i
break
elif [ "$i" == "dpkg" ]
then
lpms=$i
break
elif [[ "$ID_LIKE" == *"suse"* ]]
then
lpms=$i
break
elif [ "$i" == "pacman" ]
then
lpms=$i
break
fi
fi
done
if [ -z $lpms ]; then
echo
echo "No supported package manager found"
echo
exit 0
fi
echo
echo "[+] Detected Package Manager: $lpms"
echo
echo "Done ✓"
echo "======================================================================="
##########
# Uninstall old versions
##########
echo
echo
echo "======================================================================="
echo "| Older versions of Docker were called docker, docker.io, or docker-engine."
echo "| If these are installed or all conflicting packages, uninstall them."
echo "======================================================================="
echo
sleep 2
# linux remove command for pms
if [ "$lpms" == "apk" ]
then
sudo apk del docker podman-docker
elif [ "$lpms" == "dnf" ]
then
sudo dnf -y remove podman-docker docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
elif [ "$lpms" == "yum" ]
then
sudo yum -y remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine podman podman-docker runc
elif [ "$lpms" == "apt" ] || [ "$lpms" == "apt-get" ] || [ "$lpms" == "dpkg" ]
then
for pkg in docker docker-engine docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo $lpms -y remove $pkg; done
elif [ "$lpms" == "zypper" ]
then
if [[ "$ID" == *"sles"* ]]
then
sudo zypper remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine runc
fi
elif [ "$lpms" == "pacman" ]
then
sudo pacman -Rssn --noconfirm podman-docker podman-compose
else
echo
echo "No supported package manager found"
echo
exit 0
fi
echo
echo "Done ✓"
echo "======================================================================="
##########
# Install Docker
##########
echo
echo
echo "======================================================================="
echo "| Install Docker..."
echo "======================================================================="
echo
sleep 2
if [ "$lpms" == "apk" ]
then
sudo apk update
sudo apk add --update docker openrc bind-tools procps
sudo rc-update add docker boot
sudo service docker start
elif [ "$lpms" == "dnf" ]
then
sudo dnf -y update
sudo dnf -y install dnf-plugins-core yum-utils openssl-libs
if [ "$ID" == "fedora" ] || ([ "$ID" == "rhel" ] && [ "$unamem" == "s390x" ])
then
sudo dnf config-manager addrepo --overwrite --from-repofile=https://download.docker.com/linux/$ID/docker-ce.repo
elif [ "$ID" == "rhel" ] || [ "$id_like" == "rhel" ]
then
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
else
echo
echo "unsupport operation system and/or architecture"
echo
exit 0
fi
sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin bind-utils
elif [ "$lpms" == "yum" ]
then
sudo yum -y update
sudo yum -y install yum-utils
if [ "$ID" == "centos" ] || ([ "$ID" == "rhel" ] && [ "$unamem" == "s390x" ])
then
sudo yum-config-manager --add-repo https://download.docker.com/linux/$ID/docker-ce.repo
elif [ "$id_like" == "rhel" ] || [ "$id_like" == "rhel" ]
then
sudo yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
else
echo
echo "unsupport operation system and/or architecture"
echo
exit 0
fi
sudo yum -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin bind-utils
elif [ "$lpms" == "zypper" ]
then
sudo zypper update -y
sudo zypper install -y bind-utils
if [[ "$ID" == *"sles"* ]] && [ "$unamem" == "s390x" ]
then
# "https://download.opensuse.org/repositories/security:/SELinux/openSUSE_Factory/security:SELinux.repo"
sudo zypper addrepo "https://download.opensuse.org/repositories/security/$VERSION_ID/security.repo"
sudo zypper addrepo https://download.docker.com/linux/sles/docker-ce.repo
sudo zypper install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
else
sudo SUSEConnect -p sle-module-containers/$unames/$unamem -r ''
sudo zypper install -y docker
fi
#Installed=`sudo zypper search --installed-only -v docker | sed -n '6p' | cut -c 28-40`
#Candidate=`sudo zypper info docker | sed -n '10p' | cut -c 18-`
elif [ "$lpms" == "apt" ] || [ "$lpms" == "apt-get" ] || [ "$lpms" == "dpkg" ]
then
sudo $lpms update
sudo $lpms -y install ca-certificates curl gnupg lsb-release
sudo mkdir -m 0755 /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/$operation_system/gpg | sudo gpg --batch --yes --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Add the repository to Apt sources:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$operation_system $codename stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo $lpms update
sudo $lpms -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
#Installed=`sudo apt-cache policy docker-ce | sed -n '2p' | cut -c 14-`
#Candidate=`sudo apt-cache policy docker-ce | sed -n '3p' | cut -c 14-`
elif [ "$lpms" == "pacman" ]
then
sudo pacman-key --init
sudo pacman-key --populate
sudo pacman -Syu --noconfirm
sudo pacman -S --noconfirm docker docker-buildx bind-tools
else
echo
echo "No supported package manager found"
echo
exit 0
fi
#sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
#if [[ "$Installed" != "$Candidate" ]]; then
# sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
#elif [[ "$Installed" == "$Candidate" ]]; then
# echo
# echo 'docker currently version already installed.'
#fi
if [ $? -ne 0 ]
then
exit 0
fi
if ps -p 1 -o comm= | grep -q systemd
then
sudo systemctl daemon-reload
fi
if [ $lpms != "apk" ]
then
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
sudo systemctl start docker
fi
echo
echo "Done ✓"
echo "======================================================================="
##########
# Run Docker without sudo rights
##########
echo
echo
echo "======================================================================="
echo "| Running Docker without sudo rights..."
echo "======================================================================="
echo
sleep 2
sudo groupadd docker
sudo usermod -aG docker ${USER}
# su - ${USER} &
echo
echo "Done ✓"
echo "======================================================================="
##########
# Install Docker Compose
##########
echo
echo
echo "======================================================================="
echo "| Installing Docker Compose v2.32.4..."
echo "======================================================================="
echo
sleep 2
sudo mkdir -p /usr/local/lib/docker/cli-plugins
sudo curl -SL "https://github.com/docker/compose/releases/download/v2.32.4/docker-compose-$unames-$unamem" -o /usr/local/lib/docker/cli-plugins/docker-compose
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
echo
echo "Done ✓"
echo "======================================================================="
##########
# permission for Docker daemon socket
##########
echo
echo
echo "======================================================================="
echo "| permission for Docker daemon socket..."
echo "======================================================================="
echo
sleep 2
sudo chmod 666 /var/run/docker.sock
echo
echo "Done ✓"
echo "======================================================================="
clear
##########
# Setup project variables
##########
echo
echo "======================================================================="
echo "| Please enter project related variables..."
echo "======================================================================="
echo
sleep 2
# set the host
which_h=""
if [ -n "${SSH_CLIENT}" ] || [ -n "${SSH_TTY}" ] || [ -n "${SSH_CONNECTION}" ]; then
echo "Running REMOTELY via SSH (on another host / remote OS)"
which_h="remotehost"
else
echo "Running LOCALLY on localhost (the same machine)"
which_h="localhost"
fi
echo "Ok."
# set your domain name
domain_name=""
if [ "$which_h" == "localhost" ]
then
read -p 'Enter Domain Name(default : localhost or e.g. : example.com): ' domain_name
: ${domain_name:=localhost}
[ "$domain_name" != "localhost" ] && sudo -- sh -c -e "grep -qxF '127.0.1.1 $domain_name' /etc/hosts || echo '127.0.1.1 $domain_name' >> /etc/hosts"
ping -c 1 $domain_name 2>&1 > /dev/null
else
#domain_name=""
read -p 'Enter Domain Name(e.g. : example.com): ' domain_name
#[ "$domain_name" != "localhost" ] && sudo -- sh -c -e "sed -i '/$domain_name/d' /etc/hosts"
[ -z $domain_name ] && domain_name="NULL"
host -N 0 $domain_name 2>&1 > /dev/null
fi
#[ -z $domain_name ] && domain_name="NULL"
#host -N 0 $domain_name 2>&1 > /dev/null
while [ $? -ne 0 ]
do
echo "Try again"
sudo -- sh -c -e "sed -i '/$domain_name/d' /etc/hosts"
if [ "$which_h" == "localhost" ]
then
read -p 'Enter Domain Name(default : localhost or e.g. : example.com): ' domain_name
: ${domain_name:=localhost}
[ "$domain_name" != "localhost" ] && sudo -- sh -c -e "grep -qxF '127.0.1.1 $domain_name' /etc/hosts || echo '127.0.1.1 $domain_name' >> /etc/hosts"
ping -c 1 $domain_name 2>&1 > /dev/null
else
read -p 'Enter Domain Name(e.g. : example.com): ' domain_name
#[ "$domain_name" != "localhost" ] && sudo -- sh -c -e "sed -i '/$domain_name/d' /etc/hosts"
[ -z $domain_name ] && domain_name="NULL"
host -N 0 $domain_name 2>&1 > /dev/null
fi
#[ -z $domain_name ] && domain_name="NULL"
#host -N 0 $domain_name 2>&1 > /dev/null
done
echo "Ok."
# set parameters in eprints create_pub_values.txt and env.example file
archive_id=""
regex="^[a-zA-Z][_a-zA-Z0-9]*$"
echo "Please select an ID for the repository, which will be used to create a directory and identify the repository. Lower case letters, numbers and underscores, may not start with a number or underscore. examples: 'lemurprints', 'test3' or 'research_archive'"
echo
read -p 'Enter Archive ID (default : depo): ' archive_id
: ${archive_id:=depo}
while [ -z $archive_id ] || [[ ! $archive_id =~ $regex ]]
do
echo "Try again"
read -p 'Enter Archive ID (default : depo): ' archive_id
sleep 1
done
sudo rm $(pwd)/docker/create_pub_values.txt
sudo echo $archive_id > $(pwd)/docker/create_pub_values.txt
echo "Ok."
# set parameter, Configure vital settings? [yes]
sudo echo "yes" >> $(pwd)/docker/create_pub_values.txt
subdomain=""
regex="^[a-z0-9-]+(\.[a-z0-9-]+)*$"
read -p 'Enter Subdomain (default : repo): ' subdomain
: ${subdomain:=repo}
if [ "$which_h" == "localhost" ]
then
sudo -- sh -c -e "grep -qxF '127.0.1.1 '$subdomain'.'$domain_name /etc/hosts || echo '127.0.1.1 '$subdomain'.'$domain_name >> /etc/hosts"
fi
while [ -z $subdomain ] || [[ ! $subdomain =~ $regex ]]
do
echo "Try again"
sudo -- sh -c -e "sed -i '/$subdomain/d' /etc/hosts"
if [ "$which_h" == "localhost" ]
then
read -p 'Enter Subdomain (default: repo): ' subdomain
sudo -- sh -c -e "grep -qxF '127.0.1.1 '$subdomain'.'$domain_name /etc/hosts || echo '127.0.1.1 '$subdomain'.'$domain_name >> /etc/hosts"
else
read -p 'Enter Subdomain (default: repo): ' subdomain
fi
sleep 1
done
# set parameter, Please enter the subdomain of the repository.
sudo echo "$subdomain.$domain_name" >> $(pwd)/docker/create_pub_values.txt
echo "Ok."
ssl_snippet=""
if [ "$which_h" == "localhost" ]
then
ssl_snippet="echo 'Generated Self-signed SSL Certificate at localhost'"
if [ "$lpms" == "apk" ]
then
sudo apk add --no-cache nss-tools go
elif [ "$lpms" == "dnf" ]
then
sudo dnf -y install nss-tools golang
elif [ "$lpms" == "yum" ]
then
sudo yum -y install nss-tools golang
elif [ "$lpms" == "zypper" ]
then
sudo zypper install -y mozilla-nss-tools go
elif [ "$lpms" == "apt" ]
then
sudo apt -y install libnss3-tools golang
elif [ "$lpms" == "pacman" ]
then
sudo pacman -S --noconfirm nss go
else
echo
echo "No supported package manager found"
echo
exit 0
fi
sudo rm -Rf mkcert && git clone https://github.com/FiloSottile/mkcert &&
cd ./mkcert
sudo go build -ldflags "-X main.Version=$(git describe --tags)"
./mkcert -uninstall && ./mkcert -install && ./mkcert -key-file privkey.pem -cert-file chain.pem $domain_name *.$domain_name && sudo cat privkey.pem chain.pem > fullchain.pem && sudo mkdir -p ../certbot/live/$domain_name && sudo mv *.pem ../certbot/live/$domain_name
cd ..
echo "Ok."
else
ssl_snippet="certbot certonly --webroot --webroot-path \/tmp\/acme-challenge --rsa-key-size 4096 --non-interactive --agree-tos --no-eff-email --force-renewal --email \$\{LETSENCRYPT_EMAIL\} -d \$\{DOMAIN_NAME\} -d www.\$\{DOMAIN_NAME\} -d \$\{SUBDOMAIN\}.\$\{DOMAIN_NAME\}"
fi
# set parameter, Webserver Port [80]
sudo echo "80" >> $(pwd)/docker/create_pub_values.txt
# set parameter, Alias for hostname, Alias (enter # when done) [#]
sudo echo "#" >> $(pwd)/docker/create_pub_values.txt
# set parameter, Repository’s base URL, Path [/]
sudo echo "/" >> $(pwd)/docker/create_pub_values.txt
# set parameter, HTTPS Hostname []
sudo echo "$subdomain.$domain_name" >> $(pwd)/docker/create_pub_values.txt
# set parameter, Secure webserver port, Secure Webserver Port [443]
sudo echo "443" >> $(pwd)/docker/create_pub_values.txt
# set parameters in env.example file and values eprints
email=""
regex="^[a-zA-Z0-9\._-]+\@[a-zA-Z0-9._-]+\.[a-zA-Z]+\$"
read -p 'Enter Email Address for letsencrypt ssl and administrator(e.g. : email@domain.com): ' email
while [ -z $email ] || [[ ! $email =~ $regex ]]
do
echo "Try again"
read -p 'Enter Email Address for letsencrypt ssl and administrator(e.g. : email@domain.com): ' email
sleep 1
done
sudo echo $email >> $(pwd)/docker/create_pub_values.txt
echo "Ok."
# set parameter, Archive Name
echo "Enter the name of the repository in the default language. If you wish to enter other titles for other languages or enter non ascii characters then you may enter something as a placeholder and edit the XML config file which this script generates."
echo
read -p 'Enter Archive Name [Test Repository]: ' archive_name
: ${archive_name:=Test Repository}
while [ -z "$archive_name" ]
do
echo "Try again"
read -p 'Enter Archive Name [Test Repository]: ' archive_name
sleep 1
done
sudo echo $archive_name >> $(pwd)/docker/create_pub_values.txt
echo "Ok."
# set parameter, Organisation Name
echo "Enter the name of the organisation in the default language. Again, if you wish to enter other titles for other languages or enter non ascii characters then you may enter something as a placeholder and edit the XML config file which this script generates."
echo
read -p 'Enter Organisation Name [Organisation of Test]: ' organisation_name
: ${organisation_name:=Organisation of Test}
while [ -z "$organisation_name" ]
do
echo "Try again"
read -p 'Enter Organisation Name [Organisation of Test]: ' organisation_name
sleep 1
done
sudo echo $organisation_name >> $(pwd)/docker/create_pub_values.txt
echo "Ok."
# set parameter, Write these core settings? [yes]
sudo echo "yes" >> $(pwd)/docker/create_pub_values.txt
# set parameter, Configure database? [yes]
sudo echo "yes" >> $(pwd)/docker/create_pub_values.txt
db_name=""
db_regex="^[0-9a-zA-Z\$_]{6,}$"
read -p 'Enter Database Name(at least 6 characters): ' db_name
while [[ ! $db_name =~ $db_regex ]]
do
echo "Try again (can only contain numerals 0-9, basic Latin letters, both lowercase and uppercase, dollar sign and underscore)"
read -p 'Enter Database Name(at least 6 characters): ' db_name
sleep 1
done
# set parameter, Database Name
sudo echo $db_name >> $(pwd)/docker/create_pub_values.txt
echo "Ok."
# set parameter, MySQL Host [localhost]
sudo echo "database" >> $(pwd)/docker/create_pub_values.txt
# set parameter, MySQL Port (# for no setting) [#]
sudo echo "3306" >> $(pwd)/docker/create_pub_values.txt
# set parameter, MySQL Socket (# for no setting) [#]
sudo echo "#" >> $(pwd)/docker/create_pub_values.txt
db_username=""
read -p 'Enter Database Username(at least 6 characters): ' db_username
while [[ ! $db_username =~ $db_regex ]]
do
echo "Try again (can only contain numerals 0-9, basic Latin letters, both lowercase and uppercase, dollar sign and underscore)"
read -p 'Enter Database Username(at least 6 characters): ' db_username
sleep 1
done
# set parameter, Database User
sudo echo $db_username >> $(pwd)/docker/create_pub_values.txt
echo "Ok."
db_password=""
password_regex="^[a-zA-Z0-9\._-]{6,}$"
read -p 'Enter Database Password(at least 6 characters): ' db_password
while [[ ! $db_password =~ $password_regex ]]
do
echo "Try again (can only contain numerals 0-9, basic Latin letters, both lowercase and uppercase, dot, underscore and minus sign)"
read -p 'Enter Database Password(at least 6 characters): ' db_password
sleep 1
done
# set parameter, Database Password
sudo echo $db_password >> $(pwd)/docker/create_pub_values.txt
echo "Ok."
# set parameter, Database Engine [InnoDB]
sudo echo "InnoDB" >> $(pwd)/docker/create_pub_values.txt
# set parameter, Write these database settings? [yes]
sudo echo "yes" >> $(pwd)/docker/create_pub_values.txt
# set parameter, Create database [yes]
sudo echo "yes" >> $(pwd)/docker/create_pub_values.txt
mysql_root_password=""
read -p 'Enter MariaDb/Mysql Root Password(at least 6 characters): ' mysql_root_password
while [[ ! $mysql_root_password =~ $password_regex ]]
do
echo "Try again (can only contain numerals 0-9, basic Latin letters, both lowercase and uppercase, dot, underscore and minus sign)"
read -p 'Enter MariaDb/Mysql Root Password(at least 6 characters): ' mysql_root_password
sleep 1
done
# set parameter, Database Superuser Username
sudo echo "root" >> $(pwd)/docker/create_pub_values.txt
# set parameter, Database Superuser Password
sudo echo $mysql_root_password >> $(pwd)/docker/create_pub_values.txt
echo "Ok."
# set parameter, Create database tables? [yes]
sudo echo "yes" >> $(pwd)/docker/create_pub_values.txt
# set parameter, Create an initial user? [yes]
sudo echo "yes" >> $(pwd)/docker/create_pub_values.txt
# set parameter, Enter a username [admin]
sudo echo "admin" >> $(pwd)/docker/create_pub_values.txt
# set parameter, Select a user type (user|editor|admin) [admin]
sudo echo "admin" >> $(pwd)/docker/create_pub_values.txt
# set parameter, Enter Password for admin
sudo echo "admin123" >> $(pwd)/docker/create_pub_values.txt
# set parameter, Enter Email for admin
sudo echo $email >> $(pwd)/docker/create_pub_values.txt
# set parameter, Do you want to build the static web pages? [yes]
sudo echo "yes" >> $(pwd)/docker/create_pub_values.txt
# set parameter, Do you want to import the LOC subjects and sample divisions? [yes]
sudo echo "yes" >> $(pwd)/docker/create_pub_values.txt
# set parameter, Do you want to update the apache config files? (you still need to add the 'Include' line) [yes]
sudo echo "yes" >> $(pwd)/docker/create_pub_values.txt
pma_username=""
read -p 'Enter PhpMyAdmin Username(at least 6 characters): ' pma_username
while [[ ! $pma_username =~ $db_regex ]]
do
echo "Try again (can only contain numerals 0-9, basic Latin letters, both lowercase and uppercase, dollar sign and underscore)"
read -p 'Enter PhpMyAdmin Username(at least 6 characters): ' pma_username
sleep 1
done
echo "Ok."
pma_password=""
read -p 'Enter PhpMyAdmin Password(at least 6 characters): ' pma_password
while [[ ! $pma_password =~ $password_regex ]]
do
echo "Try again (can only contain numerals 0-9, basic Latin letters, both lowercase and uppercase, dot, underscore and minus sign)"
read -p 'Enter PhpMyAdmin Password(at least 6 characters): ' pma_password
sleep 1
done
echo "Ok."
which_db=""
db_authentication_password=$pma_password
db_package_manager="apt-get update \&\& apt-get install -y gettext-base"
db_admin_commandline="mariadb-admin"
db_client_library="mariadb-client libmariadb-dev"
PS3="Select the database: "
select db in mariadb mysql
do
which_db=$db
if [ $REPLY -eq 2 ]
then
db_package_manager="microdnf update -y \&\& microdnf install -y gettext"
db_admin_commandline="mysqladmin"
db_client_library="mysql-client libmysqlclient-dev"
fi
if [ $REPLY -eq 1 ] || [ $REPLY -eq 2 ]
then
break
else
PS3="Select the database: "
fi
done
echo "Ok."
local_timezone_regex="^[a-zA-Z0-9/+_-]{1,}$"
read -p 'Enter container local Timezone(default : America/Los_Angeles, to see the other timezones, https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List): ' local_timezone
: ${local_timezone:=America/Los_Angeles}
while [[ ! $local_timezone =~ $local_timezone_regex ]]
do
echo "Try again (can only contain numerals 0-9, basic Latin letters, both lowercase and uppercase, positive, minus sign and underscore)"
read -p 'Enter container local Timezone(default : America/Los_Angeles, to see the other local timezones, https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List): ' local_timezone
sleep 1
: ${local_timezone:=America/Los_Angeles}
done
local_timezone=${local_timezone//[\/]/\\\/}
echo "Ok."
read -p "Apply changes (y/n)? " choice
case "$choice" in
y|Y ) clear; echo; echo "Yes! Proceeding now...";;
n|N ) echo "No! Aborting now..."; exit 0;;
* ) echo "Invalid input! Aborting now..."; exit 0;;
esac
sudo \cp env.example .env
sed -i "s/db_package_manager/$db_package_manager/" .env
sed -i 's/db_admin_commandline/'$db_admin_commandline'/' .env
sed -i "s/db_client_library/$db_client_library/" .env
sed -i 's/example.com/'$domain_name'/' .env
sed -i 's/subdomain/'$subdomain'/' .env
sed -i 's/archive_id/'$archive_id'/' .env
sed -i 's/email@domain.com/'$email'/' .env
sed -i "s/ssl_snippet/$ssl_snippet/" .env
sed -i 's/which_db/'$which_db'/g' .env
sed -i 's/db_username/'$db_username'/g' .env
sed -i 's/db_password/'$db_password'/g' .env
sed -i 's/db_name/'$db_name'/' .env
sed -i 's/mysql_root_password/'$mysql_root_password'/' .env
sed -i 's/pma_username/'$pma_username'/' .env
sed -i 's/pma_password/'$pma_password'/' .env
sed -i "s@directory_path@$(pwd)@" .env
sed -i 's/local_timezone/'$local_timezone'/' .env
if [ -x "$(command -v docker)" ] && [ "$(docker compose version)" ]; then
# Firstly: create external volume
docker volume create --driver local --opt type=none --opt device=`pwd`/certbot --opt o=bind certbot-etc > /dev/null
# installing EPrints and the other services
docker compose up -d & export pid=$!
echo "EPrints and the other services installing proceeding..."
echo
wait $pid
if [ $? -eq 0 ]; then
# installing portainer
docker compose -f portainer-docker-compose.yml -p portainer up -d & export pid=$!
echo
echo "portainer installing proceeding..."
wait $pid
if [ $? -ne 0 ]
then
echo "Error! could not installed portainer" >&2
exit 1
else
echo
until [ -n "$(sudo find ./certbot/live -name '$domain_name' 2>/dev/null | head -1)" ]; do
echo "waiting Let's Encrypt certificates for $domain_name"
sleep 5s & wait ${!}
if sudo [ -d "./certbot/live/$domain_name" ]; then break; fi
done
echo "Ok."
#until [ ! -z `docker compose ps -a --filter "status=running" --services | grep webserver` ]; do
# echo "waiting starting webserver container"
# sleep 2s & wait ${!}
# if [ ! -z `docker compose ps -a --filter "status=running" --services | grep webserver` ]; then break; fi
#done
echo
echo "Loading webserver ssl configuration"
docker container restart webserver > /dev/null 2>&1
echo "Ok."
echo
echo "completed setup"
echo
echo "EPrints: https://$subdomain.$domain_name"
echo "Website: https://$domain_name"
echo "Portainer: https://$domain_name:9001"
echo "phpMyAdmin: https://$domain_name:9090"
echo
echo "Ok."
fi
else
echo
echo "Error! could not installed EPrints and the other services with docker compose" >&2
echo
exit 1
fi
else
echo
echo "not found docker and/or docker compose, Install docker and/or docker compose" >&2
echo
exit 1
fi