mirror of
https://github.com/AdguardTeam/AdGuardHome.git
synced 2026-03-04 00:01:12 -05:00
Add option to enable auto-upgrade on Linux/Unix despite CAP_NET_BIND_SERVICE capability #1808
Labels
No labels
P1: Critical
P2: High
P3: Medium
P4: Low
UI
bug
cannot reproduce
compatibility
dependencies
docker
documentation
duplicate
enhancement
enhancement
external libs
feature request
good first issue
help wanted
infrastructure
invalid
localization
needs investigation
performance
potential-duplicate
question
recurrent
research
snap
waiting for data
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/AdGuardHome#1808
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @CampinCarl on GitHub (Jul 25, 2020).
Problem Description
The if statement linked below rightly describes the issue with setting
CAP_NET_BIND_SERVICEon binary files in Linux but doesn't account for setting this option using systemd'sAmbientCapabilitiesdirective instead, which doesn't require setting the capability on the binary itself.github.com/AdguardTeam/AdGuardHome@b4aa791513/home/control_update.go (L101-L111)Proposed Solution
Modify the if statement logic to allow users to override the behavior, perhaps with a command line flag like
--allow-auto-update? When combined with the AmbientCapabilities systemd directive, this would allow users to auto upgrade the binary even when running AdGuardHome without root permissions.Systemd Service File Example
Alternatives Considered
Script the upgrade myself or fork the code, but a native solution would be much easier and a benefit for other Linux users. Thanks for the great application!
Additional Information
@ameshkov commented on GitHub (Jul 26, 2020):
I am not a fan of adding new flags because most people simply wouldn't know about it.
Is there any way to detect this automatically?
@CampinCarl commented on GitHub (Jul 26, 2020):
That's fair, this is admittedly a bit of an edge case though I'd argue it's the best way to set it up on Linux without root (at least with systemd). Would you consider a configuration file directive instead or is that just as bad/worse?
As for how to detect it, I suspect you'd need to interact with systemd directly to check. I only know a little Go so here's how one could check from the shell.
systemctl status <AdGuardHome PID>; orps -o unit <AdGuardHome PID>systemctl show -p AmbientCapabilities <AdGuardHome Service File>If the output from step 2 includes
cap_net_bind_servicethen it should be safe to upgrade AdGuard Home.@Aikatsui commented on GitHub (Jul 26, 2020):
#813 - automatic update.
@ameshkov commented on GitHub (Jul 30, 2020):
Well, we can run shell commands from Go, it's a perfectly viable solution.
We will need to implement a method that will call your commands one by one, something like
util.HaveAmbientCapabilities()and use it.Something like this:
Marked as "help wanted" for now that means that we're looking for anyone who can contribute this change to AGH.
If it gets more upvotes and no one volunteers to implement it, we'll do it.
@CampinCarl commented on GitHub (Jul 30, 2020):
That makes sense; thanks for the insight. I'm a bit of a novice with Go but I'll play with it and see if I can't get something working.