vm:ubuntu:script:01-zapusk

Автоматическая настройка новой машины Ubuntu

Данный скрипт автоматически выполняет первичную настройку новой машины Ubuntu, включая:

  • Обновление системы
  • Изменение hostname
  • Установку Docker и Docker Compose
  • Настройку пользователя для работы с Docker

Требования: Ubuntu 18.04+ с правами sudo

curl -fsSL https://raw.githubusercontent.com/your-repo/setup-new-machine.sh -o setup-new-machine.sh && chmod +x setup-new-machine.sh && ./setup-new-machine.sh
# Скачать скрипт
wget https://raw.githubusercontent.com/your-repo/setup-new-machine.sh
 
# Или используя curl
curl -O https://raw.githubusercontent.com/your-repo/setup-new-machine.sh
 
# Сделать исполняемым
chmod +x setup-new-machine.sh
 
# Запустить
./setup-new-machine.sh
# Создать файл скрипта
nano setup-new-machine.sh
 
# Скопировать содержимое скрипта (см. ниже)
# Сохранить файл (Ctrl+X, Y, Enter)
 
# Сделать исполняемым
chmod +x setup-new-machine.sh
 
# Запустить
./setup-new-machine.sh

Сохраните данный код в файл setup-new-machine.sh

setup-new-machine.sh
#!/bin/bash
 
# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
 
# Функция для вывода сообщений
print_message() {
    echo -e "${GREEN}[INFO]${NC} $1"
}
 
print_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}
 
print_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}
 
print_step() {
    echo -e "${BLUE}[STEP]${NC} $1"
}
 
# Функция для обновления /etc/hosts
update_hosts_file() {
    local new_hostname="$1"
    local hosts_file="/etc/hosts"
 
    print_step "Обновление файла $hosts_file"
 
    # Создаем резервную копию
    sudo cp "$hosts_file" "${hosts_file}.backup.$(date +%Y%m%d_%H%M%S)"
    print_message "Создана резервная копия: ${hosts_file}.backup.$(date +%Y%m%d_%H%M%S)"
 
    # Добавляем новую запись в /etc/hosts если её нет
    if ! grep -q "127.0.1.1.*$new_hostname" "$hosts_file"; then
        echo "127.0.1.1    $new_hostname" | sudo tee -a "$hosts_file" > /dev/null
        print_message "Добавлена запись в $hosts_file: 127.0.1.1    $new_hostname"
    else
        print_warning "Запись для $new_hostname уже существует в $hosts_file"
    fi
}
 
# Проверка прав root
check_sudo() {
    if ! sudo -n true 2>/dev/null; then
        print_error "Для выполнения скрипта необходимы права sudo"
        exit 1
    fi
}
 
# Основная функция
main() {
    clear
    echo -e "${GREEN}=================================${NC}"
    echo -e "${GREEN}  Скрипт настройки новой машины  ${NC}"
    echo -e "${GREEN}=================================${NC}"
    echo ""
 
    # Проверка sudo
    check_sudo
 
    # Получение текущего пользователя
    CURRENT_USER=$(whoami)
    print_message "Текущий пользователь: $CURRENT_USER"
 
    # Запрос нового hostname
    echo ""
    read -p "Введите новое имя хоста (hostname): " NEW_HOSTNAME
 
    # Проверка что hostname не пустой
    if [[ -z "$NEW_HOSTNAME" ]]; then
        print_error "Имя хоста не может быть пустым!"
        exit 1
    fi
 
    # Проверка формата hostname
    if [[ ! "$NEW_HOSTNAME" =~ ^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$ ]]; then
        print_error "Недопустимый формат hostname! Используйте только буквы, цифры и дефисы."
        exit 1
    fi
 
    echo ""
    print_message "Будет установлено имя хоста: $NEW_HOSTNAME"
    read -p "Продолжить? (y/N): " -n 1 -r
    echo
 
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        print_message "Установка отменена пользователем"
        exit 0
    fi
 
    echo ""
    print_step "Начинаем настройку системы..."
 
    # 1. Обновление системы
    print_step "Обновление системы"
    sudo apt update && sudo apt upgrade -y
    if [[ $? -eq 0 ]]; then
        print_message "Система успешно обновлена"
    else
        print_error "Ошибка при обновлении системы"
        exit 1
    fi
 
    # 2. Установка нового hostname
    print_step "Установка нового hostname: $NEW_HOSTNAME"
    sudo hostnamectl set-hostname "$NEW_HOSTNAME"
    if [[ $? -eq 0 ]]; then
        print_message "Hostname успешно изменен на: $NEW_HOSTNAME"
    else
        print_error "Ошибка при изменении hostname"
        exit 1
    fi
 
    # 3. Обновление файла /etc/hosts
    update_hosts_file "$NEW_HOSTNAME"
 
    # 4. Установка необходимых пакетов для Docker
    print_step "Установка необходимых пакетов"
    sudo apt install -y ca-certificates curl gnupg lsb-release
    if [[ $? -eq 0 ]]; then
        print_message "Необходимые пакеты установлены"
    else
        print_error "Ошибка при установке пакетов"
        exit 1
    fi
 
    # 5. Добавление GPG ключа Docker и репозитория
    print_step "Добавление официального GPG ключа Docker"
    sudo mkdir -p /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
 
    print_step "Добавление репозитория Docker"
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
 
    # 6. Установка Docker Engine и Docker Compose
    print_step "Обновление пакетов и установка Docker"
    sudo apt update
    sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
 
    if [[ $? -eq 0 ]]; then
        print_message "Docker успешно установлен"
    else
        print_error "Ошибка при установке Docker"
        exit 1
    fi
 
    # 7. Добавление пользователя в группу docker
    print_step "Добавление пользователя $CURRENT_USER в группу docker"
    sudo usermod -aG docker "$CURRENT_USER"
 
    if [[ $? -eq 0 ]]; then
        print_message "Пользователь $CURRENT_USER добавлен в группу docker"
    else
        print_error "Ошибка при добавлении пользователя в группу docker"
        exit 1
    fi
 
    # 8. Проверка установки Docker
    print_step "Проверка версии Docker"
    docker --version 2>/dev/null
    if [[ $? -eq 0 ]]; then
        print_message "Docker установлен корректно"
    else
        print_warning "Docker установлен, но требуется перелогинивание для применения прав доступа"
    fi
 
    # Завершение
    echo ""
    echo -e "${GREEN}=================================${NC}"
    echo -e "${GREEN}     Установка завершена!        ${NC}"
    echo -e "${GREEN}=================================${NC}"
    echo ""
    print_message "Выполнены следующие действия:"
    echo "  ✓ Система обновлена"
    echo "  ✓ Hostname изменен на: $NEW_HOSTNAME"
    echo "  ✓ Файл /etc/hosts обновлен"
    echo "  ✓ Docker и Docker Compose установлены"
    echo "  ✓ Пользователь $CURRENT_USER добавлен в группу docker"
    echo ""
    print_warning "ВАЖНО: Для применения всех изменений необходимо:"
    echo "  1. Перелогиниться в системе (выход и вход)"
    echo "  2. Или выполнить команду: newgrp docker"
    echo "  3. Или перезагрузить систему: sudo reboot"
    echo ""
 
    read -p "Хотите перезагрузить систему сейчас? (y/N): " -n 1 -r
    echo
    if [[ $REPLY =~ ^[Yy]$ ]]; then
        print_message "Перезагружаем систему..."
        sudo reboot
    else
        print_message "Не забудьте перелогиниться для применения изменений!"
        echo "Для проверки Docker выполните: docker --version"
    fi
}
 
# Обработка сигналов для корректного завершения
trap 'print_error "Скрипт прерван пользователем"; exit 1' INT TERM
 
# Запуск основной функции
main "$@"
  1. Убедитесь, что у вас есть права sudo на машине
  2. Проверьте подключение к интернету
  3. Рекомендуется выполнять на чистой установке Ubuntu

Вариант A: Прямое скачивание

wget https://your-domain.com/setup-new-machine.sh

Вариант B: Создание через curl

curl -fsSL https://your-domain.com/setup-new-machine.sh -o setup-new-machine.sh

Вариант C: Создание вручную

nano setup-new-machine.sh
# Вставить содержимое скрипта из раздела выше
# Сохранить: Ctrl+X, затем Y, затем Enter
# Сделать файл исполняемым
chmod +x setup-new-machine.sh
 
# Запустить скрипт
./setup-new-machine.sh
  1. Скрипт запросит новое имя хоста (hostname)
  2. Введите желаемое имя (например: web-server-01)
  3. Подтвердите продолжение установки
  4. Дождитесь завершения всех операций

Рекомендуемые форматы hostname:

  • web-server-01
  • app-prod-01
  • db-master-01
  • dev-machine

После выполнения скрипта обязательно:

  1. Перелогиньтесь в системе, или
  2. Выполните:
    newgrp docker

    , или

  3. Перезагрузите систему:
    sudo reboot
Действие Описание Команды
Обновление системы Обновляет все пакеты до актуальных версий apt update && apt upgrade
Смена hostname Устанавливает новое имя хоста hostnamectl set-hostname
Настройка /etc/hosts Добавляет запись для нового hostname echo «127.0.1.1 hostname» » /etc/hosts
Установка пакетов Устанавливает зависимости для Docker apt install ca-certificates curl gnupg
Добавление репозитория Подключает официальный репозиторий Docker curl + gpg + tee
Установка Docker Устанавливает Docker Engine и Compose apt install docker-ce docker-compose-plugin
Настройка пользователя Добавляет пользователя в группу docker usermod -aG docker

После перелогинивания проверьте установку:

# Проверка hostname
hostname
 
# Проверка Docker
docker --version
docker compose version
 
# Проверка работы Docker без sudo
docker run hello-world

Если Docker требует sudo, выполните:

# Проверить членство в группе
groups $USER
 
# Если группы docker нет, добавить вручную
sudo usermod -aG docker $USER
 
# Применить изменения
newgrp docker
# ИЛИ перелогиниться
# Проверить текущий hostname
hostnamectl status
 
# Установить вручную
sudo hostnamectl set-hostname your-new-hostname
 
# Проверить файл hosts
sudo nano /etc/hosts
# Очистить старые ключи
sudo rm -f /etc/apt/keyrings/docker.gpg
 
# Добавить ключ заново
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
 
# Обновить пакеты
sudo apt update

Для автоматической установки с предустановленным hostname:

# Создать версию с предустановленным именем
export NEW_HOSTNAME="my-server-01"
./setup-new-machine.sh
# Запуск с сохранением логов
./setup-new-machine.sh 2>&1 | tee setup-log.txt

Данный скрипт значительно упрощает процесс первичной настройки новой машины Ubuntu и установки Docker. После его выполнения система готова для:

  • Разработки приложений в контейнерах
  • Развертывания Docker Compose проектов
  • Работы с Docker без прав root
  • Корректной идентификации в сети по hostname

Время выполнения: 5-15 минут (в зависимости от скорости интернета)

  • vm/ubuntu/script/01-zapusk.txt
  • Последнее изменение: 2025/09/03 15:00
  • admin