251

(22 odpowiedzi, napisanych Oprogramowanie / Software)

Czy mam sprawdzić na karcie /etc/.extroot-uuid i porównać to do uci show fstab.overlay.uuid na flashu ?
Obecnie uruchamiam kartę SD mając w konfiguracji uci show fstab.overlay.uuid > /dev/mmcblk0p1

252

(22 odpowiedzi, napisanych Oprogramowanie / Software)

Cezary napisał/a:

Ja bym nie porównywał tylko po prostu usuń plik jak jest i zrestartuj. Będzie wtedy uważał że to jego i ją zamontuje

Właśnie, a wolałbym aby taką kartę jednak formatował, bo jest ona niezgodna.


Czyli coś takiego, maksimum uniwersalności:

DEVICE="/dev/mmcblk0"
PARTITION="/dev/mmcblk0p1"

# Jest karta w gnieździe
# System uruchomiony z Flash
# ExtRoot w ogóle włączony w konfiguracji, abym mógł też to gniazdo SD wykorzystywać do czego innego
if [ -b "${DEVICE}" ] && \
[ "$( /bin/df -h | /bin/grep ""${DEVICE}".*/overlay" )" = "" ] && \
[ "$( /sbin/uci -q get fstab.overlay.enabled )" = "1" ]; then
  
  # Nowa karta (nie ma jednej partycji EXT4)
  if ( [ ! "$( /sbin/block info "${PARTITION}" | /bin/grep -o -e "TYPE=\S*" )" = "TYPE=\"ext4\"" ] || \
  [ "$( /bin/ls "${DEVICE}"* | /usr/bin/wc -l )" -ne 2 ] ); then
    FORMAT="true"
    
  # Stara karta (na karcie /etc/.extroot-uuid nie jest taki sam jak na routerze, ale z czym dokładnie mam to porównać?)
  elif ( ??? ); then
    FORMAT="true"
    
  else
    FORMAT="false"
    
  fi
  
  if ( "$FORMAT" = "true" ); then
    # 
    # Działania formatujące kartę sd
    # Reboot
    # 
  fi
  
fi

253

(22 odpowiedzi, napisanych Oprogramowanie / Software)

Dobra, czyli będąc na flash muszę podmontować /dev/mmcblk0p1 na np. /tmp/extroot (aby było mało inwazyjnie) i odczytać /etc/.extroot-uuid. Z którą partycją uuid na flash mam to porównywać będąc uruchomionym na flash?

254

(22 odpowiedzi, napisanych Oprogramowanie / Software)

/etc/.extroot-uuid jest na overlay flasha czy overlay karty sd?

255

(22 odpowiedzi, napisanych Oprogramowanie / Software)

Dobra, skrypt jest już prawie doszlifowany...

DEVICE="/dev/mmcblk0"
PARTITION="/dev/mmcblk0p1"
if [ -b "${DEVICE}" ] && [ "$( /bin/df -h | /bin/grep ""${DEVICE}".*/overlay" )" = "" ] && \
[ "$( /sbin/uci -q get fstab.overlay.enabled )" = "1" ] && \
( [ ! "$( /sbin/block info "${PARTITION}" | /bin/grep -o -e "TYPE=\S*" )" = "TYPE=\"ext4\"" ] || \
[ "$( /bin/ls "${DEVICE}"* | /usr/bin/wc -l )" -ne 2 ] ); then
  #
  # Działania formatujące kartę sd
  # 
fi

Wykonaj skrypt jeśli:
1. Karta SD jest w gnieździe
2. Po uruchomieniu /overlay zamontował się na flashu, zamiast na karcie sd
3. W /etc/config/fstab poprzez enabled=0 mogę ręcznie wyłączać automatyczne montowanie ExtRoota
4A. Pierwsza partycja na karcie sd nie ma systemu plików EXT4
4B. Karta SD nie ma partycji lub ma ich więcej niż jedną

I następujący problem, pomijając już działanie tego skryptu:
Instaluje firmware, robie extroota, działa, następnie znowu instaluję firmware, to po tym system nie chce się już uruchomić na takiej starej karcie - dlaczego? Tutaj właśnie powinienem zrobić punkt 4C, ale nie wiem jaki jest mój punkt zaczepienia... Dlatego więc, w przypadku jeśli używam stare karty w jednej wersji skryptu notorycznie resetuje router, a w drugiej wersji skryptu wcale go nie formatuje i nie montuje.
Brakuje więc dyrektywy: jeśli karta jest stara / z innej instalacji systemu / z innego routera, mimo że ma jedną partycję EXT4 to router musi ją formatować.

256

(22 odpowiedzi, napisanych Oprogramowanie / Software)

To problem rozwiązał się sam, będę montował na:

uci set fstab.overlay.device="/dev/mmcblk0p1"

Więc tak:

1. W /etc/config/fstab dopisuje taki wpis:

config mount 'overlay'
    option enabled '1'
    option device '/dev/mmcblk0p1'
    option target '/overlay'

2. I teraz plik /etc/rc.local dopisuje taki skrypt, jeszcze testuje w nim wszystkie przypadki, może masz sugestie jakiś zależności:

DEVICE="/dev/mmcblk0"
PARTITION="/dev/mmcblk0p1"
if [ -b "${DEVICE}" ] && \
( [ ! "$( /sbin/block info "${PARTITION}" | /bin/grep -o -e "TYPE=\S*" )" = "TYPE=\"ext4\"" ] || \
[ "$( /bin/ls "${DEVICE}"* | /usr/bin/wc -l )" -ne 2 ] || \ 
[ "$( /sbin/uci -q get fstab.overlay.device )" = "${PARTITION}" ] ); then
  echo "timer" > "/sys/class/leds/u7621-06:green:led4/trigger"
  echo "100" > "/sys/class/leds/u7621-06:green:led4/delay_on"
  echo "100" > "/sys/class/leds/u7621-06:green:led4/delay_off"
  /bin/dd if="/dev/zero" of="${DEVICE}" count=2049 2&>1 > /dev/null
  echo -e "o\nn\np\n1\n\n\nw" | /usr/sbin/fdisk "${DEVICE}" 2&>1 > /dev/null
  yes | /usr/sbin/mkfs.ext4 "${PARTITION}" 2&>1 > /dev/null
  echo "none" > "/sys/class/leds/u7621-06:green:led4/trigger"
  echo "1" > "/sys/class/leds/u7621-06:green:led4/brightness"
  reboot
fi

Skrypt ma rozwalić tabele partycji na karcie microSD, utworzyć jedną partycję vfat i następnie nagrać na nią system plików ext4 jeśli:
1. karta SD włożona jest do gniazda
2. wystąpi przynajmniej jedna z poniższych zależności:
A. pierwsza partycja karty sd nie ma systemu pliku ext4
B. jeśli karta sd nie ma jednej partycji (nie ma jej wcale lub ma więcej niż jedną)
C. jeśli system uruchomi się bez ExtRoota, mimo że karta jest zainstalowana, w razie jakiejś awarii router będzie resetował się w kółko, dzięki temu też jeśli karta trafi z innego routera też powinna zostać sformatowana, tak mi się wydaje

Problem jest następujący:
jeśli użyję kartę sformatowaną już w ten sposób przez inny router i mam tego IFa 2C, to router wkoło się resetuje, jeśli go wyrzucę ze skryptu, to router uruchamia się bez ExtRoota.
Jeśli nie ma IFa 2C i karta jest pusta, ExtRoot zapina się prawidłowo.

257

(22 odpowiedzi, napisanych Oprogramowanie / Software)

Cześć, karta SD zgłasza się w systemie dosyć wyjątkowo jako:

# ls /dev/mmc*
/dev/mmcblk0    /dev/mmcblk0p1

Teraz pytanie, co musiałbym zrobić, aby pojawiło mi się inne urządzenie mmcblk1?
Pytam dlatego, że chce wykluczyć możliwość podmontowania złej partycji od innego urządzenia przez podłączenie do urządzenia innego urządzenia, które mogłoby się zgłosić jako właśnie mmcblkX.

Router to oczywiście UniElec u7621-06. Dodam, że inne sloty karty SD np. z modemu Huawei e3372h-153 oraz ta karta o której mowa, tylko zainstalowana prze adapter do USB zgłaszają się w systemie jako sdX.

Czy dobrze rozumiem, że nie ma szans, aby uzyskać w jakiś sposób urządzenie mmcblk1 w systemie?

https://images92.fotosik.pl/396/5f65731d7973cccegen.png

https://images90.fotosik.pl/395/5ae509aef8804aee.png

258

(22 odpowiedzi, napisanych Oprogramowanie / Software)

Widzisz, czyli nie mogę tego użyć, nie mogę użyć również /dev/sdX1, bo będzie się montował z losowego urządzenia, musiałbym napisać skrypt, który przy uruchomieniu routera sprawdzi czym jest /dev/sdcard1 (jeśli jest zainstalowana karta), wyjdzie że np. /dev/sdh1, następnie wyciągnie mi UUID tej karty, sformatuje ją, UUID wprowadzi do /etc/config/fstab i zrobi reboot.

Rozwiązanie musi być uniwersalne, działać na routerze, w którym zainstaluje taką kartę.

To czeka mnie fajna zabawa, założenia mam takie:
1. Bez włożenia karty /overlay działa na flashu routera
2. W każdym momencie po włożeniu karty i reboocie, system ma zrobić overlay na karcie, zrebutować się i uruchamiać /overlay z sdcard
3. W każdym momencie po wyjęciu karty i reboocie, system ma zrobić overlay na flashu, zrebutować się i uruchomić /overlay z sdcard
4. Jeśli to karta niepochodząca z routera, nie ma odpowiedniej struktury pierwszych folderów - ma ją sformatować
5. Kartę ext root można wymieniać pomiędzy routerami, aby router A stał się routerem B, a B stał się routerem A

259

(22 odpowiedzi, napisanych Oprogramowanie / Software)

Ok, ale czy mogę użyć takiej opcji montowania w fstab:

uci set fstab.overlay.device="/dev/sdcard1"

Czy partycja /overlay podmontuję się prawidłowo?

Chodzi o to czy podczas uruchamiania się systemu najpierw montuje się /overlay czy najpierw są wykonywane skrypty hotplug?
Jeśli najpierw jest montowany /overlay, to system nie będzie jeszcze wiedział, że /dev/sdcard1 to tak naprawdę np. /dev/sdh1

Cześć,

Krótki temat... Zaczyna brakować mi miejsca na soft i myślę o ext root. W routerze mam slot na kartę microSD i chcę go wykorzystać. Mam tez skrypt hotplug, który po podłączeniu czegokolwiek pod usb/gniazdo sdcard robi mi taki symlink:

/dev/sdcard1 -> /dev/sdc1

Potrzebuję to wrzucić w własny kompilowany system i zastanawiam się na dwiema kwestiami:

1. Czy wrzucić wpis w /etc/config/fstab - chodzi, czy system poradzi sobie z podmontowaniem partycji jako symlink

uci set fstab.overlay="mount"
uci set fstab.overlay.device="/dev/sdcard1"
uci set fstab.overlay.target="/overlay"

2. Jeśli nie, będę musiał napisać skrypt, który przy pierwszym uruchomieniu i obecności tej karty microSD w tym slocie routera sprawdzi mi UUID takiej karty i ją sformatuje smile

UUID=$( block info "/dev/sdcard1" | grep -o -e "UUID=\S*" )

... następnie wpiszę w konfigurację:

uci set fstab.overlay="mount"
uci set fstab.overlay.uuid="${UUID}"
uci set fstab.overlay.target="/overlay"

Co jeśli wyjmę potem kartę? Router uruchomi się w defaulcie 192.168.1.1? Dobrze rozumuję?

261

(3 odpowiedzi, napisanych Oprogramowanie / Software)

Skompilowałem system do wersji v19.07.3 STABLE, pozostałem jeszcze z jednym błędem w LuCi na niektórych podstronach:

TypeError
"protocol.wwan" factory yields invalid constructor
  at compileClass/< (http://192.168.180.211/luci-static/resources/luci.js?v=git-20.136.49537-fb2f363:176:16)

Jasne, ale czemu uhttpd sie tak wiesza przy tym?

Sytuacja pierwsza:
Klient wysyła zapytanie http, uruchamia się skrypt, klient dostaje po 5 sekund na odpowiedz. Ledwo działa to równocześnie na trzech otwartych kartach w przeglądarce.

Sytuacja druga:
Klient wysyła zapytanie http, uruchamia się skrypt W TLE, klient otrzymuje pusta odpowiedz po 50ms. Po 5 sekundach skrypt kończy prace, zapisuje wynik do /tmp. Klient wykonuje następne zapytanie http, otrzymuje odpowiedź po 50ms, przy okazji uruchamia kolejny raz skrypt W TLE, aby mieć jego odpowiedź 5 sekund później przy następnym zapytaniu http. Taki sposób działa równocześnie na dziesięciu otwartych kartach w przeglądarce, więcej nie testowałem.

Wygląda to na kolejkowanie zapytań serwera www, ponieważ inni klienci (karty w przeglądarce) długo czekają na odpowiedź.
Ustawiałem nawet -> option max_requests '1500'
Potem uci commit uhttpd
Oraz /etc/init.d/uhttpd restart

Zastanawiam się, czy muszę przekodować teraz wszystkie swoje skrypty, aby zasada ich działania była taka jak w "sytuacja druga", czy mogę zostać przy "sytuacja pierwsza" zmieniając jakąś konfigurację serwera. Pod Apache2 w Raspbianie nie miałem takich problemów, a tam potrafię wysyłać kilkadziesiąt requestów i czekać po 1 minutę na odpowiedź.

Rozwiązałem to, tak jak radziłeś. Mam jeszcze do Ciebie jedno pytanie dotyczące uhttpd.
Zrobiłem skrypt w JavaScript, który robi requesty http do routera.
Zapytanie odpowiada kodem 200 OK! zwykle w ciągu 2-6 sekund i odpowiada mi plikiem JSON.
Przy 2-3 użytkownikach z uruchomionym stroną routera dostaje timeouty, zapytania muszą się kolejkować.
W /etc/config/uhttpd ustawiłem dla testu:

option max_requests '15'

...ale mam wrażenie, że to mało pomaga.

Gdy jeden ze skryptów zrobiłem tak, że wywołanie requesta, dostaje 404 Not Found i uruchamiam w tle proces, który buduje mi plik JSON, zapisuje do pliku. Następne zapytanie tego URLa odczytuje w kilka milisekund ten plik, przez co strona routera się nie przywiesza przy większej ilości użytkowników, moje requesty odpowiadają natychmiastowo. Czy tak powinienem robić takie skrypty, aby zbyt długo nie odpowiadały?

Jest tak:
1. wysłanie zapytania
2. router przetwarza 2-6 sekund
3. ma gotową odpowiedź
4. wysłanie do przeglądarki

Na którym z tych elementów to wszystko się tak wykłada? Kiedy przetwarzam taki skrypt przez SSH zamiast HTTP jest ok.

Może za pierwszym wczytaniem, powinienem odpowiadać kodem 202:

202 | Accepted | Przyjęto – zapytanie zostało przyjęte do obsłużenia, lecz jego zrealizowanie jeszcze się nie skończyło

a dopiero potem odpowiedzieć 200 OK!

Cezary napisał/a:

Czemu nie możesz tego zrobić przez curl -D /tmp/a http://1.2.3.4/image.jpg?

Zapomniałem dodać najważniejszego, że chcę to zrobić "w locie", bez zapisywania.

Czy OpenWRT jest jakaś dyrektywa pozwalająca zrobić coś takiego:

curl -D $VARIABLE http://1.2.3.4/image.jpg

Cześć,

Pobieram obraz CURLem:

WWW=$( /usr/bin/curl -m 3 -D - "http://1.2.3.4/image.jpg" | base64 )

Zmienna WWW przyjmuje wartość:

HTTP/1.1 200 OK
Date: Sat, 04 Jul 2020 22:04:39 GMT
Server: Apache/2.4.25 (Debian)
Content-Type: image/jpeg; charset="UTF-8"
Content-Length: 53133
Via: 1.1 localhost

˙Ř˙ŕ JFIF      ˙Ű C 
2!=,.$2I@LKG@FEPZsbPU
;!!;|SFS||||||||||||||||||||||||||||||||||||||||||||||||||˙Ŕ Đ 
˙Ä µ   } !1A
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwx—˜™š˘Ł¤Ą¦§¨©Ş˛ł´µ¶·¸ąşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚáâăäĺćçčéęńňóôő    
˙Ä µ  w !1AQaq"2
$4á%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ—˜™š˘Ł¤Ą¦§¨©Ş˛ł´µ¶·¸ąşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚâăäĺćçčéęň¶1KžŐ

Potrzebuję wyciągnąć HEAD ze zmiennej WWW, aby wykonać obliczenia (kod odpowiedzi serwera nie wystarczy, wtedy wystarczyłoby --fail w curl), jeśli obliczenia będą pozytywne, chciałem wydrukować BODY ze zmiennej WWW. Jak mogę wyciąć wszystko od wystąpienia dwóch znaków "\n\n"?

Na ten moment działa mi to tak:

HEAD=$( echo "$WWW" | base64 --decode | head -n 6 )
BODY=$( echo "$WWW" | base64 --decode | tail -n +8 )

...ale nie zawsze będę otrzymywał 6 linijek nagłówka.


Prawie mi się udało z tym:

HEAD=$( echo "$WWW" | base64 --decode | awk '/^$/{exit} 1' )
HEAD=$( echo "$WWW" | base64 --decode | awk -v RS= 'NR==1' )

266

(2 odpowiedzi, napisanych Inne)

Dzięki

267

(2 odpowiedzi, napisanych Inne)

Cześć,

Wiecie może jak przekonwertować taką date na sekundy w OpenWRT:

# date -d "Mon May  4 18:49:19 2020" +%s
date: invalid date 'Mon May  4 18:49:19 2020'

Tak, potwierdzam -> to załatwiło sprawę:

uci set network.PlayOdNOWA.force_link='1'

269

(3 odpowiedzi, napisanych Oprogramowanie / Software)

Z ciekawości sprawdziłem najnowszego snapshota:

i taki wynik:

Starting kernel ...

[    0.000000] Linux version 5.4.35 (builder@buildhost) (gcc version 8.4.0 (OpenWrt GCC 8.4.0 r13122-522f6b7eee)) #0 SMP Tue Apr 28 18:28:06 2020
(tutaj stop)

Więc spróbowałem kernela:

i taki wynik:

Starting kernel ...

[    0.000000] Linux version 5.4.35 (builder@buildhost) (gcc version 8.4.0 (OpenWrt GCC 8.4.0 r13122-522f6b7eee)) #0 SMP Tue Apr 28 18:28:06 2020
[    0.000000] SoC Type: MediaTek MT7621 ver:1 eco:3
[    0.000000] printk: bootconsole [early0] enabled
[    0.000000] CPU0 revision is: 0001992f (MIPS 1004Kc)
[    0.000000] OF: fdt: No chosen node found, continuing without
[    0.000000] Initrd not found or empty - disabling initrd
[    0.000000] VPE topology {2,2} total 4
[    0.000000] Primary instruction cache 32kB, VIPT, 4-way, linesize 32 bytes.
[    0.000000] Primary data cache 32kB, 4-way, PIPT, no aliases, linesize 32 bytes
[    0.000000] MIPS secondary cache 256kB, 8-way, linesize 32 bytes.
[    0.000000] Zone ranges:
[    0.000000]   Normal   [mem 0x0000000000000000-0x000000000fffffff]
[    0.000000]   HighMem  empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000000000-0x000000000fffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000000fffffff]
[    0.000000] OF: fdt: Error -11 processing FDT
[    0.000000] percpu: Embedded 14 pages/cpu s26704 r8192 d22448 u57344
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 64960
[    0.000000] Kernel command line:   rootfstype=squashfs,jffs2
[    0.000000] Dentry cache hash table entries: 32768 (order: 5, 131072 bytes, linear)
[    0.000000] Inode-cache hash table entries: 16384 (order: 4, 65536 bytes, linear)
[    0.000000] Writing ErrCtl register=00017001
[    0.000000] Readback ErrCtl register=00017001
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] Memory: 249288K/262144K available (5838K kernel code, 206K rwdata, 1256K rodata, 2544K init, 237K bss, 12856K reserved, 0K cma-reserved, 0K highmem)
[    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
[    0.000000] rcu: Hierarchical RCU implementation.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
[    0.000000] NR_IRQS: 256
[    0.000000] random: get_random_bytes called from start_kernel+0x340/0x55c with crng_init=0
[    0.000000] Kernel panic - not syncing: Failed to find mtk,mt7621-sysc node
[    0.000000] Rebooting in 1 seconds..
[    0.000000] Reboot failed -- System halted

Wróciłem już ponownie na v19.07.2 przez tftpd.

270

(3 odpowiedzi, napisanych Oprogramowanie / Software)

Cześć,

W serwerze uhttpd, którego używa domyślnie LuCI po włączeniu opcji:

uci set uhttpd.main.error_page='/index.html'

...na wielu podstronach LuCi pojawia się błąd składni:

Np. 1:

SyntaxError

expected expression, got '<'
  in http://router.lan/luci-static/resources/protocol/relay.js?v=git-20.057.55219-13dd17f:1
  at compileClass/< (http://router.lan/luci-static/resources/luci.js?v=git-20.057.55219-13dd17f:115:16)

Np. 2:

SyntaxError

expected expression, got '<'
  in http://router.lan/luci-static/resources/protocol/wwan.js?v=git-20.057.55219-13dd17f:1
  at compileClass/< (http://router.lan/luci-static/resources/luci.js?v=git-20.057.55219-13dd17f:115:16)

I fakt -> LuCi spodziewa się tutaj plików relay.js oraz wwan.js, w zamian dostaje plik HTML.
Sprawdziłem -> te dwa pliki nie istnieją, więc postanowiłem stworzyć puste pliki, nadałem maksymalne uprawnienia 777, aby wyeliminować błąd składni... nie pomogło.
W pliku luci.js nie znajduje nic na frazę: wwan oraz relay.
Potrzebuje tego przekierowania (error_page), ponieważ zrobiłem sobie Captive Portal.
Wersja jakiej używam to OpenWrt 19.07.2 r10947-65030d81f3 / LuCI openwrt-19.07 branch git-20.057.55219-13dd17f.
Czy na aktualnym snapshocie też jest ten problem? W razie czego muszę to albo poprawić, albo zaczekać na kolejne stabilne wydanie.
Pomysły?

Aktualnie jestem na UniElec u7621-06 / OpenWrt 19.07.2 / Jądro 4.14.171.

Właśnie próbuję jeszcze opcji:

uci set network.PlayOdNOWA.force_link='1'

Zastanawiam się jeszcze nad takim stanem rzeczy: po restarcie routera zawsze mam dostęp do swoich HiLink'owych Huawei, ale jeśli podczas pracy routera OpenWRT:
1. wejdę w WebGUI modemu lub konsolą po Telnet, aby go zresetować
2. wyjmę go i włożę z portu USB
...to czasami po takim restarcie samego modemu -> modem nie działa.
Hotplug w OpenWRT robi tylko:

/sbin/ip link set $NAME1 down
/sbin/ip link set $NAME1 name $NAME2
/sbin/ip link set $NAME2 up

I teraz jak wygląda ta sytuacja i co nie pomaga:

ip link set usb5 down && sleep 5 && ip link set usb5 up
ifdown PlayodNOWA && sleep 5 && ifup PlayodNOWA

ifstatus PlayOdNOWA

{
        "up": true,
        "pending": false,
        "available": true,
        "autostart": true,
        "dynamic": false,
        "uptime": 37,
        "l3_device": "usb5~if0",
        "proto": "dhcp",
        "device": "usb5~if0",
        "updated": [
                "addresses",
                "routes",
                "data"
        ],
        "metric": 140,
        "dns_metric": 0,
        "delegation": true,
        "ipv4-address": [
                {
                        "address": "192.168.211.232",
                        "mask": 28
                }
        ],
        "ipv6-address": [

        ],
        "ipv6-prefix": [

        ],
        "ipv6-prefix-assignment": [

        ],
        "route": [
                {
                        "target": "0.0.0.0",
                        "mask": 0,
                        "nexthop": "192.168.211.231",
                        "source": "192.168.211.232/32"
                }
        ],
        "dns-server": [
                "192.168.211.231",
                "192.168.211.231"
        ],
        "dns-search": [

        ],
        "neighbors": [

        ],
        "inactive": {
                "ipv4-address": [

                ],
                "ipv6-address": [

                ],
                "route": [

                ],
                "dns-server": [

                ],
                "dns-search": [

                ],
                "neighbors": [

                ]
        },
        "data": {
                "leasetime": 86400
        }
}

ip addr

(...)
32: usb5~if0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc hfsc state UP group default qlen 1000
    link/ether 0c:5b:8f:27:9a:64 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::e5b:8fff:fe27:9a64/64 scope link
       valid_lft forever preferred_lft forever

route

tutaj nie mam żadnych wpisów od tego interfejsu

ip route show

tutaj nie mam żadnych wpisów od tego interfejsu

uci show network.PlayOdNOWA

network.PlayOdNOWA=interface
network.PlayOdNOWA.ifname='usb5~if0'
network.PlayOdNOWA.proto='dhcp'
network.PlayOdNOWA.metric='140'

Podsumowanie:
Widzę, że mój interfejs PlayOdNOWA ma adres IP, zaś moje urządzenie usb5~if0 nie ma nadanego adresu, tablica rutingu nie istnieje dla urządzenia przez co nie mam do niego dostępu. Jedyne co pomaga na ten stan rzeczy to:

/etc/init.d/network restart

...ale nie tędy droga... Co byś radził dodać do mojego skryptu hotplug?

Testowałem już wcześniej taką konfigurację i wiem w czym był problem... Kiedy wyłączałem moje podstawowe łącze, uruchamiał się w tle mój skrypt Captive Portalu, który robił "uci commit dhcp", tylko że ja wcześniej nie zrobiłem "uci commit dhcp" i skrypt ten wyrzucał mi moją konfigurację. Ehhh, już drugi raz się na tym przejechałem...

Ale zrobiłem jeszcze inaczej:

Cezary napisał/a:

Nie jest tak?

Oczywiście, że jest. Taka jest zasada działania Captive Portalu. Przez DNSy, przez przekierowanie z IP na fakeIP, lub jedno i drugie jednocześnie.

Mój CP działa, przekierowuje mnie na adres routera, na którym w LuCi robie sobie link <a href="bdi.free.aero2.net.pl:8080/">Aktywuj</a> i ten link działa, kiedy mam dyrektywę:

uci add_list dhcp.@dnsmasq[0].address='/#/192.168.1.1'
uci add_list dhcp.@dnsmasq[0].address='/bdi.free.aero2.net.pl/212.2.123.253'

Nie chce wpisywać adresu IP strony z Captchą na sztywno w konfigurację, bo kiedy się on zmieni (a zmienia się), to po kliknięciu w link powiedzmy to "Aktywuj", przekieruje mnie na adres bdi.free.aero2.net.pl pod adresem ip 212.2.123.253, który już nie istnieje.

Dlatego chce zabronić wszystkiego (tylko po DNSach):
uci add_list dhcp.@dnsmasq[0].address='/#/192.168.1.1'
..ale oprócz adresu Aero2
uci add_list dhcp.@dnsmasq[0].address='/bdi.free.aero2.net.pl/212.2.123.253'
tylko bez podawania adresu IP.

Jak mogę to osiągnąć?

Próbowałem tak
uci add_list dhcp.@dnsmasq[0].address='/bdi.free.aero2.net.pl/'
i tak:
uci add_list dhcp.@dnsmasq[0].address='/bdi.free.aero2.net.pl/#'
i to nie działa

Nieee, kiedy na zaporze wymuszam użycie własnego dnsa, a mój dns przekierowywuje zapytania na adres bramy to przekierowuje mnie tylko i wyłącznie na adres bramy.