Установка Perl на Debian 13, 12, 11: подробное руководство

Perl — это мощный скриптовый язык, который до сих пор широко используется для обработки текста (регулярные выражения), написания административных скриптов, парсинга логов, а также для поддержки старых приложений (CGI, системы настройки сетевого оборудования и т.д.). В Debian Perl установлен по умолчанию, но частично — пакет perl-base содержит только интерпретатор. Если вам нужны инструменты разработки (cpan, perldoc) или дополнительные модули, нужно установить полный пакет perl. Главные сложности для новичка: понять разницу между perl-base и perl, а также, при сборке из исходников, правильно настроить PATH, чтобы не было конфликта с системным Perl.

💡 В этом руководстве вы установите Perl на Debian двумя способами: через APT (рекомендованный для большинства) и сборкой из исходников (если нужна самая свежая версия). Вы также узнаете, как установить дополнительные модули через APT и CPAN, как проверить работу Perl на тестовом скрипте и решить типичные проблемы.

В этой статье вы узнаете:

  • Как установить полный пакет Perl через APT
  • Как установить дополнительные Perl-модули через APT (lib...-perl)
  • Как установить Perl из исходников (актуальная версия)
  • Как проверить работу Perl на тестовом скрипте
  • Как создать скрипт для обновления source-сборки (упрощённая и продвинутая версии)
  • Как решить типичные проблемы: конфликт версий, отсутствие cpan, ошибки сборки

Оглавление

1. 🔧 Предварительные требования

Перед установкой убедитесь, что:

  • У вас установлена Debian 11, 12 или 13
  • Подключение к интернету стабильно
  • У вас есть права sudo

⚠️ ВАЖНО: Проверьте права sudo перед установкой

Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:

sudo whoami

Что делает: sudo — выполняет команду от имени суперпользователя, whoami — показывает имя текущего пользователя.

Зачем: Эта команда проверяет, есть ли у вас права sudo. Без них вы не сможете устанавливать пакеты.

✅ Если выводит root — всё в порядке, можете продолжать.

❌ Если выводит is not in the sudoers file — сначала пройдите наше руководство по настройке sudo.

1.1 Обновление системы

Перед установкой всегда обновляйте список пакетов.

sudo apt update && sudo apt upgrade -y

Что делает:

  • sudo — права суперпользователя
  • apt update — обновляет список доступных пакетов из репозиториев
  • && — выполняет следующую команду только если предыдущая успешна
  • apt upgrade -y — обновляет все установленные пакеты до последних версий

Зачем: Это стандартная практика безопасности перед установкой нового ПО.


2. 📊 Сравнение способов установки Perl

В Debian есть два основных способа установки Perl. Вот их сравнение:

МетодОткудаВерсияОбновленияПлюсыМинусы
APT
(рекомендовано)
Репозитории
Debian
Debian 13: 5.40,
Debian 12: 5.36,
Debian 11: 5.32
Автоматически
через apt upgrade
Простота,
безопасность,
интеграция с
системой
Версия может
быть старой,
особенно на
Debian 11
Сборка из
исходников
Perl.orgПоследняя
стабильная (5.42)
ВручнуюМаксимальная
свежесть
Требует
установки
инструментов
сборки, ручное
обновление

💡 Рекомендация: Для большинства пользователей подойдёт APT. Сборку из исходников выбирайте, если вам нужна самая свежая версия Perl или специфические опции компиляции.


3. 📦 Способ 1: Установка Perl через APT (рекомендованный)

Этот способ подходит для большинства пользователей. Вы получаете версию Perl, протестированную для вашего выпуска Debian.

3.1 Проверка, установлен ли Perl (и какой именно)

perl -v | head -2

Что делает: Показывает установленную версию Perl.

Ожидаемый вывод в терминале (Debian 13):

This is perl 5, version 40, subversion 1 (v5.40.1) built for x86_64-linux-gnu-thread-multi

Важно: В минимальных установках Debian может быть только пакет perl-base (только интерпретатор, без cpan и perldoc). Проверьте:

command -v cpan

Если вывод пустой — cpan отсутствует.

3.2 Установка полного пакета Perl

sudo apt install perl -y

Что делает: Устанавливает полный пакет Perl, включая cpan, perldoc и другие инструменты.

3.3 Проверка, что теперь cpan доступен

command -v cpan

Ожидаемый вывод: /usr/bin/cpan

3.4 (Опционально) Установка дополнительных Perl-модулей через APT

Debian упаковывает многие Perl-модули в отдельные пакеты с префиксом lib...-perl.

Поиск модуля (например, для MySQL):

apt-cache search perl | grep mysql

Установка модуля DBD::mysql:

sudo apt install libdbd-mysql-perl -y

Что делает: Устанавливает модуль Perl для работы с MySQL.

Другие полезные пакеты:

ПакетЧто добавляет
perl-docДокументация (perldoc)
libperl-devЗаголовочные файлы для разработки
libjson-perlJSON-парсер
libdatetime-perlРабота с датами и временем
libdbi-perlDBI-интерфейс для баз данных
libdbd-mysql-perlДрайвер DBI для MySQL/MariaDB

4. 🔧 Способ 2: Сборка Perl из исходников (актуальная версия)

Этот способ подходит, если вам нужна самая свежая версия Perl (например, 5.42.x), которая ещё не попала в репозитории Debian.

4.1 Установка инструментов сборки и зависимостей

sudo apt install build-essential curl libgdbm-dev libdb-dev libgdbm-compat-dev zlib1g-dev -y

Что делает: Устанавливает компилятор, утилиты и библиотеки, необходимые для сборки Perl.

4.2 Определение последней версии и скачивание исходников

mkdir -p ~/perl-build && cd ~/perl-build
TARBALL=$(curl -fsSL https://www.perl.org/get.html | grep -oE 'perl-[0-9]+\.[0-9]+\.[0-9]+\.tar\.gz' | head -n 1)
curl -fLO --progress-bar "https://www.cpan.org/src/5.0/$TARBALL"

Что делает: Запрашивает страницу загрузки Perl.org, извлекает ссылку на последний tarball и скачивает его.

4.3 Проверка контрольной суммы (рекомендуется)

CHECKSUM_FILE="${TARBALL}.sha256.txt"
curl -fLO --progress-bar "https://www.cpan.org/src/5.0/$CHECKSUM_FILE"
EXPECTED=$(tr -d '\n\r' < "$CHECKSUM_FILE")
printf '%s  %s\n' "$EXPECTED" "$TARBALL" | sha256sum -c -

Ожидаемый вывод: perl-5.42.1.tar.gz: OK

4.4 Распаковка и конфигурация

tar -xzf "$TARBALL"
SOURCE_DIR="${TARBALL%.tar.gz}"
cd "$SOURCE_DIR"
./Configure -des -Dprefix=/usr/local

Что делает: Настраивает сборку для установки в /usr/local.

4.5 Компиляция и тестирование

make -j$(nproc)
make test

Сколько длится: Тесты могут занимать несколько минут.

4.6 Установка

sudo make install

Что делает: Устанавливает собранный Perl в /usr/local.

4.7 Проверка установки

which perl
/usr/local/bin/perl -v | head -2

Ожидаемый вывод: /usr/local/bin/perl и версия v5.42.1.


5. 🧪 Проверка установки: тестовый скрипт

После установки Perl любым способом стоит убедиться, что он работает.

cat <<'EOF' > hello.pl
#!/usr/bin/env perl
print "Hello, world!\n";
EOF

chmod +x hello.pl
./hello.pl

Ожидаемый вывод: Hello, world!


6. 🔄 Обновление source-сборки (скрипт)

Если вы собрали Perl из исходников, обновлять его нужно вручную. Ниже приведены два варианта скриптов:

  • Упрощённый — для базовых задач, делает главное (скачивает, проверяет SHA256, собирает, устанавливает)
  • Продвинутый — сохраняет манифест установленных файлов, проверяет наличие команд в PATH, очищает старые версии

💡 Рекомендация: Начните с упрощённого. Если вы часто обновляете Perl или управляете несколькими серверами, используйте продвинутую версию — она даёт больше контроля и возможностей для отладки.

6.1 Упрощённая версия скрипта (базовая)

mkdir -p ~/perl-build
cat <<'EOF' > ~/perl-build/update-perl.sh
#!/usr/bin/env bash
set -euo pipefail

INSTALL_PREFIX="/usr/local"
BUILD_DIR="$HOME/perl-build"
LOG_FILE="$BUILD_DIR/perl-update.log"

for cmd in curl gcc make sha256sum; do
    if ! command -v "$cmd" >/dev/null 2>&1; then
        echo "Ошибка: $cmd не установлен."
        exit 1
    fi
done

CURRENT_VERSION=$($INSTALL_PREFIX/bin/perl -v 2>/dev/null | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' | head -n 1 || echo "none")
TARBALL=$(curl -fsSL https://www.perl.org/get.html | grep -oE 'perl-[0-9]+\.[0-9]+\.[0-9]+\.tar\.gz' | head -n 1)

if [ -z "$TARBALL" ]; then
    echo "Не удалось определить последнюю версию Perl."
    exit 1
fi

LATEST_VERSION=${TARBALL#perl-}
LATEST_VERSION=${LATEST_VERSION%.tar.gz}

echo "Текущая версия: $CURRENT_VERSION"
echo "Последняя версия:  v$LATEST_VERSION"

if [ "$CURRENT_VERSION" = "v$LATEST_VERSION" ]; then
    echo "Perl уже последней версии."
    exit 0
fi

mkdir -p "$BUILD_DIR"
cd "$BUILD_DIR"

echo "$(date): Начало обновления до v$LATEST_VERSION" >> "$LOG_FILE"

rm -rf perl-[0-9]*.tar.gz perl-[0-9]*.tar.gz.sha256.txt
curl -fL --retry 3 --progress-bar -o "$TARBALL" "https://www.cpan.org/src/5.0/$TARBALL"
CHECKSUM_FILE="${TARBALL}.sha256.txt"
curl -fL --retry 3 --progress-bar -o "$CHECKSUM_FILE" "https://www.cpan.org/src/5.0/$CHECKSUM_FILE"
EXPECTED=$(tr -d '\n\r' < "$CHECKSUM_FILE")
printf '%s  %s\n' "$EXPECTED" "$TARBALL" | sha256sum -c -

SOURCE_DIR="${TARBALL%.tar.gz}"
rm -rf "$SOURCE_DIR"
tar -xzf "$TARBALL"
cd "$SOURCE_DIR"

./Configure -des -Dprefix="$INSTALL_PREFIX"
make -j$(nproc)
make test
sudo make install

NEW_VERSION=$($INSTALL_PREFIX/bin/perl -v | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' | head -n 1)
echo "$(date): Обновлено до $NEW_VERSION" >> "$LOG_FILE"
echo "Perl успешно обновлён до $NEW_VERSION"
EOF

chmod +x ~/perl-build/update-perl.sh

Запуск упрощённой версии:

~/perl-build/update-perl.sh

6.2 Продвинутая версия скрипта (с манифестом, проверкой PATH и очисткой)

Эта версия рекомендуется для опытных пользователей. Она:

  • Сохраняет список всех установленных файлов (perl-install-manifest.txt) для безопасного удаления
  • Добавляет $HOME/.local/bin в PATH, если его там нет
  • Проверяет наличие всех необходимых команд (curl, gcc, make, sha256sum, sudo, tar)
  • Удаляет старые исходники и архивы перед новой сборкой
  • Ведёт подробный лог (perl-update.log)
  • Использует tee для сохранения лога установки

Установка продвинутого скрипта:

mkdir -p "$HOME/.local/bin" "$HOME/perl-build"

# Добавляем ~/.local/bin в PATH, если его там нет
case ":$PATH:" in
    *":$HOME/.local/bin:"*) ;;
    *) export PATH="$HOME/.local/bin:$PATH" ;;
esac

cat > "$HOME/.local/bin/update-perl-adv" <<'EOF'
#!/usr/bin/env bash
set -euo pipefail

INSTALL_PREFIX="/usr/local"
BUILD_DIR="$HOME/perl-build"
LOG_FILE="$BUILD_DIR/perl-update.log"
INSTALL_LOG="$BUILD_DIR/perl-install.log"
MANIFEST="$BUILD_DIR/perl-install-manifest.txt"

# Проверка наличия всех необходимых команд
for cmd in curl gcc make sha256sum sudo tar; do
    if ! command -v "$cmd" >/dev/null 2>&1; then
        echo "Ошибка: $cmd не установлен."
        echo "Установите зависимости: sudo apt install build-essential curl libgdbm-dev libdb-dev libgdbm-compat-dev zlib1g-dev"
        exit 1
    fi
done

# Текущая версия
CURRENT_VERSION=$($INSTALL_PREFIX/bin/perl -v 2>/dev/null | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' | head -n 1 || echo "none")

# Определение последней версии
DOWNLOAD_PAGE=$(curl -fsSL https://www.perl.org/get.html)
TARBALL=$(printf '%s\n' "$DOWNLOAD_PAGE" | grep -oE 'perl-[0-9]+\.[0-9]+\.[0-9]+\.tar\.gz' | head -n 1 || true)

if [ -z "$TARBALL" ]; then
    echo "Не удалось определить последнюю версию Perl."
    exit 1
fi

LATEST_VERSION=${TARBALL#perl-}
LATEST_VERSION=${LATEST_VERSION%.tar.gz}

echo "Текущая версия: $CURRENT_VERSION"
echo "Последняя версия:  v$LATEST_VERSION"

if [ "$CURRENT_VERSION" = "v$LATEST_VERSION" ]; then
    echo "Perl уже последней версии."
    exit 0
fi

# Подготовка директории сборки
mkdir -p "$BUILD_DIR"
cd "$BUILD_DIR"

echo "$(date): Начало обновления до v$LATEST_VERSION" >> "$LOG_FILE"

# Очистка старых файлов
find "$BUILD_DIR" -maxdepth 1 -type d -name 'perl-[0-9]*' -exec rm -rf {} + 2>/dev/null || true
rm -f perl-[0-9]*.tar.gz perl-[0-9]*.tar.gz.sha256.txt

# Скачивание и проверка
echo "Скачивание $TARBALL..."
curl -fL --retry 3 --retry-delay 2 --retry-connrefused --progress-bar -o "$TARBALL" "https://www.cpan.org/src/5.0/$TARBALL"

CHECKSUM_FILE="${TARBALL}.sha256.txt"
curl -fL --retry 3 --retry-delay 2 --retry-connrefused --progress-bar -o "$CHECKSUM_FILE" "https://www.cpan.org/src/5.0/$CHECKSUM_FILE"

EXPECTED=$(tr -d '\n\r' < "$CHECKSUM_FILE")
printf '%s  %s\n' "$EXPECTED" "$TARBALL" | sha256sum -c -

# Распаковка
SOURCE_DIR="${TARBALL%.tar.gz}"
tar -xzf "$TARBALL"
cd "$SOURCE_DIR"

# Конфигурация, сборка, тесты
./Configure -des -Dprefix="$INSTALL_PREFIX"
make -j$(nproc)
make test

# Запись текущих файлов /usr/local
find "$INSTALL_PREFIX" -xdev \( -type f -o -type l \) -print 2>/dev/null | sort > "$BUILD_DIR/usr-local-before.txt"

# Установка
echo "Установка Perl в $INSTALL_PREFIX..."
sudo make install 2>&1 | tee "$INSTALL_LOG"

# Запись новых файлов /usr/local
find "$INSTALL_PREFIX" -xdev \( -type f -o -type l \) -print 2>/dev/null | sort > "$BUILD_DIR/usr-local-after.txt"

# Обновление манифеста
comm -13 "$BUILD_DIR/usr-local-before.txt" "$BUILD_DIR/usr-local-after.txt" > "$BUILD_DIR/perl-install-manifest.new"
if [ -f "$MANIFEST" ]; then
    sort -u "$MANIFEST" "$BUILD_DIR/perl-install-manifest.new" > "$BUILD_DIR/perl-install-manifest.merged"
    mv "$BUILD_DIR/perl-install-manifest.merged" "$MANIFEST"
else
    mv "$BUILD_DIR/perl-install-manifest.new" "$MANIFEST"
fi

# Очистка кэша команд
hash -r

NEW_VERSION=$($INSTALL_PREFIX/bin/perl -v | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' | head -n 1)
echo "$(date): Успешно обновлено до $NEW_VERSION" >> "$LOG_FILE"
echo "Perl успешно обновлён до $NEW_VERSION"
echo "Манифест установленных файлов сохранён в: $MANIFEST"
EOF

chmod +x "$HOME/.local/bin/update-perl-adv"

Запуск продвинутой версии:

update-perl-adv

Что даёт манифест: При удалении source-сборки вы можете использовать сохранённый список файлов:

cd "$HOME"
sudo xargs -r rm -f < "$HOME/perl-build/perl-install-manifest.txt"

7. ⚠️ Решение типичных проблем

7.1 Ошибка: cpan: command not found

Симптом: cpan не найден, хотя perl -v работает.

Причина: Установлен только базовый пакет perl-base.

Решение: Установите полный пакет:

sudo apt install perl -y

7.2 Конфликт версий: после source-сборки показывает старый Perl

Симптом: Вы собрали Perl из исходников, но perl -v показывает старую версию (из APT).

Причина: Ваш shell находит бинарный файл в /usr/bin (APT-версия) раньше, чем в /usr/local/bin (source-сборка).

Пошаговое решение:

Шаг 1: Проверьте, какой бинарный файл используется:

which perl

Шаг 2: Если выводит /usr/bin/perl, измените порядок PATH:

export PATH=/usr/local/bin:$PATH
echo 'export PATH=/usr/local/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

Шаг 3: Проверьте снова:

which perl

Ожидаемый вывод: /usr/local/bin/perl

7.3 Ошибка компиляции: libperl.so: cannot open shared object file

Симптом: При компиляции модулей или запуске скриптов ошибка о том, что libperl.so не найдена.

Причина: Библиотеки Perl из source-сборки не в LD_LIBRARY_PATH.

Решение: Добавьте путь к библиотекам:

echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

7.4 Ошибка: /usr/bin/perl: bad interpreter: No such file or directory

Симптом: Скрипт с шебангом #!/usr/bin/perl не работает.

Причина: В системе нет Perl по пути /usr/bin/perl (только source-сборка в /usr/local/bin).

Решение: Измените шебанг в скрипте на #!/usr/bin/env perl или создайте симлинк:

sudo ln -s /usr/local/bin/perl /usr/local/bin/perl

8. ❌ Удаление Perl

Удаление APT-версии

sudo apt remove perl -y
sudo apt autoremove -y

Примечание: Пакет perl-base (базовый интерпретатор) не удалится, так как он нужен системе.

Удаление source-сборки

Если есть манифест (продвинутая версия скрипта):

cd "$HOME"
sudo xargs -r rm -f < "$HOME/perl-build/perl-install-manifest.txt"
sudo rm -rf /usr/local/lib/perl5
rm -f "$HOME/.local/bin/update-perl-adv"
rm -rf "$HOME/perl-build"
hash -r

Если манифеста нет (упрощённая версия):

cd /usr/local
sudo rm -rf bin/perl bin/cpan bin/perldoc bin/perlbug bin/perlthanks
sudo rm -rf lib/perl5 share/man/man1/perl*
sudo rm -rf ~/perl-build
hash -r

Проверка удаления

which perl

Ожидаемый вывод: /usr/bin/perl (системная версия).


9. 📝 Чек-лист: всё готово к работе

  • [ ] Система обновлена (sudo apt update && sudo apt upgrade -y)
  • [ ] Выбран и выполнен один из способов установки (APT / Source)
  • [ ] perl -v показывает ожидаемую версию
  • [ ] cpan доступен (для APT — после установки полного пакета)
  • [ ] Тестовый скрипт работает (./hello.pl выводит Hello, world!)
  • [ ] (Для source-сборки) which perl показывает /usr/local/bin/perl
  • [ ] (Для source-сборки) Скрипт обновления создан и запускается

Заключение

Вы установили Perl на Debian. Если вы выбрали APT — получили стабильную, проверенную версию, которая будет обновляться вместе с системой. Если собрали из исходников — получили самую свежую версию, которую можно обновлять скриптами из раздела 6 (упрощённая или продвинутая версия). Perl — это мощный язык для обработки текста, написания скриптов автоматизации и поддержки старых приложений.

Что дальше:

  • Установите дополнительные модули через cpan (например, cpan install JSON)
  • Изучите официальную документацию: perldoc perl
  • Напишите скрипт для парсинга логов с использованием регулярных выражений
  • Если вы работаете с базами данных, установите libdbd-mysql-perl или libdbd-pg-perl