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