{"id":48190960,"url":"https://github.com/mw0mwz/raspine","last_synced_at":"2026-05-04T07:06:10.661Z","repository":{"id":313892458,"uuid":"1053301674","full_name":"MW0MWZ/RasPINE","owner":"MW0MWZ","description":"100% GitHub Hosted APK Repo for RasPiOS Kernels and the Raspine Image for Raspberry Pi Hardware","archived":false,"fork":false,"pushed_at":"2026-04-14T12:52:31.000Z","size":491960,"stargazers_count":2,"open_issues_count":0,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-14T13:25:06.867Z","etag":null,"topics":["alpine","alpine-linux","raspberry-pi","raspios"],"latest_commit_sha":null,"homepage":"https://raspine.pistar.uk","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MW0MWZ.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-09T09:04:00.000Z","updated_at":"2026-04-14T12:52:36.000Z","dependencies_parsed_at":"2025-09-09T12:34:03.727Z","dependency_job_id":"9988a941-7c18-4c72-83c0-96bf50f1b3e7","html_url":"https://github.com/MW0MWZ/RasPINE","commit_stats":null,"previous_names":["mw0mwz/raspine"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/MW0MWZ/RasPINE","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MW0MWZ%2FRasPINE","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MW0MWZ%2FRasPINE/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MW0MWZ%2FRasPINE/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MW0MWZ%2FRasPINE/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MW0MWZ","download_url":"https://codeload.github.com/MW0MWZ/RasPINE/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MW0MWZ%2FRasPINE/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32597975,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T22:12:39.696Z","status":"online","status_checked_at":"2026-05-04T02:00:06.625Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alpine","alpine-linux","raspberry-pi","raspios"],"created_at":"2026-04-04T17:55:21.624Z","updated_at":"2026-05-04T07:06:10.652Z","avatar_url":"https://github.com/MW0MWZ.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🏔️ RasPINE - Raspberry Pi + Alpine Linux Hybrid\n\n[![Build Status](https://github.com/MW0MWZ/RasPINE/actions/workflows/master-build.yml/badge.svg)](https://github.com/MW0MWZ/RasPINE/actions/workflows/master-build.yml)\n[![Latest Release](https://img.shields.io/github/v/release/MW0MWZ/RasPINE)](https://github.com/MW0MWZ/RasPINE/releases/latest)\n[![Downloads](https://img.shields.io/github/downloads/MW0MWZ/RasPINE/total)](https://github.com/MW0MWZ/RasPINE/releases)\n[![Alpine Version](https://img.shields.io/badge/Alpine-v3.23-0D597F)](https://alpinelinux.org)\n[![Kernel](https://img.shields.io/badge/dynamic/json?url=https://raspine.pistar.uk/packages.json\u0026query=$.kernel_version\u0026label=Kernel\u0026color=c51a4a)](https://www.raspberrypi.org)\n\n\u003e **The best of both worlds:** Raspberry Pi OS kernel and firmware for perfect hardware compatibility, combined with Alpine Linux userland for minimal footprint and efficiency.\n\n## ✨ Key Features\n\n| Feature | Description |\n|---------|-------------|\n| 🔧 **Maximum Compatibility** | Uses official Raspberry Pi OS kernel and firmware for perfect hardware support |\n| 🪶 **Minimal Footprint** | Alpine Linux userland with musl libc - fits on a 2GB SD card |\n| 🔒 **Secure by Default** | SSH enabled with Dropbear, minimal attack surface |\n| 📦 **Modern Package Management** | Alpine's apk package manager with vast repository access |\n| 🌐 **Network Ready** | DHCP on ethernet, WiFi support with wpa_supplicant |\n| 💾 **SD Card Friendly** | /var/log on tmpfs to reduce wear on your SD card |\n| ⚙️ **Zero-Touch Configuration** | Configure WiFi, SSH, and system settings before first boot |\n| 🔄 **Weekly Updates** | Automated builds with latest Raspberry Pi OS kernels |\n\n## 🚀 Quick Start\n\n### 1️⃣ Download the Latest Image\n\n\u003cdiv align=\"center\"\u003e\n\n**[📥 Download Latest Release](https://github.com/MW0MWZ/RasPINE/releases/latest)**\n\nAlternative downloads:\n[All Releases](https://github.com/MW0MWZ/RasPINE/releases) | \n[Direct Download](https://github.com/MW0MWZ/RasPINE/releases/latest/download/RasPINE-latest.img.xz) | \n[SHA256 Checksum](https://raspine.pistar.uk/downloads/RasPINE-latest.img.xz.sha256)\n\n\u003c/div\u003e\n\n### 2️⃣ Write to SD Card\n\n```bash\n# Extract the image\nxz -d RasPINE-YYYY-MM-DD.img.xz\n\n# Write to SD card (replace /dev/sdX with your SD card device)\nsudo dd if=RasPINE-YYYY-MM-DD.img of=/dev/sdX bs=4M status=progress conv=fsync\n```\n\n### 3️⃣ (Optional) Configure Before First Boot\n\nRasPINE supports zero-touch configuration! Mount the boot partition after writing the image and create a configuration file:\n\n```bash\n# Mount the boot partition (adjust device as needed)\nmkdir -p /mnt/boot\nmount /dev/sdX1 /mnt/boot\n\n# Copy and edit the configuration template\ncp /mnt/boot/raspine-config.txt.sample /mnt/boot/raspine-config.txt\nnano /mnt/boot/raspine-config.txt\n\n# Unmount when done\numount /mnt/boot\n```\n\nSee the [Boot Configuration](#-boot-configuration) section for details on available options.\n\n### 4️⃣ First Boot\n\nInsert the SD card and power on your Raspberry Pi. Connect via SSH or console:\n\n- **Username:** `raspine`\n- **Password:** `raspberry` (or your configured password)\n\n\u003e ⚠️ **Security Note:** Change the password immediately after first login using `passwd`\n\n## ⚙️ Boot Configuration\n\nRasPINE includes a powerful boot configuration system that allows you to set up your system before the first boot. This is perfect for headless deployments or when you need to configure multiple devices.\n\n### How It Works\n\n1. On the boot partition, you'll find `raspine-config.txt.sample`\n2. Copy this to `raspine-config.txt` and edit with your settings\n3. On first boot, RasPINE processes this file and applies your configuration\n4. **The config file is automatically deleted after processing for security**\n\n### Configuration Options\n\n#### WiFi Networks\n\nConfigure multiple WiFi networks with priority ordering:\n\n```ini\n# Primary network (highest priority if not numbered)\nwifi_ssid=HomeNetwork\nwifi_password=HomePassword\n\n# Additional networks with priority (higher numbers = higher priority)\nwifi_ssid_2=WorkNetwork\nwifi_password_2=WorkPassword\n\nwifi_ssid_3=MobileHotspot\nwifi_password_3=HotspotPassword\n\n# WiFi country code (affects available channels)\nwifi_country=GB\n\n# Allow connection to open networks\nenable_open_networks=false\n```\n\n#### User Security\n\n```ini\n# Set password for raspine user\nuser_password=MySecurePassword\n\n# Enable SSH password authentication (default is key-only)\nenable_ssh_password=true\n\n# Add SSH public key for secure access\nssh_key=ssh-rsa AAAAB3NzaC1yc2EAAAA... user@example.com\n```\n\n#### System Settings\n\n```ini\n# Set hostname\nhostname=my-raspine\n\n# Set timezone\ntimezone=Europe/London\n\n# Set locale\nlocale=en_GB.UTF-8\n```\n\n### Complete Example\n\n```ini\n# RasPINE Boot Configuration\n# WARNING: This file will be DELETED after processing for security!\n\n# === WIFI CONFIGURATION ===\nwifi_ssid=MyHomeNetwork\nwifi_password=MyHomePassword\n\nwifi_ssid_2=WorkNetwork\nwifi_password_2=WorkPassword\n\nwifi_country=GB\nenable_open_networks=false\n\n# === USER SECURITY ===\nuser_password=MySecurePassword123!\nenable_ssh_password=false\nssh_key=ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEx... user@example.com\n\n# === SYSTEM CONFIGURATION ===\nhostname=raspine-zero\ntimezone=Europe/London\nlocale=en_GB.UTF-8\n```\n\n### Security Notes\n\n- The configuration file is **automatically deleted** after processing to protect your passwords\n- WiFi passwords and user passwords are never stored in plain text after configuration\n- SSH key-only authentication is recommended for production use\n- Always keep a backup of your configuration in a secure location\n\n## 🥧 Compatibility\n\nRasPINE is available in two image variants:\n\n### RasPINE (armhf) — All Models\n\nThe standard image supports **every Raspberry Pi ever made**, from the original Pi 1 through to the Pi 5. It uses a 32-bit (armhf) userland with a 64-bit (aarch64) kernel on Pi 3 and later models.\n\n| Series | Models |\n|--------|--------|\n| **Classic** | Pi 1 Model A/B/B+ |\n| **Zero** | Pi Zero, Zero W, Zero 2 W |\n| **Standard** | Pi 2B, 3A+/B/B+, 4B, 5 |\n| **Compute** | CM1, CM3, CM3+, CM4, CM4S, CM5 |\n| **Special** | Pi 400, Pi 500 |\n\n### RasPINE-aarch64 — Pi 3 and Later\n\nThe aarch64 image is a fully native 64-bit build for newer Pi models. It includes the v8 kernel for Pi 3/4 and the dedicated Pi 5 (2712) kernel.\n\n| Series | Models |\n|--------|--------|\n| **Zero** | Pi Zero 2 W |\n| **Standard** | Pi 3A+/B/B+, 4B, 5 |\n| **Compute** | CM3, CM3+, CM4, CM4S, CM5 |\n| **Special** | Pi 400, Pi 500 |\n\n## 📡 Network Configuration\n\n### Ethernet\nDHCP is enabled by default on `eth0`. No configuration needed.\n\n### WiFi Setup\n\n#### Method 1: Boot Configuration (Recommended)\nUse the boot configuration system described above to set up WiFi before first boot.\n\n#### Method 2: Manual Configuration\nEdit `/etc/wpa_supplicant/wpa_supplicant.conf`:\n\n```bash\nnetwork={\n    ssid=\"YourNetworkSSID\"\n    psk=\"YourNetworkPassword\"\n}\n```\n\nThen enable the wireless interface:\n```bash\nsudo ifup wlan0\n```\n\n## 📦 Package Management\n\nRasPINE uses Alpine's `apk` package manager:\n\n```bash\n# Update package index\napk update\n\n# Install packages\napk add nano htop git\n\n# Search for packages\napk search nginx\n\n# Remove packages\napk del package-name\n```\n\n### Custom APK Repository\n\nRasPINE includes the custom RasPINE repository with Raspberry Pi OS kernels and firmware:\n\n```bash\n# Already configured in the image\nhttps://raspine.pistar.uk/v3.23/community\n```\n\n## 🛠️ System Management\n\n### Service Management (OpenRC)\n\n```bash\n# List all services\nrc-status\n\n# Start/stop/restart services\nrc-service dropbear start\nrc-service networking restart\n\n# Enable/disable at boot\nrc-update add dropbear default\nrc-update del dropbear default\n```\n\n### System Information\n\n```bash\n# Check Alpine version\ncat /etc/alpine-release\n\n# Check kernel version\nuname -r\n\n# Check disk usage\ndf -h\n\n# Check memory usage\nfree -h\n```\n\n## 🏗️ Technical Architecture\n\n### Partition Layout\n\n| Partition | Size | Format | Mount Point | Purpose |\n|-----------|------|--------|-------------|---------|\n| 1 | 256MB | FAT32 | `/boot/firmware` | Boot files, kernel, firmware, config |\n| 2 | ~1.7GB | ext4 | `/` | Root filesystem |\n\n### What Comes From Where?\n\n#### From Raspberry Pi OS:\n- All kernel images (kernel*.img)\n- Device tree blobs and overlays\n- Kernel modules (`/usr/lib/modules/*`)\n- Firmware blobs (`/usr/lib/firmware/*`)\n- Boot configuration files\n\n#### From Alpine Linux:\n- Complete userland (musl libc)\n- OpenRC init system\n- BusyBox utilities\n- APK package manager\n- Dropbear SSH server\n- Network management tools\n\n#### RasPINE Specific:\n- Boot configuration processor (`raspine-config`)\n- Hybrid integration scripts\n- Custom APK repository configuration\n\n## 🐛 Troubleshooting\n\n### Common Issues and Solutions\n\n| Issue | Solution |\n|-------|----------|\n| **No network** | Check cable/WiFi config, verify with `ip addr show` |\n| **WiFi not connecting** | Check country code, verify password, check `wpa_supplicant` logs |\n| **SSH refused** | Ensure dropbear is running: `rc-status` |\n| **Config not applied** | Config file must be named exactly `raspine-config.txt` |\n| **Module errors** | Run `depmod -a` to regenerate module dependencies |\n| **Boot issues** | Check `/boot/firmware/config.txt` and `cmdline.txt` |\n| **Package not found** | Run `apk update` first |\n\n### Getting Help\n\nCheck the [Issues](https://github.com/MW0MWZ/RasPINE/issues) page or create a new issue if you encounter problems.\n\n## 🤝 Contributing\n\nContributions are welcome! Open an issue or submit a pull request.\n\n```bash\ngit clone https://github.com/MW0MWZ/RasPINE.git\ncd RasPINE\n```\n\n## 📄 License\n\nThis project combines components from:\n- **Raspberry Pi OS** - [Raspberry Pi OS License](https://www.raspberrypi.org/documentation/linux/kernel/license.md)\n- **Alpine Linux** - [Alpine License](https://www.alpinelinux.org/about/)\n\n## 🙏 Acknowledgments\n\n- [Raspberry Pi Foundation](https://www.raspberrypi.org) for kernel and firmware\n- [Alpine Linux Team](https://alpinelinux.org) for the minimal userland\n- [Pi-Star Team](https://www.pistar.uk) for inspiration and collaboration\n- The Amateur Radio community for continuous support\n\n## 📊 Project Stats\n\n![GitHub Stars](https://img.shields.io/github/stars/MW0MWZ/RasPINE?style=social)\n![GitHub Forks](https://img.shields.io/github/forks/MW0MWZ/RasPINE?style=social)\n![GitHub Watchers](https://img.shields.io/github/watchers/MW0MWZ/RasPINE?style=social)\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n**Built with ❤️ for the Raspberry Pi and Amateur Radio communities**\n\n*Maintained by Andy Taylor (MW0MWZ)*\n\n[Website](https://raspine.pistar.uk) | [Downloads](https://github.com/MW0MWZ/RasPINE/releases)\n\n\u003c/div\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmw0mwz%2Fraspine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmw0mwz%2Fraspine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmw0mwz%2Fraspine/lists"}