- Notifications
You must be signed in to change notification settings - Fork41
Build tool for Arch Linux providing control, review and jailed build options
License
vn971/rua
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
RUA is a build tool for ArchLinux, AUR. Its features:
- Allows local patch application
- Provides detailed information:
- show upstream changes upon package upgrade
- see code problems in PKGBUILD via
shellcheck
, taking care of special variables - warn if SUID files are present in an already built package, and show them
- show file list, executable list and INSTALL script in already built packages
- Minimize user distractions:
- verify all build scripts once, build without interruptions
- group built packages for batch review
- Uses a security namespace jail:
- supports
--offline
builds - builds in isolated filesystem, seesafety section below
- uses
seccomp
to limit available syscalls (e.g. the build cannot callptrace
) - the build cannot execute
sudo
(filesystem is mounted withnosuid
)
- supports
- Written in Rust
rua search wesnoth
rua info freecad
rua install pinta
# install or upgrade a package
rua upgrade
# upgrade all AUR packages. You can selectively ignore packages by using--ignore
or adding them toIgnorePkg
inpacman.conf
(same as with non-AUR packages andpacman
). You can upgrade only specific packages withrua install A B C
.
rua shellcheck path/to/my/PKGBUILD
# runshellcheck
on a PKGBUILD, discovering potential problems with the build instruction. Takes care of PKGBUILD-specific variables.
rua tarcheck xcalib.pkg.tar
# if you already have a *.pkg.tar package built, run RUA checks on it (SUID, executable list, INSTALL script review etc).
rua builddir --offline /path/to/pkgbuild/directory
# build a directory.
rua --help; rua subcommand --help
# shows CLI help
sudo pacman -S --needed --asdeps git base-devel bubblewrap-suid libseccomp xz shellcheck cargo
sudo pacman -S --needed base-devel gitgit clone https://aur.archlinux.org/rua.gitcd ruamakepkg -si
In the web interface, package isrua.
RUSTUP_TOOLCHAIN=stable cargo install --force rua
This will not include bash/zsh/fish completions, but everything else should work.
directory | meaning |
---|---|
~/.config/rua/pkg/ | Step 1, directory where AUR packages are cloned into. You review and make local modifications here |
~/.cache/rua/build/ | Step 2, reviewed packages are copied here, and then built |
~/.local/share/rua/checked_tars/ | Step 3, directory where built and tarcheck-ed packages are stored (*.pkg.tar.xz) |
~/.config/rua/wrap_args.d/ | entrypoint for basic configuration of the security wrapper script |
~/.config/rua/.system/ | internal files |
$GNUPGHOME/pubring.kbx $GNUPGHOME/pubring.gpg | read-only access to these two files is granted when building, to allow signature verification |
All other files | All other files in~ are not accessed by RUA and inaccessible by built packages (see Safety section below) |
Note that directories above follow the XDG specification,soXDG_CONFIG_HOME
environment variable would override~/.config
,XDG_CACHE_HOME
would override~/.cache
andXDG_DATA_HOME
would override~/.local/share
.
Knowing the underlying machinery is not required to work with RUA,but if you're curious anyway, this section is for you.
All AUR packages are stored in designatedgit
repositories,withupstream/master
pointing to remote AUR head andlocalmaster
meaning your reviewed and accepted state.Local branch does not track the remote one.
RUA works by fetching remote updates when needed,presenting remote changes to you and merging them if you accept them.Merging and basic diff view are built-in commands in RUA, and you candrop to shell and do more from git CLI if you want.
RUA will:
- Fetch the AUR package and all recursive dependencies.
- Prepare a summary of all pacman and AUR packages that will need installing.Show the summary to the user, confirm proceeding.
- Iterate over all AUR dependencies and ask to review the repo-s.Once we know that user really accepts all recursive changes, proceed.
- Propose installing all pacman dependencies.
- Build all AUR packages of maximum dependency "depth".
- Let the user review built artifacts (in batch).
- Install them. If any more packages are left, go two steps up.
If you have a dependency structure like this:
your_original_package├── dependency_a│ ├── a1│ └── a2└── dependency_b ├── b1 └── b2
RUA will thus interrupt you 3 times, not 7 as if it would be plainly recursive. It also won't disrupt you if it knows recursion breaks down the line (with unsatisfiable dependencies).
- This tool focuses on AUR packages only, you cannot
-Suy
your system with it. Please use pacman for that. - Optional dependencies (optdepends) are not installed. They are skipped. Please check them out manually when you review PKGBUILD.
- The tool does not handle versions. It will always install the latest version possible, and it will always assume that latest version is enough.
- Development packages such as "-git" packages are only rebuilt when running
rua upgrade --devel
. No version checks are done to avoid unnecessary rebuilds. Merge requests welcomed. - Unless you explicitly enable it, builds do not share user home (~). This may result in maven/npm/cargo/whatever dependencies re-downloading with each build. Seesafety section below on how to whitelist certain directories.
- Environment variables "PKGDEST" and "BUILDDIR" of makepkg.conf are not supported. Packages are built in isolation from each other, artifacts are stored in standard locations of this tool.
- Due of safety restrictions,X11 access might not work during build.
- Also due to safety restrictions,ccache usage will fail during build.
- Due to abug in fakeroot, creation of root-owned packages inside PKGBUILD-s
package()
does not work. This happens when archives are extracted inpackage()
function. Doing it inprepare()
or giving a key liketar --no-same-owner
is the work-around.
Do not install AUR packages you don't trust. RUA only adds build-time isolation and install-time control/review.
When building packages, RUA uses the following filesystem isolation:
- Build directory is mounted read-write.
- Files
"$GNUPGHOME"/pubring.kbx
and"$GNUPGHOME"/pubring.gpg
are mounted read-only (if exists). This allows signature verification to work. - The rest of
~
is not visible to the build process, mounted under tmpfs. /tmp
and/dev
and/proc
are re-mounted with empty tmpfs, devtmpfs and procfs accordingly.- The rest of
/
is mounted read-only. - You can whitelist/add your mount points by configuring "wrap_args". See example in ~/.config/rua/.system/wrap_args.sh.example.
Additionally, all builds are run in a namespace jail, withseccomp
enabledanduser
,ipc
,pid
,uts
,cgroup
being unshared by default.If asked from CLI, builds can be run in offline mode.
The RUA name is an inversion of "AUR".
This work was made possible by the excellent libraries ofraur,srcinfoand many others.
Project is shared under GPLv3+.Unless you explicitly state otherwise, any contribution intentionally submittedfor inclusion in this project (rua) by you,shall be licensed as GPLv3+, without any additional terms or conditions.
For authors, seeCargo.toml and git history.
About
Build tool for Arch Linux providing control, review and jailed build options