OpenWRT: Difference between revisions

From NixOS Wiki
imported>Makefu
add infos about the last state
imported>Clerie
No edit summary
 
(7 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Expansion}}
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)


== Building OpenWRT with a nix shell ==
== ImageBuilder ==
Download [https://gist.github.com/Mic92/b59054188c595e5652cacf50485583e0 this Gist] as your <code>shell.nix</code> in the same folder as openwrt and run <code>nix-shell</code> in this folder.
 
This gist has been tested with the following inputs:
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.
* Nixpkgs Revision <code>bee172501de3b4496ff81cc1621d307f167e9382</code>
 
* OpenWRT revision <code>0f063f8ac70943ff1f383c9bd05d1792730fe614</code>
=== 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:


Due to the very delicate OpenWRT dev environment it may be necessary to pin the nixpkgs revision you are using. This can be done by replacing the first lines of the gist with:
<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
{ opkgs ? import <nixpkgs> {} }:                           
{ opkgs ? import <nixpkgs> {} }:                           
Line 13: Line 17:
let                                                         
let                                                         
   pkgs = import (opkgs.fetchFromGitHub {                   
   pkgs = import (opkgs.fetchFromGitHub {                   
     owner = "NixOS"; repo = "nixpkgs-channels";             
     owner = "NixOS";
     rev = "bee172501de3b4496ff81cc1621d307f167e9382";       
    repo = "nixpkgs";             
     sha256 = "14jn7jiq4likrm7fry2m3q3rmv3y4xjfnwx13wh6iqd8c3bcjd12";                                                   
     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
        cdrtools
      ];
      hardeningDisable = [ "all" ];
    };
  };
}
</syntaxHighlight>
</syntaxHighlight>

Latest revision as of 10:49, 28 December 2023

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:

{ opkgs ? import <nixpkgs> {} }:                           
                                                           
let                                                        
  pkgs = import (opkgs.fetchFromGitHub {                   
    owner = "NixOS";
    repo = "nixpkgs";            
    rev = "<revision>";      
    sha256 = "<hash>";                                                   
  }) {};
...

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:

Make sure you disable the nixpkgs compiler hardening, as the OpenWRT toolchain sources aren't as clean as required by nixpkgs defaults.

{
  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
        cdrtools
      ];
      hardeningDisable = [ "all" ];
    };
  };
}