{"slug": "linxr-part-5-live-boot-logs-saf-storage-merging-docker", "title": "Linxr | Part 5 — Live Boot Logs, SAF Storage & Merging Docker", "summary": "Linxr v3.0.0 introduces live serial boot logs, Storage Access Framework (SAF) file sharing, and embedded Docker container management. The update redirects Alpine Linux's kernel console to serial output for real-time diagnostics, uses virtio-9p for host-guest file exchange, and merges the Pockr container manager into the Linxr app. A thread-safe SSH probe lock in Kotlin resolves race conditions during QEMU startup.", "body_md": "In **Part 4**, we showcased Linxr booting Alpine Linux in QEMU on non-rooted Android devices. Today in **Part 5**, we dive deep into the major architectural updates that powered our **v3.0.0** release: bringing live serial boot diagnostics, seamless Storage Access Framework (SAF) file sharing, and embedding full Docker container management directly into Linxr.\n\nIn earlier builds, VM startup was a bit of a black box—users saw a spinning loading indicator until port 2222 opened for SSH. If the kernel panicked or a system service hung during boot, there was no visibility inside the app UI.\n\nTo solve this, we redirected Alpine’s kernel console to serial output (`/dev/ttyS0`\n\n):\n\n`dmesg`\n\n, `init`\n\nscripts, and `sshd`\n\nstartup logs directly from the guest virtual serial console.Linux virtual machines running under QEMU require clean POSIX filesystem access to exchange files with the Android host system.\n\n`virtio-9p-pci`\n\ndriver to expose host directories to the guest OS, mounting `/storage/emulated/0/LinxrShare`\n\ninside Alpine Linux at `/mnt/sdcard`\n\n.`MethodChannel`\n\nhandler (`pickFolder`\n\n) calling Android’s Storage Access Framework (`ACTION_OPEN_DOCUMENT_TREE`\n\n) to allow users to select custom host folders from Settings.Previously, container management lived in a separate project named **Pockr**. For v3.0.0, we unified our architecture by deprecating standalone Pockr and embedding its container controls directly into Linxr:\n\n`nginx`\n\n, `redis`\n\n, `alpine`\n\n).When launching QEMU, the OpenSSH daemon takes a few seconds to initialize. Probing TCP port 2222 concurrently from Flutter while QEMU bound socket ports caused intermittent race conditions.\n\nWe introduced a **thread-safe SSH probe lock** in Kotlin (`VmManager.kt`\n\n):\n\nLinxr v3.0.0 is officially live on [Google Play](https://play.google.com/store/apps/details?id=com.ai2th.linxr) and [GitHub Releases](https://github.com/AI2TH/Linxr/releases/latest)!\n\nJoin our community for feature requests and discussions:\n\n👉 **Google Group:** [https://groups.google.com/g/ai2th](https://groups.google.com/g/ai2th)", "url": "https://wpnews.pro/news/linxr-part-5-live-boot-logs-saf-storage-merging-docker", "canonical_source": "https://dev.to/ai2th/linxr-part-5-live-boot-logs-saf-storage-merging-docker-2naa", "published_at": "2026-08-05 07:22:47+00:00", "updated_at": "2026-08-05 07:48:10.397178+00:00", "lang": "en", "topics": ["developer-tools", "artificial-intelligence"], "entities": ["Linxr", "Alpine Linux", "QEMU", "Android", "Docker", "Pockr", "Google Play", "GitHub"], "alternates": {"html": "https://wpnews.pro/news/linxr-part-5-live-boot-logs-saf-storage-merging-docker", "markdown": "https://wpnews.pro/news/linxr-part-5-live-boot-logs-saf-storage-merging-docker.md", "text": "https://wpnews.pro/news/linxr-part-5-live-boot-logs-saf-storage-merging-docker.txt", "jsonld": "https://wpnews.pro/news/linxr-part-5-live-boot-logs-saf-storage-merging-docker.jsonld"}}