{"id":28811756,"url":"https://github.com/pankajackson/piforge","last_synced_at":"2026-04-16T11:02:00.823Z","repository":{"id":289168801,"uuid":"934367789","full_name":"pankajackson/PiForge","owner":"pankajackson","description":"PiForge is a zero-touch provisioning toolkit for Raspberry Pi. Flash the SD card, power it up, and let PiForge handle the rest — no monitor, keyboard, or mouse needed.","archived":false,"fork":false,"pushed_at":"2025-04-21T21:54:06.000Z","size":571,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-30T10:51:49.489Z","etag":null,"topics":["armlinux","automation","homelab","iot","opensource","piforge","raspberrypi"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pankajackson.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}},"created_at":"2025-02-17T17:58:18.000Z","updated_at":"2025-05-04T10:00:45.000Z","dependencies_parsed_at":"2025-04-21T22:34:26.559Z","dependency_job_id":"f0c14113-b72f-42f0-b594-944f3c13ced2","html_url":"https://github.com/pankajackson/PiForge","commit_stats":null,"previous_names":["pankajackson/piforge"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pankajackson/PiForge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pankajackson%2FPiForge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pankajackson%2FPiForge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pankajackson%2FPiForge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pankajackson%2FPiForge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pankajackson","download_url":"https://codeload.github.com/pankajackson/PiForge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pankajackson%2FPiForge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31882886,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T09:23:21.276Z","status":"ssl_error","status_checked_at":"2026-04-16T09:23:15.028Z","response_time":69,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["armlinux","automation","homelab","iot","opensource","piforge","raspberrypi"],"created_at":"2025-06-18T14:07:06.844Z","updated_at":"2026-04-16T11:02:00.765Z","avatar_url":"https://github.com/pankajackson.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PiForge\n\nThis repository provides an easy-to-use script to **download, flash, and provision a flash drive** with the latest **Raspberry Pi OS** for setting up a Raspberry Pi 5, specifically for **home automation services**.\n\n---\n\n## Features\n\n- Selects **image architecture** (ARM64 or ARM32)\n- Selects **image type** (Lite, Desktop, or Full)\n- **Downloads** and **decompresses** the latest image\n- **Automatically detects** supported block devices\n- **Flashes** the OS image to the selected device\n- **Provisions** the Pi with:\n  - Hostname\n  - SSH public key\n  - User password\n  - WiFi credentials (SSID, password, IP, DNS, gateway)\n  - Ethernet configuration\n  - Country and timezone\n\n---\n\n## Requirements\n\n- A **Raspberry Pi 5** device.\n- A **flash drive** or **microSD card**.\n- A **Linux-based machine** (e.g., Ubuntu, Arch Linux).\n- The following utilities:\n  - `wget`\n  - `xz`\n  - `lsblk`\n  - `dd`\n\n---\n\n## Installation\n\n1. Clone the repository:\n\n```bash\ngit clone https://github.com/pankajackson/PiForge.git\ncd PiForge\npip install -r requirements.txt\n```\n\n---\n\n## Usage\n\n### Step 1: Run the Script\n\n```bash\nsudo python flasher.py\n```\n\n_Or with virtualenv:_\n\n```bash\nsudo env \"PATH=$PATH\" \"$(which python)\" flasher.py\n```\n\n---\n\n### Step 2: Follow the Prompts\n\nThe script will guide you through the following prompts:\n\n```text\n1. ARM64\n2. ARM32\nPlease select an image architecture:\n\n1. DESKTOP\n2. LITE\n3. FULL\nPlease select an image type:\n\n\nEnter hostname [pi.linuxastra.in]:\nUsing SSH key: id_rsa.pub\nEnter password for user jackson:\nEnter SSID for WIFI [JACKSON_WIFI]:\nEnter WPA password for JACKSON_WIFI:\nEnter IP addresses for wlan0 [192.168.1.3/24]:\nEnter DNS servers for wlan0 [8.8.8.8]:\nEnter IP addresses for eth0 [192.168.1.2/24]:\nEnter DNS servers for eth0 [8.8.8.8]:\nEnter gateway [192.168.1.1]:\nEnter country code for WIFI [IN]:\nEnter timezone [Asia/Kolkata]:\n\n\nAvailable devices:\n1. /dev/sda\n2. /dev/sdb\nSelect a device:\n\n```\n\nThe script will:\n\n- Unmount any mounted partitions on the selected device\n- Flash and provision the image\n- Mount and configure the `boot` and `root` partitions\n- Configure provisioning scripts\n- Safely unmount all partitions when done\n\nSample output:\n\n```text\n✅ First boot actions complete!\n✅ Post boot Provisioning complete!\n✅ Raspberry Pi is ready. Insert the SD card and boot up!\n```\n\n\u003e **⚠️ WARNING:** All data on the selected device will be erased.\n\n---\n\n### Step 3: Monitor Flash Progress (Optional)\n\n```bash\nwatch iostat -h -p sda -d\n```\n\n\u003e Replace `sda` with your selected device name.\n\n### Step 4: Boot Raspberry Pi and check post-boot actions logs\n\nOpen browser and navigate to `http://\u003cyour-pi-ip-address\u003e:8182/logview.html`.\n\n[![Post Boot Actions Logs](docs/images/postboot_log.png)](docs/images/postboot_log.png)\n\n## Supported Devices\n\nThe script detects and lists only **removable storage devices**, including:\n\n- `/dev/mmcblkX` (microSD)\n- `/dev/sdX` (USB flash)\n- `/dev/nvmeXnY` (NVMe)\n\nMake sure not to select your system disk!\n\n---\n\n## Troubleshooting\n\n**Q: No supported devices found?**  \nEnsure your flash drive is connected and not mounted. Use `lsblk` to check.\n\n**Q: Script not working?**  \nVerify these dependencies are installed:\n\n```bash\nsudo pacman -S wget xz coreutils util-linux  # Arch\nsudo apt install wget xz-utils coreutils     # Debian/Ubuntu\n```\n\n---\n\n## License\n\nThis project is licensed under the MIT License. See [LICENSE](LICENSE).\n\n---\n\n## Contributors\n\n- **Pankaj Jackson** – _Author and Maintainer_\n- Contributions welcome! Fork and PR any improvements.\n\n---\n\n## Contact\n\nFound an issue or want to suggest a feature?  \nPlease open an issue in this repository.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpankajackson%2Fpiforge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpankajackson%2Fpiforge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpankajackson%2Fpiforge/lists"}