Skip to content

Image OpenWRT maison

Vincent Fortier edited this page Jul 11, 2020 · 9 revisions

L'idée ici est d'être en mesure de créer une image maison "sur-mesure". Ensuite il nous est alors possible de créer ou modifier des paquets à la pièce pour nos besoins.

Compiler une image spécifique

Extraire le dépôt git OpenWRT:

$ mkdir git-openwrt
$ cd git-openwrt
$ git clone https://github.com/openwrt/openwrt.git
Cloning into 'openwrt'...
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 523205 (delta 0), reused 0 (delta 0), pack-reused 523204
Receiving objects: 100% (523205/523205), 181.93 MiB | 6.69 MiB/s, done.
Resolving deltas: 100% (356846/356846), done.

Accéder à la branche désirée:

$ cd openwrt
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/lede-17.01
  remotes/origin/master
  remotes/origin/openwrt-18.06
  remotes/origin/openwrt-19.07
$ git checkout remotes/origin/openwrt-19.07

Mise a jour et installation des flux:

$ ./scripts/feeds update -a
$ ./scripts/feeds install -a

Configurer OpenWRT:

$ make menu_config

Sélectionner l'image cible à produire:

Target System (...)  --->

┌──────────────────────── Target System ────────────────────────┐
│  Use the arrow keys to navigate this window or press the      │  
│  hotkey of the item you wish to select followed by the <SPACE │  
│  BAR>. Press <?> for additional information about this        │  
│ ┌───────────────────────────────────────────────────────────┐ │  
│ │            ( ) Allwinner A1x/A20/A3x                      │ │  
│ │            ( ) AppliedMicro APM821xx                      │ │  
│ │            ( ) Atheros AR231x/AR5312                      │ │  
│ │            (X) Atheros AR7xxx/AR9xxx                      │ │  
│ │            ( ) Atheros ATH79 (DTS)                        │ │  
│ │            ( ) Broadcom BCM27xx                           │ │  
│ └────────────────┴(+)───────────────────────────────────────┘ │  
├───────────────────────────────────────────────────────────────┤  
│                    <Select>      < Help >                     │  
└───────────────────────────────────────────────────────────────┘  

Sélectionner le sous-profil à utiliser:

Target Profile (Default Profile (all drivers))  --->

┌─────────────────────── Target Profile ────────────────────────┐
│  Use the arrow keys to navigate this window or press the      │
│  hotkey of the item you wish to select followed by the <SPACE │
│  BAR>. Press <?> for additional information about this        │
│ ┌────^(-)───────────────────────────────────────────────────┐ │
│ │( ) TP-LINK RE450 v1                                       │ │
│ │( ) TP-LINK TL-MR6400 v1                                   │ │
│ │( ) TP-LINK TL-WDR3500 v1                                  │ │
│ │( ) TP-LINK TL-WDR3600 v1                                  │ │
│ │(X) TP-LINK TL-WDR4300 v1                                  │ │
│ │( ) TP-LINK TL-WDR4300 v1 (IL)                             │ │
│ └────┴(+)───────────────────────────────────────────────────┘ │
├───────────────────────────────────────────────────────────────┤
│                    <Select>      < Help >                     │
└───────────────────────────────────────────────────────────────┘

Target Profile (TP-LINK TL-WDR4300 v1)  --->

Sauvegarder la configuration puis quitter:

< Save >  &  < Exit >

Amorcer le processus de compilation:

$ make -j `nproc`

Compiler un paquet spécifique:

Un bug rencontré avec stubby se situe dans l'ordonnancement des ses dépendances. Au final le paquet n'est pas disponible dans les canaux standards pour mon routeur. Pour contourner ce problème on doit tout d'abord:

  1. compiler ses dépences
  2. compiler stubby
  3. ensuite reproduire le processus normal de création de paquet

Installer les outils:

make tools/install
make toolchain/install

Pour atteindre stubby on doit d'abord compiler toutes ses dépendances:


unbound:

$ make -j1 V=s package/unbound/compile
$ make -j1 V=s package/unbound/check

libidn2:

$ make -j1 V=s package/libidn2/compile
$ make -j1 V=s package/libidn2/check

getdns:

$ make -j1 V=s package/getdns/compile
$ make -j1 V=s package/getdns/check

Compiler le paquet désiré (stubby):

$ make -j1 V=s package/stubby/compile
$ make -j1 V=s package/stubby/check

Si erreur on peut nettoyer et recommencer:

$ make package/getdns/clean

Re-configurer OpenWRT:

$ make menuconfig

Maintenant reproduire le processus normal de création de paquet, sélectionner les options suivantes:

[*] Build the OpenWrt Image Builder
[*]   Include package repositories (NEW)
[*] Build the OpenWrt SDK
[*] Package the OpenWrt-based Toolchain

Sauvegarder la configuration puis quitter:

< Save >  &  < Exit >

Sélectionner le paquet en particulier à compiler:

Network  ---> IP Addresses and Names  --->
<*> stubby................................ stubby - (daemon that uses getdns)

Compiler le tout

$ make -j`nproc`

Valider que le paquet a été généré:

$ find . -name "*.ipk" | grep stubby
./staging_dir/packages/ar71xx/stubby_0.3.0-1_mips_24kc.ipk
./build_dir/target-mips_24kc_musl/openwrt-imagebuilder-ar71xx-generic.Linux-x86_64/packages/stubby_0.3.0-1_mips_24kc.ipk
./bin/packages/mips_24kc/packages/stubby_0.3.0-1_mips_24kc.ipk