1 (edytowany przez morfik 2020-04-05 09:58:01)

Temat: Parę pytań dotyczących kompilacji OpenWRT

Postanowiłem się nauczyć kompilować OpenWRT dla swoich routerów i nawet udało mi się ten proces przeprowadzić z powodzeniem dla Archer C7 v2 ale mam parę pytań, na które nie mogę znaleźć jasnej odpowiedzi.

1. Jest jakaś różnica między tymi poniższymi poleceniami?

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

oraz

    $ make package/symlinks

2. Załóżmy, że mam stary plik .config -- czy wystarczy skopiować go do głównego katalogu ze źródłami, czy trzeba jakieś dodatkowe akcje przeprowadzić? Widziałem coś w stylu:

$ cp /old/openwrt/.config ./.config
$ ./scripts/diffconfig.sh > configdiff
$ cp configdiff .config
$ make defconfig && make oldconfig

3. Jak dodać do obrazu ten skrypt ze statystykami eko.one.pl

4. Czy są feeds'y eko.one.pl, tak by je dodać do openwrt/feeds.conf ?

5. Czy można zbudować jedynie obraz sysupgrade.bin bez tych dodatkowych factory*.bin i initramfs-kernel.bin?

6. Po co jest ten obraz initramfs-kernel.bin?

7. Czemu make -j N nie jest zalecany? Trochę to dziwne by kompilować OpenWRT na jednym wątku.

2

Odp: Parę pytań dotyczących kompilacji OpenWRT

1. akurat make  package/symlinks woła dokładnie dwa w/w polecenia. To to samo.
2. Jak masz stary .config (to nie jest to samo co .configdiff czy jakkolwiek by się nazywał) to możesz go przekopiować i zrobić:
make defconfig <- wtedy weźmie opcje a resztę których nie ma zaznaczy domyślnie (lub nie) tak jak on wie że powinno być
make oldconfig <- wtedy jak nie ma jakiejś opcji a powinna być to będzie się o to pytał.
3. albo sobie dodaj pakiety z mojego githuba do feedsów albo w files umieść już gotowy plik
4. j/w, dodajesz po prostu link do mojego gita w feeds.conf.default. Choć uprzedzam że tam jest wiele innych moich śmieci
5. zwykle nie, bo opis budowy dla danego modelu zwykle zawiera i factory i sysupgrade. initramfs zwykle można wyłączyć w opcjach
6. niektóre urządzenia wymagają obrazów initramfs żeby w ogóle móc zainstalować openwrt. A że jest tylko jedna opcja do tego to mogą one powstawać hurtem dla wszystkich urządzeń nawet jak dane urządzenie tego nie wymaga
7. jak się wywaliło i robisz debug to robisz bez wielu wątków. Jak pakiety mają zrąbane zależności i nie chce się zbudować to robisz bez wielu wątków. W pozostałych przypadkach możesz budować wielowątkowo. To zależy co robisz a nie ze nie jest zalecane.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3 (edytowany przez morfik 2020-04-05 10:27:32)

Odp: Parę pytań dotyczących kompilacji OpenWRT

Cezary napisał/a:

initramfs zwykle można wyłączyć w opcjach

Chodzi o TARGET_ROOTFS_INITRAMFS ?

Ok, to ta opcja. big_smile

4

Odp: Parę pytań dotyczących kompilacji OpenWRT

Tak, to ta opcja.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5

Odp: Parę pytań dotyczących kompilacji OpenWRT

Cezary napisał/a:

1. akurat make  package/symlinks woła dokładnie dwa w/w polecenia. To to samo.

Ok, właśnie wyłapałem to w pliku openwrt/include/toplevel.mk .

package/symlinks:
    ./scripts/feeds update -a
    ./scripts/feeds install -a
Cezary napisał/a:

7. jak się wywaliło i robisz debug to robisz bez wielu wątków. Jak pakiety mają zrąbane zależności i nie chce się zbudować to robisz bez wielu wątków. W pozostałych przypadkach możesz budować wielowątkowo. To zależy co robisz a nie ze nie jest zalecane.

Generalnie to wyczytałem, że większość błędów przy make -j x można fix'nąć przez make download .

6

Odp: Parę pytań dotyczących kompilacji OpenWRT

To też. Aczkolwiek czasami jak masz wybrane dużo pakietów a to zdarza się że coś w zależnościach nie wyłapie, buduje równolegle i coś się wywali bo coś jeszcze się nie skompilowało. Wtedy musisz raz jedyny uruchomić nie wielowątkowo żeby wszytko przetrawiło się w dobrej kolejności.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

7 (edytowany przez ad2014 2020-04-05 11:17:10)

Odp: Parę pytań dotyczących kompilacji OpenWRT

jest jeszcze jedna ciekawa obcja :  czesto się zdarza ze dany pakiet nie chce sie skompilować  - wtedy  robimy jednowątkowo   make V=s -j1  i obserwujemy  błędy  na koncu  co nam bruździ  , nastepnie  wlczamy make menuconfig  i naciskamy  slash ( ukosnik )  i  wklejamy  bład  ( nazwe pakietu )  np. libmicrohttpd   i  dostaniemy  cos takiego

 .config - OpenWrt Configuration
 > Search (libmicrohttpd) ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  ┌─────────────────────────────────────────────────────────────────────────── Search Results ───────────────────────────────────────────────────────────────────────────┐
  │ Symbol: DEFAULT_libmicrohttpd-no-ssl [=DEFAULT_libmicrohttpd-no-ssl]                                                                                                 │  
  │ Type  : unknown                                                                                                                                                      │  
  │                                                                                                                                                                      │  
  │                                                                                                                                                                      │  
  │ Symbol: DEFAULT_libmicrohttpd-ssl [=DEFAULT_libmicrohttpd-ssl]                                                                                                       │  
  │ Type  : unknown                                                                                                                                                      │  
  │                                                                                                                                                                      │  
  │                                                                                                                                                                      │  
  │ Symbol: PACKAGE_libmicrohttpd-no-ssl [=m]                                                                                                                            │  
  │ Type  : tristate                                                                                                                                                     │  
  │ Prompt: libmicrohttpd-no-ssl                                                                                                                                         │  
  │   Location:                                                                                                                                                          │  
  │ (1) -> Libraries                                                                                                                                                     │  
  │   Defined at tmp/.config-package.in:70036                                                                                                                            │  
  │   Selects: PACKAGE_librt [=y] && PACKAGE_libpthread [=y] && PACKAGE_libc [=y] && PACKAGE_libssp [=n]                                                                 │  
  │   Selected by: PACKAGE_czmq [=n] && PACKAGE_libmicrohttpd-ssl [=m]<PACKAGE_czmq [=n] || PACKAGE_ola [=n] && PACKAGE_libmicrohttpd-ssl [=m]<PACKAGE_ola [=n] || PACKA │  
  │                                                                                                                                                                      │  
  │                                                                                                                                                                      │  
  │ Symbol: PACKAGE_libmicrohttpd-ssl [=m]                                                                                                                               │  
  │ Type  : tristate                                                                                                                                                     │  
  │ Prompt: libmicrohttpd-ssl                                                                                                                                            │  
  │   Location:                                                                                                                                                          │  
  │ (2) -> Libraries                                                                                                                                                     │  
  │   Defined at tmp/.config-package.in:70049                                                                                                                            │  
  │   Selects: PACKAGE_libgcrypt [=m] && PACKAGE_librt [=y] && PACKAGE_libpthread [=y] && PACKAGE_libgnutls [=y] && PACKAGE_libc [=y] && PACKAGE_libgpg-error [=m] && PA │  
  │   Selected by: PACKAGE_gnunet-gns-proxy [=n] && PACKAGE_gnunet [=n] || PACKAGE_gnunet-hostlist [=n] && PACKAGE_gnunet [=n] || PACKAGE_gnunet-namestore-fcfsd [=n] && │  
  │                                                                                                                                                                      │  
  │                                                                                                                                              e

to jest w niebieskiej tabelce   - od razu dostajemy zestaw informacji  - gdzie to jest wlaczone i od czego  zależy  . Bardzo to pomaga

8

Odp: Parę pytań dotyczących kompilacji OpenWRT

Cezary napisał/a:

To też. Aczkolwiek czasami jak masz wybrane dużo pakietów a to zdarza się że coś w zależnościach nie wyłapie, buduje równolegle i coś się wywali bo coś jeszcze się nie skompilowało. Wtedy musisz raz jedyny uruchomić nie wielowątkowo żeby wszytko przetrawiło się w dobrej kolejności.

Ok, będę miał to na uwadze.

@ad2014 , coś to wyjście trochę nieczytelne.

BTW: nie lepiej używać make xconfig? big_smile

Mam jeszcze jedno pytanie. Jak się będzie robić aktualizację źródeł w późniejszym czasie, to trzeba pobrać nowe commit'y z git'a via:

    $ git remote update && git status
    $ git pull

Czy do tego trzeba coś jeszcze robić? Przykładowo, czy make package/symlinks trzeba jeszcze raz wykonać? Podobnie z make oldconfig lub make defconfig -- czy je też trzeba wpisywać po każdej aktualizacji źródeł?

9

Odp: Parę pytań dotyczących kompilacji OpenWRT

Tak, powinieneś wykonać bo zmienia się lista pakietów w repo. Coś dochodzi, czasami coś ubywa. I tak, lepiej wykonać make oldconfig/defconfig, inaczej będzie wrzeszczał na czerwono podczas kompilacji że coś się w configu nie zgadza.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

10

Odp: Parę pytań dotyczących kompilacji OpenWRT

Ok, jak coś to dopisz info o tym tutaj, bo ciężko trochę to wywnioskować. big_smile

11

Odp: Parę pytań dotyczących kompilacji OpenWRT

Przecież napisałem co trzeba zrobić podczas aktualizacji smile

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

12

Odp: Parę pytań dotyczących kompilacji OpenWRT

Nie widzę tam nic o make oldconfig/defconfig. big_smile

13

Odp: Parę pytań dotyczących kompilacji OpenWRT

morfik napisał/a:

@ad2014 , coś to wyjście trochę nieczytelne.

BTW: nie lepiej używać make xconfig?

@morfik  nie sciemniaj  wszystko jest czytelne  tylko tak się wkleiło sad   - jak  jakiś pakiet Ci się nie bedzie chciał skopilować to  docenisz ten sposób .
Róznica jest taka ze od razu masz pokazane drzewo  zależności

14

Odp: Parę pytań dotyczących kompilacji OpenWRT

No ale ja nie wiem co mam zobaczyć w tamtym wyjściu. Coś więcej niż tutaj (w make xconfig też można użyć szukajki big_smile)?

https://i.imgur.com/UwkLZDo.png

15

Odp: Parę pytań dotyczących kompilacji OpenWRT

zwracam honor  - sprawdziłem u siebie ale u mnie na mint19.2  nie pokazuje tego w kolumnie 2  ( działa tylko 1 i 3  u góry ) , a ty masz właczoną 2 , ale warto wiedzieć że  tez tak można

16 (edytowany przez morfik 2020-04-11 09:46:36)

Odp: Parę pytań dotyczących kompilacji OpenWRT

Cezary napisał/a:

3. albo sobie dodaj pakiety z mojego githuba do feedsów albo w files umieść już gotowy plik

Jeśli dobrze rozumiem to, to mam skopiować plik openwrt/feeds.conf.default do  openwrt/feeds.conf i w nim dopisać coś w poniższym stylu?

src-git obsy_packages https://github.com/obsy/packages.git

No i niby działa ale coś chyba nie do końca:

$ make package/symlinks
Updating feed 'packages' from 'https://git.openwrt.org/feed/packages.git^99efce0cd27adfcc53384fba93f37e5ee2e517de' ...
Create index file './feeds/packages.index'
Updating feed 'luci' from 'https://git.openwrt.org/project/luci.git^13dd17fca148965d38f0d4e578b19679a7c4daa2' ...
Create index file './feeds/luci.index'
Updating feed 'routing' from 'https://git.openwrt.org/feed/routing.git^efa6e5445adda9c6545f551808829ec927cbade8' ...
Create index file './feeds/routing.index'
Updating feed 'telephony' from 'https://git.openwrt.org/feed/telephony.git^6f95d6ab3f359ee2ce81c20522700937424d1591' ...
Create index file './feeds/telephony.index'
Updating feed 'obsy_packages' from 'https://github.com/obsy/packages.git' ...
Already up to date.
Create index file './feeds/obsy_packages.index'
/bin/sh: 1: 8: Bad file descriptor
Collecting package info: done
WARNING: Makefile 'package/feeds/obsy_packages/plugin-gargoyle-3ginfo/Makefile' has a dependency on 'gargoyle', which does not exist
WARNING: Makefile 'package/feeds/obsy_packages/plugin-gargoyle-apcups/Makefile' has a dependency on 'gargoyle', which does not exist
WARNING: Makefile 'package/feeds/obsy_packages/plugin-gargoyle-iradio/Makefile' has a dependency on 'gargoyle', which does not exist
WARNING: Makefile 'package/feeds/obsy_packages/plugin-gargoyle-management/Makefile' has a dependency on 'gargoyle', which does not exist
WARNING: Makefile 'package/feeds/obsy_packages/plugin-gargoyle-msg/Makefile' has a dependency on 'gargoyle', which does not exist
WARNING: Makefile 'package/feeds/obsy_packages/plugin-gargoyle-smsbox/Makefile' has a dependency on 'gargoyle', which does not exist
WARNING: Makefile 'package/feeds/obsy_packages/plugin-gargoyle-smsbox/Makefile' has a dependency on 'gnokii', which does not exist
WARNING: Makefile 'package/feeds/obsy_packages/plugin-gargoyle-usbrelay/Makefile' has a dependency on 'gargoyle', which does not exist
Installing all packages from feed packages.
Installing all packages from feed luci.
Installing all packages from feed routing.
Installing all packages from feed telephony.
Installing all packages from feed obsy_packages.

Mam się martwić tymi ostrzeżeniami w logu?

I jeszcze takie pytanie. Jak mam parę routerów i chciałbym dla każdego z nich budować obraz, to czy jest jakiś bardziej cywilizowany sposób na ogarnięcie procesu budowania niż ciągła ręczna zmiana targetu? big_smile

17

Odp: Parę pytań dotyczących kompilacji OpenWRT

Nie, jest ok. Pisałem że tam jest śmietnik, są zwykłe pakiety i pluginy do gargoyle. A że nie masz w openwrt pakietów od gargoyle to się rzuca o zależności.

Jeżeli routery są w tym samym targecie to oczywiście kompilujesz jednorazowo. Jeżeli zaś w innym to się musisz kompilować ponownie. Jeżeli zdążyłeś już zrobić własne files/* itd i ma to być różne dla każdego modelu to zapoznaj się ze scripts/env: https://openwrt.org/docs/guide-developer/env
Uogólniając, dla każdego targetu kompilujesz oddzielnie z różnych plików .config

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

18

Odp: Parę pytań dotyczących kompilacji OpenWRT

No to są dwa różne targety (jeden dla archer c7v2, a drugi dla archer c2600).

Czyli w sumie to trzeba zrobić dwie osobne konfiguracje

$ ./scripts/env new archer_c7_v2
$ ./scripts/env new archer_c2600

Porobić zmiany w nich (przestawić targety) i zapsiać:

$ ./scripts/env diff
$ ./scripts/env save

A później przy budowaniu wystarczy zmienić config:

$ ./scripts/env switch archer_c7_v2
Switched to branch 'archer_c7_v2'

$ ./scripts/env switch archer_c2600
Switched to branch 'archer_c2600'

19

Odp: Parę pytań dotyczących kompilacji OpenWRT

Tak. Ideologicznie tak to wygląda.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

20

Odp: Parę pytań dotyczących kompilacji OpenWRT

To jeszcze parę pytań. big_smile

Jak już ma się te osobne środowiska kompilacji dla każdego z targetów, to czy istnieje jakieś narzędzie, które te obrazy zbuduje w jednym podejściu czy trzeba sobie to ogarnąć skryptem we własnym zakresie?

Próbowałem zbudować obraz bezpośrednio z gałęzi master ale widać coś LuCI ma jakieś defekty (coś dodawanie interfejsów sieciowych z poziomu www nie działa jak należy) i wróciłem do v19.07.2. W tej gałęzi master jest nowszy kernel. Czy istnieje jakiś sposób by ten kernel przerzucić do tego starszego wydania? Chodzi generalnie o to by mieć starsze wydanie z nowszym kernelem.

21

Odp: Parę pytań dotyczących kompilacji OpenWRT

Własnym skryptem.
Nie, nie ma możliwości bez importowania sterty innych rzeczy. Jak by było gotowe na produkcję to by było z tego wydanie stabilne. Ale jeszcze nie ma.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

22

Odp: Parę pytań dotyczących kompilacji OpenWRT

A odnośnie tego skryptu od statystyk routerów. Nie wrzuciłbyś na swojego git również i luci-app-ekooneplstat ?

23

Odp: Parę pytań dotyczących kompilacji OpenWRT

Oczywiście mogę wrzuć. Zrobię to wieczorem.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

24 (edytowany przez morfik 2020-04-11 20:17:19)

Odp: Parę pytań dotyczących kompilacji OpenWRT

@Cezary, w tym artykule o kompilacji openwrt piszesz tak:

Czasami (w bardzo rzadkich przypadkach) może przydać się zmiana opcji kompilacji kernela. Można to zrobić poleceniem (po uprzedniej kompilacji systemu!)


    $ make kernel_menuconfig

zaznaczyć niezbędne opcje, zapisać a potem jeszcze raz skompilować cały system poleceniem make.

O co chodzi z tą uprzednią kompilacją? Pobrałem właśnie czyste źródła i wydałem to polecenie -- parę rzeczy skompilował, kilka innych dociągnął i po dłuższej chwili od wydania tego polecenia pojawiło się okienko z konfiguracja kernela. big_smile

BTW: zapomnieli dać odpowiednika w stylu  make kernel_xconfig ?

25

Odp: Parę pytań dotyczących kompilacji OpenWRT

To co pisałem wcześniej - może się zdarzyć że czegoś nie ma jeszcze skompilowanego i się wykrzaczy jak zrobisz od razu kernel_menuconfig. Wiem z doświadczenia. Bezpieczniej to najpierw wszystko skompilować raz, a później dopiero się bawić.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.