A sophisticated chroot / build / flash tool to develop and install postmarketOS
Reason this release was yanked:
Installing pmbootstrap from pypi is deprecated, see: https://postmarketos.org/pmbootstrap
Project description
# pmbootstrap
[**Introduction**](https://postmarketos.org/blog/2017/05/26/intro/) | [**Security Warning**](https://ollieparanoid.github.io/post/security-warning/) | [**Devices**](https://wiki.postmarketos.org/wiki/Devices)
Sophisticated chroot/build/flash tool to develop and install [postmarketOS](https://postmarketos.org).
Package build scripts live in the [`pmaports`](https://gitlab.com/postmarketOS/pmaports) repository now.
## Requirements
* 2 GB of RAM recommended for compiling
* Linux distribution on the host system (`x86`, `x86_64`, or `aarch64`)
* [Windows subsystem for Linux (WSL)](https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux) does **not** work! Please use [VirtualBox](https://www.virtualbox.org/) instead.
* Kernels based on the grsec patchset [do **not** work](https://github.com/postmarketOS/pmbootstrap/issues/107) *(Alpine: use linux-vanilla instead of linux-hardened, Arch: linux-hardened [is not based on grsec](https://www.reddit.com/r/archlinux/comments/68b2jn/linuxhardened_in_community_repo_a_grsecurity/))*
* On Alpine Linux only: `apk add coreutils procps`
* [Linux kernel 3.17 or higher](https://postmarketos.org/oldkernel)
* Python 3.4+
* OpenSSL
## Usage Examples
Please refer to the [postmarketOS wiki](https://wiki.postmarketos.org) for in-depth coverage of topics such as [porting to a new device](https://wiki.postmarketos.org/wiki/Porting_to_a_new_device) or [installation](https://wiki.postmarketos.org/wiki/Installation_guide). The help output (`pmbootstrap -h`) has detailed usage instructions for every command. Read on for some generic examples of what can be done with `pmbootstrap`.
### Installing pmbootstrap
<https://wiki.postmarketos.org/wiki/Installing_pmbootstrap>
### Basics
Initial setup:
```
$ pmbootstrap init
```
Run this in a second window to see all shell commands that get executed:
```
$ pmbootstrap log
```
### Packages
Build `aports/main/hello-world`:
```
$ pmbootstrap build hello-world
```
Cross-compile to `armhf`:
```
$ pmbootstrap build --arch=armhf hello-world
```
Build with source code from local folder:
```
$ pmbootstrap build linux-postmarketos-mainline --src=~/code/linux
```
Update checksums:
```
$ pmbootstrap checksum hello-world
```
Generate a template for a new package:
```
$ pmbootstrap newapkbuild "https://gitlab.com/postmarketOS/osk-sdl/-/archive/0.52/osk-sdl-0.52.tar.bz2"
```
### Chroots
Enter the `armhf` building chroot:
```
$ pmbootstrap chroot -b armhf
```
Run a command inside a chroot:
```
$ pmbootstrap chroot -- echo test
```
Safely delete all chroots:
```
$ pmbootstrap zap
```
### Device Porting Assistance
Analyze Android [`boot.img`](https://wiki.postmarketos.org/wiki/Glossary#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 --arch=armhf postmarketos-mainline
```
### Root File System
Build the rootfs:
```
$ pmbootstrap install
```
Update existing installation on SD card (full disk encryption disabled):
```
$ pmbootstrap install --sdcard=/dev/mmcblk0 --no-fde --rsync
```
Run the image in Qemu:
```
$ pmbootstrap qemu --image-size=1G
```
Flash to the device:
```
$ pmbootstrap flasher flash_kernel
$ pmbootstrap flasher flash_rootfs --partition=userdata
```
Export the rootfs, kernel, initramfs, `boot.img` etc.:
```
$ pmbootstrap export
```
Extract the initramfs
```
$ pmbootstrap initfs extract
```
Build and flash Android recovery zip:
```
$ pmbootstrap install --android-recovery-zip
$ pmbootstrap flasher --method=adb sideload
```
### Repository Maintenance
Increase the `pkgrel` for each aport where the binary package has outdated dependencies (e.g. after soname bumps):
```
$ pmbootstrap pkgrel_bump --auto
```
Generate cross-compiler aports based on the latest version from Alpine's aports:
```
$ pmbootstrap aportgen binutils-armhf gcc-armhf
```
Manually rebuild package index:
```
$ pmbootstrap index
```
Delete local binary packages without existing aport of same version:
```
$ pmbootstrap zap -m
```
### Debugging
Use `-v` on any action to get verbose logging:
```
$ pmbootstrap -v build hello-world
```
Parse a single APKBUILD and return it as JSON:
```
$ pmbootstrap apkbuild_parse hello-world
```
Parse a package from an APKINDEX and return it as JSON:
```
$ pmbootstrap apkindex_parse $WORK/cache_apk_x86_64/APKINDEX.8b865e19.tar.gz hello-world
```
`ccache` statistics:
```
$ pmbootstrap stats --arch=armhf
```
`distccd` log:
```
$ pmbootstrap log_distccd
```
## Development
### Testing
Install `pytest` (via your package manager or pip) and run it inside the pmbootstrap folder.
## License
[GPLv3](LICENSE)
[**Introduction**](https://postmarketos.org/blog/2017/05/26/intro/) | [**Security Warning**](https://ollieparanoid.github.io/post/security-warning/) | [**Devices**](https://wiki.postmarketos.org/wiki/Devices)
Sophisticated chroot/build/flash tool to develop and install [postmarketOS](https://postmarketos.org).
Package build scripts live in the [`pmaports`](https://gitlab.com/postmarketOS/pmaports) repository now.
## Requirements
* 2 GB of RAM recommended for compiling
* Linux distribution on the host system (`x86`, `x86_64`, or `aarch64`)
* [Windows subsystem for Linux (WSL)](https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux) does **not** work! Please use [VirtualBox](https://www.virtualbox.org/) instead.
* Kernels based on the grsec patchset [do **not** work](https://github.com/postmarketOS/pmbootstrap/issues/107) *(Alpine: use linux-vanilla instead of linux-hardened, Arch: linux-hardened [is not based on grsec](https://www.reddit.com/r/archlinux/comments/68b2jn/linuxhardened_in_community_repo_a_grsecurity/))*
* On Alpine Linux only: `apk add coreutils procps`
* [Linux kernel 3.17 or higher](https://postmarketos.org/oldkernel)
* Python 3.4+
* OpenSSL
## Usage Examples
Please refer to the [postmarketOS wiki](https://wiki.postmarketos.org) for in-depth coverage of topics such as [porting to a new device](https://wiki.postmarketos.org/wiki/Porting_to_a_new_device) or [installation](https://wiki.postmarketos.org/wiki/Installation_guide). The help output (`pmbootstrap -h`) has detailed usage instructions for every command. Read on for some generic examples of what can be done with `pmbootstrap`.
### Installing pmbootstrap
<https://wiki.postmarketos.org/wiki/Installing_pmbootstrap>
### Basics
Initial setup:
```
$ pmbootstrap init
```
Run this in a second window to see all shell commands that get executed:
```
$ pmbootstrap log
```
### Packages
Build `aports/main/hello-world`:
```
$ pmbootstrap build hello-world
```
Cross-compile to `armhf`:
```
$ pmbootstrap build --arch=armhf hello-world
```
Build with source code from local folder:
```
$ pmbootstrap build linux-postmarketos-mainline --src=~/code/linux
```
Update checksums:
```
$ pmbootstrap checksum hello-world
```
Generate a template for a new package:
```
$ pmbootstrap newapkbuild "https://gitlab.com/postmarketOS/osk-sdl/-/archive/0.52/osk-sdl-0.52.tar.bz2"
```
### Chroots
Enter the `armhf` building chroot:
```
$ pmbootstrap chroot -b armhf
```
Run a command inside a chroot:
```
$ pmbootstrap chroot -- echo test
```
Safely delete all chroots:
```
$ pmbootstrap zap
```
### Device Porting Assistance
Analyze Android [`boot.img`](https://wiki.postmarketos.org/wiki/Glossary#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 --arch=armhf postmarketos-mainline
```
### Root File System
Build the rootfs:
```
$ pmbootstrap install
```
Update existing installation on SD card (full disk encryption disabled):
```
$ pmbootstrap install --sdcard=/dev/mmcblk0 --no-fde --rsync
```
Run the image in Qemu:
```
$ pmbootstrap qemu --image-size=1G
```
Flash to the device:
```
$ pmbootstrap flasher flash_kernel
$ pmbootstrap flasher flash_rootfs --partition=userdata
```
Export the rootfs, kernel, initramfs, `boot.img` etc.:
```
$ pmbootstrap export
```
Extract the initramfs
```
$ pmbootstrap initfs extract
```
Build and flash Android recovery zip:
```
$ pmbootstrap install --android-recovery-zip
$ pmbootstrap flasher --method=adb sideload
```
### Repository Maintenance
Increase the `pkgrel` for each aport where the binary package has outdated dependencies (e.g. after soname bumps):
```
$ pmbootstrap pkgrel_bump --auto
```
Generate cross-compiler aports based on the latest version from Alpine's aports:
```
$ pmbootstrap aportgen binutils-armhf gcc-armhf
```
Manually rebuild package index:
```
$ pmbootstrap index
```
Delete local binary packages without existing aport of same version:
```
$ pmbootstrap zap -m
```
### Debugging
Use `-v` on any action to get verbose logging:
```
$ pmbootstrap -v build hello-world
```
Parse a single APKBUILD and return it as JSON:
```
$ pmbootstrap apkbuild_parse hello-world
```
Parse a package from an APKINDEX and return it as JSON:
```
$ pmbootstrap apkindex_parse $WORK/cache_apk_x86_64/APKINDEX.8b865e19.tar.gz hello-world
```
`ccache` statistics:
```
$ pmbootstrap stats --arch=armhf
```
`distccd` log:
```
$ pmbootstrap log_distccd
```
## Development
### Testing
Install `pytest` (via your package manager or pip) and run it inside the pmbootstrap folder.
## License
[GPLv3](LICENSE)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
pmbootstrap-1.0.1.tar.gz
(140.4 kB
view details)
Built Distribution
pmbootstrap-1.0.1-py3-none-any.whl
(183.1 kB
view details)
File details
Details for the file pmbootstrap-1.0.1.tar.gz
.
File metadata
- Download URL: pmbootstrap-1.0.1.tar.gz
- Upload date:
- Size: 140.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1b1ea605488c609aadc7b1b31db40bd33b2a6460b66edebfd968e59772cbc162 |
|
MD5 | 05fd2546de1320eb559cfbae3a8693c5 |
|
BLAKE2b-256 | 47a0169144bd79c9c7581c2fe3e4e9d42f6625a190ff8d67b4138fad07a210fd |
Provenance
File details
Details for the file pmbootstrap-1.0.1-py3-none-any.whl
.
File metadata
- Download URL: pmbootstrap-1.0.1-py3-none-any.whl
- Upload date:
- Size: 183.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e786c413bd39b13a2526c2199281167f4943d9aaff6aec61d60f39f60c69335c |
|
MD5 | 13ce095caaecea5a123594b413703c75 |
|
BLAKE2b-256 | fb815f8ec56781ca7ec276cc70a75e672a861263b423971f23151911eeeec2a4 |