vm:ubuntu:script:01-zapusk

Это старая версия документа!


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

## Описание

Данный скрипт автоматически выполняет первичную настройку новой машины Ubuntu, включая: * Обновление системы * Изменение hostname * Установку Docker и Docker Compose * Настройку пользователя для работы с Docker

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

## Быстрый запуск

### Метод 1: Скачивание и запуск одной командой

```bash 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: Пошаговое скачивание

```bash # Скачать скрипт 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: Создание скрипта вручную

```bash # Создать файл скрипта nano setup-new-machine.sh

# Скопировать содержимое скрипта (см. ниже) # Сохранить файл (Ctrl+X, Y, Enter)

# Сделать исполняемым chmod +x setup-new-machine.sh

# Запустить ./setup-new-machine.sh ```

## Полный код скрипта

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

```bash #!/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: Прямое скачивание ```bash wget https://your-domain.com/setup-new-machine.sh ```

Вариант B: Создание через curl ```bash curl -fsSL https://your-domain.com/setup-new-machine.sh -o setup-new-machine.sh ```

Вариант C: Создание вручную ```bash nano setup-new-machine.sh # Вставить содержимое скрипта из раздела выше # Сохранить: Ctrl+X, затем Y, затем Enter ```

### Шаг 3: Запуск скрипта

```bash # Сделать файл исполняемым 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`

## Проверка результата

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

```bash # Проверка hostname hostname

# Проверка Docker docker –version docker compose version

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

## Устранение проблем

### Docker требует sudo

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

```bash # Проверить членство в группе groups $USER

# Если группы docker нет, добавить вручную sudo usermod -aG docker $USER

# Применить изменения newgrp docker # ИЛИ перелогиниться ```

### Ошибка при изменении hostname

```bash # Проверить текущий hostname hostnamectl status

# Установить вручную sudo hostnamectl set-hostname your-new-hostname

# Проверить файл hosts sudo nano /etc/hosts ```

### Проблемы с репозиторием Docker

```bash # Очистить старые ключи 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:

```bash # Создать версию с предустановленным именем export NEW_HOSTNAME=«my-server-01» ./setup-new-machine.sh ```

### Логирование процесса

```bash # Запуск с сохранением логов ./setup-new-machine.sh 2>&1 | tee setup-log.txt ```

## Заключение

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

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

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

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