#!/bin/bash
cd ..
#======================================================================
#Pip 3
#======================================================================
UpdatePip3()
{
    echo ""
    echo "============================================================="
    echo "Pip 3"
    echo "============================================================="
    echo "Обновляем Pip 3 на всякий случай"
    sudo pip3 install --upgrade pip
}

#======================================================================
#Проверка Python3
#======================================================================
CheckPython3()
{
    echo ""
    echo "============================================================="
    echo "Python 3.10.13"
    echo "============================================================="
    echo "Проверяем наличие Python3 в системе "
    T=$(python3 -V | grep 3.10.13)
    if [ "$T" == "" ];
    then
        echo "Устанавливаем зависимости для Python 3.10 "
        sudo apt-get build-dep python3.10
        
        echo "Скачиваем Python 3.10.13 "
        cd /tmp/
        wget -c https://www.python.org/ftp/python/3.10.13/Python-3.10.13.tgz

        echo "Распаковываем архив... "
        tar -xvzf Python-3.10.13.tgz
        cd Python-3.10.13

        echo "Настраиваем пакет... "
        ./configure --enable-optimizations

        echo "Компилируем пакет... "
        make
        make test

        echo "Устанавливаем Python 3.10.13... "
        sudo make install
    else
        echo "Уже установлен Python 3.10.13"
        return 1
    fi
    
    echo "Перепроверяем " $1
    T=$(python3 -V | grep 3.10.13)
    if $T= ""
    then
        echo "Не удалось установить " $1
        return 0 #Неудача
    fi
    echo "Успешно установлен " $1
    echo "Рекомендуется перезагрузить Linux командой: sudo reboot 0"
    return 1 #Успех
}

#======================================================================
#Проверка пакетов Linux
#======================================================================
Check()
{
    echo ""
    echo "============================================================="
    echo "Linux:" $1
    echo "============================================================="
    
    echo "Проверяем наличие пакета Python 3 в системе "
    T=$(dpkg --get-selections | grep $1 | grep install)
    if [ "$T" == "" ];
    then
        echo "Устанавливаем " $1
        sudo apt-get -y install $1
    else
        echo "Уже установлен " $1
        return 1
    fi
    
    echo "Перепроверяем " $1
    T=$(dpkg --get-selections | grep $1 | grep install)
    if [ "$T" == "" ];
    then
        echo "Не удалось установить " $1
        return 0 #Неудача
    fi
    echo "Успешно установлен " $1
    return 1 #Успех
}

#======================================================================
#Проверка пакетов Python 3
#======================================================================
CheckPip()
{
    echo ""
    echo "============================================================="
    echo "Pip 3: " $1
    echo "============================================================="
    
    echo "Проверяем наличие пакета в Python 3 "
    T=$(sudo pip3 freeze | grep $1)
    if [ "$T" == "" ];
    then
        echo "Устанавливаем " $1
        sudo pip3 install $1
    else
        echo "Уже установлен " $1
        return 1
    fi
    
    echo "Перепроверяем " $1
    T=$(sudo pip3 freeze | grep $1)
    if [ "$T" == "" ];
    then
        echo "Не удалось установить " $1
        return 0 #Неудача
    fi
    echo "Успешно установлен " $1
    return 1 #Успех
}


echo "Обновление существующих пакетов Linux..."
sudo apt-get update 
sudo apt-get -y upgrade

Check "git" #Система управления репозиториями
Check "rsync"  #Копировальщик
Check "build-essential" #информационный список пакетов необходимых для сборки
Check "make" #утилита управления компиляцией
Check "libssl-dev" #для работы с SSL
Check "libcurl4-gnutls-dev" #development files and documentation for libcurl (GnuTLS flavour). libcurl is an easy-to-use client-side URL transfer library, supporting DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP.
Check "libgnutls28-dev" #GNU TLS library - development files GnuTLS is a portable library which implements the Transport Layer Security (TLS 1.0, 1.1, 1.2, 1.3) and Datagram Transport Layer Security (DTLS 1.0, 1.2) protocols.
Check "zlib1g-dev" #для сжатия 
Check "libbz2-dev" #библиотека сжатия по алгоритму Барроуза—Уилера (версия для разработки) Статические библиотеки и заголовочные файлы, требуемые для сборки приложений, использующих библиотеку bzip2.
Check "libreadline-dev" #GNU readline and history libraries, development files
Check "libsqlite3-dev" #SQLite 3 development files
Check "wget" #Для возможности скачивания с Инета, например Python3
Check "curl" #передача данных с синтаксисом URL, инструмент командной строки. curl — инструмент командной строки для передачи данных с синтаксисом URL, поддерживающий DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET и TFTP.
#Check "llvm" #Low-Level Virtual Machine (LLVM). The Low-Level Virtual Machine (LLVM) is a collection of libraries and tools that make it easy to build compilers, optimizers, Just-In-Time code generators, and many other compiler-related programs. 
#Check "libncurses5-dev" # transitional package for libncurses-dev. This is a transitional package that can safely be removed.
#Check "libncursesw5-dev" #transitional package for libncurses-dev. This is a transitional package that can safely be removed.
#Check "xz-utils" #утилита для работы с архивами в формате XZ
Check "tk-dev" #Toolkit for Tcl and X11 (default version) - development files Tk is a cross-platform graphical toolkit which provides the Motif look-and-feel and is implemented using the Tcl scripting language.
Check "postfix" #высокопроизводительный агент пересылки почты
Check "ssh" #для возможности работы по удаленке

CheckPython3 #Проверка и установка Python3
UpdatePip3 # Обновление Pip3


