Arch · Portage-style · Security-first
Aura-Emerge
Gentoo-style emerge for Arch — packages from official
repos, the AUR, and ABS. PKGBUILDs get scanned for supply-chain tricks;
untrusted build steps run inside a bwrap sandbox.
Features
Everything you install lands in a world file — install once, keep track forever.
Official packages go through pacman; AUR and ABS are built by emerge itself.
Core
Gentoo-style workflow
Робочий процес як у Gentoo
@world, custom sets, --tree,
--exclude, --keep-going, merge log —
Portage habits that still work on Arch.
@world, власні набори, --tree,
--exclude, --keep-going, лог merge —
звички Portage, які працюють і на Arch.
Security
PKGBUILD scanner
Сканер PKGBUILD
Before every AUR build: AST + heuristics for curl|sh,
interpreter -e/-c (python/perl/ruby/node/lua),
paste sites, known IOCs, and more. You still choose whether to continue.
Перед кожною збіркою AUR: AST і евристики на curl|sh,
interpreter -e/-c (python/perl/ruby/node/lua),
paste-сайти, відомі IOC тощо. Продовжувати чи ні — вирішуєте ви.
Sandbox
bwrap sandbox
Пісочниця bwrap
Untrusted phases under bubblewrap — no real $HOME//run,
cleared env, public GPG only, then archive audit before pacman -U.
Недовірені фази в bubblewrap — без справжнього $HOME//run,
очищене env, лише public GPG, потім аудит архіву перед pacman -U.
Sources
Repos · AUR · ABS
Repos · AUR · ABS
Official packages through pacman, AUR via git + RPC,
ABS via pkgctl — same scanner and sandbox for all three.
Офіційні пакунки через pacman, AUR через git + RPC,
ABS через pkgctl — той самий сканер і пісочниця.
Mask
package.mask
A permanent “never install” list — even as a transitive AUR dependency.
Separate from one-shot --exclude.
Постійний список «ніколи не ставити» — навіть як транзитна AUR-залежність.
Окремо від одноразового --exclude.
Maintenance
Revdep & devel
Revdep і devel
--revdep-rebuild finds broken library links;
--devel rebuilds -git packages when upstream moves on.
--revdep-rebuild знаходить биті лінки бібліотек;
--devel перезбирає -git, коли upstream рухається далі.
Quick start
Not installed yet?
See the installation guide.
-
Install a package — repos first, AUR if needed:
Встановити пакунок — спочатку репо, інакше AUR:
emerge neovim
-
Force AUR, review the PKGBUILD, confirm before the build:
Лише AUR, переглянути PKGBUILD, підтвердити перед збіркою:
emerge neovim-git --aur --pkgbuild-view -a
-
Full system upgrade (repos + AUR):
Повне оновлення системи (репо + AUR):
emerge -u @world
-
Bring the machine in line with your
world file:
Підтягнути систему під файл world:
emerge @world
World & sets
Path: /etc/portage/world. Every explicitly installed package
is recorded automatically and removed on unmerge. Editable by hand -
one atom per line, optional repo prefix:
extra/firefox
aur/ayugram-desktop-bin
core/nano
abs/nano-custom
Two meanings of @world
emerge @world (no -u) — provision: install whatever world lists that is not already on the system.
emerge -u / emerge -u @world — upgrade: upgrade everything already installed. Does not read world.
emerge --sync — database refresh only.
Custom sets
Files under /etc/portage/sets/<name>.set are invoked as @<name>:
# /etc/portage/sets/game-kit.set
steam
lutris
gamemode
aur/protonup-qt
emerge @game-kit @dev-tools neovim
emerge --list-sets
Шлях: /etc/portage/world. Кожен явно встановлений пакунок
додається автоматично, при видаленні — прибирається. Можна редагувати вручну —
один атом на рядок, опційний префікс репо:
extra/firefox
aur/ayugram-desktop-bin
core/nano
abs/nano-custom
Два значення @world
emerge @world (без -u) — провізіювання: встановити те, чого немає з world.
emerge -u / emerge -u @world — оновлення: оновити все встановлене. World не читається.
emerge --sync — лише освіження баз.
Власні набори
Файли /etc/portage/sets/<name>.set викликаються як @<name>:
# /etc/portage/sets/game-kit.set
steam
lutris
gamemode
aur/protonup-qt
emerge @game-kit @dev-tools neovim
emerge --list-sets
make.conf
/etc/portage/make.conf (and
~/.config/emerge/make.conf) is aura-emerge's own config —
default flags plus build-env overrides applied via a generated makepkg.conf.
# EMERGE_DEFAULT_OPTS spliced into every run
EMERGE_DEFAULT_OPTS="--pkgbuild-view --unshare-net-build"
CFLAGS="-march=native -O2 -pipe"
CXXFLAGS="$CFLAGS"
RUSTFLAGS="-C target-cpu=native"
MAKEFLAGS="-j$(nproc)"
OPTIONS=(strip docs !debug lto)
BUILDENV=(!distcc color check !sign)
Use --ignore-default-opts for a single run without the defaults.
emerge --info shows what was loaded and the effective expanded values.
/etc/portage/make.conf (і
~/.config/emerge/make.conf) — окремий конфіг aura-emerge:
прапори за замовчуванням і перевизначення середовища збірки через згенерований makepkg.conf.
EMERGE_DEFAULT_OPTS="--pkgbuild-view --unshare-net-build"
CFLAGS="-march=native -O2 -pipe"
CXXFLAGS="$CFLAGS"
RUSTFLAGS="-C target-cpu=native"
MAKEFLAGS="-j$(nproc)"
OPTIONS=(strip docs !debug lto)
BUILDENV=(!distcc color check !sign)
--ignore-default-opts — один запуск без дефолтів.
emerge --info показує, що прочитано, і фактичні розкриті значення.
Usage highlights
| CommandКоманда |
What it doesЩо робить |
emerge pkg |
Repos first, AUR if the package is not thereСпочатку офіційні репо, якщо немає — AUR |
emerge pkg --aur |
AUR only, with AUR deps resolved recursivelyЛише AUR, залежності теж з AUR |
emerge pkg --abs |
Build from ABS inside the sandboxЗбірка з ABS у пісочниці |
emerge -apt pkg --aur |
Ask, pretend, show the dependency treeЗапит, pretend і дерево залежностей |
emerge -u --devel |
Upgrade, and rebuild -git packages whose upstream movedОновлення + перезбірка -git, у яких зрушив upstream |
emerge --scan pkg --aur |
Scan the PKGBUILD only — no buildЛише аудит PKGBUILD, без збірки |
emerge --revdep-rebuild |
Find binaries with broken library links and fix themЗнайти бінарники з битими лінками бібліотек і полагодити |
emerge --news |
Arch Linux newsНовини Arch Linux |
emerge -c / -C pkg |
Depclean / unmergeDepclean / unmerge |
Full flag list: Flags page, emerge --help, or the generated emerge(1) man page.
Повний список прапорів: сторінка Прапори, emerge --help або man emerge(1).
Security: PKGBUILD scanner
Before every AUR install, the raw PKGBUILD (and any
.install hook) is fetched from cgit and scanned in two layers:
-
AST (
tree-sitter-bash) —
curl|sh, base64/xxd pipes, process substitution,
eval "$(curl …)", sudo/pkexec/doas,
python/perl/ruby/node/lua inline-exec, top-level command substitution, and more.
-
Line heuristics —
chmod 777, raw IPs, foreign package managers, paste sites,
.onion, anti-sandbox probes, known campaign IOCs.
Built *.pkg.tar.* files are audited before pacman -U
(setuid, .INSTALL, alpm hooks, systemd, sudoers, …).
Перед кожним встановленням з AUR «сирий» PKGBUILD (і будь-який
.install-хук) завантажується з cgit і сканується у два шари:
-
AST (
tree-sitter-bash) —
curl|sh, base64/xxd pipes, process substitution,
eval "$(curl …)", sudo/pkexec/doas,
python/perl/ruby/node/lua inline-exec, top-level command substitution тощо.
-
Текстові евристики —
chmod 777, «сирі» IP, сторонні ПМ, paste-сайти,
.onion, зонди anti-sandbox, відомі IOC кампаній.
Готові *.pkg.tar.* перевіряються перед pacman -U
(setuid, .INSTALL, alpm hooks, systemd, sudoers, …).
Not a hard block
Findings are reported with file/line and a cgit link. You get Continue anyway? [y/N] — the decision stays with you.
emerge --scan neovim-git --aur
emerge --install-pkgbuild ~/src/my-pkg --scan
bwrap sandbox
AUR and ABS builds run pkgver / prepare /
build / check / package inside
a bubblewrap namespace when bubblewrap is installed:
- tmpfs over
/home and /run — no real home, no session bus/agents
- Cleared environment; public-only GPG; PKGBUILD/
*.install read-only
- Writes only in the build dir; network optional via
--unshare-net-build
- Fakeroot shim under
/var/tmp; archive audit before pacman -U
Dependency install and final pacman -U stay outside
the sandbox — they do not execute PKGBUILD-authored code.
Збірки AUR і ABS виконують pkgver / prepare /
build / check / package всередині
bubblewrap (якщо встановлено):
- tmpfs поверх
/home і /run — без справжнього home і session bus
- Очищене env; лише public GPG; PKGBUILD/
*.install read-only
- Запис лише в каталог збірки; мережа опційно через
--unshare-net-build
- Шим fakeroot у
/var/tmp; аудит архіву перед pacman -U
Встановлення залежностей і фінальний pacman -U — поза пісочницею.
emerge pkg --aur --unshare-net-build # no net during build()
emerge pkg --aur --no-sandbox # plain makepkg (with warning)
package.mask
/etc/portage/package.mask (file or directory of files) —
packages this machine never installs, even as a transitive dependency:
ayugram-desktop-bin # any source
aur/*-bin # never AUR -bin packages
*-git # no devel packages on this box
extra/nano # specific repo/name
A masked package hard-stops the request. Use --exclude
for a one-run skip instead.
/etc/portage/package.mask (файл або каталог файлів) —
пакунки, які ця машина ніколи не встановлює, навіть як транзитна залежність:
ayugram-desktop-bin # будь-яке джерело
aur/*-bin # ніколи AUR -bin
*-git # без devel на цій машині
extra/nano # конкретне репо/ім'я
Замаскований пакунок — жорстка зупинка. Для одноразового пропуску —
--exclude.