forked from Brizovsky/Breeze-Easy-Shell
-
Notifications
You must be signed in to change notification settings - Fork 0
/
breeze.sh
2387 lines (2338 loc) · 101 KB
/
breeze.sh
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
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
#!/bin/bash
ver="v1.9"
title="Breeze Easy Shell"
title_full="$title $ver"
#-----------------
#типовые функции
#-----------------
#функция, которая запрашивает только один символ
myread()
{
temp=""
while [ -z "$temp" ] #защита от пустых значений
do
read -n 1 temp
done
eval $1=$temp
echo
}
#функция, которая запрашивает только да или нет
myread_yn()
{
temp=""
while [[ "$temp" != "y" && "$temp" != "Y" && "$temp" != "n" && "$temp" != "N" ]] #запрашиваем значение, пока не будет "y" или "n"
do
echo -n "y/n: "
read -n 1 temp
echo
done
eval $1=$temp
}
#функция, которая запрашивает только цифру
myread_dig()
{
temp=""
counter=0
while [[ "$temp" != "0" && "$temp" != "1" && "$temp" != "2" && "$temp" != "3" && "$temp" != "4" && "$temp" != "5" && "$temp" != "6" && "$temp" != "7" && "$temp" != "8" && "$temp" != "9" ]] #запрашиваем значение, пока не будет цифра
do
if [ $counter -ne 0 ]; then echo -n "Неправильный выбор. Ведите цифру: "; fi
let "counter=$counter+1"
read -n 1 temp
echo
done
eval $1=$temp
}
#функция установки с проверкой не установлен ли уже пакет
myinstall()
{
if [ -z `rpm -qa $1` ]; then
yum -y install $1
else
echo "Пакет $1 уже установлен"
br
fi
}
title()
{
clear
echo "$title"
}
menu()
{
clear
echo "$menu"
echo "Выберите пункт меню:"
}
wait()
{
echo "Нажмите любую клавишу, чтобы продолжить..."
read -s -n 1
}
br()
{
echo ""
}
updatescript()
{
wget $updpath/$filename -r -N -nd --no-check-certificate
chmod 777 $filename
}
settimezone()
{
/bin/cp /usr/share/zoneinfo/$1/$2 /etc/localtime
echo "Новый часовой пояс установлен. Текущее время: $(date +%H:%M)."
wait
}
repo () {
osver1_repo=$osver1 #дальше будем работать с локальной переменной
if [ $osver1_repo -eq 0 ]; then
echo "Мы не смогли определить версию Вашей ОС, но Вы можете выбрать её сами на свой страх и риск:"
echo "4) CentOS 4.x (или другой дистрибутив на базе RHEL 4)"
echo "5) CentOS 5.x (или другой дистрибутив на базе RHEL 5)"
echo "6) CentOS 6.x (или другой дистрибутив на базе RHEL 6)"
echo "7) CentOS 7.x (или другой дистрибутив на базе RHEL 7)"
echo "0) Любая другая ОС"
myread_dig osver_user
if [ $osver_user -eq 0 ]; then echo "Никакие другие ОС пока не поддерживаются."
else
osver1_repo=$osver_user
fi
fi
case "$osver1_repo" in
4)
echo "Будут добавлены репозитории для CentOS 4"
wait
echo "Устанавливаем репозитории..."
case "$arc" in
32)
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el4.rf.i386.rpm
rpm -Uvh rpmforge-release-0.5.2-2.el4.rf.i386.rpm
;;
64)
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el4.rf.x86_64.rpm
rpm -Uvh rpmforge-release-0.5.2-2.el4.rf.x86_64.rpm
;;
esac
;;
5)
echo "Будут добавлены репозитории EPEL, REMI, RPMForge и ELRepo для CentOS 5"
wait
echo "Устанавливаем репозитории..."
yum -y install epel-release
rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-5.rpm
case "$arc" in
32)
rpm -ivh http://repository.it4i.cz/mirrors/repoforge/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.5.3-1.el5.rf.i386.rpm
rpm -ivh http://dl.atrpms.net/all/atrpms-repo-5-7.el5.i386.rpm
;;
64)
rpm -ivh http://repository.it4i.cz/mirrors/repoforge/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el5.rf.x86_64.rpm
rpm -ivh http://dl.atrpms.net/all/atrpms-repo-5-7.el5.x86_64.rpm
;;
esac
rpm -Uvh http://www.elrepo.org/elrepo-release-5-5.el5.elrepo.noarch.rpm
;;
6)
echo "Будут добавлены репозитории EPEL, REMI, RPMForge и ELRepo для CentOS 6"
wait
echo "Устанавливаем репозитории..."
yum -y install epel-release
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
case "$arc" in
32)
rpm -ivh http://repository.it4i.cz/mirrors/repoforge/redhat/el6/en/i386/rpmforge/RPMS/rpmforge-release-0.5.3-1.el6.rf.i686.rpm
rpm -ivh http://dl.atrpms.net/all/atrpms-repo-6-7.el6.i686.rpm
;;
64)
rpm -ivh http://repository.it4i.cz/mirrors/repoforge/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
rpm -ivh http://dl.atrpms.net/all/atrpms-repo-6-7.el6.x86_64.rpm
;;
esac
rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
;;
7)
echo "Будут добавлены репозитории EPEL, REMI, RPMForge, ELRepo, atrpms для CentOS 7"
wait
echo "Устанавливаем репозитории..."
rpm --import http://packages.atrpms.net/RPM-GPG-KEY.atrpms
yum -y install epel-release
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
rpm -ivh http://repository.it4i.cz/mirrors/repoforge/redhat/el7/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
case "$arc" in
32)
rpm -ivh http://dl.atrpms.net/all/atrpms-repo-6-7.el6.i686.rpm
;;
64)
rpm -ivh http://dl.atrpms.net/all/atrpms-repo-6-7.el6.x86_64.rpm
;;
esac
;;
*) #сюда мы попали только если при ручном вводе версии RHEL указали несуществующую версию
echo "Неправильно указана версия RHEL."
;;
esac
}
iptables_save()
{
#проверка CentOS 7
if [ $osver1 -eq 7 ]; then
myinstall iptables-services | tee > null
fi
service iptables save
}
openport()
{
chain=$(echo $1 | tr [:lower:] [:upper:])
if [ "$chain" == "IN" ]; then chain="INPUT"; t1="dport"
else
if [ "$chain" == "OUT" ]; then chain="OUTPUT"; t1="sport"
else
echo "неправильно указано направление правила для открытия порта"
wait
fi
fi
iptables -I $chain -p $2 --$t1 $3 -j ACCEPT #возможно в будущем предусмотрю выбор ключа -I или -A
iptables_save
}
webuzo_install()
{
openport in tcp 2004
openport in tcp 2002
wget http://files.webuzo.com/install.sh -r -N -nd
sh install.sh
rm -f install.sh
}
cwp_install()
{
openport in tcp 2030
openport in tcp 2031
wget http://centos-webpanel.com/cwp-latest
sh cwp-latest
rm -f cwp-latest
}
zpanel_install()
{
wget https://raw.githubusercontent.com/Brizovsky/Breeze-Easy-Shell/master/zpanel.sh
sh zpanel.sh
rm -f zpanel.sh
}
ajenti_install()
{
openport in tcp 8000
rpm -i http://repo.ajenti.org/ajenti-repo-1.0-1.noarch.rpm
echo "Устанавливаем Ajenti"
yum -y install ajenti
echo "Устанавливаем Ajenti V"
yum -y install ajenti-v ajenti-v-nginx ajenti-v-mysql ajenti-v-php-fpm php-mysql
echo "Отключаем SSL для админки"
sed -i -e 's/"enable": true/"enable": false/' /etc/ajenti/config.json
whatismyipext
echo "Выставляем наш внешний IP в конфиг"
sed -i -e "s/\"host\": \"0.0.0.0\"/\"host\": \"$ipext\"/" /etc/ajenti/config.json
echo "Устанавливаем русский язык по умолчанию"
sed -i -e 's/ "bind": {/ "language": "ru_RU",\n "bind": {/' /etc/ajenti/config.json
echo "Перезапускаем Ajenti"
service ajenti restart
br
echo "Панель управления Ajenti и Ajenti V были установлены. Теперь можете управлять сервером из браузера."
echo "Адрес: http://$ipext:8000"
echo "Логин: root"
echo "Пароль: admin"
br
wait
}
mtu_change()
{
ifconfig $1 mtu $2
}
#Функция проверки установленного приложения, exist возвращает true если установлена и false, если нет.
installed()
{
if [ "$2" == "force" ]; then exist=`rpm -qa $1` #добавили возможности форсированно использовать длинный вариант проверки
else #если нет ключа force, используем старый двойной вариант
exist=`whereis $1 | awk {'print $2'}` #вариант быстрый, но не всегда эффективный
if [ -z $exist ]
then #будем использовать оба варианта
exist=`rpm -qa $1` #вариант медленнее, но эффективнее
fi
fi
if [ -n "$exist" ]
then
exist=true
else
exist=false
fi
}
#функция которая открывает на редактирование файл в приоритете: mc, nano, vi
edit()
{
installed mc
if [ $exist == true ]; then mcedit $1
else
installed nano
if [ $exist == true ]; then nano $1
else
vi $1
fi
fi
}
#функция удаления.
uninstall()
{
if [ $osver1 -eq 5 ]; then yum erase $1 $2 $3 $4 $5;
else
myinstall yum-remove-with-leaves | tee > null
yum --remove-leaves remove $1 $2 $3 $4 $5
fi
}
#Определяем активный внешний интерфейс
whatismyiface()
{
if [ $osver1 -eq 7 ]; then
installed net-tools
if [ $exist == false ]; then yum -y install net-tools | tee > null; fi
fi
if [ -n "$(ifconfig | grep eth0)" ]; then iface="eth0"
else
if [ -n "$(ifconfig | grep venet0:0)" ]; then iface=venet0:0; fi
fi
}
#определяем ip на внешнем интерфейсе
whatismyip()
{
whatismyiface
case "$osver1" in
4|5|6)
ip=`ifconfig $iface | grep 'inet addr' | awk {'print $2'} | sed s/.*://`
;;
7)
ip=`ifconfig $iface | grep 'inet' | sed q | awk {'print $2'}`
;;
*)
echo "Версия ОС неизвестна. Выходим."
wait
;;
esac
}
#определяем внешний IP через запрос
whatismyipext()
{
installed wget
if [ $exist == false ]; then myinstall wget; fi
ipext=`wget --no-check-certificate -qO- https://2ip.ru/index.php | grep "Ваш IP адрес:" | sed s/.*button\"\>// | sed s_"<"_" "_ | awk {'print $1'}`
}
whatismyip_full()
{
whatismyip
echo "Ваш внешний IP: $ip?"
myread_yn ans
case "$ans" in
y|Y)
#ничего не делаем, выходим из case
;;
n|N|т|Т)
echo "Если был неправильно определен IP, вы можете произвести настройку в ручном режиме."
echo "Для этого Вам нужно определить как называется Ваш сетевой интерфейс, через который Вы выходите в интернет."
echo "Если хотите вывести на экран все сетевые интерфейсы, чтобы определить какой из них внешний - нажмите 1."
myread ans
if [ "$ans" == "1" ]; then ifconfig; br; wait; fi
br
echo "Укажите название интерфейса, который имеет внешний IP (обычно eth0, venet0 или venet0:0)"
read int
ip=`ifconfig $int | grep 'inet addr' | awk {'print $2'} | sed s/.*://`
#centOS7
if [ $osver1 -eq 7 ]; then ip=`ifconfig $int | grep 'inet' | sed q | awk {'print $2'}`; fi
echo "Ваш внешний IP: $ip?"
myread_yn ans
case "$ans" in
y|Y)
;;
n|N|т|Т)
echo "Тогда введите IP вручную:"
read ip
;;
*)
echo "Неправильный ответ. Выходим."
wait
sh $0
exit 0
;;
esac
;;
*)
echo "Неправильный ответ. Выходим."
wait
sh $0
exit 0
;;
esac
}
bench_cpu () {
threads=$cpu_cores #делаем кол-во потоков, равное кол-ву ядер
if [ -z $threads ]; then threads=1; fi #если по какой-то причине мы не знаем сколько ядер, ставим в один поток
if [ -z $cpu_clock ]; then cpu_clock=2394; fi #если по какой-то причине мы не знаем сколько ядер, ставим в один поток
#totaltime=$(sysbench --test=cpu --cpu-max-prime=10000 run --num-threads=$threads | grep "total time:" | awk {'print $3'}) #старая версия
totaltime=$(sysbench cpu --cpu-max-prime=10000 run --num-threads=$threads | grep "total time:" | awk {'print $3'}) #новая версия
temp=$(echo "${totaltime%*s}") #убрали в конце "s"
temp=$(echo "${temp/./}") #убрали точку
if [ ${temp:0:1} -eq 0 ]; then temp=$(echo "${temp:1}"); fi #проверили нет ли нуля в начале, если есть - убрали
let "power = 600000 *10000 / $temp" #сколько тестов за минуту пройдет процессор. Количество умножено на 10000, чтобы работать с 4 знаками после запятой
let "discountpower = $power * 2394 / $cpu_clock" #сколько тестов он бы прошёл при той же частоте, что и эталонный процессор
reference=47800
let "powerpercent = $power * 100 / $reference " #мощность этого процессора делим на мощность эталлонного процессора и выражаем в процентах
#let "discountpowerpercent = $discountpower * 100 / $reference " #мощность этого процессора делим на мощность эталлонного процессора и выражаем в процентах
#echo "$discountpowerpercent%"
if [ $threads -gt 1 ]; then #если ядер больше одного, посчитаем еще относительную мощность одного ядра к эталону
let "powerpercore= $power / $threads" #сколько тестов он проходит в минуту в пересчете на одно ядро
let "powerpercorepercent = $powerpercore * 100 / $reference " #мощность одного ядра этого процессора к мощности эталонного процессора
fi
}
bench_hdd () {
# Measuring disk speed with DD
io=$( ( dd if=/dev/zero of=test_$$ bs=64k count=16k conv=fdatasync && rm -f test_$$ ) 2>&1 | awk -F, '{io=$NF} END { print io}' | sed 's/^[ \t]*//;s/[ \t]*$//' )
echo " Первый прогон: $io"
io2=$( ( dd if=/dev/zero of=test_$$ bs=64k count=16k conv=fdatasync && rm -f test_$$ ) 2>&1 | awk -F, '{io=$NF} END { print io}' | sed 's/^[ \t]*//;s/[ \t]*$//' )
echo " Второй прогон: $io2"
io3=$( ( dd if=/dev/zero of=test_$$ bs=64k count=16k conv=fdatasync && rm -f test_$$ ) 2>&1 | awk -F, '{io=$NF} END { print io}' | sed 's/^[ \t]*//;s/[ \t]*$//' )
echo " Третий прогон: $io3"
# Calculating avg I/O (better approach with awk for non int values)
if [ $(echo $io | awk '{print $2}') = "GB/s" ] #проверили а не гигабайты ли это
then #гигабайты
ioraw=$( echo $io | awk 'NR==1 {print $1}' ) #взяли только число
gb=$(echo $ioraw | sed 's/\./ /' | awk '{print $1}') #взяли кол-во гигабайт
mb=$(echo $ioraw | sed 's/\./ /' | awk '{print $2}') #взяли кол-во мегабайт
if [ ${#mb} -eq 1 ]; then let "mb=$mb*1024/10"; else #переводим десятые доли гигабайт в мегабайты
if [ ${#mb} -eq 2 ]; then let "mb=$mb*1024/100"; else #переводим сотвые долги гигабайт в мегабайты
if [ ${#mb} -eq 3 ]; then let "mb=$mb*1024/1000"; else #переводим тысячные долги гигабайт в мегабайты
mb=0
fi
fi
fi
let "ioraw=$gb*1024+$mb"
else ioraw=$( echo $io | awk 'NR==1 {print $1}' )
fi
if [ $(echo $io2 | awk '{print $2}') = "GB/s" ] #проверили а не гигабайты ли это
then #гигабайты
ioraw2=$( echo $io2 | awk 'NR==1 {print $1}' ) #взяли только число
gb=$(echo $ioraw2 | sed 's/\./ /' | awk '{print $1}') #взяли кол-во гигабайт
mb=$(echo $ioraw2 | sed 's/\./ /' | awk '{print $2}') #взяли кол-во мегабайт
if [ ${#mb} -eq 1 ]; then let "mb=$mb*1024/10"; else #переводим десятые доли гигабайт в мегабайты
if [ ${#mb} -eq 2 ]; then let "mb=$mb*1024/100"; else #переводим сотвые долги гигабайт в мегабайты
if [ ${#mb} -eq 3 ]; then let "mb=$mb*1024/1000"; else #переводим тысячные долги гигабайт в мегабайты
mb=0
fi
fi
fi
let "ioraw2=$gb*1024+$mb"
else ioraw2=$( echo $io2 | awk 'NR==1 {print $1}' )
fi
if [ $(echo $io3 | awk '{print $2}') = "GB/s" ] #проверили а не гигабайты ли это
then #гигабайты
ioraw3=$( echo $io3 | awk 'NR==1 {print $1}' ) #взяли только число
gb=$(echo $ioraw3 | sed 's/\./ /' | awk '{print $1}') #взяли кол-во гигабайт
mb=$(echo $ioraw3 | sed 's/\./ /' | awk '{print $2}') #взяли кол-во мегабайт
if [ ${#mb} -eq 1 ]; then let "mb=$mb*1024/10"; else #переводим десятые доли гигабайт в мегабайты
if [ ${#mb} -eq 2 ]; then let "mb=$mb*1024/100"; else #переводим сотвые долги гигабайт в мегабайты
if [ ${#mb} -eq 3 ]; then let "mb=$mb*1024/1000"; else #переводим тысячные долги гигабайт в мегабайты
mb=0
fi
fi
fi
let "ioraw3=$gb*1024+$mb"
else ioraw3=$( echo $io3 | awk 'NR==1 {print $1}' )
fi
ioall=$( awk 'BEGIN{print '$ioraw' + '$ioraw2' + '$ioraw3'}' )
ioavg=$( awk 'BEGIN{print '$ioall'/3}' )
echo "Среднее значение: $ioavg MB/s"
}
showinfo()
{
echo '┌──────────────────────────────────────────────────────────────┐'
echo '│ Информация о системе │'
echo '└──────────────────────────────────────────────────────────────┘'
echo " CPU: $cpu_cores x $cpu_clock MHz ($cpu_model)"
if [ $swap_mb -eq 0 ]; then echo " RAM: $mem_mb Mb"; else
echo " RAM: $mem_mb Mb (Плюс swap $swap_mb Mb)"; fi
#Определяем диск (делаем это при каждом выводе, т.к. данные меняются)
hdd_total=`df | awk '(NR == 2)' | awk '{print $2}'`
let "hdd_total_mb=$hdd_total / 1024"
hdd_free=`df | awk '(NR == 2)' | awk '{print $4}'`
let "hdd_free_mb=$hdd_free / 1024"
#Определяем uptime системы (делаем это при каждом выводе)
uptime=$(uptime | sed -e "s/ * / /g") #сразу берем аптайм без двойных пробелов
uptime=$(echo "${uptime%,* user*}")
uptime=$(echo "${uptime#*up }")
echo " HDD: $hdd_total_mb Mb (свободно $hdd_free_mb Mb)"
echo " ОС: $osfamily $osver2"
echo " Разрядность ОС: $arc bit"
echo " Версия ядра Linux: $kern"
echo " Аптайм системы: $uptime"
if [ ${#iface} -eq 4 ]; then #проверяем какой сетевой интерфейс. Если мы его не определили, то вообще не выводим эту строку
echo " Ваш IP на интерфейсе $iface: $ip"; fi #длина строки подобрана под eth0
if [ ${#iface} -eq 8 ]; then
echo " Ваш IP на интерфейсе $iface: $ip"; fi #длина строки подобрана под venet0:0
echo "Ваш внешний IP определяется как: $ipext"
}
about()
{
echo "Данную утилиту написал Павел Евтихов (aka Brizovsky).
г. Екатеринбург, Россия.
2016-2017 год.
"
}
changelog()
{
wget $updpath/changelog.txt -r -N -nd
cat changelog.txt
br
}
log()
{
changelog
}
release() #функция принудительной загрузки релиза
{
wget https://raw.githubusercontent.com/Brizovsky/Breeze-Easy-Shell/master/$filename -r -N -nd --no-check-certificate
chmod 777 $filename
#updpath='https://raw.githubusercontent.com/Brizovsky/Breeze-Easy-Shell/beta' #бета
}
beta() #функция принудительной загрузки Бета-версии
{
wget https://raw.githubusercontent.com/Brizovsky/Breeze-Easy-Shell/beta/$filename -r -N -nd --no-check-certificate
chmod 777 $filename
}
#-----------------
#задаем переменные
#-----------------
#Задаём переменную с нужным количеством пробелов, чтобы меню не разъезжалось от смены версии
title_full_len=${#title_full}
title_len=${#title}
space=""
let "space_len=43-$title_full_len"
while [ "${#space}" -le $space_len ]
do
space=$space" "
done
space2=""
let "space2_len=30-$title_len"
while [ "${#space2}" -le $space2_len ]
do
space2=$space2" "
done
filename='breeze.sh'
updpath='https://raw.githubusercontent.com/Brizovsky/Breeze-Easy-Shell/master' #релиз
#updpath='https://raw.githubusercontent.com/Brizovsky/Breeze-Easy-Shell/beta' #бета
#определяем сколько RAM
mem_total=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'`
swap_total=`cat /proc/meminfo | grep SwapTotal | awk '{print $2}'`
let "mem_mb=$mem_total / 1024"
let "swap_mb=$swap_total / 1024"
#Определяем данные процессора
cpu_clock=`cat /proc/cpuinfo | grep "cpu MHz" | awk {'print $4'} | sed q`
let "cpu_clock=$(printf %.0f $cpu_clock)"
#cpu_cores=`cat /proc/cpuinfo | grep "cpu cores" | awk {'print $4'}`
cpu_cores=`grep -o "processor" <<< "$(cat /proc/cpuinfo)" | wc -l`
cpu_model=`cat /proc/cpuinfo | grep "model name" | sed q | sed -e "s/model name//" | sed -e "s/://" | sed -e 's/^[ \t]*//' | sed -e "s/(tm)/™/g" | sed -e "s/(C)/©/g" | sed -e "s/(R)/®/g"`
#уберём двойные пробелы:
cpu_model=`echo $cpu_model | sed -e "s/ * / /g"`
#Определяем ОС
if [ "$(cat /etc/redhat-release | awk {'print $2'})" == "release" ]
then
osfamily=$(cat /etc/redhat-release | awk {'print $1'})
osver2=$(cat /etc/redhat-release | awk {'print $3'})
else
if [ "$(cat /etc/redhat-release | awk {'print $3'})" == "release" ]
then
osfamily=$(cat /etc/redhat-release | awk {'print $1'})" "$(cat /etc/redhat-release | awk {'print $2'})
osver2=$(cat /etc/redhat-release | awk {'print $4'})
else osver2=0
fi
fi
osver1=`echo $osver2 | cut -c 1` #берём только первый символ от версии для определения поколения
if [ "$osfamily" == "CentOS Linux" ]; then osfamily="CentOS"; fi
#Определяем разрядность ОС
arc=`arch`
if [ "$arc" == "x86_64" ]; then arc=64 #В теории возможно обозначение "IA-64" и "AMD64", но я не встречал
else arc=32 #Чтобы не перебирать все возможные IA-32, x86, i686, i586 и т.д.
fi
#определяем версию ядра Linux
kern=`uname -r | sed -e "s/-/ /" | awk {'print $1'}`
menu="
┌─────────────────────────────────────────────┐
│ $title $ver$space│
├───┬─────────────────────────────────────────┤
│ 1 │ Информация о системе │
├───┼─────────────────────────────────────────┤
│ 2 │ Работа с ОС │
├───┼─────────────────────────────────────────┤
│ 3 │ Установить панель управления хостингом │
├───┼─────────────────────────────────────────┤
│ 4 │ Установка и настройка VPN-сервера │
├───┼─────────────────────────────────────────┤
│ 5 │ Работа с Proxy │
├───┼─────────────────────────────────────────┤
│ 6 │ Работа с файлами и программами │
├───┼─────────────────────────────────────────┤
│ 7 │ Очистка системы │
├───┼─────────────────────────────────────────┤
│ 8 │ Терминал │
├───┼─────────────────────────────────────────┤
│ 9 │ Обновить $title$space2│
├───┼─────────────────────────────────────────┤
│ 0 │ Выход │
└───┴─────────────────────────────────────────┘
"
menu1="
● Информация о системе:
│
│ ┌───┬──────────────────────────────────────┐
├─┤ 1 │ Показать общую информацию о системе │
│ ├───┼──────────────────────────────────────┤
├─┤ 2 │ Провести тест скорости CPU │
│ ├───┼──────────────────────────────────────┤
├─┤ 3 │ Провести тест скорости диска │
│ ├───┼──────────────────────────────────────┤
├─┤ 4 │ Описание теста производительности │
│ ├───┼──────────────────────────────────────┤
└─┤ 0 │ Выйти на уровень вверх │
└───┴──────────────────────────────────────┘
"
menu2="
● Работа с ОС:
│
│ ┌───┬──────────────────────────────────────┐
├─┤ 1 │ Добавить внешние репозитории │
│ ├───┼──────────────────────────────────────┤
├─┤ 2 │ Обновить ОС │
│ ├───┼──────────────────────────────────────┤
├─┤ 3 │ Установить популярные приложения │
│ ├───┼──────────────────────────────────────┤
├─┤ 4 │ Антивирус │
│ ├───┼──────────────────────────────────────┤
├─┤ 5 │ Firewall (iptables) │
│ ├───┼──────────────────────────────────────┤
├─┤ 6 │ Планировщик задач (cron) │
│ ├───┼──────────────────────────────────────┤
├─┤ 7 │ Установить часовой пояс │
│ ├───┼──────────────────────────────────────┤
├─┤ 8 │ Сменить пароль текущего пользователя │
│ ├───┼──────────────────────────────────────┤
└─┤ 0 │ Выйти на уровень вверх │
└───┴──────────────────────────────────────┘
"
menu24="
● Работа с ОС:
│
└─● Антивирус:
│
│ ┌───┬───────────────────────────┐
├─┤ 1 │ Установить Антивирус │
│ ├───┼───────────────────────────┤
├─┤ 2 │ Обновить антивирус │
│ ├───┼───────────────────────────┤
├─┤ 3 │ Проверить папку на вирусы │
│ ├───┼───────────────────────────┤
├─┤ 4 │ Удалить антивирус │
│ ├───┼───────────────────────────┤
└─┤ 0 │ Выйти на уровень вверх │
└───┴───────────────────────────┘
"
menu25="
● Работа с ОС:
│
└─● Firewall (iptables):
│
│ ┌───┬───────────────────────────────────────────────┐
├─┤ 1 │ Включить firewall (помощник настройки) │
│ ├───┼───────────────────────────────────────────────┤
├─┤ 2 │ Отключить firewall (рарешить все подключения) │
│ ├───┼───────────────────────────────────────────────┤
├─┤ 3 │ Временно выключить firewall │
│ ├───┼───────────────────────────────────────────────┤
├─┤ 4 │ Перезапустить firewall │
│ ├───┼───────────────────────────────────────────────┤
├─┤ 5 │ Открыть порт в iptables │
│ ├───┼───────────────────────────────────────────────┤
├─┤ 6 │ Посмотреть текущую политику firewall │
│ ├───┼───────────────────────────────────────────────┤
├─┤ 7 │ Сохранить текущие правила firewall │
│ ├───┼───────────────────────────────────────────────┤
└─┤ 0 │ Выйти на уровень вверх │
└───┴───────────────────────────────────────────────┘
"
menu26="
● Работа с ОС:
│
└─● Планировщик задач (cron):
│
│ ┌───┬─────────────────────────────────────────┐
├─┤ 1 │ Проверить запущен ли планировщик (cron) │
│ ├───┼─────────────────────────────────────────┤
├─┤ 2 │ Перезапустить cron │
│ ├───┼─────────────────────────────────────────┤
├─┤ 3 │ Добавить задание в планировщик (cron) │
│ ├───┼─────────────────────────────────────────┤
├─┤ 4 │ Открыть файл с заданиями cron │
│ ├───┼─────────────────────────────────────────┤
├─┤ 5 │ Выключить планировщик (cron) │
│ ├───┼─────────────────────────────────────────┤
└─┤ 0 │ Выйти на уровень вверх │
└───┴─────────────────────────────────────────┘
"
menu27="
● Работа с ОС:
│
└─● Установить часовой пояс:
│
│ ┌───┬────────────────────────┐
├─┤ 1 │ Калининград │
│ ├───┼────────────────────────┤
├─┤ 2 │ Москва │
│ ├───┼────────────────────────┤
├─┤ 3 │ Самара │
│ ├───┼────────────────────────┤
├─┤ 4 │ Екатеринбург │
│ ├───┼────────────────────────┤
├─┤ 5 │ Новосибирск │
│ ├───┼────────────────────────┤
├─┤ 6 │ Красноярск │
│ ├───┼────────────────────────┤
├─┤ 7 │ Иркутск │
│ ├───┼────────────────────────┤
├─┤ 8 │ Владивосток │
│ ├───┼────────────────────────┤
├─┤ 9 │ Камчатка │
│ ├───┼────────────────────────┤
└─┤ 0 │ Выйти на уровень вверх │
└───┴────────────────────────┘
"
menu3="
● Установить панель управления хостингом:
│
│ ┌───┬────────────────────────┐
├─┤ 1 │ ISPmanager 4 │
│ ├───┼────────────────────────┤
├─┤ 2 │ ISPmanager 5 │
│ ├───┼────────────────────────┤
├─┤ 3 │ Vesta CP │
│ ├───┼────────────────────────┤
├─┤ 4 │ Webuzo │
│ ├───┼────────────────────────┤
├─┤ 5 │ CentOS Web Panel (CWP) │
│ ├───┼────────────────────────┤
├─┤ 6 │ ZPanel CP │
│ ├───┼────────────────────────┤
├─┤ 7 │ Ajenti │
│ ├───┼────────────────────────┤
└─┤ 0 │ Выйти на уровень вверх │
└───┴────────────────────────┘
"
menu4="
● Установка и настройка VPN-сервера:
│
│ ┌───┬────────────────────────────────────────────────┐
├─┤ 1 │ Установить VPN-сервер (pptpd) │
│ ├───┼────────────────────────────────────────────────┤
├─┤ 2 │ Добавить пользователей VPN │
│ ├───┼────────────────────────────────────────────────┤
├─┤ 3 │ Открыть файл с логинами/паролями пользователей │
│ ├───┼────────────────────────────────────────────────┤
├─┤ 4 │ Добавить правила для работы VPN в IPTables │
│ ├───┼────────────────────────────────────────────────┤
├─┤ 5 │ Удалить VPN-сервер │
│ ├───┼────────────────────────────────────────────────┤
└─┤ 0 │ Выйти на уровень вверх │
└───┴────────────────────────────────────────────────┘
"
menu5="
● Работа с Proxy:
│
│ ┌───┬────────────────────────────────────────────────┐
├─┤ 1 │ Установить Proxy-сервер (на базе Squid) │
│ ├───┼────────────────────────────────────────────────┤
├─┤ 2 │ Удалить Proxy (Squid) │
│ ├───┼────────────────────────────────────────────────┤
├─┤ 3 │ Поменять MTU для интерфейса │
│ ├───┼────────────────────────────────────────────────┤
├─┤ 4 │ Открыть файл настроек Squid │
│ ├───┼────────────────────────────────────────────────┤
├─┤ 5 │ Добавить пользователя Proxy │
│ ├───┼────────────────────────────────────────────────┤
├─┤ 6 │ Открыть файл с логинами/паролями пользователей │
│ ├───┼────────────────────────────────────────────────┤
├─┤ 7 │ Перезапустить сервис Proxy (Squid) │
│ ├───┼────────────────────────────────────────────────┤
└─┤ 0 │ Выйти на уровень вверх │
└───┴────────────────────────────────────────────────┘
"
menu6="
● Работа с файлами и программами:
│
│ ┌───┬─────────────────────────────────────────────────────┐
├─┤ 1 │ Установить какую-либо программу │
│ ├───┼─────────────────────────────────────────────────────┤
├─┤ 2 │ Удалить какую-либо программу │
│ ├───┼─────────────────────────────────────────────────────┤
├─┤ 3 │ Удалить какую-либо программу со всеми зависимостями │
│ ├───┼─────────────────────────────────────────────────────┤
├─┤ 4 │ Посмотреть сколько свободного места на диске │
│ ├───┼─────────────────────────────────────────────────────┤
└─┤ 0 │ Выйти на уровень вверх │
└───┴─────────────────────────────────────────────────────┘
"
menu7="
● Очистка системы:
│
│ ┌───┬─────────────────────────────────────────────────┐
├─┤ 1 │ Удалить старые установочные пакеты (кэш yum) │
│ ├───┼─────────────────────────────────────────────────┤
├─┤ 2 │ Удалить логи Apache, Nginx, Squid и прочие логи │
│ ├───┼─────────────────────────────────────────────────┤
├─┤ 3 │ Удалить логи Apache конкретного пользователя │
│ ├───┼─────────────────────────────────────────────────┤
├─┤ 4 │ Посмотреть сколько свободного места на диске │
│ ├───┼─────────────────────────────────────────────────┤
└─┤ 0 │ Выйти на уровень вверх │
└───┴─────────────────────────────────────────────────┘
"
#-----------------
#Интерфейс
#-----------------
repeat=true
chosen=0
chosen2=0
while [ "$repeat" = "true" ] #выводим меню, пока не надо выйти
do
#пошёл вывод
if [ $chosen -eq 0 ]; then #выводим меню, только если ещё никуда не заходили
menu
myread_dig pick
else
pick=$chosen
fi
case "$pick" in
1) #Информация о системе
chosen=1
clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1) #Показать общую информацию о системе
clear
showinfo
br
echo "Вычисляем Ваш IP на интерфейсе..."
whatismyip
clear
showinfo
br
echo "Вычисляем Ваш внешний IP..."
whatismyipext
clear
showinfo
br
wait
;;
2) #Провести тест скорости CPU
clear
installed sysbench
if [ $exist == false ]; then
echo "Сейчас будет произведена установка программы sysbench. Но для её установки нужно наличие добавленного репозитория EPEL."
echo "Если вы уже добавляли репозитории сами или с помощью этой программы, то от вас ничего не требуется. В противном случае, их нужно добавить."
echo "Добавить репозитории?"
myread_yn pick
case "$pick" in
y|Y)
repo
echo "Установка репозиториев завершена."
;;
esac
myinstall sysbench
fi
clear
echo "Сейчас будет произведен тест скорости процессора. Ждите..."
bench_cpu
br
echo "Ваш процессор выполнил вычисления за $totaltime"
echo "Мощность вашего процессора соответствует $powerpercent% от эталонного одноядерного процессора."
if [ $cpu_cores -gt 1 ]; then echo "В пересчете на одно ядро мощность вашего процессора составляет $powerpercorepercent% от эталонного."; fi #пересчет на 1 ядро выводим только если ядер больше одного
br
wait
;;
3) #Провести тест скорости диска
clear
echo "Сейчас будет произведен тест скорости диска. Ждите..."
br
bench_hdd
br
echo "Тест завершен."
br
wait
;;
4) #Описание теста производительности
clear
echo "Для теста производительности процессора используется утилита sysbench."
echo "В ней используется 10000 проходов. Количество потоков устанавливается равным"
echo "количеству ядер вашего процессора (если не удалось определить количество ядер,"
echo "используется однопоточный режим), а конечный результат сравнивается с эталонным"
echo "процессором. За эталонный процессор были взяты виртуальные ядра хостеров Vultr и"
echo "Digital Ocean, работающие на частоте 2,4 Ghz"
br
echo "Для теста скорости диска мы пытаемся записать на диск кусок в 64Кб 16 тысяч раз"
echo "(общий объём данных 1000 Мб). Тест прогоняем трижды, показываем каждый результат"
echo "по отдельности, а также среднее значение. Заодно вы сможете оценить насколько"
echo "сильно \"плавает\" это значение от одного прохода к другому."
br
wait
;;
0)
chosen=0
;;
esac
;;
2) #Работа с ОС
chosen=2
clear
if [ $chosen2 -eq 0 ]; then #выводим меню, только если ещё никуда не заходили
echo "$title"
echo "$menu2"
myread_dig pick
else
pick=$chosen2
fi
case "$pick" in
1) #Добавить внешние репозитории
repo
br
echo "Установка репозиториев завершена."
br
wait
;;
2) #Обновить ОС
echo "Начинаем обновление ОС..."
yum update -y
echo "ОС была успешно обновлена."
wait
;;
3) #Установить популярные приложения
echo "Сечас будут установлены следующие программы:"
echo "mc - Midnigh Commander (файловый менеджер)"
echo "htop (более продвинутый мониторинг ресурсов)"
echo "nano (простейший текстовый редактор)"
if [ $osver1 -ne 5 ]; then echo "аддон для yum, который позволяет удалять программы со всеми зависимостями"; fi #Не для CentOS 5
if [ $osver1 -eq 7 ]; then echo "net-tools (чтобы вернуть команду ifconfig)"; fi #Только для CentOS 7
br
wait
echo "Начинаем установку программ..."
yum -y install mc
yum -y install htop
yum -y install nano
if [ $osver1 -ne 5 ]; then yum -y install yum-remove-with-leaves; fi #Не для CentOS 5
if [ $osver1 -eq 7 ]; then yum -y install net-tools; fi #Только для CentOS 7
br
echo "Программы были установлены."
wait
;;
4) #Антивирус
chosen2=4
clear
echo "$title"
echo "$menu24"
myread_dig pick
case "$pick" in
1) #Установить Антивирус
echo "сейчас будет установлен антивирус ClamAV."
wait
yum -y install clamav clamd
br
echo "Антивирус был установлен. Сейчас обновим антивирусные базы"
br