#!/usr/bin/perl use strict; use warnings; use autodie; print "Установка Docker...\n"; # Функция для выполнения системных команд sub run_cmd { my $cmd = shift; print "Выполняется: $cmd\n"; system($cmd) == 0 or die "Ошибка выполнения команды: $cmd\n"; } # Функция для получения версии Ubuntu sub get_ubuntu_codename { my $codename; # Читаем файл /etc/os-release if (open my $fh, '<', '/etc/os-release') { while (my $line = <$fh>) { if ($line =~ /^UBUNTU_CODENAME=([^\s]+)/) { $codename = $1; last; } elsif ($line =~ /^VERSION_CODENAME=([^\s]+)/ && !defined $codename) { $codename = $1; } } close $fh; } die "Не удалось определить версию Ubuntu\n" unless defined $codename; return $codename; } # Обновление пакетов и установка зависимостей run_cmd('sudo apt update'); run_cmd('sudo apt install -y ca-certificates curl'); # Создание директории для ключей run_cmd('sudo install -m 0755 -d /etc/apt/keyrings'); # Загрузка GPG ключа Docker run_cmd('sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc'); run_cmd('sudo chmod a+r /etc/apt/keyrings/docker.asc'); # Добавление репозитория Docker my $ubuntu_codename = get_ubuntu_codename(); print "Определена версия Ubuntu: $ubuntu_codename\n"; my $sources_content = <<"EOF"; Types: deb URIs: https://download.docker.com/linux/ubuntu Suites: $ubuntu_codename Components: stable Signed-By: /etc/apt/keyrings/docker.asc EOF # Записываем содержимое в файл open my $fh, '>', '/tmp/docker.sources'; print $fh $sources_content; close $fh; run_cmd('sudo cp /tmp/docker.sources /etc/apt/sources.list.d/docker.sources'); run_cmd('sudo rm -f /tmp/docker.sources'); # Обновление списка пакетов run_cmd('sudo apt update'); # Установка Docker run_cmd('sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin'); print "\nУстановка Docker завершена успешно!\n"; print "Проверка версии Docker:\n"; system('sudo docker --version'); print "\nПроверка работы Docker:\n"; system('sudo docker run hello-world');