This slightly lengthy article goes through my attempts at installing and setting up Fedora on my Pixelbook.
I previously had Ubuntu on there, modified and hacked using https://github.com/yusefnapora/pixelbook-linux.
However, as Ubuntu progressed on, it was clear this repo was not being maintained and updated and rapidly, stuff starting to fail as it required later versions of packages. Even the kernel was still on 4.4.x even now. I spent a long time trying to compile the kernel while trying to figure out the right options for a working kernel, with not much luck.
Putting in things like the “old-releases” repos helped keep things ticking over, but things were still breaking repeatedly, and the microphone kept breaking during calls due to the way the hacks were implemented.
The final straw came when the office decided to buy Apple M1 Macs for the developers (I refused to use one. My hate-hate relationship with Apple is well documented)
The decision to use M1 macs has now led to a problem whereby the docker images that are used are no longer compatible with the macbooks since they are arm64. The macs can use qemu emulation, but that is not perfect, giving weird errors when running the docker images under emulation. Leaving it to me, who is still using an amd64 machine to try to figure out multiarchtecture builds.
I was (and still am) reluctant to do the multiarch builds. Using multiarch builds would mean the devs are running a docker image that is not the same as that which is running on the test and production clusters and that in itself, means they are not developing on, or testing on an infrastructure that is representative of the test or production environments.
If the infrastructures were arm-based environments, sure, then that would be representative then, but not as it stands.
In fact, right now, if the developers build the docker image locally to test something, then pushed that to production, they would break production, as it runs on amd64 images.
I don’t think this was thought through carefully enough, to be honest.
But enough of the rant. We are where we are, and I need to try to bail out the situation.
My hacked Ubuntu would not support multiarch build no matter what I tried, but when I tried to use Fedora in a Qemu VM (virtualbox also wouldn’t work, since the virtualbox installer compiles kernel modules and that always failed with the custom kernel used by the hacked Ubuntu installation.)
So I decided to try to wipe the Ubuntu installation and start again from scratch, with Fedora.
Fedora 35 was the version I ended up using, and the latest at the time I started this activity.
Out of the box, it had native support for the touchpad, including two and three-finger scrolling via Unity 41. Two-finger scroll scrolls the active window. Three-finger scrolling up gives the window overview, and three-finger scrolling left or right switches workspaces.
Fedora by default uses btrfs. CloneZilla didn’t seem to play well with that so had to start again, but perhaps it was due to the MyChromebox BIOS being too old. Upgraded and that seemed to work better.
After CloneZilla’ing the initial install so I could rollback to that if everything fell over, I started setting up the installation.
First thing I did is
visudo‘ed myself into the
sudoers file, with a NOPASSWD param for passwordless
Next I ran
dnf update to update packages. There was about 1G of data to update and install.
Then I ran a CloneZilla to backup the laptop state at this point.
From this point, I started setting up the laptop. I found this repo on GitHub where the owner created a setup for Pixelbook https://github.com/jmontleon/pixelbook-fedora — similar to the one I used for setting up Ubuntu on the Pixelbook. The repo owner also appears to have compiled his own version of the kernel and has his own COPR repository.
After spending a week tinkering with the instructions and getting some bugs ironed out, audio finally worked.
I built an Ansible playbook to help with the instructions running. This was adapted and incorporated into the repo.
With audio now working, I CloneZilla’ed the laptop state again, to have a good state to rollback to.
I then copied my file backup from my external USB into the laptop and then CloneZilla’ed the state again
With the files copied, now it was time to get the apps installed. I built another Ansible playbook to help speed things up and it’s located here https://gitlab.com/blenderfox/pixelbook-fedora-setup/
The repo contains two playbooks one for doing the audio (it’s essentially the same one in the jmontleon repo) and the second for app installs.
Summary of apps I installed initially:
- ffmpeg https://computingforgeeks.com/how-to-install-ffmpeg-on-fedora/
- scrcpy (is a copr repo) https://github.com/Genymobile/scrcpy
- Ferdi http://getferdi.com/
- google-cloud-sdk & kubectl: https://cloud.google.com/sdk/docs/install#rpm
- gcloud threw an error
module ‘collections’ has no attribute ‘Mapping’. Followed this:
https://gehrcke.de/2021/11/gcloud-on-python-3-10-module-collections-has-no-attribute-mapping/ to fix. Had to make sure to put the export line in ~/.bash_profile
- tfenv https://github.com/tfutils/tfenv, making sure to add the path to ~/.bash_profile
- helm2 (https://get.helm.sh/helm-v2.17.0-linux-amd64.tar.gz), extract, move the helm binary to /usr/local/bin/helm2 and chmod +x it
- helm3 (latest version. At time of writing, it’s https://get.helm.sh/helm-v2.16.12-linux-amd64.tar.gz). Call the helm3 binary /usr/local/bin/helm3 instead.
- Spotify https://docs.fedoraproject.org/en-US/quick-docs/installing-spotify/ (I used the flatpak)
- Lens: https://k8slens.dev/
- Steam https://itsfoss.com/install-steam-fedora/
- gnome extensions app (
dnf install gnome-extensions-app — can also use the flatpak instead)
- ProtonVPN (https://protonvpn.com/support/official-linux-vpn-fedora/) — making sure to enable the system tray support
- Atom https://atom.io/
- youtube-dl http://ytdl-org.github.io/youtube-dl/download.html
- qemu static for multiarch builds (https://www.docker.com/blog/getting-started-with-docker-for-arm-on-linux/)
sudo dnf install qemu-user-static then
docker build ls to check available platforms on the builder. Docker ships with buildx https://github.com/docker/buildx#working-with-builder-instances on later version.
- openconnect (if not already installed)
dnf install openconnect
- openconnect saml wrapper https://github.com/dlenski/gp-saml-gui
- quickemu and GUI https://github.com/quickemu-project/quickemu#install-quickemu,
- ZeroTier https://www.zerotier.com/download/
- Authy, BitWarden, Discord, k9s, Postman, Remmina, from Snaps. Had issues installing some snaps, needed to
sudo systemctl restart snapd.seeded.service
- Install WeChat https://www.ikkyinchina.com/2020/11/25/how-to-install-wechat-for-pc-on-fedora/