postmarketOS on Galaxy Nexus
Hi bought a old used Galaxy Nexus for 30 bucks on ebay, to try postmarketOS (https://postmarketos.org/).
The reason I choose this model was because of it’s great hardware support. Especially Wifi (Supported Devices)[https://wiki.postmarketos.org/wiki/Devices].
I hope I can get Bluetooth to work, since I want to use this device as an encrypted ultra mobile backup device with vpn, ssh, terminal and a bluetooth keyboard for system administration.
Galaxy Nexus Boot Modes
First I unlocked the device bootloader using
fastboot oem unlock
After that I’ve flashed the latest TWRP Recovery Image. (TWRP for Galaxy Nexus)[https://twrp.me/samsung/samsunggalaxynexusgsm.html]
fastboot flash recovery twrp.img fastboot reboot
The following Steps will help you to build postmarketOS. This is really straight forward and you’ll end up with a flashable zip (like if it was some kind of Android Distribution).
Obtain postmarketOS Bootstrap tool
git clone https://github.com/postmarketOS/pmbootstrap cd pmbootstrap
postmarketOS Building / Flashing
./pmbootstrap.py init to setup the image how you want it.
those are the values I’ve used
[22:27:59] Location of the 'work' path. Multiple chroots (native, device arch, device rootfs) will be created in there. [22:27:59] Work path [/home/username/.local/var/pmbootstrap]: [22:27:59] Target device (either an existing one, or a new one for porting). [22:27:59] Available (55): amazon-thor, asus-flo, asus-grouper, asus-t00f, asus-tf101, fairphone-fp2, google-glass, htc-ace, htc-bravo, huawei-angler, huawei-y530, leeco-s2, lenovo-karate, lg-d285, lg-d855, lg-dory, lg-h815, lg-hammerhead, lg-lenok, lg-mako, motorola-falcon, motorola-osprey, motorola-potter, motorola-shamu, motorola-titan, nextbit-robin, nokia-n9, nokia-n900, oneplus-bacon, oneplus-onyx, qemu-aarch64, qemu-amd64, qemu-vexpress, samsung-espresso10, samsung-i747m, samsung-i9003, samsung-i9070, samsung-i9100, samsung-i9195, samsung-i9305, samsung-i9505, samsung-maguro, samsung-manta, samsung-n7100, samsung-s6500d, semc-anzu, sony-amami, sony-aries, sony-castor-windy, sony-honami, sony-yuga, t2m-flame, teclast-x80pro, wiko-lenny3, xiaomi-ido [22:27:59] Device [samsung-maguro]: samsung-maguro [22:28:00] Username [username]: username [22:28:00] Available user interfaces (6): [22:28:00] * none: No graphical environment [22:28:00] * hildon: (X11) Lightweight GTK+2 UI (optimized for single-touch touchscreens) [22:28:00] * luna: (Wayland) webOS UI, ported from the LuneOS project (Not working yet) [22:28:00] * mate: (X11) MATE Desktop Environment, fork of GNOME2 (stylus recommended) [22:28:00] * plasma-mobile: (Wayland) Mobile variant of KDE Plasma, optimized for touchscreen [22:28:00] * weston: (Wayland) Reference compositor (demo, not a phone interface) [22:28:00] * xfce4: (X11) Lightweight GTK+2 desktop (stylus recommended) [22:28:00] User interface [xfce4]: xfce4 [22:28:00] Build options: Parallel jobs: 5, ccache per arch: 5G [22:28:00] Change them? (y/n) [n]: [22:28:02] Additional packages that will be installed to rootfs. Specify them in a comma separated list (e.g.: vim,file) or "none" [22:28:02] Extra packages [vim,tmux,matchbox-keyboard,wpa_supplicant]: vim,tmux,matchbox-keyboard,wpa_supplicant,dillo,mutt [22:28:07] Your host timezone: Europe/Berlin [22:28:07] Use this timezone instead of GMT? (y/n) [y]: [22:28:08] WARNING: The applications in the chroots do not get updated automatically. [22:28:08] Run 'pmbootstrap zap' to delete all chroots once a day before working with pmbootstrap! [22:28:08] It only takes a few seconds, and all packages are cached. [22:28:08] Done!
Now we need to generate the Image
./pmbootstrap.py install --android-recovery-zip
To flash the image I’ve used
adb sideload so we need to export the flashable zip, boot the nexus into TWRP and open Sideload mode and connect it to the PC using a usb-cable.
rm -rf exported_image/; mkdir exported_image/; ./pmbootstrap.py export exported_image/ # now bring nexus into sideload mode and connect it via usb sudo adb sideload exported_image/pmos-samsung-maguro.zip
So you followed this tutorial so far and TWRP is flashing the image. Since in this Setup we haven’t disabled Full Disk Encryption (which is a nice feature I’d totally recommend) we need to do the following before we unplug our device after it’s flashed.
We need to set a passphrase for the Full Disk Encryption or your device will fail at the boot password prompt.
your-pc$ adb shell ~ # pmos_setpw Enter new passphrase for key slot: Verify passphrase: ~ # reboot
You might want to try different Graphical Environments etc. so you can just redo everthing to reinstall it. But you should first get rid of the old configuration using
To uninstal just use TWRP to flash a different Image like
lineageos or the official google stock rom to your device. You can also close your bootloader using
fastboot oem lock.
Use ssh via usb-networking
You can get a shell to the device with the user you specified in the init process.
Simply connect your device using a usb-cable to your computer. Your PC should obtain an IP Address in the Network of the Nexus and be able to communicate with it.
Your PCs IP-Address:
172.16.42.2 - Your Smartphones IP-Address:
To connect via SSH use:
To Setup a Wifi Connection use the following:
wpa_passphrase YOUR_SSID YOUR_PASSPHRASE | sudo tee /etc/wpa_supplicant/wpa_supplicant.conf
Next you’ll need to set up the networking service by adding interfaces to
/etc/network/interfaces. In some cases, the loopback device may need to precede the wlan interface:
auto lo iface lo inet loopback auto wlan0 iface wlan0 inet dhcp
start wifi on boot (optional)
rc-update add networking default
Configure the right driver in
start wifi manually
wpa_supplicant -Dnl80211 -B -c /etc/wpa_supplicant/wpa_supplicant.conf -iwlan0 udhcpc -i wlan0
you might have seen that there is no
dhclient available - just use
udhcpc instead ;)
To get more details about the kernels look at: https://wiki.postmarketos.org/wiki/Troubleshooting:kernel
You can also change the kernel to a android kernel (this is not officially recommended since it’s against the main goal of the project of providing a mainline kernel for the phones) https://wiki.postmarketos.org/wiki/Using_prebuilt_kernels