{"id":40870014,"url":"https://github.com/seqsense/tmpfsroot-fedora","last_synced_at":"2026-01-22T00:39:10.648Z","repository":{"id":271206621,"uuid":"444335904","full_name":"seqsense/tmpfsroot-fedora","owner":"seqsense","description":"Build power-failure-safe linux image based on Fedora for IoT systems","archived":false,"fork":false,"pushed_at":"2025-11-14T04:13:43.000Z","size":119,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-11-14T06:09:07.889Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/seqsense.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":"2022-01-04T08:07:50.000Z","updated_at":"2025-11-14T04:11:25.000Z","dependencies_parsed_at":"2025-01-06T09:35:58.923Z","dependency_job_id":"8972bef0-a8f9-45bb-b502-99d6d4e4778c","html_url":"https://github.com/seqsense/tmpfsroot-fedora","commit_stats":null,"previous_names":["seqsense/tmpfsroot-fedora"],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/seqsense/tmpfsroot-fedora","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seqsense%2Ftmpfsroot-fedora","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seqsense%2Ftmpfsroot-fedora/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seqsense%2Ftmpfsroot-fedora/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seqsense%2Ftmpfsroot-fedora/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/seqsense","download_url":"https://codeload.github.com/seqsense/tmpfsroot-fedora/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seqsense%2Ftmpfsroot-fedora/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28648460,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-21T21:29:11.980Z","status":"ssl_error","status_checked_at":"2026-01-21T21:24:31.872Z","response_time":86,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":[],"created_at":"2026-01-22T00:39:10.505Z","updated_at":"2026-01-22T00:39:10.641Z","avatar_url":"https://github.com/seqsense.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tmpfsroot-fedora\n\nBuild power-failure-safe linux image based on Fedora for IoT systems\n\n## Basics\n\n### How to protect filesystems from power failure\n\nWrite operations during power failure may cause filesystem inconsistency.\nOn tmpfsroot-fedora,\n\n- copy rootfs contents to tmpfs during boot and unmount original rootfs\n- mount persistent data partitions readonly\n- wipe and format broken filesystem during boot (for `/var/log`)\n\nto keep the system at least bootable and connected to the network.\n\n### Why based on Fedora\n\n- **Initrd maintainance tools**: custom initrd to achieve rootfs-on-tmpfs and filesystem fault handling should be maintained accross base OS upgrades. `dracut` make it easy and sustainable.\n- **Fully with systemd**: we need `init` process to be `systemd` to maintain service dependencies with many hardware devices (from initrd).\n\n## Partition structure\n\nMount point     | Size                 | Filesystem | Usage\n--------------- | -------------------- | ---------- | -----\n/boot/efi       |                 200M | fat32      | EFI\n/ (A)           |                   2G | ext4       | Readonly rootfs (main/fallback)\n/ (B)           |                   2G | ext4       | Readonly rootfs (main/fallback)\n/persist        |                 200M | ext4       | Readonly persistent data\n/var/log        |    `${PARTSIZE_LOG}` | ext4       | Logs (automatically refreshed on failure)\n/opt            |    `${PARTSIZE_OPT}` | btrfs      | User applications\n/var/cache      |  `${PARTSIZE_CACHE}` | btrfs      | User cache\n/var/lib/docker | `${PARTSIZE_DOCKER}` | btrfs      | Docker\n\n## Example\n\nSpecify Fedora major version to be used.\n```shell\nexport FEDORA_MAJOR=37\n```\n\n### Generate `rpms.lock`\n\n1. Add required packages to `packages.list`\n    ```shell\n    cat \u003c\u003c EOS \u003e packages.list\n    audit\n    authselect\n    basesystem\n    bash\n    btrfs-progs\n    busybox\n    chrony\n    container-selinux\n    containerd.io\n    coreutils\n    curl\n    dhcp-client\n    docker-ce\n    docker-ce-cli\n    docker-compose\n    dosfstools\n    e2fsprogs\n    efibootmgr\n    filesystem\n    firewalld\n    grub2-efi-x64\n    iproute\n    kernel\n    kernel-core\n    kernel-modules\n    rootfiles\n    setup\n    shim-x64\n    sudo\n    systemd\n    EOS\n    ```\n2. Generate `rpms.lock` from `packages.list`\n    ```shell\n    docker run \\\n      -i --rm \\\n      -v $(pwd):/work \\\n      ghcr.io/seqsense/tmpfsroot-fedora-updater:${FEDORA_MAJOR}\n    ```\n\n### Add files and scripts\n\nDirectory           | Files                  | Note\n------------------- | ---------------------- | ----\n`ks`                | `ks.root.cfg`          | \\[**Required**\\] Kickstart script included to root section\n`ks`                | `ks.pre-install.cfg`   | Kickstart script included to `%pre-install` section\n`ks`                | `ks.post-nochroot.cfg` | Kickstart script included to `%post --nochroot` section\n`ks`                | `ks.post.cfg`          | Kickstart script included to `%post` section\n`build-hooks.d`     | `*.sh`                 | Executed before creating ISO\n`hooks.d`           | `*.sh`                 | Executed during installation\n`iso-root.override` | `**/*`                 | Copied to installer disk root\n`root.override`     | `**/*`                 | Copied to installed filesystem root\n\n### Generate installer ISO\n\n```shell\nexport DISK_DEVS=sda,sdb     # System has /dev/sda and /dev/sdb\nexport MAIN_DISK=sda         # Install OS to /dev/sda\nexport PARTSIZE_DOCKER=8192  # 8G\nexport PARTSIZE_LOG=2048     # 2G\nexport PARTSIZE_CACHE=4096   # 4G\nexport PARTSIZE_OPT=2048     # 2G\n\nexport CACHE_DIR=${HOME}/.cache/tempfsroot-fedora\n\ndocker run -i --rm \\\n  -v \"${CACHE_DIR}/.dnf:/var/cache/dnf\" \\\n  -v \"${CACHE_DIR}/downloads:/work/downloads\" \\\n  -v \"path/to/build-hooks.d:/work/build-hooks.d:ro\" \\\n  -v \"path/to/hooks.d:/work/hooks.d:ro\" \\\n  -v \"path/to/iso-root.override:/work/iso-root.override:ro\" \\\n  -v \"path/to/root.override:/work/root.override:ro\" \\\n  -v \"path/to/ks:/work/ks:ro\" \\\n  -v \"path/to/packages.list:/work/packages.list:ro\" \\\n  -v \"path/to/rpms.lock:/work/rpms.lock:ro\" \\\n  -v \"path/to/output:/work/output\" \\\n  -e DISK_DEVS \\\n  -e MAIN_DISK \\\n  -e PARTSIZE_DOCKER \\\n  -e PARTSIZE_LOG \\\n  -e PARTSIZE_CACHE \\\n  -e PARTSIZE_OPT \\\n  ghcr.io/seqsense/tmpfsroot-fedora-builder:${FEDORA_MAJOR}\n```\n\n## References\n\n- [Kickstart](https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html)\n\n\n## License\n\nUnless otherwise noted, the sources are licensed under [Apache License Version 2.0](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseqsense%2Ftmpfsroot-fedora","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fseqsense%2Ftmpfsroot-fedora","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseqsense%2Ftmpfsroot-fedora/lists"}