# Sineware Build System for ProLinux ![Sineware ProLinux Logo](docs/prolinux-logo.png) > Warning: documentation is not fully complete. https://sineware.ca/ This is the main repository of Sineware ProLinux, the immutable container-first distribution for Mobile, Desktop, and Servers. ProLinux consists of a read-only root filesystem and a system daemon ([prolinuxd](https://github.com/sineware/prolinuxd-java)) providing a unified OS API, Cloud connections, and more. It's the daemon that ties the system together! Applications and services are provided by Flatpaks and OCI Containers respectively. ***ProLinux IS UNDER HEAVY DEVELOPMENT! IT IS NOT READY TO USE YET.*** Clone the repository using `git clone --recurse-submodules https://github.com/Sineware/prolinux.git` to ensure submodules are cloned. ### Editions #### Server Sineware ProLinux Server is designed to run on bare metal, cloud VMs, and inside containers. It pairs up with Sineware Cloud Services for management and extended functionality. #### Phone OS Sineware ProLinux Phone OS is designed to run on smartphones, tablets, and other personal arm64/aarch64-based devices. Currently it is designed specifically for the Pine64 PinePhone. #### Standard Sineware ProLinux Standard is designed to run on laptops, desktops, and similar devices. It is the edition that provides a "traditional" desktop experience. --- ### Building Sineware ProLinux The `make all` command will build ProLinux from scratch and output artifacts to the 'artifacts' folder. Use `make all_phone` to generate an aarch64 (aka arm64) image targeting the Pine64 PinePhone (artifacts will be in 'artifacts/aarch64') Note! If you are building ProLinux for a different architecture than your host (ex. ProLinux Phone OS on x84_64), you must run `make enable_multiarch` to allow execution of aarch64/x86_64 binaries through qemu-user. **Build Host Requirements** Building from macOS is no longer supported. You must currently build from an x86_64 host (including when building aarch64 targets). GNU/Linux requirements: - "build-essentials" (Ubuntu), "base-devel" (Arch), etc. - Node.js + npm - Docker - OpenJDK 17 See the docs/ directory for some documentation. --- ### Testing with QEMU Using the testing IMG file with QEMU is the easiest way to quickly boot Sineware built from source. ```bash qemu-system-x86_64 \ -m 1G \ -device e1000,netdev=net0 -netdev user,id=net0,hostfwd=tcp::8086-:8086 \ -hda artifacts/sineware-hdd.img ``` On Linux you can add the "-enable-kvm" option, and on macOS the "-accel hvf" option to speed up the VM with hardware acceleration. --- If you want to poke around inside the build container, you can build the build container (sineware-build) and use it directly: ```bash docker run -t -i \ -v "$(pwd)"/build-scripts:/build-scripts \ -v "$(pwd)"/artifacts:/artifacts \ -v "$(pwd)"/buildmeta:/buildmeta \ -v /dev:/dev --privileged --rm --env SINEWARE_DEVELOPMENT=true sineware-build bash ``` The sineware-build container currently is based on Ubuntu (yes, we are not self-hosting yet).