d261034349
We have two methods of cross-compiling: * native: everything runs with the host architecture, QEMU is not involved. This is the fastest, but requires the build system to be working with it. We use this for all linux-* packages currently. * distcc: everything runs through QEMU emulating the target arch, *except* for the compiler. This is the most compatible approach working with all packages. When compiling `linux-*` packages natively, kernel scripts needed during the build process get generated. Some of these are C files that get compiled as executables. In native mode, these get compied to the native architecture, in distcc mode to the target architecture. The problem is, that we need these scripts compiled for the target architecture in the kernel's dev package in order to compile kernel modules outside of the kernel's package (e.g. wireguard). It is not possible to just rewrite this logic to generate target-arch binaries when running in native mode, because these binaries require musl-dev, linux-headers and some other packages to be installed for the target architecture inside the native chroot. We solve this by introducing a new `kernel-scripts` package. which contains just the binary scripts. In case the dev package was cross-compiled, it depends on `kernel-scripts` and symlinks these binaries. The `kernel-scripts` package always gets compiled in distcc mode since it does not have a `linux-` prefix. Fixes #1230. |
||
---|---|---|
aports | ||
keys | ||
pmb | ||
test | ||
.gitignore | ||
.travis.yml | ||
CONTRIBUTING.md | ||
LICENSE | ||
MANIFEST.in | ||
README.md | ||
pmbootstrap.py | ||
setup.cfg | ||
setup.py |
README.md
pmbootstrap
Introduction | Security Warning | Supported Devices | |
Sophisticated chroot/build/flash tool to develop and install postmarketOS.
For in-depth information please refer to the postmarketOS wiki.
Requirements
- 2 GB of RAM recommended for compiling
- Linux distribution (
x86_64
oraarch64
)- Windows subsystem for Linux (WSL) does not work! Please use VirtualBox instead.
- Kernels based on the grsec patchset do not work (Alpine: use linux-vanilla instead of linux-hardened, Arch: linux-hardened is not based on grsec)
- On Alpine Linux only:
apk add coreutils
- Python 3.4+
- OpenSSL
Usage
Assuming you have a supported device, you can build and flash a postmarketOS image by running through the following steps. For new devices check the porting guide.
First, clone the git repository and initialize your pmbootstrap environment:
$ git clone https://github.com/postmarketOS/pmbootstrap
$ cd pmbootstrap
$ ./pmbootstrap.py init
While running any pmbootstrap command, it's always useful to have a log open in a separate window where further details can be seen:
$ ./pmbootstrap.py log
It's now time to run a full build which will create the boot and system images:
$ ./pmbootstrap.py install
Once your device is connected and is ready to be flashed (e.g. via fastboot), you can run a flash of the kernel (boot) and system partitions:
$ ./pmbootstrap.py flasher flash_kernel
$ ./pmbootstrap.py flasher flash_system
After a reboot, the device will prompt for the full-disk encryption password, which you typed in the install step (unless you have disabled full-disk encryption with --no-fde
). Once the partition has been unlocked it is possible to connect via SSH:
$ dhclient -v enp0s20f0u1
$ ssh user@172.16.42.1
Development
Testing
Install pytest
(via your package manager or pip) and run it inside the pmbootstrap folder.