Documentation
Full reference for world, make.conf, mask, sandbox, scanner, and everyday usage — the README in page form.
Installation
AUR helper
AUR-хелпер
paru -S aura-emerge
# or
yay -S aura-emerge
Makepkg
git clone https://aur.archlinux.org/aura-emerge.git
cd aura-emerge
makepkg -si
Development builds from source. Clone, then pick a method:
Розробницькі збірки з вихідного коду. Склонуйте репозиторій і оберіть спосіб встановлення:
git clone https://github.com/Undercat037/aura-emerge.git
cd aura-emerge
cargo build --release
sudo cp target/release/aura-emerge /usr/bin/emerge
sudo ln -sf /usr/bin/emerge /usr/bin/portageq
emerge --gen-completions bash | sudo tee /usr/share/bash-completion/completions/emerge
emerge --gen-completions zsh | sudo tee /usr/share/zsh/site-functions/_emerge
emerge --gen-completions fish | sudo tee /usr/share/fish/vendor_completions.d/emerge.fish
emerge --gen-manpage | sudo tee /usr/share/man/man1/emerge.1 >/dev/null
makepkg -si
make install
Dependencies
Залежності
- Required:
git - Optional:
devtools(--abs),gnupg(--autopgp),bubblewrap(sandbox; without it builds fall back to plain makepkg)devtools(--abs),gnupg(--autopgp),bubblewrap(пісочниця; без нього збірка виконується звичайним makepkg)
emerge (with a portageq symlink). Completions and the man page are generated from the same CLI definition.
World & sets
Path: /etc/portage/world. Every explicitly installed package is added automatically and removed on unmerge. You can edit it by hand: one package per line, optional repo prefix.
cachyos-extra-v3/rust-analyzer
aur/ayugram-desktop-bin
abs/nano-custom
extra/firefox
Err/local-thing
Prefixes: the name of any sync repository (third-party ones included), aur/, abs/, or Err/ (source unknown).
$ rg keyring /etc/portage/world
cachyos/archlinux-keyring
cachyos/cachyos-keyring
chaotic-aur/chaotic-keyring
Two meanings of @world
emerge @world(no-u) — provision: install whatever world lists that is not on the system yet.emerge -u @world(oremerge -u) — upgrade: upgrade everything already installed. It does not read world.emerge --sync— database refresh only.
Custom sets
/etc/portage/sets/<name>.set is invoked as @<name>. One atom per line, # comments allowed. Sets combine freely with each other and with plain packages:
emerge @game-kit @dev-tools neovim
emerge --list-sets
Entries without a prefix are resolved through the official repos first, and through the AUR only if that misses — here ttf-comic-sans comes from the AUR:
$ emerge -at @fonts
>>> Not found in official repos: 'ttf-comic-sans'. Searching AUR...
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild R ] noto-fonts-1:2026.09.01-1
[ebuild R ] noto-fonts-emoji-1:2.051-1
[ebuild R ] ttf-material-icons-2.874-1
[ebuild R ] aur/ttf-comic-sans-5.14-1
[ebuild R ] `-- gnu-free-fonts-20120503-9
Total: 8 package(s)
--regen-world / --regen-sets @name re-resolve repo prefixes. Add --regen-sort to alphabetize a set (this drops comments and grouping).
Layout of /etc/portage
/etc/portage/
├── make.conf
├── env/ # env files for package.env
├── package.env/ # a file, or a directory of files
├── package.mask/ # a file, or a directory of files
├── sets/ # custom sets: <name>.set
├── world
├── lastaction.state # emerge's own state files
└── resume.state
Шлях: /etc/portage/world. Кожен явно встановлений пакунок додається автоматично, а при видаленні (unmerge) прибирається. Файл можна редагувати вручну: один пакунок на рядок, префікс репозиторію необов'язковий.
cachyos-extra-v3/rust-analyzer
aur/ayugram-desktop-bin
abs/nano-custom
extra/firefox
Err/local-thing
Префікси: назва будь-якого синхронізованого репозиторію (зокрема сторонніх), aur/, abs/ або Err/ (джерело невідоме).
$ rg keyring /etc/portage/world
cachyos/archlinux-keyring
cachyos/cachyos-keyring
chaotic-aur/chaotic-keyring
Два значення @world
emerge @world(без-u) — розгортання (provision): установити все, що є у world, але ще відсутнє в системі.emerge -u @world(абоemerge -u) — оновлення: оновити все вже встановлене. Файл world при цьому не читається.emerge --sync— лише освіження баз.
Власні набори
/etc/portage/sets/<name>.set викликається як @<name>. Один атом на рядок, коментарі через # дозволені. Набори вільно комбінуються між собою та зі звичайними пакунками:
emerge @game-kit @dev-tools neovim
emerge --list-sets
Записи без префікса спершу шукаються в офіційних репозиторіях і лише за невдачі — в AUR. Тут ttf-comic-sans береться з AUR:
$ emerge -at @fonts
>>> Not found in official repos: 'ttf-comic-sans'. Searching AUR...
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild R ] noto-fonts-1:2026.09.01-1
[ebuild R ] noto-fonts-emoji-1:2.051-1
[ebuild R ] ttf-material-icons-2.874-1
[ebuild R ] aur/ttf-comic-sans-5.14-1
[ebuild R ] `-- gnu-free-fonts-20120503-9
Total: 8 package(s)
--regen-world / --regen-sets @name повторно визначають префікси репозиторіїв. З --regen-sort набір упорядковується за абеткою (коментарі та групування при цьому втрачаються).
Структура /etc/portage
/etc/portage/
├── make.conf
├── env/ # env files for package.env
├── package.env/ # a file, or a directory of files
├── package.mask/ # a file, or a directory of files
├── sets/ # custom sets: <name>.set
├── world
├── lastaction.state # emerge's own state files
└── resume.state
make.conf
/etc/portage/make.conf and ~/.config/emerge/make.conf are aura-emerge's own config (not makepkg.conf). The system file is read first and the user file last; the last key wins.
A real config from a working machine:
#EMERGE_DEFAULT_OPTS=""
#
CFLAGS="-march=znver3 -O2 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection -fstack-protector-strong -falign-functions=32 -falign-loops=32 -ftree-vectorize -funroll-loops"
CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS"
CPPFLAGS="$CFLAGS"
RUSTFLAGS="-C target-cpu=znver3 -C opt-level=3 -C codegen-units=1 -C target-feature=+avx2,+fma,+bmi1,+bmi2,+aes,+sha,+sse4.2,+popcnt,+vaes,+vpclmulqdq,+movbe,+f16c"
LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--no-as-needed -Wl,-z,relro -Wl,-z,now -Wl,-z,pack-relative-relocs"
MAKEFLAGS="-j16"
NINJAFLAGS="-j16"
BUILDENV="!distcc color check !sign"
OPTIONS="strip docs !libtool !staticlibs emptydirs zipman purge !debug !lto"
- Syntax: flat shell-style assignments —
KEY="value",KEY='literal',KEY=(a b c). Lines starting with#are comments. Values are shell-expanded, so-j$(nproc)andCXXFLAGS="$CFLAGS"work. - Build flags are applied through a generated makepkg.conf passed to
makepkg --config. Each build says so:
>>> applying build flags from /etc/portage/make.conf
>>> caching sources under /home/user/.cache/aura-emerge/sources -- VCS sources (-git/-hg/-svn) fetch incrementally on rebuild instead of re-cloning; pass SRCDEST in makepkg.conf to change this.
- Source cache: sources are cached under
~/.cache/aura-emerge/sources; VCS sources (-git/-hg/-svn) are fetched incrementally on rebuild instead of re-cloned. SetSRCDESTinmakepkg.confto change the location. EMERGE_DEFAULT_OPTSis spliced into every run and accepts only an allowlist of modifier flags — not actions such as--unmerge.- Conflicts: contradicting pairs (
--aur/--abs,--no-sandbox/--unshare-net-build, …) are rejected, or the config side is dropped when the command line is more specific. --ignore-default-optsskips the defaults for one run;emerge --infoshows the loaded files and the expanded values.
/etc/portage/make.conf і ~/.config/emerge/make.conf — власний конфіг aura-emerge (а не makepkg.conf). Системний файл читається першим, користувацький — останнім; переможе останній ключ.
Справжній конфіг з робочої машини:
#EMERGE_DEFAULT_OPTS=""
#
CFLAGS="-march=znver3 -O2 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection -fstack-protector-strong -falign-functions=32 -falign-loops=32 -ftree-vectorize -funroll-loops"
CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS"
CPPFLAGS="$CFLAGS"
RUSTFLAGS="-C target-cpu=znver3 -C opt-level=3 -C codegen-units=1 -C target-feature=+avx2,+fma,+bmi1,+bmi2,+aes,+sha,+sse4.2,+popcnt,+vaes,+vpclmulqdq,+movbe,+f16c"
LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--no-as-needed -Wl,-z,relro -Wl,-z,now -Wl,-z,pack-relative-relocs"
MAKEFLAGS="-j16"
NINJAFLAGS="-j16"
BUILDENV="!distcc color check !sign"
OPTIONS="strip docs !libtool !staticlibs emptydirs zipman purge !debug !lto"
- Синтаксис: прості присвоєння в стилі shell —
KEY="value",KEY='literal',KEY=(a b c). Рядки з#на початку — коментарі. Значення проходять shell-розкриття, тож працюють-j$(nproc)іCXXFLAGS="$CFLAGS". - Прапори збірки застосовуються через згенерований makepkg.conf, який передається в
makepkg --config. Кожна збірка повідомляє про це:
>>> applying build flags from /etc/portage/make.conf
>>> caching sources under /home/user/.cache/aura-emerge/sources -- VCS sources (-git/-hg/-svn) fetch incrementally on rebuild instead of re-cloning; pass SRCDEST in makepkg.conf to change this.
- Кеш джерел: джерела кешуються в
~/.cache/aura-emerge/sources; VCS-джерела (-git/-hg/-svn) під час перезбирання підтягуються інкрементально, а не клонуються заново. Змінити розташування можна черезSRCDESTуmakepkg.conf. EMERGE_DEFAULT_OPTSпідставляється в кожен запуск і приймає лише дозволений список модифікаторів — не дії на кшталт--unmerge.- Конфлікти: суперечливі пари (
--aur/--abs,--no-sandbox/--unshare-net-build, …) відхиляються, а якщо командний рядок конкретніший — частина з конфігу відкидається. --ignore-default-optsпропускає типові значення для одного запуску;emerge --infoпоказує прочитані файли та розкриті значення.
package.mask
/etc/portage/package.mask lists packages this machine never installs. It is a standing decision, not a prompt: a masked package is refused even when its PKGBUILD is clean, when it is pulled in as a transitive AUR dependency, or when you request it by name.
ayugram-desktop-bin # bare name: any source
aur/*-bin # only from the AUR, '*' allowed
extra/nano # only from that official repo
*-git # anything matching, any source
File or directory
Like Portage, the path may be a single file or a directory. In a directory every regular file is read — any name, no extension needed, dotfiles skipped — in filename order.
A real directory-style mask and what it does:
$ cat /etc/portage/package.mask/emacs.mask
emacs
emacs-*
ecb
semi
$ emerge emacs
* The following package(s) are masked and will not be installed:
emacs
masked by emacs (/etc/portage/package.mask/emacs.mask:1)
* Edit /etc/portage/package.mask (a file, or a directory of files) to change that.
Entry syntax
- One entry per line; blank lines and lines starting with
#are ignored. - An optional
repo/prefix (aur,abs, or an official repo name) limits the entry to that source. Without it the entry matches everywhere. *matches any run of characters. Other allowed characters: letters, digits and@ . _ + -.- A trailing
# reasonis shown when the mask fires. - An invalid entry is skipped with a warning that names the file and line.
Safety
A mask file that is a symlink is refused with a warning — the file is not read.
When a mask fires, aura-emerge lists each package with the entry that blocked it (file:line) and its reason. Explicitly requested packages abort the run rather than being quietly filtered. For a one-run skip use --exclude instead.
/etc/portage/package.mask — перелік пакунків, які ця машина ніколи не встановлює. Це постійне рішення, а не запит: замаскований пакунок відхиляється, навіть якщо його PKGBUILD чистий, якщо він потрапляє як транзитна залежність AUR або якщо ви вказали його за назвою.
ayugram-desktop-bin # лише назва: з будь-якого джерела
aur/*-bin # лише з AUR, дозволено '*'
extra/nano # лише з цього офіційного репозиторію
*-git # усе, що збігається, з будь-якого джерела
Файл або каталог
Як і в Portage, шлях може вказувати на один файл або на каталог. У каталозі читаються всі звичайні файли — з будь-якою назвою, розширення не потрібне, файли з крапкою на початку пропускаються — у порядку за назвою.
Справжня маска у вигляді каталогу і її дія:
$ cat /etc/portage/package.mask/emacs.mask
emacs
emacs-*
ecb
semi
$ emerge emacs
* The following package(s) are masked and will not be installed:
emacs
masked by emacs (/etc/portage/package.mask/emacs.mask:1)
* Edit /etc/portage/package.mask (a file, or a directory of files) to change that.
Синтаксис запису
- Один запис на рядок; порожні рядки та рядки, що починаються з
#, ігноруються. - Необов'язковий префікс
repo/(aur,absабо назва офіційного репозиторію) обмежує запис цим джерелом. Без префікса запис діє скрізь. *збігається з будь-якою послідовністю символів. Дозволені також літери, цифри та@ . _ + -.- Коментар
# причинау кінці рядка показується, коли маска спрацьовує. - Некоректний запис пропускається з попередженням, у якому вказано файл і рядок.
Безпека
Якщо файл маски є символічним посиланням, його не читають, а видають попередження.
Коли маска спрацьовує, aura-emerge виводить кожен пакунок разом із записом, що його заблокував (файл:рядок), і причиною. Якщо пакунок було запрошено явно, виконання переривається, а не мовчки фільтрується. Для одноразового пропуску використовуйте --exclude.
package.env
/etc/portage/package.env gives individual packages their own build flags. Each entry names a package and one or more env files from /etc/portage/env/; those files are laid over make.conf for that package's build only.
$ cat /etc/portage/package.env/neovim
abs/neovim lto.conf
$ cat /etc/portage/env/lto.conf
CFLAGS="-march=znver3 -O2 -pipe -fno-plt -ftree-vectorize"
MAKEFLAGS="-j16"
OPTIONS="strip docs !libtool !staticlibs emptydirs zipman purge !debug lto"
The build says which files it used:
$ emerge --abs neovim
>>> Emerging (1 of 1) abs/neovim-0.12.5 (ABS)
…
>>> applying build flags from /etc/portage/make.conf, /etc/portage/env/lto.conf
File or directory
Same as package.mask: package.env may be one file or a directory. In a directory every regular file is read — any name, dotfiles skipped — in filename order.
Entry syntax
- One entry per line: an atom, then one or more env file names separated by spaces. Blank lines and
#comments are ignored. - The atom follows the package.mask rules: optional
repo/prefix (aurorabs),*allowed. Without a prefix it matches any source. - Env files use
make.confsyntax. Only the build variables count (CFLAGS,CXXFLAGS,MAKEFLAGS,OPTIONS, …);EMERGE_DEFAULT_OPTSis ignored with a warning. - A package matches by its pkgbase or by any of its pkgnames from
.SRCINFO.
Layering
Order of application: make.conf, then every matching entry in file and line order, then each env file in the order it is named on the line. The last layer to set a variable wins, and the variable is replaced as a whole, not merged: an OPTIONS array in an env file replaces the one from make.conf, so list every option you want.
If two layers set the same variable to different values, the build tells you which one won:
>>> Warning: package.env: CFLAGS = '-O0' from /etc/portage/package.env/20-b:1 [slow] overrides '-O3 -pipe' from /etc/portage/package.env/10-a:1 [fast.conf]
Safety
A symlinked package.env file or env file is refused with a warning. An invalid entry, or an env file that is missing or unreadable, is skipped with a warning naming the file and line; the rest still applies.
Only AUR and ABS builds are affected — official packages are installed by pacman and not built here.
/etc/portage/package.env задає окремим пакункам власні прапори збірки. Кожен запис називає пакунок і один чи кілька env-файлів із /etc/portage/env/; ці файли накладаються поверх make.conf лише для збірки цього пакунка.
$ cat /etc/portage/package.env/neovim
abs/neovim lto.conf
$ cat /etc/portage/env/lto.conf
CFLAGS="-march=znver3 -O2 -pipe -fno-plt -ftree-vectorize"
MAKEFLAGS="-j16"
OPTIONS="strip docs !libtool !staticlibs emptydirs zipman purge !debug lto"
Під час збірки виводиться, які файли було використано:
$ emerge --abs neovim
>>> Emerging (1 of 1) abs/neovim-0.12.5 (ABS)
…
>>> applying build flags from /etc/portage/make.conf, /etc/portage/env/lto.conf
Файл або каталог
Так само, як і package.mask: package.env може бути одним файлом або каталогом. У каталозі читаються всі звичайні файли — з будь-якою назвою, файли з крапкою на початку пропускаються — у порядку за назвою.
Синтаксис запису
- Один запис на рядок: атом, а далі одна чи кілька назв env-файлів через пробіл. Порожні рядки та коментарі через
#ігноруються. - Атом підпорядковується правилам package.mask: необов'язковий префікс
repo/(aurабоabs), дозволено*. Без префікса запис діє для будь-якого джерела. - Env-файли мають синтаксис
make.conf. Враховуються лише змінні збірки (CFLAGS,CXXFLAGS,MAKEFLAGS,OPTIONS, …);EMERGE_DEFAULT_OPTSігнорується з попередженням. - Пакунок збігається за pkgbase або за будь-якою з його pkgname із
.SRCINFO.
Накладання шарів
Порядок застосування: make.conf, потім кожен відповідний запис у порядку файлів і рядків, потім кожен env-файл у тому порядку, в якому його названо в рядку. Перемагає останній шар, що задає змінну, і змінна замінюється цілком, а не зливається: масив OPTIONS в env-файлі замінює масив із make.conf, тож перелічуйте всі потрібні опції.
Якщо два шари задають одну змінну різними значеннями, під час збірки повідомляється, який із них переміг:
>>> Warning: package.env: CFLAGS = '-O0' from /etc/portage/package.env/20-b:1 [slow] overrides '-O3 -pipe' from /etc/portage/package.env/10-a:1 [fast.conf]
Безпека
Якщо файл package.env або env-файл є символічним посиланням, його відхиляють із попередженням. Некоректний запис, а також відсутній чи нечитабельний env-файл пропускаються з попередженням, у якому вказано файл і рядок; решта застосовується далі.
Зачіпає лише збірки з AUR і ABS — офіційні пакунки встановлює pacman, тут вони не збираються.
--exclude / --keep-going
--exclude
--exclude <atom> (repeatable or comma-separated) leaves a package out of the current run: installs, -u, @world, depclean/prune and revdep.
emerge -u --exclude linux --exclude aur/ayugram-desktop-bin
emerge --exclude firefox @world
Names are compared bare, so --exclude extra/nano and --exclude nano both skip nano. Skipped packages are reported: >>> N package(s) skipped by --exclude: …. Unlike package.mask, an exclude is not persistent: it applies to one run only.
--keep-going
Without it a batch stops at the first failure. With --keep-going every failed atom is recorded together with a short reason (each atom once), the rest of the batch continues, and an end-of-run summary is printed to stderr.
>>> Warning: the following package(s) were not found anywhere (official repos or AUR) and were skipped:
aur/foo
…
>>> Warning: not all requested packages were installed successfully.
>>> 1 package(s) failed; `emerge --resume` will retry just those.
* The following 1 package(s) failed to build or install:
aur/foo (not found in official repos or the AUR)
* Everything else in this run completed. Retry just the failures with emerge --resume.
The exit code is non-zero if anything failed. emerge --resume then retries only the failed packages.
--exclude
--exclude <atom> (можна повторювати або перелічувати через кому) виключає пакунок із поточного запуску: встановлення, -u, @world, depclean/prune і revdep.
emerge -u --exclude linux --exclude aur/ayugram-desktop-bin
emerge --exclude firefox @world
Назви порівнюються без префікса репозиторію, тож --exclude extra/nano і --exclude nano обидва пропускають nano. Про пропущені пакунки виводиться повідомлення: >>> N package(s) skipped by --exclude: …. На відміну від package.mask, виключення не є постійним: воно діє лише в одному запуску.
--keep-going
Без цього прапора пакетна операція зупиняється на першій помилці. З --keep-going кожен невдалий атом записується з короткою причиною (по одному разу), решта пакета продовжується, а наприкінці в stderr виводиться підсумок.
>>> Warning: the following package(s) were not found anywhere (official repos or AUR) and were skipped:
aur/foo
…
>>> Warning: not all requested packages were installed successfully.
>>> 1 package(s) failed; `emerge --resume` will retry just those.
* The following 1 package(s) failed to build or install:
aur/foo (not found in official repos or the AUR)
* Everything else in this run completed. Retry just the failures with emerge --resume.
Якщо щось не вдалося, код виходу ненульовий. Після цього emerge --resume повторює лише невдалі пакунки.
-t / --tree, --deep
--tree prints the plan as a dependency tree (emerge -pt style). By default one level is nested; --deep nests the full chain and --deep=N caps it at N levels.
emerge -apt noctalia --aur
emerge -pt noctalia --aur --deep
emerge deepin-session --ask --tree --deep=3
A real run — the requested package is at the top of the tree, while installation goes bottom-up, so dependencies are built before the packages that need them:
$ emerge -at system/openssh-openrc --deep
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild N ] openssh-openrc-20210505-1
[ebuild N ] `-- openrc-0.63.3-2
[ebuild N ] `-- artix-cgroups-0.7.2-1
[ebuild N ] `-- inetutils-2.8-1.1
[ebuild N ] `-- netifrc-0.7.14-1
[ebuild N ] `-- libeinfo-0.63.3-2
Total: 6 package(s)
>>> Verifying ebuild manifests
>>> Emerging (1 of 6) artix-cgroups-0.7.2-1
>>> Emerging (2 of 6) inetutils-2.8-1.1
>>> Emerging (3 of 6) netifrc-0.7.14-1
>>> Emerging (4 of 6) libeinfo-0.63.3-2
>>> Emerging (5 of 6) openrc-0.63.3-2
>>> Emerging (6 of 6) openssh-openrc-20210505-1
...
:: Продовжити встановлення? [Y/n] n
N— new package,R— reinstall.- Packages from the AUR are shown with their
aur/prefix. - An atom may carry a repo prefix on the command line, as in
system/openssh-openrc.
--tree показує план у вигляді дерева залежностей (у стилі emerge -pt). За замовчуванням вкладається один рівень; --deep розгортає весь ланцюг, а --deep=N обмежує глибину N рівнями.
emerge -apt noctalia --aur
emerge -pt noctalia --aur --deep
emerge deepin-session --ask --tree --deep=3
Справжній запуск: запитаний пакунок стоїть на вершині дерева, а встановлення йде знизу вгору, тож залежності збираються раніше за пакунки, яким вони потрібні:
$ emerge -at system/openssh-openrc --deep
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild N ] openssh-openrc-20210505-1
[ebuild N ] `-- openrc-0.63.3-2
[ebuild N ] `-- artix-cgroups-0.7.2-1
[ebuild N ] `-- inetutils-2.8-1.1
[ebuild N ] `-- netifrc-0.7.14-1
[ebuild N ] `-- libeinfo-0.63.3-2
Total: 6 package(s)
>>> Verifying ebuild manifests
>>> Emerging (1 of 6) artix-cgroups-0.7.2-1
>>> Emerging (2 of 6) inetutils-2.8-1.1
>>> Emerging (3 of 6) netifrc-0.7.14-1
>>> Emerging (4 of 6) libeinfo-0.63.3-2
>>> Emerging (5 of 6) openrc-0.63.3-2
>>> Emerging (6 of 6) openssh-openrc-20210505-1
...
:: Продовжити встановлення? [Y/n] n
N— новий пакунок,R— перевстановлення.- Пакунки з AUR показуються з префіксом
aur/. - У командному рядку атом може мати префікс репозиторію, як-от
system/openssh-openrc.
Merge / unmerge log
/var/log/emerge.log is an append-only, human-readable record of merges and unmerges — Portage's emerge.log for pacman/AUR/ABS atoms. One line per event:
2026-09-21 08:51:44 MERGE aur noctalia-5.1.0-1.1 (12s)
2026-09-21 08:52:10 MERGE aur libqalculate-5.12.0-1.1 (9s)
2026-09-21 09:03:02 MERGE extra nano-8.0-1 vim-9.1-1 (4s)
2026-09-21 09:10:05 UNMERGE - old-package-2.0-1
- Durations are real. AUR/ABS packages build one at a time, so each gets its own timer. A
pacman -S/-Rbatch is a single transaction: it is logged as one line with every atom and the batch's total time. - Time format:
12s,1m5s,1h2m3s. - Writing: the file is root-owned, so lines are appended through
sudo tee -a. Logging is best-effort — a failed write is silent and never fails or slows a merge that already happened. A symlinked log path is refused. emerge --inforeads the log and shows the number of merges and unmerges plus the cumulative build time. If the file is missing or unreadable, that line is simply omitted.
/var/log/emerge.log — журнал подій merge та unmerge, придатний для читання людиною, лише з дописуванням; це emerge.log з Portage для атомів pacman/AUR/ABS. Один рядок на подію:
2026-09-21 08:51:44 MERGE aur noctalia-5.1.0-1.1 (12s)
2026-09-21 08:52:10 MERGE aur libqalculate-5.12.0-1.1 (9s)
2026-09-21 09:03:02 MERGE extra nano-8.0-1 vim-9.1-1 (4s)
2026-09-21 09:10:05 UNMERGE - old-package-2.0-1
- Тривалість завжди справжня. Пакунки AUR/ABS збираються по одному, тож кожен має власний таймер. Пакет
pacman -S/-R— це одна транзакція: він записується одним рядком з усіма атомами та загальним часом. - Формат часу:
12s,1m5s,1h2m3s. - Запис: файл належить root, тому рядки дописуються через
sudo tee -a. Журналювання виконується за можливості: невдалий запис мовчки ігнорується й ніколи не ламає та не сповільнює merge, який уже відбувся. Якщо шлях до журналу — символічне посилання, запис не виконується. emerge --infoчитає журнал і показує кількість merge та unmerge, а також сумарний час збірки. Якщо файлу немає або його не можна прочитати, цей рядок просто пропускається.
Arch news
emerge --news reads the Arch Linux news feed, eselect-news style. Manual interventions are announced there, so check it before a big upgrade.
emerge --news # list the 30 latest, unread marked N
emerge --news 3 # read item 3 (marks it read)
emerge --news all # mark everything as read
$ emerge --news
>>> Fetching Arch Linux news...
>>> Arch Linux News (https://archlinux.org/news/)
1 [N] 22 Sep 2026 Mkinitcpio >=42 requires manual intervention for TPM2-based unlocking of LUKS devices
2 [N] 21 Jul 2026 virtualbox-ext-vnc >= 7.2.12-2 requires manual intervention
3 [ ] 12 Jun 2026 Active AUR malicious packages incident
>>> 2 new news item(s). Use `emerge --news <N>` to read one, `emerge --news all` to dismiss all.
- Read state is kept per user in
~/.cache/aura-emerge/news.state— no root needed. - Before
-u, a quick heads-up shows how many news items are unread. If the feed cannot be fetched the upgrade is never blocked. - If the feed is unreachable,
--newsitself exits with an error.
emerge --news читає стрічку новин Arch Linux у стилі eselect-news. Про втручання вручну повідомляють саме там, тож перегляньте новини перед великим оновленням.
emerge --news # 30 останніх, непрочитані позначено N
emerge --news 3 # прочитати запис 3 (позначає його прочитаним)
emerge --news all # позначити все прочитаним
$ emerge --news
>>> Fetching Arch Linux news...
>>> Arch Linux News (https://archlinux.org/news/)
1 [N] 22 Sep 2026 Mkinitcpio >=42 requires manual intervention for TPM2-based unlocking of LUKS devices
2 [N] 21 Jul 2026 virtualbox-ext-vnc >= 7.2.12-2 requires manual intervention
3 [ ] 12 Jun 2026 Active AUR malicious packages incident
>>> 2 new news item(s). Use `emerge --news <N>` to read one, `emerge --news all` to dismiss all.
- Стан прочитаного зберігається для кожного користувача в
~/.cache/aura-emerge/news.state— root не потрібен. - Перед
-uкоротке нагадування показує кількість непрочитаних новин. Якщо стрічку не вдалося отримати, оновлення ніколи не блокується. - Якщо стрічка недоступна, сама команда
--newsзавершується з помилкою.
Usage highlights
emerge neovim # repos → AUR fallback
emerge neovim-git --aur # AUR only, recursive AUR deps
emerge neovim --abs # ABS in bwrap
emerge -u @world # full upgrade (does not read world)
emerge @world # provision from world
emerge --scan neovim-git --aur # audit only
emerge --install-pkgbuild ~/src/my-pkg # local PKGBUILD (scanner + sandbox)
emerge -u --devel # upgrade + rebuild moved -git
emerge --revdep-rebuild # broken shared-library links
emerge --batchinstall pkgs.txt # mass-install from list
emerge --news # Arch news
emerge --undo # undo last install/unmerge
emerge --resume # resume interrupted run
See the Flags page for the full table.
emerge neovim
emerge neovim-git --aur
emerge neovim --abs
emerge -u @world
emerge @world
emerge --scan neovim-git --aur
emerge --install-pkgbuild ~/src/my-pkg
emerge -u --devel
emerge --revdep-rebuild
emerge --batchinstall pkgs.txt
emerge --news
emerge --undo
emerge --resume
Повна таблиця — на сторінці Прапори.
Security: PKGBUILD scanner
Before every AUR install, the raw PKGBUILD and its .install hook (install=, which runs as root) are fetched from cgit and scanned. $pkgname/$pkgbase in the hook name are expanded first. If cgit cannot be reached this is reported as “nothing to check”, not as clean; once the package is cloned, the clone itself is scanned when its content differs from what was pre-scanned.
Two layers
- AST (
tree-sitter-bash) — structural checks that survive quoting, concatenation and env-wrapper tricks that defeat plain text matching. It only matches statically known command names; if parsing fails, the line heuristics take over. - Line heuristics — text patterns and exact indicators of compromise (IOCs).
Two severities
| Severity | Printed as | Meaning |
|---|---|---|
ConfirmedIoc | Alert, matched a known-malicious IOC | Exact match with a documented campaign: low chance of a false positive. |
Suspicious | Warning, detected suspicious fragment | Heuristic: worth reading, may be a false positive. |
Confirmed IOCs
- Known-malicious package names (
atomic-lockfile,js-digest,lockfile-js) — the Atomic Arch npm/bun infostealer campaign, June 2026. - Published payload SHA-256 hashes (openconnect-sso wave, Jul/Aug 2026).
- The
compromised.txtmarker from the 2018 acroread/balz/minergate AUR takeover. - The requested package itself being on the list of AUR packages hijacked in the early-August 2026 wave (also applies to
openconnect-ssoandstorageexplorer-bin). Absence from that list does not mean a package is clean.
Heuristic checks
| Pattern | Why it matters |
|---|---|
curl|sh, wget|sh | Runs a remote script straight in a shell |
eval "$(curl …)", source <(curl …) | Runs fetched content without a literal pipe |
base64 / hex decode, | sh, \xHH runs, openssl decrypt | Obfuscated or inline-stashed payloads |
python -c exec/eval, sh -c payloads | Inline obfuscated execution |
sudo / pkexec / doas in the build script | makepkg builds unprivileged on purpose; this escalates mid-build |
chmod 777 | World-writable / executable permissions |
raw IPv4, .onion, paste sites | Hardcoded C2 or second-stage delivery |
npm/bun/yarn/pip/gem installing a named package mid-build | How the Atomic Arch payload was smuggled in |
| command substitution outside any function | Runs whenever anything merely sources the PKGBUILD (--printsrcinfo, an AUR helper's metadata read) |
| executable installed under a generic tool name (linter, hasher, validator, …) | Payload-disguise technique of the early-August 2026 wave |
TracerPid, LD_PRELOAD probes | Anti-debugger / anti-sandbox fingerprinting |
Example
A deliberately hostile test package (output shortened, … marks omitted lines):
$ emerge --install-pkgbuild ./scaner-test --ask
>>> Scanning scaner-test for suspicious patterns...
>>> 'scaner-test' wasn't scanned before cloning (cgit fetch failed or this pkgbase was only resolved after cloning) -- scanning the clone directly...
>>> ===================================
>>> Alert, matched a known-malicious IOC (scaner-test)
>>> ===================================
>>> file PKGBUILD line 29: references 'atomic-lockfile' - a known-malicious package name from a documented AUR supply-chain campaign (Atomic Arch, June 2026)
>>> file PKGBUILD line 11: sha256 'e73a35b3e75e94746428d1a207703d6335933deadee7d1d9c9d0328df7b9df77' matches a published payload hash from the openconnect-sso-anchored AUR wave (Jul/Aug 2026)
>>> file scaner-test-therandtxt.install line 3: references 'compromised.txt' - the exact marker file dropped by the 2018 acroread/balz/minergate AUR takeover
>>> file scaner-test-therandtxt.install line 2: references 'js-digest' - a known-malicious package name from a documented AUR supply-chain campaign (Atomic Arch, June 2026)
>>> Read full file: ./scaner-test/PKGBUILD
>>> Read full file: ./scaner-test/scaner-test-therandtxt.install
>>> ===================================
>>> Warning, detected suspicious fragment (scaner-test)
>>> ===================================
>>> file PKGBUILD line 16: downloads and pipes a remote script straight into a shell (curl/wget | sh)
>>> file PKGBUILD line 18: decodes a base64 blob (possible obfuscated payload)
>>> file PKGBUILD line 25: sets world-writable/executable permissions (chmod 777)
>>> file PKGBUILD line 10: fetches from or references a hardcoded raw IP address instead of a domain
>>> file PKGBUILD line 26: invokes sudo/pkexec/doas from inside the build script - makepkg builds unprivileged on purpose, so this escalates privilege mid-build; the exact mechanism reported in the openconnect-sso-anchored AUR wave (Jul/Aug 2026)
>>> file PKGBUILD line 7: references a .onion address - legitimate PKGBUILDs don't hardcode Tor hidden-service addresses; matches the Tor-backed second-stage delivery reused across the June 2026 and Jul/Aug 2026 AUR campaigns
>>> … 13 more findings …
>>> Read full file: ./scaner-test/PKGBUILD
>>> Read full file: ./scaner-test/scaner-test-therandtxt.install
>>> 'scaner-test''s cloned PKGBUILD/.install content (which differs from what was pre-scanned) matches known-suspicious patterns. Review it yourself before proceeding:
./scaner-test
>>> Continue anyway? [y/N] n
>>> Aborted.
Audit only
emerge --scan neovim-git --aur
emerge --install-pkgbuild ~/src/my-pkg --scan
--scan reports findings without building or installing anything. It needs at least one package name (or --install-pkgbuild <PATH> for a local checkout) and does not support --abs yet.
The scanner is a blocklist, so a clean result is not a guarantee. That is what the sandbox is for.
Перед кожним встановленням з AUR «сирі» PKGBUILD і його .install-хук (install=, що виконується від root) завантажуються з cgit і скануються. $pkgname/$pkgbase в імені хука спершу підставляються. Якщо cgit недоступний, це повідомляється як «нема чого перевіряти», а не як «чисто»; після клонування скануються самі клоновані файли, якщо їхній вміст відрізняється від попередньо просканованого.
Два шари
- AST (
tree-sitter-bash) — структурні перевірки, що витримують лапки, конкатенацію та обгортки з env, які обходять звичайний текстовий пошук. Спрацьовує лише на статично відомих іменах команд; якщо розбір не вдався, підключаються текстові евристики. - Текстові евристики — текстові шаблони та точні індикатори компрометації (IOC).
Два рівні серйозності
| Рівень | Як виводиться | Що означає |
|---|---|---|
ConfirmedIoc | Alert, matched a known-malicious IOC | Точний збіг із задокументованою кампанією: хибне спрацювання малоймовірне. |
Suspicious | Warning, detected suspicious fragment | Евристика: варто прочитати, можливе хибне спрацювання. |
Підтверджені IOC
- Відомі шкідливі назви пакунків (
atomic-lockfile,js-digest,lockfile-js) — кампанія Atomic Arch із npm/bun-інфостилером, червень 2026. - Опубліковані SHA-256 корисного навантаження (хвиля openconnect-sso, лип./серп. 2026).
- Маркер
compromised.txtіз захоплення AUR-пакунків acroread/balz/minergate у 2018 році. - Запитаний пакунок сам входить до списку AUR-пакунків, захоплених у хвилі на початку серпня 2026 (також
openconnect-ssoіstorageexplorer-bin). Відсутність у цьому списку не означає, що пакунок чистий.
Евристичні перевірки
| Шаблон | Чим небезпечний |
|---|---|
curl|sh, wget|sh | Виконує віддалений скрипт просто в оболонці |
eval "$(curl …)", source <(curl …) | Виконує завантажений вміст без явного pipe |
декодування base64 / hex, | sh, послідовності \xHH, розшифрування через openssl | Обфусковане або вбудоване в скрипт корисне навантаження |
python -c з exec/eval, навантаження в sh -c | Обфусковане виконання коду «на місці» |
sudo / pkexec / doas у скрипті збірки | makepkg навмисно збирає без привілеїв; це підвищує їх посеред збірки |
chmod 777 | Права на запис і виконання для всіх |
«сирі» IPv4, .onion, paste-сайти | Жорстко прописані C2 або доставка другого етапу |
npm/bun/yarn/pip/gem ставить іменований пакунок під час збірки | Так Atomic Arch протягувала своє навантаження |
| підстановка команд поза будь-якою функцією | Виконується, щойно будь-що просто підключає PKGBUILD (--printsrcinfo, читання метаданих AUR-хелпером) |
| виконуваний файл із загальною назвою інструмента (linter, hasher, validator, …) | Прийом маскування корисного навантаження з хвилі на початку серпня 2026 |
перевірки TracerPid, LD_PRELOAD | Виявлення відладчика чи пісочниці |
Приклад
Навмисно шкідливий тестовий пакунок (вивід скорочено, … позначає пропущені рядки):
$ emerge --install-pkgbuild ./scaner-test --ask
>>> Scanning scaner-test for suspicious patterns...
>>> 'scaner-test' wasn't scanned before cloning (cgit fetch failed or this pkgbase was only resolved after cloning) -- scanning the clone directly...
>>> ===================================
>>> Alert, matched a known-malicious IOC (scaner-test)
>>> ===================================
>>> file PKGBUILD line 29: references 'atomic-lockfile' - a known-malicious package name from a documented AUR supply-chain campaign (Atomic Arch, June 2026)
>>> file PKGBUILD line 11: sha256 'e73a35b3e75e94746428d1a207703d6335933deadee7d1d9c9d0328df7b9df77' matches a published payload hash from the openconnect-sso-anchored AUR wave (Jul/Aug 2026)
>>> file scaner-test-therandtxt.install line 3: references 'compromised.txt' - the exact marker file dropped by the 2018 acroread/balz/minergate AUR takeover
>>> file scaner-test-therandtxt.install line 2: references 'js-digest' - a known-malicious package name from a documented AUR supply-chain campaign (Atomic Arch, June 2026)
>>> Read full file: ./scaner-test/PKGBUILD
>>> Read full file: ./scaner-test/scaner-test-therandtxt.install
>>> ===================================
>>> Warning, detected suspicious fragment (scaner-test)
>>> ===================================
>>> file PKGBUILD line 16: downloads and pipes a remote script straight into a shell (curl/wget | sh)
>>> file PKGBUILD line 18: decodes a base64 blob (possible obfuscated payload)
>>> file PKGBUILD line 25: sets world-writable/executable permissions (chmod 777)
>>> file PKGBUILD line 10: fetches from or references a hardcoded raw IP address instead of a domain
>>> file PKGBUILD line 26: invokes sudo/pkexec/doas from inside the build script - makepkg builds unprivileged on purpose, so this escalates privilege mid-build; the exact mechanism reported in the openconnect-sso-anchored AUR wave (Jul/Aug 2026)
>>> file PKGBUILD line 7: references a .onion address - legitimate PKGBUILDs don't hardcode Tor hidden-service addresses; matches the Tor-backed second-stage delivery reused across the June 2026 and Jul/Aug 2026 AUR campaigns
>>> … 13 more findings …
>>> Read full file: ./scaner-test/PKGBUILD
>>> Read full file: ./scaner-test/scaner-test-therandtxt.install
>>> 'scaner-test''s cloned PKGBUILD/.install content (which differs from what was pre-scanned) matches known-suspicious patterns. Review it yourself before proceeding:
./scaner-test
>>> Continue anyway? [y/N] n
>>> Aborted.
Лише аудит
emerge --scan neovim-git --aur
emerge --install-pkgbuild ~/src/my-pkg --scan
--scan лише повідомляє про знахідки, нічого не збираючи й не встановлюючи. Потрібна принаймні одна назва пакунка (або --install-pkgbuild <PATH> для локального checkout); --abs поки не підтримується.
Сканер працює за принципом чорного списку, тож чистий результат не є гарантією. Для цього й потрібна пісочниця.
bwrap sandbox
The scanner is a blocklist: a PKGBUILD it misses would still run arbitrary shell as your user. The sandbox is the second layer. pkgver/prepare/build/check/package run inside bubblewrap (/usr/bin/bwrap) when it is installed.
What the jail looks like
- Filesystem: the whole root is mounted read-only;
/procand/devare fresh;/tmpis an empty tmpfs. - Writable: only the build directory. Configured
PKGDEST/SRCDEST/SRCPKGDEST/BUILDDIRoutside it get their own writable bind and matching env var. - No real home / session: empty tmpfs over
/homeand/run— no SSH keys, secret GPG, browser profile, session D-Bus or agents. Environment is cleared to an allowlist. - Isolation:
--unshare-all,--new-session,--die-with-parent, capabilities dropped; PKGBUILD and*.installre-bound read-only. - GnuPG: public-only keyring copy, mounted read-only (signatures verify; no private keys, build cannot plant a key).
Network
Shared by default. With --unshare-net-build the download phase keeps the network (the declared source=() entries), while build()/check()/package() get none — so a stray cargo build reaching crates.io fails loudly. Loopback stays up for tools that need it; there is still no route outside.
Toolchain quirks handled for you
- rustup:
RUSTUP_HOMEis pointed back at the real path socargostill resolves a toolchain.CARGO_HOMEis not restored (it may holdcredentials.toml) — a fresh writable directory inside the build dir is used instead, and dependencies are re-fetched. - fakeroot:
package()runs underfakeroot, which fails with “cannot preserve ownership” in a user namespace with no uid 0. A smallfakerootshim re-runs the real one in a nested uid-0-mapped bwrap layer. The shim lives in/var/tmp, read-only inside the jail, sobuild()cannot replace it, and it is deleted afterwards.
pacman -U need real root and never execute PKGBUILD code, so they run outside the jail. The finished *.pkg.tar.* is still audited first (setuid, .INSTALL, alpm hooks, systemd, sudoers, …).
PKGDEST/SRCDEST set in /etc/makepkg.conf (visible inside the jail) overrides the injected value. Rare in practice.
| Flag | Effect |
|---|---|
--no-sandbox | Plain makepkg (with a warning) |
--unshare-net-build | No network during build()/check()/package() |
Without bubblewrap installed, builds fall back to plain makepkg.
Сканер працює за принципом чорного списку: PKGBUILD, який він пропустить, усе одно виконає довільний shell від імені вашого користувача. Пісочниця — другий рівень захисту. Функції pkgver/prepare/build/check/package виконуються всередині bubblewrap (/usr/bin/bwrap), якщо він установлений.
Як влаштовано ізоляцію
- Файлова система: увесь корінь змонтовано лише для читання;
/procі/dev— нові;/tmp— порожній tmpfs. - Запис: лише в каталог збірки. Налаштовані
PKGDEST/SRCDEST/SRCPKGDEST/BUILDDIRпоза ним отримують власний доступний для запису bind і відповідну змінну середовища. - Фейковий
$HOME: порожній tmpfs — жодних SSH-ключів, секретного GPG-зв'язку ключів чи профілю браузера.XDG_CONFIG_HOMEтаXDG_CACHE_HOMEскинуто. - Ізоляція:
--unshare-all,--new-session(без трюків із TIOCSTI),--die-with-parent, усі capabilities скинуто. - GnuPG: зв'язка ключів, імпортована поза пісочницею, підключається лише для читання: підписи перевіряються, але збірка не може підкинути власний ключ.
Мережа
За замовчуванням спільна. З --unshare-net-build на етапі завантаження мережа лишається (для оголошених у source=() джерел), а build()/check()/package() працюють без неї — тож випадковий cargo build, що потягнеться до crates.io, впаде з явною помилкою. Loopback залишається доступним для інструментів, яким він потрібен, але маршруту назовні немає.
Особливості інструментів, які враховано
- rustup:
RUSTUP_HOMEвказує на справжній шлях, тожcargoзнаходить toolchain.CARGO_HOMEне відновлюється (там може лежатиcredentials.toml) — натомість створюється чистий каталог усередині каталогу збірки, а залежності завантажуються заново. - fakeroot:
package()виконується підfakeroot, який у просторі імен користувача без uid 0 падає з помилкою «cannot preserve ownership». Невеличка обгорткаfakerootзапускає справжній у вкладеному шарі bwrap з відображенням на uid 0. Обгортка лежить у/var/tmp— усередині пісочниці це лише для читання, тожbuild()не може її підмінити; після збірки її видаляють.
pacman -U потребують справжнього root і не виконують код із PKGBUILD, тому працюють поза ізоляцією. Готовий *.pkg.tar.* перед цим аудитується (setuid, .INSTALL, hooks, …).
PKGDEST/SRCDEST у /etc/makepkg.conf (воно видиме всередині пісочниці) перекриває передане значення. На практиці трапляється рідко.
| Прапор | Дія |
|---|---|
--no-sandbox | Звичайний makepkg (з попередженням) |
--unshare-net-build | Без мережі під час build()/check()/package() |
Якщо bubblewrap не встановлено, збірка виконується звичайним makepkg.
PKGBUILD review
--pkgbuild-view shows the PKGBUILD that is about to be built and asks before the build starts. It works for AUR, ABS and --install-pkgbuild, but only for packages you requested directly — never for transitive dependencies or batch paths. It runs after --edit.
emerge neovim-git --aur --pkgbuild-view
emerge --install-pkgbuild ~/src/my-pkg --pkgbuild-view
What you see
- First time: the full PKGBUILD.
- Next time: a unified diff against the copy shown last time (
PKGBUILD (previous)→PKGBUILD (current)), or “unchanged since last shown”. - The last-shown copies live in
~/.cache/aura-emerge/pkgbuild-view/<pkgbase>.PKGBUILD(under$XDG_CACHE_HOMEif it is set). They exist only to make diffs possible and play no security role — the scanner does its own comparison of what it fetched against what was cloned.
The prompts
Continue with this build? [Y/n]— Enter builds.- On
n:Open it in $EDITOR instead of skipping it? [y/N]. Answering no skips this package. - On
ythe PKGBUILD opens in$EDITOR(then$VISUAL, thennano). Save and close to continue building;.SRCINFOis regenerated from your edit, unless you pass--skip-srcinfo-regen.
If the PKGBUILD cannot be read, you get a warning and the review is skipped for that package. The scanner and the sandbox still apply as usual.
--install-pkgbuild <PATH> builds a local checkout through the same scanner + sandbox pipeline. It is recorded in world as Err/ unless -1 is given.
Note: --scan does not support --abs yet. For ABS, use --pkgbuild-view during a normal install.
--pkgbuild-view показує PKGBUILD, який ось-ось збиратиметься, і запитує підтвердження перед початком збірки. Працює для AUR, ABS і --install-pkgbuild, але лише для пакунків, які ви запросили напряму — ніколи для транзитних залежностей чи пакетних шляхів. Виконується після --edit.
emerge neovim-git --aur --pkgbuild-view
emerge --install-pkgbuild ~/src/my-pkg --pkgbuild-view
Що ви бачите
- Уперше: увесь PKGBUILD.
- Наступного разу: уніфікований diff проти копії, показаної минулого разу (
PKGBUILD (previous)→PKGBUILD (current)), або «unchanged since last shown». - Останні показані копії зберігаються в
~/.cache/aura-emerge/pkgbuild-view/<pkgbase>.PKGBUILD(у$XDG_CACHE_HOME, якщо змінну задано). Вони потрібні лише для diff і не мають стосунку до безпеки — сканер сам порівнює отримане з клонованим.
Запити
Continue with this build? [Y/n]— Enter запускає збірку.- Після
n:Open it in $EDITOR instead of skipping it? [y/N]. Відповідь «ні» пропускає цей пакунок. - Після
yPKGBUILD відкривається в$EDITOR(далі$VISUAL, даліnano). Збережіть і закрийте редактор, щоб збірка продовжилась;.SRCINFOперегенерується з вашої правки, якщо не вказано--skip-srcinfo-regen.
Якщо PKGBUILD не вдається прочитати, ви побачите попередження, а перегляд для цього пакунка пропускається. Сканер і пісочниця працюють як завжди.
--install-pkgbuild <PATH> збирає локальний checkout через той самий конвеєр зі сканером і пісочницею. У world він записується як Err/, якщо не вказано -1.
Зверніть увагу: --scan поки не підтримує --abs. Для ABS використовуйте --pkgbuild-view під час звичайного встановлення.
Devel upstream check
The version on an AUR page for -git/-hg/-svn/-bzr packages often lags the real upstream, so a plain version comparison never sees new commits. --devel (with -u) and --check-devel (report only, no sudo needed) ask the upstream directly.
emerge -u --devel
emerge --check-devel
How it works
- Only installed foreign packages (AUR/local) whose name ends in
-git,-hg,-svnor-bzrare considered. - For
-gitpackages the firstgit+URL insource=()is taken (with#branch=if present) andgit ls-remoteasks the remote for its current commit — no clone. -hg/-svn/-bzrare recognized but not checked yet; they appear in the “could not determine” note.
The first run only records a baseline
The last upstream commit seen for each package is kept in ~/.cache/aura-emerge/devel.state. A package checked for the first time is recorded but never counted as moved, so the first --check-devel normally reports nothing. Later runs compare against that baseline.
Result
- Packages whose upstream moved are listed as
Uentries. With-u --develthey join the upgrade asdevel (upstream moved); packages already upgraded by version are not checked twice. - “Can't tell” is never treated as “out of date”: a missing
git+source, a failed fetch or a non-git VCS lands in the “could not determine” note. --excludeand package.mask hold a package back at its installed version.
Версія на сторінці AUR для пакунків -git/-hg/-svn/-bzr часто відстає від справжнього upstream, тож звичайне порівняння версій ніколи не бачить нових комітів. --devel (разом з -u) і --check-devel (лише звіт, sudo не потрібен) питають upstream напряму.
emerge -u --devel
emerge --check-devel
Як це працює
- Розглядаються лише встановлені сторонні пакунки (AUR/локальні), назва яких закінчується на
-git,-hg,-svnабо-bzr. - Для
-gitбереться перша адресаgit+уsource=()(з#branch=, якщо він є), іgit ls-remoteзапитує в віддаленого репозиторію його поточний коміт — без клонування. -hg/-svn/-bzrрозпізнаються, але поки не перевіряються; вони потрапляють у примітку «could not determine».
Перший запуск лише фіксує відправну точку
Останній побачений коміт upstream для кожного пакунка зберігається в ~/.cache/aura-emerge/devel.state. Пакунок, який перевіряється вперше, записується, але ніколи не вважається зміненим, тож перший --check-devel зазвичай нічого не показує. Наступні запуски порівнюють із цією відправною точкою.
Результат
- Пакунки, чий upstream зрушив, виводяться як записи
U. З-u --develвони додаються до оновлення якdevel (upstream moved); пакунки, які й так оновлюються за версією, вдруге не перевіряються. - «Не вдалося визначити» ніколи не трактується як «застаріло»: відсутнє джерело
git+, невдале завантаження чи не-git VCS потрапляють у примітку «could not determine». --excludeі package.mask утримують пакунок на встановленій версії.
--revdep-rebuild
Finds installed binaries whose shared-library dependencies no longer resolve, and fixes them. After an icu/openssl/boost soname bump a package can satisfy every declared dependency while its binaries link against a .so that no longer exists. This is different from @preserved-rebuild, which only checks declared dependencies via pacman -T. Gentoo hides the problem behind preserved-libs; here it is “rebuild once you notice”, automated.
emerge --revdep-rebuild
emerge --revdep-rebuild -p
What is scanned
- ELF files owned by packages under
/usr/bin,/usr/lib,/usr/lib32,/usr/libexec,/usr/local/liband/opt(huge files are skipped). - Their
DT_NEEDEDentries, withRPATH/RUNPATH($ORIGINexpanded), checked against the linker's search directories — the built-ins plus/etc/ld.so.confand its includes. - The report groups findings by package: the missing sonames and the first few affected files. Broken files that no package owns are listed separately.
What gets fixed
- AUR/local packages are rebuilt through the normal sandboxed path, and the scanner runs first.
- Official packages: the package that ships the lost soname is looked up in the file database (
pacman -F) and, if it is not installed, installed withpacman -S --needed --asdeps. - If nothing in the file database provides a soname, you are told to run
emerge --regenin case the database is stale, or to check whether the library was dropped upstream. - If the wanted libraries are already installed, the note points at a possible mixed 32/64-bit case.
With -p it only reports. Otherwise it asks Rebuild/install the package(s) above? [y/N]. --exclude and package.mask apply, and --keep-going is respected. The exit code is non-zero if anything failed.
dlopen() are invisible to an ELF scan. Files replaced outside pacman are judged by what is on disk now.
Знаходить встановлені бінарники, чиї залежності від спільних бібліотек більше не розв'язуються, і виправляє їх. Після зміни soname в icu/openssl/boost пакунок може задовольняти всі оголошені залежності, тоді як його бінарники лінкуються з .so, якого вже немає. Це не те саме, що @preserved-rebuild, який перевіряє лише оголошені залежності через pacman -T. У Gentoo цю проблему ховає preserved-libs; тут це «перезбери, щойно помітив», але автоматизоване.
emerge --revdep-rebuild
emerge --revdep-rebuild -p
Що сканується
- ELF-файли пакунків у
/usr/bin,/usr/lib,/usr/lib32,/usr/libexec,/usr/local/libі/opt(надвеликі файли пропускаються). - Їхні записи
DT_NEEDEDз урахуваннямRPATH/RUNPATH($ORIGINрозкривається), які перевіряються за каталогами пошуку лінкера — вбудованими та з/etc/ld.so.confразом з include. - Звіт групує знахідки за пакунками: відсутні soname і перші кілька уражених файлів. Пошкоджені файли, яких не має жоден пакунок, виводяться окремо.
Що виправляється
- Пакунки AUR/локальні перезбираються звичайним шляхом через пісочницю, і спершу працює сканер.
- Офіційні пакунки: пакунок, що постачає втрачений soname, шукається в базі файлів (
pacman -F) і, якщо не встановлений, ставиться черезpacman -S --needed --asdeps. - Якщо soname не постачає жоден пакунок із бази файлів, вам підкажуть виконати
emerge --regen(раптом база застаріла) або перевірити, чи бібліотеку не прибрали в upstream. - Якщо потрібні бібліотеки вже встановлені, примітка вказує на можливу суміш 32- і 64-бітних.
З -p лише звіт. Інакше буде запит Rebuild/install the package(s) above? [y/N]. Діють --exclude і package.mask, а --keep-going враховується. Якщо щось не вдалося, код виходу ненульовий.
dlopen(), ELF-сканування не бачить. Файли, замінені поза pacman, оцінюються за тим, що лежить на диску зараз.