nix-openwrt-imagebuilder/README.md

116 lines
3.0 KiB
Markdown
Raw Normal View History

2022-04-27 22:39:18 +02:00
# nix-openwrt-imagebuilder
Generate OpenWRT images from Nix derivations using the official
ImageBuilders that are provided upstream.
For OpenWRT releases since 19.07 there is profile helper functionality
that helps you find the proper image specification (target, variant)
according to your hardware's profile name.
## Background
In an ideal world, OpenWRT would be built from source in many
fine-grained Nix derivations. Until someone implements that (please
do!), this project exists to reuse the binary ImageBuilders that are
included in every OpenWRT release. They are only available for
x86_64-linux hosts.
The ImageBuilder can generate new *sysupgrade* images with a
customized set of packages and included files. **Caveat:** It cannot
build *factory* images for a first-time installation on the vendor
firmware.
## Usage with vanilla Nix
```nix
let
openwrt-imagebuilder = ../nix-openwrt-imagebuilder;
2022-06-23 03:32:09 +02:00
openwrtSystem = import (openwrt-imagebuilder + "/lib/openwrt-system.nix");
sys = openwrtSystem {
pkgs = import <nixpkgs> { };
modules = [
({ pkgs, ... }: {
# find target/variant for an old Fritzbox
build.profile = "avm_fritz7412";
system.settings = {
hostname = "testrouter";
description = "nix-openwrt-imagebuilder example";
};
2022-06-23 03:32:09 +02:00
# add package to include in the image, ie. packages that you don't
# want to install manually later
packages.include = [ "tcpdump" ];
2022-06-23 03:32:09 +02:00
services.disabled = [ "dnsmasq" ];
2022-06-24 00:27:14 +02:00
wireless.interfaces.ap0 = {
device = "radio0";
network = "lan";
mode = "ap";
ssid = "Test AP";
};
2022-06-23 03:32:09 +02:00
})
];
};
# actually build the image
2022-06-23 03:32:09 +02:00
in sys.config.system.build.image
```
## Usage with Nix Flakes
```nix
{
inputs = {
openwrt-imagebuilder.url = "github:astro/nix-openwrt-imagebuilder";
};
outputs = { self, nixpkgs, openwrt-imagebuilder }: {
2022-06-23 03:32:09 +02:00
packages.x86_64-linux.my-router = let
sys = openwrt-imagebuilder.lib.openwrtSystem {
pkgs = nixpkgs.legacyPackages.x86_64-linux;
2022-06-23 03:32:09 +02:00
modules = [
({ pkgs, ... }: {
build.profile = "avm_fritz7412";
system.settings = {
hostname = "testrouter";
description = "nix-openwrt-imagebuilder example";
};
2022-06-23 03:32:09 +02:00
# add package to include in the image, ie. packages that you don't
# want to install manually later
packages.include = [ "tcpdump" ];
2022-06-23 03:32:09 +02:00
services.disabled = [ "dnsmasq" ];
2022-06-24 00:27:14 +02:00
wireless.interfaces.ap0 = {
device = "radio0";
network = "lan";
mode = "ap";
ssid = "Test AP";
};
2022-06-23 03:32:09 +02:00
})
];
};
in sys.config.system.build.image;
};
}
```
## Refreshing hashes
Checksums of the `sha256sums` files on downloads.openwrt.org are added
to this repository for a few recent releases. To update them, run:
```bash
nix-shell -p nixFlakes
nix run .#generate-hashes 21.02.3 # for example
git add hashes/*.nix
```