Talk:AUR helpers

From ArchWiki
Jump to navigation Jump to search
Note: Moderation — If your AUR helper does partial upgrades without explicit user intervention (i.e, specifying -Sy on the command line), it has no place on this page or anywhere else on ArchWiki. No exceptions. -- Alad (talk) 09:37, 20 September 2015 (UTC)

Comparison table - build directory

Considering /tmp is mounted as tmpfs on Arch, and the potential downsides from building in RAM (running out of space), I think a column with the default build location for various helpers would be helpful.

The default values I've garnered so far, assuming TMPDIR is not set:

  • aurutils: $XDG_CACHE_HOME
  • pacaur: $XDG_CACHE_HOME (changed from /tmp, see [1])
  • bauerbill: $PWD/build
  • pkgbuilder: $PWD, /tmp when specified with -S
  • packer: /tmp (TMPDIR)
  • yaourt: /tmp (yaourtrc)

-- Alad (talk) 18:16, 1 April 2016 (UTC)

Yes, this could be useful. Although you'd want not to use color here, since users that know what they're doing would prefer to use /tmp (or setting up BUILDDIR to /tmp). --Spyhawk (talk) 11:15, 3 April 2016 (UTC)
+1. see also #Multi-thread support. --Indigo (talk) 11:33, 3 April 2016 (UTC)
Well, while it does have benefits for some users, it's still a bad default. As you say though, this is easy enough to change either way, unlike any of the behaviour described in the other columns.
We could leave out the colors, but mention the drawbacks/benefits in the "meanings" paragraph. -- Alad (talk) 13:35, 4 April 2016 (UTC)
It is bad default because some users have no idea about what they are doing, but this is strictly related to user preferences. Adding the meaning instead of colors sounds like the perfect solution to me. --Spyhawk (talk) 14:35, 4 April 2016 (UTC).

Multi-thread support

This also made me wonder if tools differentiate regarding multi-thread support (seems related, e.g. cower has a defaulted option for it). --Indigo (talk) 11:33, 3 April 2016 (UTC)

AFAIK, besides cower, packer [2] and bauerbill ( amongst others) have multiple threads. aurutils also uses aria2c for downloads, if that counts.
The benefits of multiple threads are however not always clear:
* by my understanding, cower uses multiple threads, but with one query per package [3] (compare against multiinfo).
* More generally, tasks (like dependency solving) can be sped up by using different methods which need to be called less often
* Building packages would almost always be done sequentially: dependencies have to be installed (resulting in pacman locks), and there's -j in makepkg.conf anyway.
Regardless, there are some large differences in AUR helper speed (with bauerbill being ahead of the rest). But I'm not sure how to quantify this in the table ... -- Alad (talk) 12:31, 3 April 2016 (UTC)
Multi-thread support doesn't necessarily mean the helper is better. In cower case, multi-thread support was implemented before multiinfo was available in the RPC interface, and as of today using multiinfo is less complex and faster than using multiple info threads. Since it is difficult to implement multiinfo support without an important rewrite, cower multithreading is more a drawback than an advantage.
As for speed, it's indeed very hard to quantify in a meaningful manner. For example, pacaur dependency solver is slower than bauerbill's solver, but on the other hand it is designed to compute more stuff than other helpers up front in order to avoid bothering the user once the install process is started. --Spyhawk (talk) 13:42, 3 April 2016 (UTC)
Interesting. Actually, I did not want to induce a "speed" column, rather the opposite. As you both say, always very difficult to choose a fairly universal/comparable benchmark, so "speed" as such is better be left out of comparison (as a column). If one wants to mention it, it might be useful to have a general remark at the top of the table, or somewhere else in the article, quoting some of the influencing factors you name; perhaps linking to (re -j) Makepkg#MAKEFLAGS and (re Skyhawk's remark above) Makepkg#Improving compile times. --Indigo (talk) 14:01, 3 April 2016 (UTC)
In hindsight, the only thing of relevance here is the use of the old info interface over multiinfo (with newer versions of the RPC, both are identical). For example, cower puts a drastic load on the AUR due to its use of one request per single package. I think the most effective way here is to migrate to helpers that implement the new interface and leave those that don't in the past. -- Alad (talk) 20:14, 22 February 2018 (UTC)
may be one could come up with sort of "benchmark" (list of different commands related to querying or installing packages) and run them with different AUR helpers on one machine? that would be useful for both users (to see which one is faster now) and for developers (to improve the weak points of their apps). btw pikaur is using "Double Team" technique -- it's splitting itself into multiple threads to raise its evasiveness in face of big performance threat. Actionless (talk) 12:26, 8 March 2018 (UTC)
Well, as pointed out above, speed isn't everything. e.g. aurutils has one of the fastest dependency solvers, but it throws away information like versioned deps or provides in the process. Maybe this is of relevance: [4]
I'm also not sure how far we should advocate threads, since the need for them partially arises from upstream limitations: FS#49089, [5] -- Alad (talk) 13:14, 8 March 2018 (UTC)
I'd have considered this discussion closed a long time ago, since it was about info/multiinfo in cower. As you point out, the only case where one might implement threaded AUR calls is when reaching the URL limit, which happens only for a very limited subsets of people, and 1 or 2 additional calls are enough to to workaround the issue - hardly a limiting factor. Spyhawk (talk) 11:49, 9 March 2018 (UTC)

Reliable Updater

Interested in feedback on possibly adding Reliable Updater as a category to Comparison table.

ie: Does it handle accurate update status on VCS packages? Does it handle accurate update status when developer fails to update .SCRINFO?

And any other unmentioned situations. Cody Learner (talk) 18:49, 22 February 2018 (UTC)

The second is an issue only pacaur has, by design to "improve metadata on the AUR". It has nothing to do with what an AUR helper should do. The first is at best a specificity, since the AUR has no perception of what a VCS package is. See FS#56602. -- Alad (talk) 20:02, 22 February 2018 (UTC)
I think the most important here to provide reliable testcase to prove the reliability of updater :-) I would suggest mb creating a repo a with some stub PKGBUILDs which could be used as testcases for criterias in the table. Actionless (talk) 20:19, 22 February 2018 (UTC)
Not sure what a testcase of such would look like, since scoring on the other criteria should guarantee reliable updates apart from some pecularities outlined above.
About the second case, it has been suggested before to create some centralized place for testing helpers instead of a few arbitrarily chosen AUR packages. However, since AUR helpers are (by definition) for the AUR, I wonder how you'd go about testing these helpers with an external repository. PKGBUILDs specifically made for testing helpers would not be accepted on AUR anyways as too specific. -- Alad (talk) 22:30, 22 February 2018 (UTC)
And what about adding packages to AUR but with some special prefix in package name (`_stub-package-test-reliable-solver`) and very explicit description ("DON'T INSTALL ME. Stub package intended for testing AUR helpers for 'reliable solver' criteria.") and so on? Actionless (talk) 23:53, 22 February 2018 (UTC)
Considering AUR helpers are something that's tolerated instead of supported, I doubt such packages explicitely targeting them with no use otherwise would have a long lifetime. -- Alad (talk) 12:00, 23 February 2018 (UTC)
See #"Reference" implementation for an alternative. -- Alad (talk) 13:29, 8 March 2018 (UTC)

"minimizes user interaction" is a misnomer

After that 'criteria' was removed it's leaving some gap in comparison. I think we ned to come up with some better wording to describe those AUR helpers which allowing to review all the packages at once and next it's just building them without interrupting and asking more questions from user for each package. I think it's quite crucial quality for application of such kind and for user it could be quite annoying installing each AUR helper and just trying to install two packages to see if it will ask all the questions right at once or before each package build. Actionless (talk) 20:28, 22 February 2018 (UTC)

Sorry, i've just noticed what you also added asterisk to Secure field to address that problem. But what do you think about moving it into separate column? Because i don't think it's so much about reviewing PKGBUILDs but also about other kinds of questions, like installing dependencies or package conflicts. Actionless (talk) 20:32, 22 February 2018 (UTC)
About the other kind, any helper that supports makepkg's --noconfirm can install dependencies without query. I find it questionable to make "predicting conflicts for currently installed packages" or somesuch a core feature (which a separate column implies), since the issue might not present itself in the first place e.g. through a local repo or containers. Not to mention the original point, that you can still get up to 200+ prompts with helpers implementing this feature.
That said, the asterisk was just something I've added quickly. A compromise may be a sensibly named column that isn't colored, akin to the shell completion column. ("linear", "batch" perhaps, compare "linear vs tsort" in [6]) -- Alad (talk) 22:23, 22 February 2018 (UTC)
I suggest to simply use "batch inspection" in the specificity column instead of creating a new column. The main purpose of table imho is to be a quick reference of the status of the main steps of the process, rather than being an extensive description of each specific features. Spyhawk (talk) 16:37, 23 February 2018 (UTC)
Sounds good to me. I'll edit it accordingly unless there's more feedback to offer. -- Alad (talk) 18:15, 23 February 2018 (UTC)
Done: [7]. Suggestions on a precise name for aurman/pacaur's "deep search" feature for the specifity column? (e.g. pkgbuilder, trizen, aurutils have none of that) -- Alad (talk) 15:19, 24 February 2018 (UTC)
I am not good at coming up with precise names, but let me explain the intention behind the feature. Maybe that will help one of you coming up with a precise name. Most dep solving algorithms look at the unfulfilled dependencies only, but that can lead to not finding a valid solution on rare occasions. Example: You have package A installed on your system and A needs "B". "B" is being provided by a package called B directly, but you fulfilled that dep with another package called B_1. Now you want to update package A to a newer version and also install package C. C conflicts with B_1, and B_1 only. If the dep solving algo just looks at unfulfilled deps, it will ignore B, because B_1 is installed. But that conflicts with C, so no solution is being found. "Deep search" of aurman ignores everything installed and is thus able to find the solution of removing B_1, installing B and C and upgrading A Polygamma (talk) 16:00, 24 February 2018 (UTC)
I had written "dependency solving independent from the installed packages (optional)" for the "deep_search" feature in the specificity column of aurman, but that has been deleted. Tbh I cannot really follow the argumentation behind the removal. Why should the circumstance that it is almost never needed be a criterium to not put it in that column? It's nevertheless a feature which is unique by that helper, which makes it a specificity. Besides that: If one wants to install some package with another AUR helper and finding a solution fails, that "deep_search" feature could exactly be what he needs. And stating that the column is not a full features list, how does that matter for the removal of the entry? It is just one of many features... If this is the wrong place for a discussion about that removal - sorry, where do I have to put it? Polygamma (talk) 07:46, 27 February 2018 (UTC)
This is the correct place. I think the main objection is that it's a rather long description of a single feature - as you may notice in the column, specifities are usually not longer than a few words. I've went with Spyhawk's proposal for now to use "batched interaction", [8] but we can leave this discussion open for further proposals. -- Alad (talk) 11:09, 27 February 2018 (UTC)
What does "bootstrapping packages" mean? [9] Also what helpers do support versioned dependencies, and is it really worth including as a specifity due to the rarity of their occurence? Compare to the note on architecture specific fields which could extend instead, adding FS#54906. -- Alad (talk) 15:08, 5 March 2018 (UTC)
Well, I googled quite a bit do come up with a term that describes what I mean, maybe the name isn't good. Example is the mingw-w64-gcc package - installing packages for building and then removing them again is meant. Regarding the versioned deps: Two examples I know for sure: trizen and pikaur. Wanting to install "aurman-git>1.0" yields in both cases: Not found. Polygamma (talk) 15:20, 5 March 2018 (UTC)
Well anything supporting makepkg --rmdeps can install packages and remove them again. E.g. aurutils can do that to a further extent since it uses a local repo, but it can't build mingw-w64-gcc as it has a too rudimentary dependency solving algorithm.
I'll add a note then with the above bug report and aurman, pacaur. I'll leave it to the authors of other helpers to add to the note if their helper supports versioned dependencies. -- Alad (talk) 15:38, 5 March 2018 (UTC)
I've just used "deep search" and added a link to your awesome post on the aurman dependency algorithm. [10] Is this agreeable enough to close this discussion? -- Alad (talk) 16:01, 5 March 2018 (UTC)
Seems fine to me :) Polygamma (talk) 20:56, 5 March 2018 (UTC)
What about "batched interaction"? Spyhawk (talk) 17:18, 24 February 2018 (UTC)

Separate table for unmaintained/old helpers

Right now the table is filled with entries that are no longer relevant apart for historical reasons (pacaur is one example that reached prominence, but there are many others like packer, aurget, burgaur, etc.). Since they technically still "work", I wouldn't remove them from this article, but either:

Thoughts? -- Alad (talk) 19:00, 25 February 2018 (UTC)

I think any of those options are good (along with a warning or note). Are any of the older packages simply "feature complete" (no updates since the author considers the program done)?
—This unsigned comment is by Rdeckard (talk) 01:22, 26 February 2018‎ . Please sign your posts with ~~~~!
I like the solution with the grey-colored columns in the same table the most. Everything stays in place, but it's visually easy to see which projects are still "relevant" Polygamma (talk) 09:12, 26 February 2018 (UTC)
Dealing with the table alone doesn't make much sense, what about the lists above it? Would they be split or greyed out as well? How would you call the split sections - "unmaintained" vs "supported" or something like that? I know that you won't like the sound of "supported" here, but I can't think of a better alternative right now. -- Lahwaacz (talk) 22:57, 26 February 2018 (UTC)
Would a column with the last update date or last release date give an idea whether the helper is actively maintained or not? -- Kewl (talk) 22:41, 1 March 2018 (UTC)
A problem with that is that it would get frequently outdated for the active projects. -- Lahwaacz (talk) 07:52, 2 March 2018 (UTC)
True and you think showing only the year of the last release date would not be precise enough? -- Kewl (talk) 08:04, 2 March 2018 (UTC)
In my case, aurutils is unlikely to get another release until 2019-2020 so it would appear quite inactive even though it is anything but... -- Alad (talk) 08:50, 2 March 2018 (UTC)
You'd need more than a date to decide if a project is actively maintained anyway. Some project are well established with very few bugs, while other got only some recent but very minor code update while still ignoring the most blatant issues for many years. Spyhawk (talk) 14:25, 2 March 2018 (UTC)
Then in my opinion splitting the table in 2 sections, maintained/inactive based on your expert judgement of the helpers (a mix of last release date and future expected dev) would be good. Keeping, for the moment at least, the same format eases comparison between current and legacy helpers. -- Kewl (talk) 16:23, 2 March 2018 (UTC)
See Synchronization_and_backup_programs, why not using a maintained column like there. -- Kewl (talk) 17:08, 4 March 2018 (UTC)
So I guess Template:Yes for active development, Template:Y for inactive but with an "available" maintainer, and Template:No for unmaintained? -- Alad (talk) 17:22, 4 March 2018 (UTC)
Fine with me -- Kewl (talk) 18:13, 4 March 2018 (UTC)
"Expert judgement" is vague and subjective. You probably want to define some explicit criteria (even if they are skewed) so helpers can be judged against the same baseline. Spyhawk (talk) 20:15, 4 March 2018 (UTC)
The red column should be easy, i.e. "Projects that were abandoned by the author, in favor of a different project or otherwise" with some explanative link for each entry. Yellow could be when long-standing issues are not addressed. That leaves some edge cases, like when a project has frequent commits but issues are not addressed, but in general you'd give other entries a Yes. -- Alad (talk) 21:02, 4 March 2018 (UTC)
Here's an attempt: A project is "active" if 1/ it isn't officially discontinued/unmaintained, 2/ has a main regular contributor (generally the main author), with some commits of his own at least the past 6 months (in contrast to punctual contributors that work on unimportant issues), 3/ important issues of security and clean build are being actively worked on (commit being pushed or interest in doing so displayed in the past 6 months). That should cover the edge-cases. The proposed duration can be adjusted, ie. ~3 months could be more adequate. Spyhawk (talk) 08:43, 5 March 2018 (UTC)
Sounds ok to me. I'd probably stick to 6 months or more, otherwise projects like Aura which are more reliable since last year would be immediately classified as "inactive". -- Alad (talk) 15:13, 5 March 2018 (UTC)
Proposal: [11] -- Alad (talk) 16:26, 5 March 2018 (UTC)
Concerning "general activity" and Rdeckard's comment on "feature complete" helpers, perhaps this could include issue tracking or author reponse (assuming the other criteria are fulfilled). -- Alad (talk) 16:29, 5 March 2018 (UTC)
I'd put the maintenance column in the front to make helper selection more straightforward, but otherwise LGTM. Spyhawk (talk) 17:05, 5 March 2018 (UTC)
Done [12] cheers -- Alad (talk) 18:23, 5 March 2018 (UTC)

Default sorting for entries

Right now, entries are sorted alphabetically and can be sorted by column by clicking on the respective arrows. I propose to make the default sorting both alphabetically and by "less crap", so people don't have to wade through mixes of red and green. -- Alad (talk) 16:45, 5 March 2018 (UTC)

Agree, but is this possible to sort by default? See MediaWiki doc. I get a nice result by clicking twice on each column, starting from the last to the first one ("git clone" to "maintenance"). -- Spyhawk (talk) 00:35, 6 March 2018 (UTC)
It appears this has to be done manually: w:Help:Sorting#Initial_sort_order_of_rows. I do like the proposed order. -- Alad (talk) 13:19, 8 March 2018 (UTC)

"AUR repo diff"

[13] no idea what that's supposed to mean. If it's git diffs, half of the table supports those. -- Alad (talk) 07:59, 8 March 2018 (UTC)

yup, that means exactly that. i wasn't sure if it worth mentioning or not Actionless (talk) 12:24, 8 March 2018 (UTC)
when a helper supports git clone but not git diff, we could consider using Template:Y instead of Template:Yes for the git column. -- Alad (talk) 12:58, 8 March 2018 (UTC)
good idea Actionless (talk) 12:59, 8 March 2018 (UTC)

"Reference" implementation

This is an alternative to #Reliable_Updater. Instead of an arbitrary set of test packages, we could write up a "specification" on what a reliable AUR helper should do. This should also be more helpful for potential AUR helper writers who otherwise have to wade through complex, fully-featured AUR helpers.

I propose a minimal reference implementation with the following points:

  • No client-side workarounds for upstream limitations. In particular, a reference implementation does not need to score full points on split packages, as makepkg --pkg was removed with pacman 5.
  • Minimal language constructs in e.g. a scripting language like dash.
  • Prefer simplicity of implementation over being fully featured. In particular, an implementation may only support git clone and not git diff.

My initial plan was to keep such an implementation in a man page aurhelper(7) (hosted as part of aurutils), but we can consider including on a sub-page of this article. It could be then linked from the comparison table. Thoughts? -- Alad (talk) 13:28, 8 March 2018 (UTC)

Generally agree with the idea, but I don't think there is a way around a set of PKGBUILDs that could be used to test helpers in a local AUR instance. F.e., I wouldn't define a "reliable" helper that doesn't handle split packages well. Since helpers are tolerated rather than supported, upstream limitations of the AUR might be temporary or permanent, meaning the limitation would actually be in the helper itself (f.e. like regex support). Also, I'd use pseudo code for such a reference as the actual implementation itself doesn't matter, unless you'd like to write a new minimalist helper. Spyhawk (talk) 15:26, 8 March 2018 (UTC)
Apart from FS#56602, I can't think of a case where upstream opposed removing limitations, even if helpers directly benefited. cf. the regex support discussed in [14] or the exit codes finally introduced in makepkg 5.1 which made automatic building significantly easier imo. To me it seems that the main reason we have these AUR limations is due to the minimal interest of helper writers in contributing upstream, and upstream itself having different priorities. Not sure why former is the case, the PHP codebase may play part in it - at least it does for me.
You can keep dash close enough to pseudo-code, I guess less so if you want a complete example rather than exemplary code blocks. For the PKGBUILD set, I use this: [15] -- Alad (talk) 18:34, 8 March 2018 (UTC)
My understanding is that changes that aren't invasive will be accepted upstream, but otherwise might be rejected (see [16]). One prominent example that comes to mind is FS#48796. It's not really relevant anymore since x86 has been officially dropped, but the solution would involve duplicating DB tables on the server, which isn't trivial to implement/migrate. Many of the feature requests involve non-trivial code change, which is the main reason nobody pushed patches; I dislike PHP but the language itself isn't too hard either. For regex, see the bottom of [17], which is the follow-up of your link above.
Your testsuite seems interesting (thanks for the link), but one advantage of having a fixed set of packages is that these packages might be updated and change, making these edge cases difficult to test. This happened quite a few times with my own list of test packages in the past and this was rather annoying. Spyhawk (talk) 20:20, 8 March 2018 (UTC)

Add "pacman wrap" column

Since we have a Clean build column, I believe we should also have a "Pacman wrap" column that details how helpers wrap pacman (if applicable). A green entry should be reserved to helpers that only use pacman directly, while avoiding potentially harmful commands such as pacman -Ud or pacman -Rdd. A yellow entry could be for direct pacman use but including use of latter commands. A red entry would be for reimplementations through libalpm or other means. An N/A (grey) entry is used if no pacman wrapping is done in the first place.

The reasoning for this proposal is that while the table gives a good overview on helper features, it gives no indication whatsoever on potential harmful effects due to reimplementations of pacman. This is already having an effect on the support channels, where at best it makes debugging more difficult (see for example [18]), and having such a column might encourage future helper writers to avoid making this same mistake. -- Alad (talk) 02:59, 11 March 2018 (UTC)

For example in pikaur I do use -Rdd in one place: [19]
However I don't know any other possible way to handle the removal of conflicting package before installing its replacement with --noconfirm option.
But to avoid the problem on the further steps it's guarded with transaction: [20] so if something will fail that operation will be canceled.
Also it's not clear to me if there is any difference between pacman -Su and pacman -S $(pacman -Quq). Actionless (talk) 03:56, 11 March 2018 (UTC)
If pacman would have an option to not confirm about installing packages (:: Proceed with installation? [Y/n]) but confirm everything else (like conflicts and so on) that would actually solve the issue at all. Actionless (talk) 04:31, 11 March 2018 (UTC)
You can use the undocumented --ask flag (see pacman git log) or better, pacinstall --remove from pacutils which has the ability to install and remove packages concurrently. -- Alad (talk) 18:20, 12 March 2018 (UTC)
Thanks! Is there a similar way to avoid extra question in 'makepkg --syncdeps --rmdeps'?
UPD: i've also updated pikaur to avoid using --nodeps and --noconfirm. Actionless (talk) 03:33, 13 March 2018 (UTC)
I guess that's actually a good idea, I'd just like to include one more thing. That column should yield details about the behavior of that aur helper when using the helper without non native pacman flags. Surely I have something in mind why I say that: aurman flag --do_everything, which is a non native pacman flag, which is also being described in the readme as not recommended, but which may be used. it changes the behavior of aurman -Syu in the first place, so that would be a candidate for the "non-green" entry, but I bet there are other aur helpers out there, which by default only do sane things, but may be used in another way, when specifying any config options or command line flags. one could go one step further maybe: only if the aur helper specifies those side effects in the readme, man page or whatever, the aur helper gets a "green" entry. hence those side effects may only occur if the user uses a flag, whereas those side effects have been clarified enough Polygamma (talk) 15:39, 11 March 2018 (UTC)
If yay -Syu is in fact -Syyu, that sounds more like a "bug" that should be fixed. Has this been reported, or acknowledged and dismissed? Spyhawk (talk) 13:51, 13 March 2018 (UTC)