80 lines
2.5 KiB
Plaintext
80 lines
2.5 KiB
Plaintext
|
|
#!/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');
|