Usage

pmbootstrap offers many options and actions and is normally ran from a shell.

Before pmbootstrap can be used, a number of configuration questions need to be answered. The sections below go into detail for the various questions.

$ pmboostrap init

If you already ran this before, run the following to update your local clone of pmaports.git instead, before moving straight onto the installation step:

$ pmbootstrap pull

Quick health check and config overview:

$ pmbootstrap status

After successfully finishing the init sequence with answering all questions, its time to build the installation:

Devices like the PinePhone, Samsung Galaxy S II, Nokia N900, various laptops etc. can boot from an SD card, USB stick or other external storage. Find the name with lsblk first and make sure it is the right one as you will overwrite everything on it. Use a path without partition number at the end, such as /dev/mmcblk0. If your device is able to boot from SD card without flashing anything (such as the PinePhone), you should then be able to insert SD card into your device and boot it up.

$ pmbootstrap install --sdcard=/dev/mmcblk... --fde

For devices where you will flash directly to the internal storage, as mostly all sdm845 devices, you can build the installation as:

$ pmbootstrap install

or with full disk encryption:

$ pmbootstrap install --fde

and then flash it with the pmbootstrap flasher while the device is in fastboot mode:

$ pmbootstrap flasher flash_rootfs

and also the kernel:

$ pmbootstrap flasher flash_kernel

For getting images on the local machine instead of directly flashing them, execute:

$ pmbootstrap export

To extract the generated initramfs:

$ pmbootstrap initfs extract

Build and flash Android recovery zip:

$ pmbootstrap install --android-recovery-zip
$ pmbootstrap flasher --method=adb sideload

Update existing installation on SD card:

$ pmbootstrap install --disk=/dev/mmcblk0 --rsync

Run the image in QEMU:

$ pmbootstrap qemu --image-size=1G

Device Porting Assistance

Analyze Android boot.img files (also works with recovery OS images like TWRP):

$ pmbootstrap bootimg_analyze ~/Downloads/twrp-3.2.1-0-fp2.img

Check kernel configs:

$ pmbootstrap kconfig check

Edit a kernel config:

$ pmbootstrap kconfig edit

For further details on the different actions please see below and refer to the wiki-arcticle on pmbootstrap.

pmbootstrap

usage: pmbootstrap [-h] [-V] [-c CONFIG] [-j JOBS] [-E EXTRA_SPACE]
                   [-B BOOT_SIZE] [-p APORTS] [-t TIMEOUT] [-w WORK] [-y]
                   [--as-root] [-o] [--no-ccache] [--no-cross] [-l LOG]
                   [--details-to-stdout] [-v] [-q]
                   {init,shutdown,index,work_migrate,repo_bootstrap,repo_missing,kconfig,export,sideload,netboot,flasher,initfs,qemu,pkgrel_bump,pkgver_bump,aportupgrade,newapkbuild,lint,test,status,ci,log,zap,stats,update,build_init,chroot,install,checksum,aportgen,build,deviceinfo_parse,apkbuild_parse,apkindex_parse,config,bootimg_analyze,pull}
                   ...

options

-h, --help

show this help message and exit

-V, --version

show program’s version number and exit

-c <config>, --config <config>

path to pmbootstrap_v3.cfg file (default in ~/.config/)

-j <jobs>, --jobs <jobs>

parallel jobs when compiling

-E <extra_space>, --extra-space <extra_space>

specify an integer with the amount of additionalspace to allocate to the image in MB (default 0)

-B <boot_size>, --boot-size <boot_size>

specify an integer with your preferred bootpartition size on target machine in MB (default 256)

-p <aports>, --aports <aports>

postmarketos aports (pmaports) path

-t <timeout>, --timeout <timeout>

seconds after which processes get killed that stopped writing any output (default: 900)

-w <work>, --work <work>

folder where all data gets stored (chroots, caches, built packages)

-y, --assume-yes

Assume ‘yes’ to all question prompts. WARNING: this option will cause normal ‘are you sure?’ prompts to be disabled!

--as-root

Allow running as root (not recommended, may screw up your work folders directory permissions!)

-o, --offline

Do not attempt to update the package index files

--no-ccache

do not cache the compiled output

--no-cross

disable cross compiler, build only with QEMU and gcc (slow!)

-l <log>, --log <log>

path to log file

--details-to-stdout

print details (e.g. build output) to stdout, instead of writing to the log

-v, --verbose

write even more to the logfiles (this may reduce performance)

-q, --quiet

do not output any log messages

pmbootstrap apkbuild_parse

usage: pmbootstrap apkbuild_parse [-h] [packages ...]
packages
-h, --help

show this help message and exit

pmbootstrap apkindex_parse

usage: pmbootstrap apkindex_parse [-h] apkindex_path [package]
apkindex_path
package
-h, --help

show this help message and exit

pmbootstrap aportgen

usage: pmbootstrap aportgen [-h] [-a | -r] packages [packages ...]
packages
-h, --help

show this help message and exit

-a, --fork-alpine

fork the alpine upstream package

-r, --fork-alpine-retain-branch

fork the alpine upstream, but don’t change branch to match the current channel

pmbootstrap aportupgrade

usage: pmbootstrap aportupgrade [-h] [--dry] [--ref REF] [--all]
                                [--all-stable] [--all-git]
                                [packages ...]
packages
-h, --help

show this help message and exit

--dry

instead of modifying APKBUILDs, print the changes that would be made

--ref <ref>

git ref (tag, commit, etc) to use

--all

iterate through all packages

--all-stable

iterate through all non-git packages

--all-git

iterate through all git packages

pmbootstrap bootimg_analyze

usage: pmbootstrap bootimg_analyze [-h] [--force] path
path

path to the boot.img

-h, --help

show this help message and exit

--force, -f

force even if the file seems to be invalid

pmbootstrap build

usage: pmbootstrap build [-h]
                         [--arch {armv7,aarch64,x86_64,riscv64,ppc64le,armhf,x86}]
                         [--force] [--strict] [--src SRC] [-i] [-n]
                         [--go-mod-cache] [--no-go-mod-cache] [--envkernel]
                         packages [packages ...]
packages
-h, --help

show this help message and exit

--arch {armv7,aarch64,x86_64,riscv64,ppc64le,armhf,x86}

CPU architecture to build for (default: x86_64 or first available architecture in APKBUILD)

--force

even build if not necessary

--strict

(slower) zap and install only required depends when building, to detect dependency errors

--src <src>

override source used to build the package with a local folder (the APKBUILD must expect the source to be in $builddir, so you might need to adjust it)

-i, --ignore-depends

only build and install makedepends from an APKBUILD, ignore the depends (old behavior). This is faster for device packages for example, because then you don’t need to build and install the kernel. But it is incompatible with how Alpine’s abuild handles it.

-n, --no-depends

never build dependencies, abort instead

--go-mod-cache

for go packages: Usually they should bundle the dependency sources instead of downloading them at build time. But if they don’t (e.g. with pmbootstrap build –src), then this option can be used to let GOMODCACHE point into pmbootstrap’s work dir to only download dependencies once. (default: true with –src, false otherwise)

--no-go-mod-cache

don’t set GOMODCACHE

--envkernel

Create an apk package from the build output of a kernel compiled locally on the host or with envkernel.sh.

pmbootstrap build_init

usage: pmbootstrap build_init [-h]
                              [-b [{armv7,aarch64,x86_64,riscv64,ppc64le,armhf,x86,device}]
                              | -s SUFFIX]
-h, --help

show this help message and exit

-b {armv7,aarch64,x86_64,riscv64,ppc64le,armhf,x86,device}, --buildroot {armv7,aarch64,x86_64,riscv64,ppc64le,armhf,x86,device}

Chroot for building packages, defaults to device architecture

-s <suffix>, --suffix <suffix>

Specify any chroot suffix, defaults to ‘native’

pmbootstrap checksum

usage: pmbootstrap checksum [-h] [--verify] packages [packages ...]
packages
-h, --help

show this help message and exit

--verify

download sources and verify that the checksums of the APKBUILD match, instead of updating them

pmbootstrap chroot

usage: pmbootstrap chroot [-h] [--add ADD] [--user]
                          [--output {log,stdout,interactive,tui,background}]
                          [--image] [-x] [-i]
                          [-r | -b [{armv7,aarch64,x86_64,riscv64,ppc64le,armhf,x86,device}]
                          | -s SUFFIX]
                          [command ...]
command

command to execute inside the chroot. default: sh

-h, --help

show this help message and exit

--add <add>

build/install comma separated list of packages in the chroot before entering it

--user

run the command as user, not as root

--output {log,stdout,interactive,tui,background}

how the output of the program should be handled, choose from: ‘log’, ‘stdout’, ‘interactive’, ‘tui’ (default), ‘background’. Details: pmb/helpers/run_core.py

--image

Mount the rootfs image and treat it like a normal chroot.

-x, --xauth

Copy .Xauthority and set environment variables, so X11 applications can be started (native chroot only)

-i, --install-blockdev

Create a sparse image file and mount it as /dev/install, just like during the installation process.

-r, --rootfs

Chroot for the device root file system

-b {armv7,aarch64,x86_64,riscv64,ppc64le,armhf,x86,device}, --buildroot {armv7,aarch64,x86_64,riscv64,ppc64le,armhf,x86,device}

Chroot for building packages, defaults to device architecture

-s <suffix>, --suffix <suffix>

Specify any chroot suffix, defaults to ‘native’

pmbootstrap ci

usage: pmbootstrap ci [-h] [-a | -f] [script ...]
script

name of the CI script to run, depending on the git repository

-h, --help

show this help message and exit

-a, --all

run all scripts

-f, --fast

run fast scripts only

pmbootstrap config

usage: pmbootstrap config [-h] [-r] [name] [value]
name

variable name, one of: aports, auto_zap_misconfigured_chroots, boot_size, build_default_device_arch, build_pkgs_on_install, ccache_size, device, extra_packages, extra_space, hostname, is_default_channel, jobs, kernel, keymap, locale, mirrors.alpine, mirrors.alpine_custom, mirrors.pmaports, mirrors.pmaports_custom, mirrors.systemd, mirrors.systemd_custom, providers, qemu_redir_stdio, ssh_key_glob, ssh_keys, sudo_timer, systemd, timezone, ui, ui_extras, user, work

value

set variable to value

-h, --help

show this help message and exit

-r, --reset

Reset config options with the given name to it’s default.

pmbootstrap deviceinfo_parse

usage: pmbootstrap deviceinfo_parse [-h] [--kernel KERNEL] [devices ...]
devices
-h, --help

show this help message and exit

--kernel <kernel>

the kernel to select (for device packages with multiple kernels), e.g. ‘downstream’, ‘mainline’

pmbootstrap export

usage: pmbootstrap export [-h] [--odin] [--no-install] [export_folder]
export_folder

export folder, defaults to /tmp/postmarketOS-export

-h, --help

show this help message and exit

--odin

odin flashable tar (boot.img/kernel+initramfs only)

--no-install

skip updating kernel/initfs

pmbootstrap flasher

usage: pmbootstrap flasher [-h] [--method FLASH_METHOD] [--no-reboot]
                           [--resume]
                           {boot,flash_kernel,flash_lk2nd,flash_rootfs,flash_vbmeta,flash_dtbo,sideload,list_flavors,list_devices}
                           ...
-h, --help

show this help message and exit

--method <flash_method>

override flash method

--no-reboot

don’t automatically reboot after flashing

--resume

resume flashing after using –no-reboot

pmbootstrap flasher boot

usage: pmbootstrap flasher boot [-h] [--cmdline CMDLINE] [--no-install]
-h, --help

show this help message and exit

--cmdline <cmdline>

override kernel commandline

--no-install

skip updating kernel/initfs

pmbootstrap flasher flash_dtbo

usage: pmbootstrap flasher flash_dtbo [-h] [--partition PARTITION]
-h, --help

show this help message and exit

--partition <partition>

partition to flash the dtbo to (defaults to deviceinfo_flash_*_partition_dtbo)

pmbootstrap flasher flash_kernel

usage: pmbootstrap flasher flash_kernel [-h] [--no-install]
                                        [--partition PARTITION]
-h, --help

show this help message and exit

--no-install

skip updating kernel/initfs

--partition <partition>

partition to flash the kernel to (defaults to deviceinfo_flash_*_partition_kernel)

pmbootstrap flasher flash_lk2nd

usage: pmbootstrap flasher flash_lk2nd [-h] [--partition PARTITION]
-h, --help

show this help message and exit

--partition <partition>

partition to flash lk2nd to (defaults to default boot image partition

pmbootstrap flasher flash_rootfs

usage: pmbootstrap flasher flash_rootfs [-h] [--partition PARTITION]
-h, --help

show this help message and exit

--partition <partition>

partition to flash the rootfs to (defaults to deviceinfo_flash_*_partition_rootfs, ‘userdata’ on Android may have more space)

pmbootstrap flasher flash_vbmeta

usage: pmbootstrap flasher flash_vbmeta [-h] [--partition PARTITION]
-h, --help

show this help message and exit

--partition <partition>

partition to flash the vbmeta to (defaults to deviceinfo_flash_*_partition_vbmeta

pmbootstrap flasher list_devices

usage: pmbootstrap flasher list_devices [-h]
-h, --help

show this help message and exit

pmbootstrap flasher list_flavors

usage: pmbootstrap flasher list_flavors [-h]
-h, --help

show this help message and exit

pmbootstrap flasher sideload

usage: pmbootstrap flasher sideload [-h]
-h, --help

show this help message and exit

pmbootstrap index

usage: pmbootstrap index [-h]
-h, --help

show this help message and exit

pmbootstrap init

usage: pmbootstrap init [-h]
-h, --help

show this help message and exit

pmbootstrap initfs

usage: pmbootstrap initfs [-h]
                          {hook_ls,hook_add,hook_del,ls,build,extract} ...
-h, --help

show this help message and exit

pmbootstrap initfs build

usage: pmbootstrap initfs build [-h]
-h, --help

show this help message and exit

pmbootstrap initfs extract

usage: pmbootstrap initfs extract [-h]
-h, --help

show this help message and exit

pmbootstrap initfs hook_add

usage: pmbootstrap initfs hook_add [-h] hook
hook

name of the hook aport, without the ‘postmarketos-mkinitfs-hook-’ prefix, for example: ‘debug-shell’

-h, --help

show this help message and exit

pmbootstrap initfs hook_del

usage: pmbootstrap initfs hook_del [-h] hook
hook

name of the hook aport, without the ‘postmarketos-mkinitfs-hook-’ prefix, for example: ‘debug-shell’

-h, --help

show this help message and exit

pmbootstrap initfs hook_ls

usage: pmbootstrap initfs hook_ls [-h]
-h, --help

show this help message and exit

pmbootstrap initfs ls

usage: pmbootstrap initfs ls [-h]
-h, --help

show this help message and exit

pmbootstrap install

usage: pmbootstrap install [-h] [--no-sshd] [--no-firewall]
                           [--password PASSWORD] [--no-cgpt] [--zap]
                           [--sector-size {512,2048,4096}]
                           [--no-split | --split | --disk BLOCKDEV | --android-recovery-zip | --no-image]
                           [--rsync]
                           [--recovery-install-partition RECOVERY_INSTALL_PARTITION]
                           [--recovery-no-kernel] [--fde] [--cipher CIPHER]
                           [--iter-time ITER_TIME] [--add PACKAGES]
                           [--no-base] [--no-recommends]
                           [--sparse | --no-sparse] [--on-device-installer]
                           [--no-local-pkgs]
                           [--cp HOST_SRC:CHROOT_DEST [HOST_SRC:CHROOT_DEST ...]]
                           [--no-rootfs] [--filesystem {ext4,f2fs,btrfs}]
-h, --help

show this help message and exit

--no-sshd

do not enable the SSH daemon by default

--no-firewall

do not enable the firewall by default

--password <password>

dummy password for automating the installation - will be handled in PLAIN TEXT during install and may be logged to the logfile, do not use an important password!

--no-cgpt

do not use cgpt partition table

--zap

zap chroots before installing

--sector-size {512,2048,4096}

set the sector size for the image file

--no-split

create combined boot and root image file

--split

create separate boot and root image files

--disk <blockdev>, --sdcard <blockdev>

do not create an image file, instead write to the given block device (SD card, USB stick, etc.), for example: ‘/dev/mmcblk0’

--android-recovery-zip

generate TWRP flashable zip (recommended read: https://postmarketos.org/recoveryzip)

--no-image

do not generate an image

--rsync

update the disk using rsync

--recovery-install-partition <recovery_install_partition>

partition to flash from recovery (e.g. ‘external_sd’)

--recovery-no-kernel

do not overwrite the existing kernel

--fde

use full disk encryption

--cipher <cipher>

cryptsetup cipher used to encrypt the the rootfs (e.g. ‘aes-xts-plain64’)

--iter-time <iter_time>

cryptsetup iteration time (in milliseconds) to use when encrypting the system partition

--add <packages>

comma separated list of packages to be added to the rootfs (e.g. ‘vim,gcc’)

--no-base

do not install postmarketos-base (advanced)

--no-recommends

do not install packages listed in _pmb_recommends of the UI pmaports

--sparse

generate sparse image file

--no-sparse

do not generate sparse image file

--on-device-installer, --ondev

enable on-device installer

--no-local-pkgs

do not install locally compiled packages and package signing keys

--cp <host_src:chroot_dest>

copy one or more files from the host system path HOST_SRC to the target path CHROOT_DEST

--no-rootfs

do not generate a pmOS rootfs as /var/lib/rootfs.img (install chroot). The file must either exist from a previous ‘pmbootstrap install’ run or by providing it as CHROOT_DEST with –cp

--filesystem {ext4,f2fs,btrfs}

root filesystem type

pmbootstrap kconfig

usage: pmbootstrap kconfig [-h] {check,edit,migrate} ...
-h, --help

show this help message and exit

pmbootstrap kconfig check

usage: pmbootstrap kconfig check [-h] [-f]
                                 [--arch {armv7,aarch64,x86_64,riscv64,ppc64le,armhf,x86}]
                                 [--file FILE] [--no-details] [-k]
                                 [package ...]
package

kernel package (e.g. linux-postmarketos-allwinner)

-h, --help

show this help message and exit

-f, --force

check all kernels, even the ones that would be ignored by default

--arch {armv7,aarch64,x86_64,riscv64,ppc64le,armhf,x86}
--file <file>

check a file directly instead of a config in a package

--no-details

print one generic error per component instead of listing each option that needs to be adjusted

-k, --keep-going

continue on errors instead of aborting on the first error

pmbootstrap kconfig edit

usage: pmbootstrap kconfig edit [-h]
                                [--arch {armv7,aarch64,x86_64,riscv64,ppc64le,armhf,x86}]
                                [-x | -n]
                                package
package

kernel package (e.g. linux-postmarketos-allwinner)

-h, --help

show this help message and exit

--arch {armv7,aarch64,x86_64,riscv64,ppc64le,armhf,x86}
-x

use xconfig rather than menuconfig for kernel configuration

-n

use nconfig rather than menuconfig for kernel configuration

pmbootstrap kconfig migrate

usage: pmbootstrap kconfig migrate [-h]
                                   [--arch {armv7,aarch64,x86_64,riscv64,ppc64le,armhf,x86}]
                                   package
package

kernel package (e.g. linux-postmarketos-allwinner)

-h, --help

show this help message and exit

--arch {armv7,aarch64,x86_64,riscv64,ppc64le,armhf,x86}

pmbootstrap lint

usage: pmbootstrap lint [-h] [packages ...]
packages
-h, --help

show this help message and exit

pmbootstrap log

usage: pmbootstrap log [-h] [-n LINES] [-c]
-h, --help

show this help message and exit

-n <lines>, --lines <lines>

count of initial output lines

-c, --clear

clear the log

pmbootstrap netboot

usage: pmbootstrap netboot [-h] {serve} ...
-h, --help

show this help message and exit

pmbootstrap netboot serve

usage: pmbootstrap netboot serve [-h] [--replace]
-h, --help

show this help message and exit

--replace

replace stored netboot image

pmbootstrap newapkbuild

usage: pmbootstrap newapkbuild [-h] [--folder FOLDER] [-n PKGNAME]
                               [-d PKGDESC] [-l LICENSE] [-u URL]
                               [-a | -C | -m | -p | -y | -e | -r] [-s] [-c]
                               [-f]
                               PKGNAME[-PKGVER] | SRCURL
pkgname[-pkgver] | srcurl

set either the package name (optionally with the PKGVER at the end, e.g. ‘hello-world-1.0’) or the download link to the source archive

-h, --help

show this help message and exit

--folder <folder>

set postmarketOS aports folder (default: main)

-n <pkgname>

set package name (only use with SRCURL)

-d <pkgdesc>

set package description

-l <license>

set package license identifier from <https://spdx.org/licenses/>

-u <url>

set package URL

-a

create autotools package (use ./configure …)

-C

create CMake package (assume cmake/ is there)

-m

create meson package (assume meson.build is there)

-p

create perl package (assume Makefile.PL is there)

-y

create python package (assume setup.py is there)

-e

create python package (assume pyproject.toml is there)

-r

create rust package (assume Cargo.toml is there)

-s

use sourceforge source URL

-c

copy a sample init.d, conf.d and install script

-f

force even if directory already exists

pmbootstrap pkgrel_bump

usage: pmbootstrap pkgrel_bump [-h] [--dry] (--auto | packages ...)
packages
-h, --help

show this help message and exit

--dry

instead of modifying APKBUILDs, exit with >0 when a package would have been bumped

--auto

all packages which depend on a library which had an incompatible update (libraries with a soname bump)

pmbootstrap pkgver_bump

usage: pmbootstrap pkgver_bump [-h] [packages ...]
packages
-h, --help

show this help message and exit

pmbootstrap pull

usage: pmbootstrap pull [-h]
-h, --help

show this help message and exit

pmbootstrap qemu

usage: pmbootstrap qemu [-h] [--cmdline CMDLINE] [--image-size IMAGE_SIZE]
                        [--second-storage [IMAGE_SIZE]] [-m MEMORY] [-p PORT]
                        [--no-kvm] [--cpu QEMU_CPU] [--tablet]
                        [--display [{sdl,gtk,none}]] [--no-gl]
                        [--video QEMU_VIDEO] [--audio [{alsa,pa,sdl}]]
                        [--host-qemu] [--efi]
-h, --help

show this help message and exit

--cmdline <cmdline>

override kernel commandline

--image-size <image_size>

set rootfs size, e.g. 2048M or 2G (default: 4G)

--second-storage <image_size>

add a second storage with the given size (default: 4G), gets created if it does not exist. Use to test install from SD to eMMC

-m <memory>, --memory <memory>

guest RAM (default: 1024)

-p <port>, --port <port>

SSH port (default: 2222)

--no-kvm

Avoid using hardware-assisted virtualization with KVM even when available (SLOW!)

--cpu <qemu_cpu>

Override emulated QEMU CPU. By default, the host CPU will be emulated when using KVM and the QEMU default otherwise (usually a CPU with minimal features). A useful value is ‘max’ (emulate all features that are available), use –cpu help to get a list of possible values from QEMU.

--tablet

Use ‘tablet’ instead of ‘mouse’ input for QEMU. The tablet input device automatically grabs/releases the mouse when moving in/out of the QEMU window. (NOTE: For some reason the mouse position is not reported correctly with this in some cases…)

--display {sdl,gtk,none}

QEMU’s display parameter (default: gtk,gl=on)

--no-gl

Avoid using GL for accelerating graphics in QEMU (use software rasterizer, slow!)

--video <qemu_video>

Video resolution for QEMU (WidthxHeight@RefreshRate). Default is 1024x768@60.

--audio {alsa,pa,sdl}

QEMU’s audio backend (default: none)

--host-qemu

Use the host system’s qemu

--efi

Use EFI boot (default: direct kernel image boot)

pmbootstrap repo_bootstrap

usage: pmbootstrap repo_bootstrap [-h]
                                  [--arch {armv7,aarch64,x86_64,riscv64,ppc64le,armhf,x86}]
                                  repository
repository

which repository to bootstrap (e.g. systemd)

-h, --help

show this help message and exit

--arch {armv7,aarch64,x86_64,riscv64,ppc64le,armhf,x86}

pmbootstrap repo_missing

usage: pmbootstrap repo_missing [-h]
                                [--arch {armv7,aarch64,x86_64,riscv64,ppc64le,armhf,x86}]
                                [--built] [--overview]
                                [package]
package

only look at a specific package and its dependencies

-h, --help

show this help message and exit

--arch {armv7,aarch64,x86_64,riscv64,ppc64le,armhf,x86}
--built

include packages which exist in the binary repos

--overview

only print the pkgnames without any details

pmbootstrap shutdown

usage: pmbootstrap shutdown [-h]
-h, --help

show this help message and exit

pmbootstrap sideload

usage: pmbootstrap sideload [-h] [--host HOST] [--port PORT] [--user USER]
                            [--arch ARCH] [--install-key]
                            packages [packages ...]
packages
-h, --help

show this help message and exit

--host <host>

ip of the device over wifi (defaults to 172.16.42.1)

--port <port>

SSH port of the device over wifi (defaults to 22)

--user <user>

use a different username than the one set in init

--arch <arch>

skip automatic architecture deduction and use the given value

--install-key

install the apk key from this machine if needed

pmbootstrap stats

usage: pmbootstrap stats [-h]
                         [--arch {armv7,aarch64,x86_64,riscv64,ppc64le,armhf,x86}]
-h, --help

show this help message and exit

--arch {armv7,aarch64,x86_64,riscv64,ppc64le,armhf,x86}

pmbootstrap status

usage: pmbootstrap status [-h]
-h, --help

show this help message and exit

pmbootstrap test

usage: pmbootstrap test [-h] {apkindex_parse_all} ...
-h, --help

show this help message and exit

pmbootstrap test apkindex_parse_all

usage: pmbootstrap test apkindex_parse_all [-h]
-h, --help

show this help message and exit

pmbootstrap update

usage: pmbootstrap update [-h]
                          [--arch {armv7,aarch64,x86_64,riscv64,ppc64le,armhf,x86}]
                          [--non-existing]
-h, --help

show this help message and exit

--arch {armv7,aarch64,x86_64,riscv64,ppc64le,armhf,x86}

only update a specific architecture

--non-existing

do not only update the existing APKINDEX files, but all of them

pmbootstrap work_migrate

usage: pmbootstrap work_migrate [-h]
-h, --help

show this help message and exit

pmbootstrap zap

usage: pmbootstrap zap [-h] [--dry] [-hc] [-d] [-p] [-m] [-n] [-o] [-r] [-a]
-h, --help

show this help message and exit

--dry

instead of actually deleting anything, print out what would have been deleted

-hc, --http

also delete http cache

-d, --distfiles

also delete downloaded source tarballs

-p, --pkgs-local

also delete all locally compiled packages

-m, --pkgs-local-mismatch

also delete locally compiled packages without existing aport of same version

-n, --netboot

also delete stored images for netboot

-o, --pkgs-online-mismatch

also delete outdated packages from online mirrors (that have been downloaded to the apk cache)

-r, --rust

also delete rust related caches

-a, --all

delete everything, equivalent to: –http –distfiles –pkgs-local –pkgs-local-mismatch –netboot –pkgs-online-mismatch –rust

Requirements

pmbootstrap requires the following:

  • Linux distribution on the host system (x86, x86_64, aarch64 or armv7)

    Note

    Windows subsystem for Linux (WSL) does not work! Please use VirtualBox instead.

  • Linux kernel 3.17 or higher (oldkernel)

    Note

    Kernel version 5.8 - 6.0 might have issues with loop-devices

  • Python 3.10+

  • For python3 < 3.11: tomli

  • OpenSSL

  • git

  • ps

  • tar

  • sudo or doas