#!/bin/bash # # Copyright (c) Authors: https://www.armbian.com/authors # # This file is licensed under the terms of the GNU General Public # License version 2. This program is licensed "as is" without any # warranty of any kind, whether express or implied. # # BBox (bbox.wtf) — модифицированная версия баннера входа Armbian. # ШАБЛОН. Плейсхолдеры __BBOX_VERSION__ и __BBOX_URL__ подставляются # скриптами установки (init_system.sh / install_scripts.sh). # НЕ РЕДАКТИРОВАТЬ напрямую на устройстве — правится в репозитории # и заменяется при переустановке. THIS_SCRIPT="header" MOTD_DISABLE="" HIDE_IP_PATTERN="^dummy0|^lo|^docker" # Read image configuration [[ -f /etc/armbian-image-release ]] && . /etc/armbian-image-release VENDORTEMP="${VENDOR}" # Read update configuration [[ -f /etc/armbian-release ]] && . /etc/armbian-release # Keep the VENDOR from image if its defined there [[ -n "${VENDORTEMP}" && "${VENDORTEMP}" != "${VENDOR}" ]] && VENDOR="${VENDORTEMP}" # If VENDORPRETTYNAME is defined, used that [[ -n $VENDORPRETTYNAME ]] && VENDOR="$VENDORPRETTYNAME" if [[ -f /etc/armbian-distribution-status ]]; then . /etc/armbian-distribution-status # Fina a way that works [[ -f /etc/lsb-release ]] && DISTRIBUTION_CODENAME=$(grep CODENAME /etc/lsb-release | cut -d"=" -f2) [[ -f /etc/lsb-release ]] && DISTRIBUTION_ID=$(grep DISTRIB_ID /etc/lsb-release | cut -d"=" -f2) [[ -z "$DISTRIBUTION_CODENAME" && -f /etc/os-release ]] && DISTRIBUTION_CODENAME=$(grep VERSION_CODENAME /etc/os-release | cut -d"=" -f2) [[ -z "$DISTRIBUTION_ID" && -f /etc/os-release ]] && DISTRIBUTION_ID=$(grep "^ID" /etc/os-release | cut -d"=" -f2) [[ -z "$DISTRIBUTION_CODENAME" && -x /usr/bin/lsb_release ]] && DISTRIBUTION_CODENAME=$(/usr/bin/lsb_release -c | cut -d":" -f2 | tr -d "\t") [[ -z "$DISTRIBUTION_ID" && -x /usr/bin/lsb_release ]] && DISTRIBUTION_ID=$(/usr/bin/lsb_release -i | cut -d":" -f2 | tr -d "\t") # Read Armbian distribution status DISTRIBUTION_STATUS=$(grep "^${DISTRIBUTION_CODENAME}" /etc/armbian-distribution-status | cut -d"=" -f2 | cut -d";" -f1) # Read upgrade possibilities on stable channel filter=$(grep "supported" /etc/armbian-distribution-status | cut -d"=" -f1) upgrade=$(for j in $filter; do for i in $(grep "^${DISTRIBUTION_CODENAME}" /etc/armbian-distribution-status | cut -d";" -f2 | cut -d"=" -f2 | sed "s/,/ /g"); do if [[ $i == $j ]]; then echo $i fi done done | tail -1) fi [[ -f /etc/default/armbian-motd ]] && . /etc/default/armbian-motd for f in $MOTD_DISABLE; do [[ $f == $THIS_SCRIPT ]] && exit 0 done function get_wan_address() { curl --connect-timeout 2 -s http://whatismyip.akamai.com/ } # get wan ip address function get_ip_addresses() { local ips=() for f in /sys/class/net/*; do local intf=$(basename $f) # match only interface names "dummy0" and "lo" if [[ $intf =~ $HIDE_IP_PATTERN ]]; then continue else local tmp=$(ip -4 addr show dev $intf | grep -v "$intf:avahi" | awk '/inet/ {print $2}' | cut -d'/' -f1 | uniq) # add both name and IP - can be informative but becomes ugly with long persistent/predictable device names #[[ -n $tmp ]] && ips+=("$intf: $tmp") # add IP only [[ -n $tmp ]] && ips+=("$tmp") fi done echo "${ips[@]}" } # get_ip_addresses # Read Armbian kernel version KERNELID=$(uname -r) # Get other variables ip_address=$(get_ip_addresses &) wan_ip_address=$(get_wan_address &) # Display software vendor logo echo -e "\e[1;91m$(figlet -f small " BBox")\e[0m"; # Display version, board, and kernel version [[ $VERSION == *trunk* ]] && VERSION=$(echo -e $VERSION | cut -d"." -f1-2 | sed "s/\$/ rolling/") echo -e " \e[0;92mv__BBOX_VERSION__\x1B[0m __BBOX_URL__ on $BOARD_NAME running \e[0;92m${KERNELID^}\x1B[0m, built on Armbian Linux" echo -e " \e[0;36mCreated by free people for a free world, in the name of privacy and security.\x1B[0m" # render image and board type if [[ "$IMAGE_TYPE" != "stable" ]]; then [[ "$IMAGE_TYPE" == "user-built" ]] && HARDWARE_STATUS="\e[0;91mDIY\x1B[0m (custom image)\x1B[0m" [[ "$IMAGE_TYPE" == "nightly" ]] && HARDWARE_STATUS="\e[0;91mfor advanced users\x1B[0m (rolling release)\x1B[0m" else [[ "$BOARD_TYPE" == "csc" || "$BOARD_TYPE" == "tvb" ]] && HARDWARE_STATUS="\e[0;91mDIY (community maintained)\x1B[0m" [[ "$BOARD_TYPE" == "wip" ]] && HARDWARE_STATUS="\e[0;91mfor advanced users\x1B[0m (work in progress)\x1B[0m" [[ "$BOARD_TYPE" == "eos" ]] && HARDWARE_STATUS="\e[0;91mend of life\x1B[0m" fi # render distribution status if [[ $DISTRIBUTION_STATUS == supported ]]; then DISTRO_STATUS="\e[0;92mstable\e[0m ($DISTRIBUTION_CODENAME)" elif [[ $DISTRIBUTION_STATUS == eos ]]; then DISTRO_STATUS="\e[0;91mend of life\e[0m ($DISTRIBUTION_CODENAME)" else DISTRO_STATUS="\e[0;93mrolling\e[0m ($DISTRIBUTION_CODENAME)" fi # read packages update status NUM_UPDATES=0 NUM_UPDATES_ONHOLD=0 NUM_SECURITY_UPDATES=0 [[ -f /var/cache/apt/archives/updates.number ]] && . /var/cache/apt/archives/updates.number if [[ $NUM_UPDATES -gt 0 ]]; then if apt-mark showhold | grep -q linux-image 2>/dev/null; then UPDATE_STATUS="Kernel upgrade \e[0;91mdisabled\e[0m" else UPDATE_STATUS="Kernel upgrade \e[0;92menabled\e[0m" fi UPDATE_STATUS+=" and \e[1;92m$NUM_UPDATES\e[0m package" # Cosmetic is important [[ $NUM_UPDATES -gt 1 ]] && UPDATE_STATUS+="s" UPDATE_STATUS+=" available for upgrade\e[0m " fi echo "" # Display packages status if [[ -n $DISTRO_STATUS ]]; then if [[ -n "${upgrade}" ]]; then DISTRO_STATUS+=", possible distro upgrade ($upgrade)" fi echo -e " Packages: ${DISTRIBUTION_ID^} ${DISTRO_STATUS}" fi # Display available updates if [[ -n $UPDATE_STATUS ]]; then echo -e " Updates: $UPDATE_STATUS" fi # Display hardware support status if [[ -n $HARDWARE_STATUS ]]; then echo -e " Support: $HARDWARE_STATUS" fi echo -en " IP addresses: \x1B[93m(LAN)\x1B[0m \x1B[92m$ip_address\x1B[0m " if [[ -n $wan_ip_address ]]; then echo -e "\x1B[93m(WAN)\x1B[0m $wan_ip_address" fi echo ""