OpenWRT: Difference between revisions
imported>Makefu use abbradar FHS as it fixes /usr/bin/perl build stuff in openwrt |
→OpenWRT buildroot: add some missing packages |
||
(13 intermediate revisions by 9 users not shown) | |||
Line 1: | Line 1: | ||
[https://openwrt.org/ OpenWrt] is an open-source project for embedded operating systems based on Linux, primarily used on embedded devices to route network traffic. The main components are Linux, util-linux, musl, and BusyBox. All components have been optimized to be small enough to fit into the limited storage and memory available in home routers. (Source: https://en.wikipedia.org/wiki/OpenWrt) | |||
== | == ImageBuilder == | ||
OpenWRT provides different possibilities (https://openwrt.org/docs/guide-developer/imagebuilder_frontends) to build custom images for your devices. There is also a little helper tool suggested on IRC called "autobuild" (https://johannes.truschnigg.info/code/openwrt_autobuild/) which helps to manage/keep track of image-configurations for your devices. It's also working with the nix-shell below - '''please note''' that there is currently some misbehavior when "make_clean" is set to "True" the system says build is triggered but there are no files/logs/processes running then. | |||
=== Using ImageBuilder in nix-shell === | |||
Get a copy of: https://github.com/nix-community/nix-environments/blob/master/envs/openwrt/shell.nix | |||
{{warning|Currently (2023-04-17), the openwrt build fails with a "/usr/lib/libuuid.so: file not recognized: file format not recognized".}} | |||
Currently (01/2022) I've tested builds using nixpkgs-21.11 and unstable, and both worked. This could possibly break/behave different in the future so you can e.g. pin to an older nixpkgs-revision by replacing the first lines of the above code with this: | |||
<syntaxHighlight lang=nix> | |||
{ opkgs ? import <nixpkgs> {} }: | |||
let | |||
pkgs = import (opkgs.fetchFromGitHub { | |||
owner = "NixOS"; | |||
repo = "nixpkgs"; | |||
rev = "<revision>"; | |||
sha256 = "<hash>"; | |||
}) {}; | |||
... | |||
</syntaxHighlight> | |||
=== Using ImageBuilder in a Nix Derivation === | |||
See https://github.com/astro/nix-openwrt-imagebuilder/ | |||
== OpenWRT buildroot == | |||
It is possible to build OpenWRT from source with buildroot under NixOS too. | |||
You can use the following dev shell with the official OpenWRT build guide: | |||
* https://openwrt.org/docs/guide-developer/toolchain/use-buildsystem | |||
Make sure you disable the nixpkgs compiler hardening, as the OpenWRT toolchain sources aren't as clean as required by nixpkgs defaults. | |||
<syntaxHighlight lang=nix> | |||
{ | |||
inputs = { | |||
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; | |||
}; | |||
outputs = { self, nixpkgs, ... }: { | |||
devShells."x86_64-linux".default = let | |||
pkgs = import nixpkgs { | |||
system = "x86_64-linux"; | |||
}; | |||
in pkgs.mkShell { | |||
nativeBuildInputs = with pkgs; [ | |||
git | |||
pkg-config | |||
ncurses | |||
unzip | |||
(python3.withPackages (ps: [ps.setuptools])) | |||
cdrtools | |||
swig | |||
]; | |||
hardeningDisable = [ "all" ]; | |||
}; | |||
}; | |||
} | |||
</syntaxHighlight> | |||
== Declarative Configuration == | |||
Dewclaw, a semi-declarative OpenWrt configuration tool, allows building configs for OpenWRT ([https://discourse.nixos.org/t/dewclaw-semi-declarative-openwrt-configurations/33993 announcement]). It works by mapping UCI configuration options to Nix. The original project has been picked up and now can be found here: https://github.com/MakiseKurisu/dewclaw. | |||
[[Category:Networking]] |