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 0Problem ogólnie występuje od kilkunastu/dziesięciu rewizji wstecz, ale nie miałem wcześniej czasu by o tym pisać.
