Автоматическая настройка новой машины Ubuntu
Описание
Данный скрипт автоматически выполняет первичную настройку новой машины Ubuntu, включая:
- Обновление системы
- Изменение hostname
- Установку Docker и Docker Compose
- Настройку пользователя для работы с Docker
Требования: Ubuntu 18.04+ с правами sudo
Быстрый запуск
Метод 1: Скачивание и запуск одной командой
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
Метод 2: Пошаговое скачивание
# Скачать скрипт 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
Метод 3: Создание скрипта вручную
# Создать файл скрипта 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 на машине
- Проверьте подключение к интернету
- Рекомендуется выполнять на чистой установке Ubuntu
Шаг 2: Получение скрипта
Вариант 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
Шаг 3: Запуск скрипта
# Сделать файл исполняемым chmod +x setup-new-machine.sh # Запустить скрипт ./setup-new-machine.sh
Шаг 4: Следование инструкциям
- Скрипт запросит новое имя хоста (hostname)
- Введите желаемое имя (например: web-server-01)
- Подтвердите продолжение установки
- Дождитесь завершения всех операций
Рекомендуемые форматы hostname:
- web-server-01
- app-prod-01
- db-master-01
- dev-machine
Шаг 5: Завершение
После выполнения скрипта обязательно:
- Перелогиньтесь в системе, или
- Выполните:
newgrp docker
, или
- Перезагрузите систему:
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
Если Docker требует sudo, выполните:
# Проверить членство в группе groups $USER # Если группы docker нет, добавить вручную sudo usermod -aG docker $USER # Применить изменения newgrp docker # ИЛИ перелогиниться
Ошибка при изменении hostname
# Проверить текущий hostname hostnamectl status # Установить вручную sudo hostnamectl set-hostname your-new-hostname # Проверить файл hosts sudo nano /etc/hosts
Проблемы с репозиторием Docker
# Очистить старые ключи 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 минут (в зависимости от скорости интернета)