I am currently in the process of jotting down instructions of my own.
I have added my instructions to the Alpine Wiki, here.
Recently, a new Android phone has come into my possession. It is fortunately very light on the bloatware that comes on many devices. Just the standard Google stuff, the required packages, and 4 OEM packages. What’s more, it is very up-to-date and will probably stay that way based on the company’s reputation (I am purposely refraining from saying that company name because it is irrelevant here).
The unfortunate thing about even the least bloated phones on the market is that it is still impossible to remove certain applications. Gmail, for example, is of no use to me. It isn’t exactly hurting me being there, but I want it out because that is what I do on my phones. Like all but one phone I have ever owned, this phone cannot be rooted. There is a tool for that.
UAD, the Universal Android Debloater is a GUI that uses ADB to debloat non-rooted android devices. This is my usual go-to. It is self-explanatory in use and seems active enough by my standards. This time around, it wouldn’t launch. I tried both binaries on my laptop before realizing that since Alpine Linux uses musl libc instead of the GNU equivalent, I may need to build it myself. Well, I gave it my best and it wasn’t good enough. I could not get that sucker to build (I think I may have sorted out my problem now, better late than never) and patience ran out, so I just did it manually.
Here is how I got the Google (sort of) off my phone.
Android SDK Platform Tools: The Android tools (adb
is the one we want) are usually easy enough to install. There are loads of other, more precise, resources on the web that explain how to enable developer options on your phone and install these tools on your computer.
jq: an application included in many Linux distributions and also works on Mac and Windows.
The UAD Package List: You can grab the package list from the website.
A little time: I would start by making a directory to keep track of things. I called mine debloat
. Now run
$ wget https://github.com/0x192/universal-android-debloater/raw/main/resources/assets/uad_lists.json
to get the JSON file we want.
If your phone is connected to your computer and adb devices
shows your device (sometimes you need to put in a pin or confirm on your phone), you should be able to run this command and be given a list of packages:
$ adb shell pm list packages | cut -f 2 -d ":"
* daemon not running; starting now at tcp:5037
* daemon started successfully
com.google.android.providers.media.module
com.qti.phone
com.google.android.overlay.modules.permissioncontroller.forframework
com.android.calllogbackup
com.qualcomm.qti.lpa
com.qualcomm.atfwd
com.qualcomm.qti.cne
com.android.dreams.phototable
com.google.android.overlay.gmsconfig.comms
com.android.providers.contacts
com.qualcomm.uimremoteserver
com.qti.pasrservice
com.android.dreams.basic
...
I put it in a text file by adding > packages.txt
to the command.
Next, we need to use jq to check the UAD list for removable Google packages.
$ jq -r '.[]' uad_lists.json | jq -r 'select(.list=="Google" and .removal=="Recommended")' | jq -r '.id' > removable.txt
Now we have a packages.txt
file and a removable.txt
file. There are lots of ways to compare, but on a quiet night with nothing to do, one may not feel like opening up LibreOffice Calc or using an online tool. A couple lines of Python works in this case.
with open("packages.txt", "r") as installed:
package_reader = installed.readlines()
package_list = set()
for package in package_reader:
package_list.add(package.replace("\n", ""))
# print(package_list)
with open("removable.txt", "r") as removable:
removable_reader = removable.readlines()
removable_list = set()
for rpackage in removable_reader:
removable_list.add(rpackage.replace("\n", ""))
# print(removable_list)
debloat = set(package_list) & set(removable_list)
for bloat in debloat:
print(f"adb shell pm uninstall --user 0 {bloat}")
This should print out a list of removable packages with the appropriate command prepended to each line.
$ python chck_pkgs.py
adb shell pm uninstall --user 0 com.google.android.feedback
adb shell pm uninstall --user 0 com.google.android.as
adb shell pm uninstall --user 0 com.google.android.apps.wellbeing
adb shell pm uninstall --user 0 com.google.android.marvin.talkback
adb shell pm uninstall --user 0 com.google.android.setupwizard
adb shell pm uninstall --user 0 com.google.android.deskclock
Some Google packages have obvious names, com.android.chrome
is clearly Chrome. But, what is com.google.android.apps.tachyon
? Well, that’s Google Duo/Meet, of course!
So, it is time to double-check instead of going crazy on the removals. Just because some people on the Internet suggest something does not mean it is the right thing for you to do. After all, breaking the functionalities of a device you just paid money for in the name of privacy is just silly.
I read through the descriptions of many of the packages before giving them the boot. Either open the UAD list file in a text editor or ask jq to do the work for us:
$ jq -r '.[]' uad_lists.json | jq -r 'select(.list=="Google" and .removal=="Recommended")' | jq -r '.id + ": " + .description'
If you decide that you need one of the packages that you removed, it can be restored using:
adb shell cmd package install-existing --user 0 <packagename>
This is because the packages were only removed for the user, but not removed from the device. Worst case scenario: factory reset will restore all packages and unbreak anything that needs to be unbroken.
The best place for information on doing this likely the XDA Forums where you can likely find device-specific recommendations.
I have found some benefits to “removing” these packages: you won’t save much space, but possibly some battery will be saved. Also, if you live somewhere where it is not reasonable to pay for unlimited data, some of these packages might be using data that you want to keep for yourself. It is certainly worth looking into in you have devices by other brands that include OEM-specific bloatware that you never use.
I used to use Gemini. (I cannot recall why I stopped using it). Call it prescience, call it hoarding, but I happened to keep my bookmarks file from those days. During some Spring cleaning I opened it up to see what was there.
There were a number of bookmarks, one of them being a post. The post was about Alpine Linux. “Why would I bookmark this post?” I thought to myself. So, off I went to their website…
And, what to my wondering eyes should appear, but a proper and navigable website. This required my attention. While I am not such an expert on websites and design, I have navigated (or have attempted to navigate) many a Linux landing page. When the Alpine Linux page loaded I was obliged to give it a nod of approval. Debian, seriously, what is up with your site?
The logo, as well, garnered yet another nod. Hexagons are the bestagons, and this logo is wonderful. The choice of colour, and the simplicity, make it stand out. The site even made it easy to track down the epic tale of logo bikeshed-ification and notes on their website design.
Within moments, I was on the Downloads page and remarked a logical selection of images to choose from. There are even idiot-friendly descriptions, which is perfect for me. I initially decided to take it for a spin on my disused Raspberry Pi400. And here came another surprise: the size of the download.
The image for the RPi is under 100 MB. And for desktop? Just over 150 MB. “Impossible,” I thought. And I was wrong. Totally possible. Apparently their slogan — “Small. Simple. Secure.” — is at least 33% true. To know more, continue on to my glowing review of this Linux distribution.
I am currently in the process of jotting down instructions of my own.
I have added my instructions to the Alpine Wiki, here.
Alpine Linux may turn off many desktop users. This is because installation is done via the command line. There is no Calamares or Live image. After getting the image on a USB drive, for example, and booting, you are in the terminal (tty) with a blinking cursor and instructions to login as root
. From here, you can run the setup-alpine
script that walks you through getting the basics installed and configured. I followed this process.
After rebooting I was still at a command prompt, but now had Wi-Fi and began following the instructions from the Wiki. From here, all it took was reading the Wiki and learning to use the apk
command.
apk
works like apt
on Debian-based distributions, but I do find it easier. I searched (apk search x
) and I added (apk add x
) without difficulty. apk
also takes care of removing dependencies — apk del x
is like apt purge x && apt autoremove
— and this is just so… simple. Yes, there was the matter of uncommenting a repository, and I did need to pay special attention to how to use rc-service
and rc-update
, but in under 10 minutes I was able to install the necessary packages to install LXQt on my old laptop (an Acer Aspire from 2015).
The apk
tool is also extremely fast.
I could wag my chin all day and bore the pants off anyone reading this, but I’d rather keep it simple. Once installed, everything boots quick enough and the hardware works (trackpad, webcam, Bluetooth, optical drive, number pad, function keys, etc.). Of course, using something like LXQt makes the system snappy and quick. Desktop users, however, tend to want access to the latest and greatest software.
One does not need to install a distro to learn these things. Alpine Linux Edge has about 84% up-to-date packages.
(for comparison, Arch is about 84% and Debian Unstable is around 67%)
Using the Edge (rolling) repository gave me nearly everything needed to do what I do on a computer:
Some packages are out of date, and that can be a pain. But, here I am with a desktop up and running on an 8-year-old laptop that has not been used in years, and it is fast. So, if the pandoc
version is 7 months behind, I can grumble a little, but it won’t stop me from using this distro.
Beyond this, up-to-date packages for browsers and many desktop environments are available. You can quickly have access to LibreOffice, Python, audio and video playing software, IDEs and other helpful tools that can get many users through the day.
Alpine is a “general purpose Linux distribution” but does not target desktop users. Anything that could be perceived as a downside stems from this distinction and should be considered a bit of a feature, rather than a bug.
Drew DeVault’s article on Alpine (mentioned above) mentions the only downside I have noticed in my week or so of using this on my old laptop.
Documentation is one of Alpine’s weak points. This is generally offset by Alpine’s simplicity — it can usually be understood reasonably quickly and easily even in the absence of documentation — but it remains an issue. That being said, Alpine has shown consistent progress in this respect in the past few releases, shipping more manual pages, improving the wiki, and standardizing processes for matters like release notes.
Drew DeVault
I am looking forward to my coming holiday because I will likely switch my main laptop to Alpine Linux. In fact, I am even inclined to finally, after years of being a basic Desktop Linux user, contribute to a project with more than the rare bug report. I will probably need a little help before I do that though.
As I am writing this I have also came across Bradley Taunt’s Alpine Suck project, a script that installs the core suckless programs. If they don’t already exist, I believe that other projects of this nature will appear. Perhaps, even, a desktop distro based on Alpine.
It may be apparent, but I will let you in on a secret: I have never tried to write a review of distribution — ever. My Linux experience only goes back to about 2006. Since then, I have tried a good number of distributions. Never once have I ever thought about sharing my thoughts in more than a few words. Also take into consideration that I am a desktop Linux user.
If I were to apply the same grading methods to Alpine Linux as I do my students, I would state the following:
Excellent — above average with only minor weak points.
If you clicked on this link hoping for something about typography, I apologize. This is a full-on ramble.
For the last week I have been mulling about the word “baseline.” How that came to be, I have no idea. It happened, so be it. Maybe I read the word in an article and my brain decide to fixate on it. It is pointless to fight it — like when you have a song stuck in your head — so I will give in and overthink it.
A few quick conversations with some colleagues and students revealed one thing (that I later confirmed using a dictionary): we don’t all think the same thing when we hear the word. The meanings are similar and the overall sense of a phrase would be understood without clarification, despite the slight differences.
Sometimes we think about comparison: is A more or less than B, and how are we comparing? Size? Weight? Volume? And in this definition the baseline might be somewhere in between or be one of the variables itself.
Sometimes we think of the baseline as the starting point. There is no less than and the further away from that baseline we get, the more incorrect we are.
At the beginning of the week, much to the surprise of nobody, a comic strip creator strayed too far from the collective baseline for what is tolerable. The last time I read anything about this author was in September, when he had also expressed himself in such a manner that his work was pulled from numerous newspapers1. This time around2, though, it appears he could not claim his comments were satirical in nature. Even disregarding previous transgressions, his tether to the baseline would not have been strong enough to weather the shit-squall he brought upon himself.
I don’t want to take a deep dive into cancel culture or discuss the influence of media and social networks. That is far too political for me. In the case above, I will say that it was time for something to be done. I have probably seen fewer than 30 strips by that author, and my life will remain unchanged by his actions. I do recognize that is not the case for everyone, but I am only using this as a quick and current example before moving on.
What is your baseline for comedy? At what point is a song good? Is that game difficult or just not easy? How did our brains set those respective baselines?
Of course many variables influenced the placement of those baselines, and ther variables modified our built-in presets. These are not immutable things. Individuals change, and then we get to argue and have debates.
One of my personal baselines is probably what makes me bad at using social media. The last time I went on Facebook, for example, I was met with a wall of nonsense. And you are probably nodding your head, thinking about algorithms. So it is important that I note that I always sort chronologically on Facebook and access it using a bookmark pointing to https://www.facebook.com/?sk=h_chr
.
Along with a few things I reported, I was also treated to posts about American politics being shared and discussed by Canadians who identify as Sovereign Citizens, health advice about essential oils, conspiracy theories about Epstein, and something about soaking vegetables in baking soda to remove “GMO hormone modifiers.” I had only made it a few page scrolls before I was so far from my baseline that I had entered the “no comment zone” — when your brain just farts and sputters.
It was a post, and accompanying thread, about Aunt Jemima. It is certainly not the worst thing I have even seen, but it made my eyes roll so hard it hurt.
Thankfully, there were some people who had the good sense to check Wikipedia and take the time to leave a comment, but that did not help with the brain farting. Because, what I didn’t mention, is that all the examples of posts above, including this one, were shared by the same person who appears to spend their day on Facebook. They also shared this (extremely self-aware) meme:
As I write this, it has dawned on me that I may have unwittingly created an echo-chamber for myself by not using Facebook and surrounding myself with like-minded folks whose baselines for common sense are in proximity to my own — my birds of a feather.
My need to discuss this is nearly satiated, but this talk of baselines and birds of a feather reminded me of one final relevant topic: Mastodon.
I hope that by now one can speak about Mastodon without giving a preamble on instances, federation or the Fediverse. I just cannot be bothered. After about two years using Fosstodon, I decided it was time to use just one account. While I was perfectly comfortable using an instance filled with lovers of Free and Open Source Software, it made sense to move to a more generalist instance where I can also speak French — birds of a feather and all. I happened to do this on a day when Fosstodon was dealing with a DDoS attack. Fosstodon decided to use Cloudflare to mitigate the attack and this riled up a few “FOSSBros” — not exactly birds of a feather.
Time will tell if I made the right decision. Perhaps I will return to Fosstodon, perhaps I will quit Mastodon altogether. My baseline for what I want from social media is a little blurry even after 19 years (ouch!) of using different iterations. I just hope that LinkedIn doesn’t end up being the closest in proximity.