/
gitVerseVVG
/
OfflineInstaller
Обзор
Документация
Войти
/
gitVerseVVG
/
OfflineInstaller
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
resources_create/files/postgresql/postgresql_install.sh
228 строк
8 KB
gitVerseVVG
create: OfflineInstaller.lpi, OfflineInstaller.lpr, OfflineInstaller.lps, resources_create.sh, Factorial5, app_install.sh, rabbitmq_install.sh, postgresql_install.sh, redis_install.sh, read.me
05 май 2026, 10:14
Верифицирован
05 май 2026, 10:14
d2040ca
Код
Авторство
О чём код?
#!/bin/bash # Скрипт установки PostgreSQL из локальных deb-пакетов # Каталог с пакетами: /tmp/offline_installer/postgresql set -e # Прерывать выполнение при любой ошибке # Функция для вывода сообщений log_info() { echo -e "[INFO] $1" } log_error() { echo -e "[ERROR] $1" } log_warning() { echo -e "[WARNING] $1" } log_info "*** Версия 04" # Проверка запуска от root if [ "$EUID" -ne 0 ]; then log_error "Пожалуйста, запустите скрипт с правами root (sudo)" exit 1 fi # Каталоги BASE_DIR="/tmp/offline_installer" DEBS_DIR="$BASE_DIR/postgresql" SCRIPT_DIR="$BASE_DIR" # Проверка наличия каталога с пакетами if [ ! -d "$DEBS_DIR" ]; then log_error "Каталог $DEBS_DIR не найден!" exit 1 fi # Список необходимых пакетов PACKAGES=( "libjson-perl_4.10000-1_all.deb" "libllvm14_14.0.6-12_amd64.deb" "libpq5_15.17-0+deb12u1_amd64.deb" "postgresql-common_248+deb12u1_all.deb" "postgresql-client-common_248+deb12u1_all.deb" "postgresql-client-15_15.17-0+deb12u1_amd64.deb" "postgresql-15_15.17-0+deb12u1_amd64.deb" ) log_info "Начало установки PostgreSQL 15 из локальных пакетов" # Проверка наличия всех пакетов log_info "Проверка наличия всех deb-пакетов..." MISSING_PACKAGES=() for pkg in "${PACKAGES[@]}"; do if [ ! -f "$DEBS_DIR/$pkg" ]; then MISSING_PACKAGES+=("$pkg") fi done if [ ${#MISSING_PACKAGES[@]} -ne 0 ]; then log_error "Отсутствуют следующие пакеты:" for pkg in "${MISSING_PACKAGES[@]}"; do echo " - $pkg" done exit 1 fi log_info "Все пакеты найдены" # Установка пакетов в правильном порядке (с учётом зависимостей) log_info "Установка пакетов PostgreSQL..." # OK: 1. Установка libpq5 (библиотека) log_info "Установка libpq5..." dpkg -i "$DEBS_DIR/libpq5_15.17-0+deb12u1_amd64.deb" # 2. Установка postgresql-client-common log_info "Установка postgresql-client-common..." dpkg -i "$DEBS_DIR/postgresql-client-common_248+deb12u1_all.deb" # 2.1. libjson-perl log_info "Установка libjson-perl..." dpkg -i "$DEBS_DIR/libjson-perl_4.10000-1_all.deb" # 3. Установка postgresql-common (общие файлы) log_info "Установка postgresql-common..." dpkg -i "$DEBS_DIR/postgresql-common_248+deb12u1_all.deb" # 4. Установка postgresql-client-15 log_info "Установка postgresql-client-15..." dpkg -i "$DEBS_DIR/postgresql-client-15_15.17-0+deb12u1_amd64.deb" # 4.1. libllvm14_14.0.6-12_amd64.deb log_info "Установка libllvm14..." dpkg -i "$DEBS_DIR/libllvm14_14.0.6-12_amd64.deb" # 5. Установка postgresql-15 (основной сервер) log_info "Установка postgresql-15..." dpkg -i "$DEBS_DIR/postgresql-15_15.17-0+deb12u1_amd64.deb" # Проверка успешности установки if [ $? -eq 0 ]; then log_info "Пакеты PostgreSQL успешно установлены" else log_error "Ошибка при установке пакетов" exit 1 fi # Настройка PostgreSQL log_info "Настройка PostgreSQL..." # Создание пользователя postgres, если не существует if ! id "postgres" &>/dev/null; then log_info "Создание пользователя postgres..." useradd -r -m -d /var/lib/postgresql -s /bin/bash postgres fi # Создание необходимых каталогов log_info "Создание каталогов для PostgreSQL..." mkdir -p /var/lib/postgresql/15/main mkdir -p /var/log/postgresql mkdir -p /etc/postgresql/15/main mkdir -p /var/run/postgresql # Установка правильных прав log_info "Настройка прав доступа..." chown -R postgres:postgres /var/lib/postgresql chown -R postgres:postgres /var/log/postgresql chown -R postgres:postgres /etc/postgresql chown -R postgres:postgres /var/run/postgresql # Инициализация базы данных, если не инициализирована if [ ! -f "/var/lib/postgresql/15/main/PG_VERSION" ]; then log_info "Инициализация кластера PostgreSQL..." su - postgres -c "/usr/lib/postgresql/15/bin/initdb -D /var/lib/postgresql/15/main" fi # Настройка базовой конфигурации log_info "Настройка конфигурационных файлов..." # postgresql.conf cat > /etc/postgresql/15/main/postgresql.conf <<EOF data_directory = '/var/lib/postgresql/15/main' hba_file = '/etc/postgresql/15/main/pg_hba.conf' ident_file = '/etc/postgresql/15/main/pg_ident.conf' external_pid_file = '/var/run/postgresql/15-main.pid' listen_addresses = 'localhost' port = 5432 max_connections = 100 shared_buffers = 128MB dynamic_shared_memory_type = posix log_line_prefix = '%m [%p] %q%u@%d ' log_timezone = 'Etc/UTC' cluster_name = '15/main' datestyle = 'iso, mdy' timezone = 'Etc/UTC' lc_messages = 'C' lc_monetary = 'C' lc_numeric = 'C' lc_time = 'C' default_text_search_config = 'pg_catalog.english' EOF # pg_hba.conf (базовая аутентификация) cat > /etc/postgresql/15/main/pg_hba.conf <<EOF # TYPE DATABASE USER ADDRESS METHOD local all postgres peer local all all md5 host all all 127.0.0.1/32 md5 host all all ::1/128 md5 EOF chown postgres:postgres /etc/postgresql/15/main/postgresql.conf chown postgres:postgres /etc/postgresql/15/main/pg_hba.conf # Настройка systemd для автозапуска log_info "Настройка автозапуска PostgreSQL..." # Обновление systemd systemctl daemon-reload # Включение автозапуска systemctl enable postgresql # Запуск сервиса log_info "Запуск PostgreSQL..." systemctl start postgresql # Проверка статуса sleep 3 if systemctl is-active --quiet postgresql; then log_info "PostgreSQL успешно запущен" else log_warning "PostgreSQL не запустился автоматически, попробуйте проверить статус: systemctl status postgresql" fi # Установка пароля для пользователя postgres log_info "Настройка пароля для пользователя postgres..." sleep 2 # Небольшая пауза для гарантии запуска сервера if su - postgres -c "psql -c \"ALTER USER postgres WITH PASSWORD 'postgres';\"" 2>/dev/null; then log_info "Пароль для пользователя postgres установлен: postgres" else log_warning "Не удалось установить пароль для postgres. Возможно, сервер ещё не готов" fi # Вывод информации о версии log_info "Проверка установленной версии PostgreSQL:" su - postgres -c "psql --version" log_info "Установка и настройка PostgreSQL успешно завершены!" log_info "База данных запущена и добавлена в автозагрузку." # Очистка: удаление каталога /tmp/offline_installer log_info "Удаление временного каталога $BASE_DIR..." cd / # Переход в корень, чтобы не мешать удалению rm -rf "$BASE_DIR" if [ ! -d "$BASE_DIR" ]; then log_info "Каталог $BASE_DIR успешно удалён" else log_warning "Не удалось удалить каталог $BASE_DIR" fi log_info "Готово!" log_info "Для подключения к PostgreSQL используйте: sudo -u postgres psql" log_info "Пароль пользователя postgres: postgres"