Go to file
2022-09-28 21:45:00 +02:00
distro Add GPL headers 2022-09-26 12:28:21 -07:00
download Remove redundant check on depth 2022-09-27 20:00:37 -07:00
internal/shutils Remove unneeded WriteFunc() function 2022-09-26 14:07:13 -07:00
manager Run gofmt 2022-09-26 12:31:09 -07:00
.gitignore Initial Commit 2022-09-25 14:00:15 -07:00
build.go Allow overriding package format and distro while building 2022-09-28 10:08:28 -07:00
config.go Add GPL headers 2022-09-26 12:28:21 -07:00
go.mod Initial Commit 2022-09-25 14:00:15 -07:00
go.sum Initial Commit 2022-09-25 14:00:15 -07:00
info.go Use nop handlers when parsing for info 2022-09-26 14:59:58 -07:00
install.go Add GPL headers 2022-09-26 12:28:21 -07:00
LICENSE Add GPLv3 License 2022-09-26 19:21:39 +00:00
list.go Add list command 2022-09-28 01:35:17 -07:00
main.go Add list command 2022-09-28 01:35:17 -07:00
README.md Update README.md 2022-09-28 21:45:00 +02:00
repo.go Run gofmt 2022-09-27 19:14:04 -07:00
upgrade.go Use nop handlers when parsing for update check 2022-09-26 18:59:46 -07:00
version_test.go Add GPL headers 2022-09-26 12:28:21 -07:00
version.go Add GPL headers 2022-09-26 12:28:21 -07:00

LURE (Linux User REpository)

Go Report Card

LURE is intended to bring the AUR to all distros. It is currently in an alpha state and may not be stable. It can download a repository, build packages in it using a bash script similar to PKGBUILD, and then install them using your system package manager.

LURE is written in pure Go and has zero dependencies after it's built. The only things LURE needs are a command for privilege elevation such as sudo, doas, etc. as well as a supported package manager. Currently, LURE supports apt, pacman, apk, dnf, yum, and zypper. If a supported package manager exists on your system, it will be detected and used automatically.


Installation

Binary releases are not provided currently. They will be provided once I have time to set up a CI pipeline.

To install LURE, you'll need Go 1.18 or newer. Once installed, clone this repo and run go build inside, and then run sudo install -Dm755 lure /usr/local/bin.


Why?

The AUR is an amazing feature, and it's one of the main reasons I use Arch on all my daily driver devices. It is really simple while providing really useful functionality. I feel such a solution shouldn't be stuck in only a single distro, so I made LURE.

Like the AUR, it uses simple bash build scripts, but it doesn't depend on bash being installed at all. It uses an embedded, pure Go implementation of bash instead. Similarly, it uses Git to download the repos and sources, but doesn't depend on Git being installed.

This means it's really easy to deploy LURE on any distro that it has support for and on any CPU architecture. It also supports and automatically detects many package managers, so it's not limited to just pacman.


Distro Overrides

Allowing LURE to run on different distros provides some challenges. For example, some distros use different names for their packages. This is solved using distro overrides. Any variable or function used in a LURE build script may be overridden based on distro and CPU architecture. The way you do this is by appending the distro and/or architecture to the end of the name. For example, ITD depends on the pactl command as well as DBus and BlueZ. These are named somewhat differently on different distros. For ITD, I use the following for the dependencies:

deps=('dbus' 'bluez' 'pulseaudio-utils')
deps_arch=('dbus' 'bluez' 'libpulse')
deps_opensuse=('dbus-1' 'bluez' 'pulseaudio-utils')

Appending arch and opensuse to the end causes LURE to use the appropriate array based on the distro. If on Arch Linux, it will use deps_arch. If on OpenSUSE, it will use deps_opensuse, and if on anything else, it will use deps.

Names are checked in the following order:

  • $name_$architecture_$distro
  • $name_$distro
  • $name_$architecture
  • $name

Distro detection is performed by reading the /usr/lib/os-release and /etc/os-release files.


Cross-packaging for other Distributions

You can create packages for different distributions
setting the environment variables LURE_DISTRO and LURE_PKG_FORMAT.

LURE_DISTRO=arch     LURE_PKG_FORMAT=archlinux lure build
LURE_DISTRO=alpine   LURE_PKG_FORMAT=apk       lure build
LURE_DISTRO=opensuse LURE_PKG_FORMAT=rpm       lure build
LURE_DISTRO=debian   LURE_PKG_FORMAT=deb       lure build

Repositories

Unlike the AUR, LURE supports using multiple repos. Also unlike the AUR, LURE's repos are a single git repo containing all the build scripts. Inside each LURE repo, there should be a separate directory for each package containing a lure.sh script, which is a PKGBUILD-like build script for LURE. The default repository is hosted on Github: https://github.com/Arsen6331/lure-repo.


Dependencies

As mentioned before, LURE has zero dependencies after it's built. All functionality that could be pure Go is pure Go. Thanks to the following packages for making this possible:


Planned Features

  • Source patching via .patch files
  • Binary releases using goreleaser + CI
  • Automated install script