Terminal cheat sheet
Here's a small reference for working with postmarketOS/Alpine Linux.
The package manager in postmarketOS is called
apk, the Alpine Package Keeper. The list of packages can be found at pkgs.alpinelinux.org and pkgs.postmarketos.org.
Installing a package
$ sudo apk add neovim
Uninstalling a package
$ sudo apk del neovim
Upgrading the system. The
-a option allows downgrading packages to what's available in the repository. It is generally recommended to always use this option, especially on stable releases, to ensure that any package reverts make it to your device.
$ sudo apk upgrade -a
Run various package repair strategies, e.g. running failed installation scripts again:
$ sudo apk fix $ sudo apk fix name-of-package # will also reinstall name-of-package
Listing installed package versions (add
| grep package-name to filter for a specific package):
$ apk info -vv
Installing build dependencies:
$ sudo apk add build-base install-makedepends $ install-makedepends neovim
The repositories are stored in
/etc/apk/repositories as one repository url per line. There's also
/etc/apk/world which is a list of packages that are explicitly installed. It's possible to add/remove packages from this list and then running
apk fix to apply those changes. The Alpine Linux wiki has a page comparing apk to other popular distros, with many helpful examples.
New installations of postmarketOS let apk ask for confirmation by default. If you don't want this, delete
The service manager in postmarketOS is OpenRC. The basic service management is done with the familiar
$ rc-service networkmanager status $ sudo rc-service networkmanager start $ sudo rc-service networkmanager stop $ sudo rc-service networkmanager restart
To enable or disable services on boot you use the
List the services that are added to a runlevel $ rc-update bootmisc | boot chronyd | default dbus | default devfs | sysinit dmesg | sysinit gdm | default haveged | default hostname | boot hwclock | boot killprocs | shutdown Start NetworkManager on boot (in the default runlevel) $ sudo rc-update add networkmanager default Stop NetworkManager starting on boot $ sudo rc-update del networkmanager default
By default postmarketOS uses the busybox logging daemon for the syslog and it's configured to log to memory only. The
logread command is used to read the in-memory log. Writing standard output and standard error of a system service to the filesystem can be achieved by setting
error_log to file paths in its service script, as described in the manual page
ModemManager logs to syslog by default as well, but prints almost nothing until manually increasing the log level with
sudo mmcli -G DEBUG. Be aware that especially ModemManager logs a lot of sensitive information, such as phone numbers, text messages, IMEI, cell towers, etc!
Most user interfaces use tinydm to start the session in postmarketOS, which logs to
A discussion to possibly change logging defaults is in pmaports#1574.
Man pages are not installed by default and are seperate from the normal packages. The
docs package is a metapackage that will pull in all the documentation for the software you have installed. You can also install only the documentation you need by not installing the
but installing the specific documentation subpackage. For example for vim documentation you can install
the mandoc package is the man page reader itself the man-apropos adds the apropos manpage search tool the man-pages package will add the pages for core software like chmod but also linux headers the docs package is a metapackage that pulls in the -doc package for everything you install $ sudo apk add -i mandoc mandoc-apropos man-pages docs $ man nvim
Changing your shell
Since the pmos installations are based on busybox the default shell is
ash, which is comparable to
sh. There are multiple shells packaged in Alpine if you want something better:
pick your favorite shell $ sudo apk add -i bash zsh fish dash yash oksh elvish set your login shell $ chsh -s /bin/zsh some config distributions are packaged $ sudo apk add -i grml-zsh-config oh-my-zsh
- pmaports#1574 Make logging consistent