arkenfox / user.js

Firefox privacy, security and anti-tracking: a comprehensive user.js template for configuration and hardening
MIT License
10.29k stars 519 forks source link

Make Updater.sh shell agnostic #1855

Open asimovc opened 5 months ago

asimovc commented 5 months ago

My distros use busybox ash and the Updater.sh is using bash to work. I think making shell agnostic is better for just works in all systems.

Wha i expect is it just run as normal and i get this instead.

env: can't execute 'bash': No such file or directory

yusuf-daglioglu commented 4 months ago

Not all bash scripts are compatible with Shell: https://www.gnu.org/software/bash/manual/html_node/Shell-Compatibility-Mode.html

Therefore all script file should tested before run other interpreters.

But ash is a shell implementation. Most of OS put /bin/sh to reference to default interpreter (which in your case /bin/ash). So for temporary solution on your local machine you try to change first line:

https://github.com/arkenfox/user.js/blob/master/updater.sh#L1

as:

!/bin/sh

or

!/usr/bin/env sh

And run the script directly from your terminal. Then you can tell us the results please :) You will be the first tester :)

sertonix commented 4 months ago

The current scripts uses a lot more bash extensions than supported by busybox ash. You check that with shellcheck 0.10.0+ quit easily: shellcheck -s busybox -S error -e SC3036 *.sh

Compatibility with more shells would only work when using a simpler standard like POSIX shell.

asimovc commented 4 months ago

@yusufdaglioglu when i put #!/usr/bin/env sh i get this

./updater.sh: line 20: syntax error: bad substitution
./updater.sh: line 21: syntax error: bad substitution
MagicalDrizzle commented 2 months ago

checkbashisms and shellcheck would be useful if anyone is willing to port the script. (former is just a perl script, latter is both cross-platform and has a browser version). currently the script does make use of select which doesn't have any pure sh equivalent, so unfortunately it's not trivial...

9ao9ai9ar commented 1 month ago

@MagicalDrizzle Most of the fixes are trivial, I've got it down to five blocks of code that need a bit more thinking, select being one of them but should be simple as it just needs a hand-rolled implementation. There are some WTF logic, but for the first commit I would just port it as-is as much as possible. I would also need some testers, especially for macOS and BusyBox as I don't have easy access to those.

MagicalDrizzle commented 1 month ago

@9ao9ai9ar I would be willing to be a tester for BusyBox. (plus the windows port and dash too for good measure)

9ao9ai9ar commented 1 month ago

@MagicalDrizzle If it's a throwaway machine or VM you could start testing it already, though I've not run it a single time yet. There are a lot of options and a lot of platforms to test for, and since I'm still refactoring the code, just a simple smoke test to make sure I haven't done anything stupid and for me to collect knowledge on the capabilities and structures of lesser-known OSes is enough. Please report any issues to the linked pull request and include detailed info so I can diagnose them faster. Many thanks!