AdBlocking on Sailfish OS via /etc/hosts
Table of Contents
There are some apps in Openrepos which do not seem to work anymore for SFOS 4.x. But you don't really need an app, all you need is a systemd timer & service and a simplistic shell script.
Gain command line access to your phone and become root.
console> cd /etc/systemd/system > nano hosts.timer hosts.service > systemctl enable hosts.timer
hosts.timer
:
ini[Unit] Description=Update /etc/hosts [Timer] WakeSystem=false OnCalendar=Sat *-*-* 16:00:00 RandomizedDelaySec=1h AccuracySec=1h Persistent=true [Install] WantedBy=timers.target
So once a week on Saturday at roughly 16:00. Adjust to your liking.
See man systemd.timer
for further options.
hosts.service
:
ini[Unit] Description=Update /etc/hosts [Service] ExecStart=/usr/local/bin/hostsupdate
The script can be found here or here.
It removes some useless fluff and then combines this data with hosts.head into the new hosts file.
/etc/hosts
is only overwritten after all this succeeds.
Make sure that
-
/usr/local/bin/hostsupdate is marked executable:
chmod +x /usr/local/bin/hostsupdate
-
The file /etc/hosts.head exists and contains the default contents of /etc/hosts (before any manipulation). Here it is:
127.0.0.1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6
Caveat ∆
It seems that a full reboot is required for the new hosts file to take effect for the sailfish-browser.
Android App Support ∆
It is possible to use the same hosts file under AAS. Create /usr/libexec/appsupport/alien-generate-extra-config.sh
with the following content, and make it executable:
sh#!/bin/sh echo ">>> $0" >&2 echo ">>> \$1 $1" >&2 echo ">>> \$2 $2" >&2 [ "$#" -gt 1 ] && shift echo "lxc.mount.entry = /etc/hosts system/etc/hosts none bind,create=file 0 0" > "$1/29-hosts_config"
You should now also add the alias Android uses for ipv6 to /etc/hosts.head
:
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6 ip6-localhost
Next time you start AAS you can check if the script ran with systemctl status aliendalvik-prepare
.
I checked some of the sites from /etc/hosts
on an Android browser without adblocking, and they all return a connection refused error, as it should be.
I also checked with devel-su appsupport-attach cat /system/etc/hosts
. Definitely the same file.