1 (edytowany przez sty 2017-12-23 15:04:10)

Temat: sysinfo.sh przy własnej kompilacji - 2 problemy

Problemy są 2:
- po pierwsze wyświetlanie (po zalogowaniu przez ssh) występuje 2-krotnie (2 razy pod rząd sam fragment wynikający z sysinfo.sh - banner wyświetla się prawidłowo, czyli raz)
- po drugie nie następuje auto dopasowanie prawego brzegu wyświetlanej treści (wystaje) - przypomnę, że po zmianie bannera z LEDE na OpenWRT nastąpiły zmiany w geometrii /etc/banner - całość wygląda tak (krzyżyki oczywiście dobrane do stanu faktycznego w sensie ilości zajmowanych pozycji - a więc i wystawanie identycznie jak z oryginalną nazwą ssid):

BusyBox v1.27.2 () built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt SNAPSHOT, r5603-0fca474
 -----------------------------------------------------
 | Machine: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx         |
 | Uptime: 0d, 00:01:51                              |
 | Load: 0.86 0.42 0.16                              |
 | Flash: total: 6.0MB, free: 5.6MB, used: 2%        |
 | Memory: total: 249.0MB, free: 224.9MB, used: 9%   |
 | WAN:                                              |
 | LAN: 192.168.150.1, leases: 0                     |
 | radio1: mode: sta, ssid: xxxxxxxxx, channel: 149, conn: 1 |
 -----------------------------------------------------
 | Machine: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx         |
 | Uptime: 0d, 00:01:52                              |
 | Load: 0.86 0.42 0.16                              |
 | Flash: total: 6.0MB, free: 5.6MB, used: 2%        |
 | Memory: total: 249.0MB, free: 224.8MB, used: 9%   |
 | WAN:                                              |
 | LAN: 192.168.150.1, leases: 0                     |
 | radio1: mode: sta, ssid: xxxxxxxxx, channel: 149, conn: 1 |
 -----------------------------------------------------

Dla ewentualnej informacji zawartość stosownych plików po zainstalowaniu fw w danym routerze wraz z wkompilowanym programem/skryptem sysinfo, z wiadomego github-a obsy/Cezary .

/etc/profile:

cat profile
#!/bin/sh
[ -f /etc/banner ] && cat /etc/banner
[ -e /tmp/.failsafe ] && cat /etc/banner.failsafe || /sbin/sysinfo.sh
fgrep -sq '/ overlay ro,' /proc/mounts && {
    echo 'Your JFFS2-partition seems full and overlayfs is mounted read-only.'
    echo 'Please try to remove files from /overlay/upper/... and reboot!'
}

export PATH="/usr/sbin:/usr/bin:/sbin:/bin"
export HOME=$(grep -e "^${USER:-root}:" /etc/passwd | cut -d ":" -f 6)
export HOME=${HOME:-/root}
export PS1='\u@\h:\w\$ '

[ "$TERM" = "xterm" ] && export PS1='\[\e]0;\u@\h: \w\a\]'$PS1

[ -x /bin/more ] || alias more=less
[ -x /usr/bin/vim ] && alias vi=vim || alias vim=vi

alias ll='ls -alF --color=auto'

[ -z "$KSH_VERSION" -o \! -s /etc/mkshrc ] || . /etc/mkshrc

[ -x /usr/bin/arp -o -x /sbin/arp ] || arp() { cat /proc/net/arp; }
[ -x /usr/bin/ldd ] || ldd() { LD_TRACE_LOADED_OBJECTS=1 $*; }

[ -n "$FAILSAFE" ] || {
    for FILE in /etc/profile.d/*.sh; do
        [ -e "$FILE" ] && . "$FILE"
    done
    unset FILE
}

if ( grep -qs '^root::' /etc/shadow && \
     [ -z "$FAILSAFE" ] )
then
cat << EOF
=== WARNING! =====================================
There is no root password defined on this device!
Use the "passwd" command to set up a new password
in order to prevent unauthorized SSH logins.
--------------------------------------------------
EOF
fi

service() {
    [ -f "/etc/init.d/$1" ] || {
        echo "service "'"'"$1"'"'" not found, the following services are available:"
        ls "/etc/init.d"
        return 1
    }
    /etc/init.d/$@
}

/etc/profile.d/99-sysinfo.sh:

/sbin/sysinfo.sh

/sbin/sysinfo.sh:

#!/bin/sh

# obsy, http://eko.one.pl

LINE1=$(wc -L /etc/banner | awk '{print $1}')
LINE=$((LINE1-5))

hr() {
        if [ $1 -gt 0 ]; then
                printf "$(awk -v n=$1 'BEGIN{for(i=split("B KB MB GB TB PB",suffix);s<1;i--)s=n/(2**(10*i));printf (int(s)==s)?"%.0f%s":"%.$
        else
                printf "0B"
        fi
}

MACH=""
[ -e /tmp/sysinfo/model ] && MACH=$(cat /tmp/sysinfo/model)
[ -z "$MACH" ] && MACH=$(awk -F: '/Hardware/ {print $2}' /proc/cpuinfo)
[ -z "$MACH" ] && MACH=$(awk -F: '/system type/ {print $2}' /proc/cpuinfo)
[ -z "$MACH" ] && MACH=$(awk -F: '/machine/ {print $2}' /proc/cpuinfo)
[ -z "$MACH" ] && MACH=$(awk -F: '/model name/ {print $2}' /proc/cpuinfo)

U=$(cut -d. -f1 /proc/uptime)
D=$(expr $U / 60 / 60 / 24)
H=$(expr $U / 60 / 60 % 24)
M=$(expr $U / 60 % 60)
S=$(expr $U % 60)
U=$(printf "%dd, %02d:%02d:%02d" $D $H $M $S)

L=$(awk '{ print $1" "$2" "$3}' /proc/loadavg)

RFS=$(df /overlay 2>/dev/null | awk '/overlay/ {printf "%.0f:%.0f:%s", $4*1024, $2*1024, $5}')
[ -z "$RFS" ] && RFS=$(df / 2>/dev/null | awk '/dev\/root/ {printf "%.0f:%.0f:%s", $4*1024, $2*1024, $5}')
if [ -n "$RFS" ]; then
        a1=$(echo $RFS | cut -f1 -d:)
        a2=$(echo $RFS | cut -f2 -d:)
        a3=$(echo $RFS | cut -f3 -d:)
        RFS="total: "$(hr $a2)", free: "$(hr $a1)", used: "$a3
fi

total_mem="$(awk '/^MemTotal:/ {print $2*1024}' /proc/meminfo)"
buffers_mem="$(awk '/^Buffers:/ {print $2*1024}' /proc/meminfo)"
cached_mem="$(awk '/^Cached:/ {print $2*1024}' /proc/meminfo)"
free_mem="$(awk '/^MemFree:/ {print $2*1024}' /proc/meminfo)"
free_mem="$(( ${free_mem} + ${buffers_mem} + ${cached_mem} ))"
MEM=$(echo "total: "$(hr $total_mem)", free: "$(hr $free_mem)", used: "$(( (total_mem - free_mem) * 100 / total_mem))"%")

LAN=$(uci -q get network.lan.ipaddr)
[ -e /tmp/dhcp.leases ] && LAN="$LAN, leases: "$(awk 'END {print NR}' /tmp/dhcp.leases)

PROTO=$(uci -q get network.wan.proto)
case $PROTO in
qmi|ncm)
        SEC=wan_4
        ;;
*)
        SEC=wan
        ;;
esac
WAN=$(ubus call network.interface status '{"interface":"'$SEC'"}' 2>/dev/null | jsonfilter -q -e "@['ipv4-address'][0].address")
[ -z "$WAN" ] && WAN=$(uci -q -P /var/state get network.$SEC.ipaddr)
[ -n "$WAN" ] && WAN="$WAN, proto: "$PROTO

printf " | %-"$LINE"s |\n" "Machine: $MACH"
printf " | %-"$LINE"s |\n" "Uptime: $U"
printf " | %-"$LINE"s |\n" "Load: $L"
printf " | %-"$LINE"s |\n" "Flash: $RFS"
printf " | %-"$LINE"s |\n" "Memory: $MEM"
printf " | %-"$LINE"s |\n" "WAN: $WAN"
printf " | %-"$LINE"s |\n" "LAN: $LAN"

IFACES=$(uci -q show wireless | grep "device='radio" | cut -f2 -d. | sort)
for i in $IFACES; do
        SSID=$(uci -q get wireless.$i.ssid)
        DEV=$(uci -q get wireless.$i.device)
        OFF=$(uci -q get wireless.$DEV.disabled)
        OFF2=$(uci -q get wireless.$i.disabled)
        UP=$(ubus call network.wireless status '{"device":"'$DEV'"}' 2>/dev/null | jsonfilter -q -e @.*.up)
        if [ -n "$SSID" ] && [ "x$OFF" != "x1" ] && [ "x$OFF2" != "x1" ] && [ "x$UP" == "xtrue" ]; then
                MODE=$(uci -q -P /var/state get wireless.$i.mode)
                CHANNEL=$(uci -q get wireless.$DEV.channel)
                SEC1=$(echo $i | sed 's/\[/\\[/g;s/\]/\\]/g')
                IFNAME=$(wifi status $DEV | grep -A 1 $SEC1 | awk '/ifname/ {gsub(/[",]/,"");print $2}')
                [ -n "$IFNAME" ] && CNT=$(iw dev $IFNAME station dump | grep Station | wc -l)
                printf " | %-"$LINE"s |\n" "$DEV: mode: $MODE, ssid: $SSID, channel: $CHANNEL, conn: ${CNT:-0}"
        fi
done

echo " "$(for i in $(seq 2 $LINE1); do printf "-"; done)

ADDON=""
for i in $(ls /etc/sysinfo.d/* 2>/dev/null); do
        T=$($i)
        if [ -n "$T" ]; then
                printf " | %-"$LINE"s |\n" "$T"
                ADDON="1"
        fi
done

if [ -n "$ADDON" ]; then
        echo " "$(for i in $(seq 2 $LINE1); do printf "-"; done)
fi

exit 0

Problem ogólnie występuje od kilkunastu/dziesięciu rewizji wstecz, ale nie miałem wcześniej czasu by o tym pisać.

2

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

No i źle zrobiłeś. || /sbin/sysinfo.sh jest zbędne, pakiet ładuje sam wszystkie pliki tam gdzie trzeba.

Co do szerokości - on się dostosowuje do szerokości banera, nie do ilości wyświetlanych danych. Zawsze tak było.

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

3 (edytowany przez sty 2017-12-23 19:04:47)

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

W zasadzie to zupełnie nic nie zrobiłem - po prostu skompilowałem.
Rozumiem, że mam usunąć z linii 4 w pilku /etc/profile sam fragment zaznaczony na kolorowo (dla ułatwienia wizualizacji):

[ -e /tmp/.failsafe ] && cat /etc/banner.failsafe || /sbin/sysinfo.sh

Czy w tym problem ?
Jeżeli tak, to nie wiem skąd mi się to tam wzięło, bo po ostatniej dużej aktualizacji robiłem firstboot i wszystko było ustawiane od nowa.

4

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

Kiedyś się to samo dodawało, od połowy grudnia jest zrobione inaczej. Tak, masz to usunąć.

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

5 (edytowany przez sty 2017-12-23 19:01:49)

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

Dzięki za rozjaśnienie.
Dodatkowe pytanie - jak poradzić sobie z tym "rozjazdem" ?

6

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

Zmienna LINE tym steruje. Ustaw sobie np. LINE=80 i będziesz miał wszystko innej długości. 6 linia tego skryptu.

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

7 (edytowany przez sty 2017-12-24 13:24:36)

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

No to byłoby chyba na tyle - jeszcze raz dziękuję za wskazówki.

EDIT:
W efekcie krótkich przemyśleń doszedłem do wniosku, że lepiej wydłużyć te 2-ie linie przerywane kolejnymi znakami "-" w pliku /etc/banner o kolejne 8 znaków. Każdy może sobie to dobrać sam, uwzględniając prostą korelację długości tych linii przerywanych z długością nazwy ssid - w zasadzie tylko nazwa ssid może spowodować konieczność ewentualnej modyfikacji pliku /etc/banner. To w zupełności uprościło cały proces formowania właściwego wyświetlania informacji (narzuconego niejako przez zamysł graficzny Cezarego) dostarczanych przez /sbin/sysinfo.sh, bez potrzeby modyfikowania tegoż pliku. Plik /etc/banner jest na tyle rzadko modyfikowany (w uproszczeniu można przyjąć, że wcale), iż można już w źródłach przed kompilacją dokonać stosownej modyfikacji i niejako zapomnieć o tych problemach w ogóle.
EDIT2:
Oto efekt końcowy tych kilku prostych modyfikacji:

BusyBox v1.27.2 () built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -------------------------------------------------------------
 OpenWrt SNAPSHOT, r5609-b0d99b7
 -------------------------------------------------------------
 | Machine: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx                 |
 | Uptime: 0d, 00:01:00                                      |
 | Load: 1.24 0.39 0.14                                      |
 | Flash: total: 6.0MB, free: 5.6MB, used: 2%                |
 | Memory: total: 249.0MB, free: 225.2MB, used: 9%           |
 | WAN:                                                      |
 | LAN: 192.168.150.1, leases: 0                             |
 | radio1: mode: sta, ssid: xxxxxxxxx, channel: 149, conn: 1 |
 -------------------------------------------------------------

8 (edytowany przez tinware 2020-02-22 05:17:16)

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

Może wiecie, co wywołuje komendę "ash", której wynikiem jest "BusyBox v1.27.2 () built-in shell (ash)" podczas logowania?
Nie chciałbym wywoływać tej komendy podczas logowania, chciałbym aby logowanie wyglądało tak:

login as: root
  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
...

1. Czy i gdzie mogę to zmienić w obecnym systemie, czy muszę zrobić własną kompilację?
2. Czy jestem w stanie wywoływać ten skrypt na bieżąco w czasie rzeczywistym, np. watch?

9

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

1. To napis pochodzący z busyboxa. Bez kompilacji tego nie zmienisz. Natomiast to co jest dalej to jest zawartość /etc/banner wyświetlana przez /etc/profile które wykonywane jest po zalogowaniu się usera.
2. Nie rozumiem co chcesz wołać w czasie rzeczywistym. Baner ze zgłoszeniem do shela? Nie.

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

10

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

Czy kompilacja samego busybox i podmiana w /bin/busybox wystarczyłaby ?

11

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

Tak. W czym ci ten napis przeszkadza?

BTW, być może zmiana shella dla usera by coś dało.

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

12

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

Gdzie mogę to zmienić?

13

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

Jak w każdym linuksie - w /etc/passwd, masz zdefiniowaną powłokę dla użytkownika.

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

14

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

Dzięki smile

opkg update
opkg install bash
nano /etc/passwd

root:x:0:0:root:/root:/bin/bash
...

i efekt końcowy:

https://images92.fotosik.pl/322/bbfed26116212fdegen.png

15

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

Tyle że bash zajmuje cenne miejsce.

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

16 (edytowany przez tinware 2020-02-22 21:11:00)

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

Zauważyłem, już się zgłosiłem tutaj, testuje v19.07.1 i muszę skompilować system imagebuilderem, bo zabrakło mi miejsca smile
Dotychczas wszystko instalowałem na bieżąco, ok. 50 paczek, a jak wiadomo, takie doinstalowywanie zajmuje dużo więcej niż złożenie samemu systemu

17

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

Możesz w duzym skrócie wyjaśnić jak ogarnołeś taki kolorowy banner?

Zyxel T56 /|\ TL Wdr3600 /|\ TL wdr4300 /|\ MiR 3g /|\ ubi Rocket, nb, pb, ns, loco /|\ Netgear R6220 /|\ xiaomi AC2350 /|\ TL c6 v3 /|\ TL 1043 v1 v2 v4 /|\ dn2800mt , N100 /|\  TL DS-P-7001-04/08 /|\ TL SX3016F i kupa innego sprzętu

18

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

echo -e "\e[1;31m This is red text \e[0m"

https://www.oreilly.com/library/view/li … 712d.xhtml

W dużym skrócie.

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

19

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

Jeszcze apropo sysinfo i bannera, jak ktoś robi sysupgrade z różnych snapshotów z zachowaniem konfiguracji, to banner zostaje, a tam siedzi wersja softu.
Wywaliłbym to z bannera i przeniósł do sysinfo.sh.

20

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

batorencjusz napisał/a:

Możesz w duzym skrócie wyjaśnić jak ogarnołeś taki kolorowy banner?

Tutaj masz wiele przykładów:
https://misc.flogisoft.com/bash/tip_col … formatting


Gdybyś korzystał z "watch", użyj flagi "--color":

watch --color -n 1 /parh/to/file.sh

21

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

tinware napisał/a:

Czy kompilacja samego busybox i podmiana w /bin/busybox wystarczyłaby ?

Cezary napisał/a:

Tak. W czym ci ten napis przeszkadza?

Gdzie w kompilatorze znajduje się ten plik od busyboxa i co muszę zmienić, aby wyłączyć ten napis wraz z tymi enterami, który on robi?

22

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

Nie w kompilatorze tylko w konfiguracji busyboxa.

1. Trudniej - wywal kod z ash.c który jest w źródłach busyboxa
2. Łatwiej - włącz opcję CONFIG_BUSYBOX_DEFAULT_FEATURE_SH_EXTRA_QUIET w konfigu openwrt, najpierw musisz włączyć CONFIG_BUSYBOX_CUSTOM. To tez gdzieś tam w menuconfig jest, musisz sobie sam to poszukać gdzie dokładnie. Za dużo jest tego żebym to pamiętał.

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

23

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

Cezary napisał/a:

2. Łatwiej - włącz opcję CONFIG_BUSYBOX_DEFAULT_FEATURE_SH_EXTRA_QUIET w konfigu openwrt, najpierw musisz włączyć CONFIG_BUSYBOX_CUSTOM. To tez gdzieś tam w menuconfig jest, musisz sobie sam to poszukać gdzie dokładnie. Za dużo jest tego żebym to pamiętał.

To się niestety nie udało, nie działa mi ten sposób


Cezary napisał/a:

1. Trudniej - wywal kod z ash.c który jest w źródłach busyboxa

Po zrobieniu kompilacji, edytuje plik ./build_dir/target-mipsel_24kc_musl/busybox-1.30.1/shell/ash.c, od linii 9472 do zakomentowania jest to:

/*
*  out1fmt("\n\n%s %s\n"
*    IF_ASH_HELP("Enter 'help' for a list of built-in commands.\n")
*    "\n",
*    bb_banner,
*    "built-in shell (ash)"
*  );
*/

Dzięki za pomoc smile

24

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

A teraz coś zmienisz, skompiluje się busybox od nowa i stracisz to co zrobiłeś. Robi się łatkę i umieszcza w podkatalogu patchesz tam gdzie masz makefile od busyboxa a nie tak jak zrobiłeś.

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

25

Odp: sysinfo.sh przy własnej kompilacji - 2 problemy

Podasz przykład?