From 208e8a791bd543d41186664a59fa66f2344be74c Mon Sep 17 00:00:00 2001 From: Ing Date: Sun, 31 Mar 2024 01:52:06 +0800 Subject: [PATCH] fix something --- .github/workflows/issues.yml | 26 +++++++++++--- files/initrd/opt/rr/include/functions.sh | 40 +++++++++++++-------- files/initrd/opt/rr/init.sh | 31 +++++++++------- files/initrd/opt/rr/menu.sh | 39 ++++++++++++-------- localbuild.sh | 46 ++++++++++++++++++++---- 5 files changed, 129 insertions(+), 53 deletions(-) diff --git a/.github/workflows/issues.yml b/.github/workflows/issues.yml index a730b1b3..fe71d0f5 100644 --- a/.github/workflows/issues.yml +++ b/.github/workflows/issues.yml @@ -121,7 +121,7 @@ jobs: - name: Run Build if: env.iscustom == 'true' run: | - # 累了, 毁灭吧 + # 累了, 毁灭吧! REPO=${{ github.server_url }}/${{ github.repository }} MODEL=${{ env.model }} @@ -146,10 +146,28 @@ jobs: export TERM=xterm - sudo ./localbuild.sh init rr rr/rr.img - sudo ./localbuild.sh config ${MODEL} - sudo ./localbuild.sh pack rr/rr.img + sudo ./localbuild.sh init rr/ws rr/rr.img + if [ $? -ne 0 ]; then + echo "init failed" + exit 1 + fi + + # sudo cp -rf files/initrd/opt/rr/* rr/ws/initrd/opt/rr/ + # sudo sed -i "s/set -e/set -ex/" rr/ws/initrd/opt/rr/init.sh + # sudo sed -i '/^alias/i\set -x' rr/ws/initrd/opt/rr/menu.sh + sudo ./localbuild.sh config ${MODEL} + if [ $? -ne 0 ]; then + echo "config failed" + exit 1 + fi + + sudo ./localbuild.sh pack rr/rr.img + if [ $? -ne 0 ]; then + echo "pack failed" + exit 1 + fi + ls rr -al zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.img.zip" -j rr/rr.img diff --git a/files/initrd/opt/rr/include/functions.sh b/files/initrd/opt/rr/include/functions.sh index 21382b7d..b7a05795 100755 --- a/files/initrd/opt/rr/include/functions.sh +++ b/files/initrd/opt/rr/include/functions.sh @@ -114,10 +114,13 @@ function generateMacAddress() { PRE="$(readModelArray "${1}" "serial.macpre")" SUF="$(printf '%02x%02x%02x' $((${RANDOM} % 256)) $((${RANDOM} % 256)) $((${RANDOM} % 256)))" NUM=${2:-1} + MACS="" for I in $(seq 1 ${NUM}); do - printf '%06x%06x' $((0x${PRE:-"001132"})) $(($((0x${SUF})) + ${I})) - [ ${I} -lt ${NUM} ] && printf ' ' + MACS+="$(printf '%06x%06x' $((0x${PRE:-"001132"})) $(($((0x${SUF})) + ${I})))" + [ ${I} -lt ${NUM} ] && MACS+=" " done + echo "${MACS}" + return 0 } ############################################################################### @@ -132,19 +135,16 @@ function validateSerial() { P=${2:4:3} L=${#2} if [ ${L} -ne 13 ]; then - echo 0 - return + return 0 fi echo "${PREFIX}" | grep -q "${S}" if [ $? -eq 1 ]; then - echo 0 - return + return 0 fi if [ "${MIDDLE}" != "${P}" ]; then - echo 0 - return + return 0 fi - echo 1 + return 1 } ############################################################################### @@ -199,13 +199,21 @@ function _set_conf_kv() { # @ - url list function _get_fastest() { local speedlist="" - for I in $@; do - speed=$(ping -c 1 -W 5 ${I} 2>/dev/null | awk '/time=/ {print $7}' | cut -d '=' -f 2) - speedlist+="${I} ${speed:-999}\n" # Assign default value 999 if speed is empty - done + if ! command -v ping >/dev/null 2>&1; then + for I in $@; do + speed=$(ping -c 1 -W 5 ${I} 2>/dev/null | awk -F'[= ]' '/time=/ {for(i=1;i<=NF;i++) if ($i=="time") print $(i+1)}') + speedlist+="${I} ${speed:-999}\n" # Assign default value 999 if speed is empty + done + else + for I in $@; do + speed=$(curl -o /dev/null -s -w '%{time_total}' ${I}) + speed=$(awk "BEGIN {print (${speed:-0.999} * 1000)}") + speedlist+="${I} ${speed:-999}\n" # Assign default value 999 if speed is empty + done + fi fastest="$(echo -e "${speedlist}" | tr -s '\n' | sort -k2n | head -1)" URL="$(echo "${fastest}" | awk '{print $1}')" - SPD="$(echo "${fastest}" | awk '{print $2}')" # It is a float type + SPD="$(echo "${fastest}" | awk '{print $2}')" # It is a float type echo "${URL}" [ $(printf "%.0f" ${SPD:-999}) -ge 999 ] && return 1 || return 0 } @@ -275,6 +283,7 @@ EOF done rm -f ${TMP_PATH}/ethlist + return 0 } ############################################################################### @@ -289,6 +298,7 @@ function getBus() { # usb/scsi(sata/ide)/virtio(scsi/virtio)/mmc/nvme [ -z "${BUS}" ] && BUS=$(lsblk -dpno KNAME,SUBSYSTEMS 2>/dev/null | grep "${1} " | awk -F':' '{print $(NF-1)}' | sed 's/_host//') #Spaces are intentional echo "${BUS}" + return 0 } ############################################################################### @@ -304,6 +314,7 @@ function getIP() { [ -z "${IP}" ] && IP=$(ip addr show scope global 2>/dev/null | grep -E "inet .* eth" | awk '{print $2}' | cut -f1 -d'/' | head -1) fi echo "${IP}" + return 0 } ############################################################################### @@ -357,4 +368,5 @@ function connectwlanif() { rm -f /var/run/wpa_supplicant.pid.${1} fi wpa_supplicant -i ${1} -c "${CONF}" -B -P "/var/run/wpa_supplicant.pid.${1}" >/dev/null 2>&1 + return 0 } diff --git a/files/initrd/opt/rr/init.sh b/files/initrd/opt/rr/init.sh index b1f3bbc7..23aeeb2d 100755 --- a/files/initrd/opt/rr/init.sh +++ b/files/initrd/opt/rr/init.sh @@ -61,18 +61,20 @@ initConfigKey "addons.mountloader" "" "${USER_CONFIG_FILE}" initConfigKey "addons.reboottoloader" "" "${USER_CONFIG_FILE}" initConfigKey "modules" "{}" "${USER_CONFIG_FILE}" -# _sort_netif "$(readConfigKey "addons.sortnetif" "${USER_CONFIG_FILE}")" +if [ ! "LOCALBUILD" = "${LOADER_DISK}" ]; then + # _sort_netif "$(readConfigKey "addons.sortnetif" "${USER_CONFIG_FILE}")" -for ETH in ${ETHX}; do - [ "${ETH::4}" = "wlan" ] && connectwlanif "${ETH}" && sleep 1 - MACR="$(cat /sys/class/net/${ETH}/address 2>/dev/null | sed 's/://g')" - IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")" - if [ -n "${IPR}" ]; then - ip addr add ${IPC}/24 dev ${ETH} - sleep 1 - fi - [ "${ETH::3}" = "eth" ] && ethtool -s ${ETH} wol g 2>/dev/null -done + for ETH in ${ETHX}; do + [ "${ETH::4}" = "wlan" ] && connectwlanif "${ETH}" && sleep 1 + MACR="$(cat /sys/class/net/${ETH}/address 2>/dev/null | sed 's/://g')" + IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")" + if [ -n "${IPR}" ]; then + ip addr add ${IPC}/24 dev ${ETH} + sleep 1 + fi + [ "${ETH::3}" = "eth" ] && ethtool -s ${ETH} wol g 2>/dev/null || true + done +fi # Get the VID/PID if we are in USB VID="0x46f4" @@ -80,11 +82,12 @@ PID="0x0001" TYPE="DoM" BUS=$(getBus "${LOADER_DISK}") +BUSLIST="usb sata scsi nvme mmc" if [ "${BUS}" = "usb" ]; then VID="0x$(udevadm info --query property --name ${LOADER_DISK} 2>/dev/null | grep ID_VENDOR_ID | cut -d= -f2)" PID="0x$(udevadm info --query property --name ${LOADER_DISK} 2>/dev/null | grep ID_MODEL_ID | cut -d= -f2)" TYPE="flashdisk" -elif [ "${BUS}" != "sata" -a "${BUS}" != "scsi" -a "${BUS}" != "nvme" -a "${BUS}" != "mmc" ]; then +elif ! echo "${BUSLIST}" | grep -wq "${BUS}"; then if [ "LOCALBUILD" = "${LOADER_DISK}" ]; then echo "LOCALBUILD MODE" TYPE="PC" @@ -187,7 +190,7 @@ echo -e "$(TEXT "Default SSH \033[1;31mroot\033[0m password is") \033[1;31mrr\03 echo DSMLOGO="$(readConfigKey "dsmlogo" "${USER_CONFIG_FILE}")" -if [ "${DSMLOGO}" = "true" -a -c "/dev/fb0" ]; then +if [ "${DSMLOGO}" = "true" -a -c "/dev/fb0" -a ! "LOCALBUILD" = "${LOADER_DISK}" ]; then IP="$(getIP)" [ -n "${IP}" ] && URL="http://${IP}:7681" || URL="http://rr:7681/" python ${WORK_PATH}/include/functions.py makeqr -d "${URL}" -l "0" -o "${TMP_PATH}/qrcode_init.png" @@ -207,3 +210,5 @@ mkdir -p "${CKS_PATH}" mkdir -p "${LKMS_PATH}" mkdir -p "${ADDONS_PATH}" mkdir -p "${MODULES_PATH}" + +exit 0 diff --git a/files/initrd/opt/rr/menu.sh b/files/initrd/opt/rr/menu.sh index 38515b4c..f93ab740 100755 --- a/files/initrd/opt/rr/menu.sh +++ b/files/initrd/opt/rr/menu.sh @@ -221,8 +221,8 @@ function modelMenu() { writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}" writeConfigKey "kernel" "official" "${USER_CONFIG_FILE}" # Remove old files - rm -f "${ORI_ZIMAGE_FILE}" "${ORI_RDGZ_FILE}" "${MOD_ZIMAGE_FILE}" "${MOD_RDGZ_FILE}" >/dev/null 2>&1 - rm -f "${PART1_PATH}/grub_cksum.syno" "${PART1_PATH}/GRUB_VER" "${PART2_PATH}/"* >/dev/null 2>&1 + rm -f "${ORI_ZIMAGE_FILE}" "${ORI_RDGZ_FILE}" "${MOD_ZIMAGE_FILE}" "${MOD_RDGZ_FILE}" >/dev/null 2>&1 || true + rm -f "${PART1_PATH}/grub_cksum.syno" "${PART1_PATH}/GRUB_VER" "${PART2_PATH}/"* >/dev/null 2>&1 || true touch ${PART1_PATH}/.build fi return 0 @@ -362,8 +362,8 @@ function productversMenu() { writeConfigKey "modules.\"${ID}\"" "" "${USER_CONFIG_FILE}" done <<<$(getAllModules "${PLATFORM}" "$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}") # Remove old files - rm -f "${ORI_ZIMAGE_FILE}" "${ORI_RDGZ_FILE}" "${MOD_ZIMAGE_FILE}" "${MOD_RDGZ_FILE}" >/dev/null 2>&1 - rm -f "${PART1_PATH}/grub_cksum.syno" "${PART1_PATH}/GRUB_VER" "${PART2_PATH}/"* >/dev/null 2>&1 + rm -f "${ORI_ZIMAGE_FILE}" "${ORI_RDGZ_FILE}" "${MOD_ZIMAGE_FILE}" "${MOD_RDGZ_FILE}" >/dev/null 2>&1 || true + rm -f "${PART1_PATH}/grub_cksum.syno" "${PART1_PATH}/GRUB_VER" "${PART2_PATH}/"* >/dev/null 2>&1 || true touch ${PART1_PATH}/.build return 0 } @@ -496,8 +496,8 @@ function ParsePat() { done <<<$(getAllModules "${PLATFORM}" "$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}") # Remove old files - rm -f "${ORI_ZIMAGE_FILE}" "${ORI_RDGZ_FILE}" "${MOD_ZIMAGE_FILE}" "${MOD_RDGZ_FILE}" >/dev/null 2>&1 - rm -f "${PART1_PATH}/grub_cksum.syno" "${PART1_PATH}/GRUB_VER" "${PART2_PATH}/"* >/dev/null 2>&1 + rm -f "${ORI_ZIMAGE_FILE}" "${ORI_RDGZ_FILE}" "${MOD_ZIMAGE_FILE}" "${MOD_RDGZ_FILE}" >/dev/null 2>&1 || true + rm -f "${PART1_PATH}/grub_cksum.syno" "${PART1_PATH}/GRUB_VER" "${PART2_PATH}/"* >/dev/null 2>&1 || true touch ${PART1_PATH}/.build break done 2>&1 | DIALOG --title "$(TEXT "Main menu")" \ @@ -953,7 +953,8 @@ function cmdlineMenu() { ;; 3) # extra-button sn=$(generateSerial "${MODEL}") - MACS=($(generateMacAddress "${MODEL}" 2)) + NETIF_NUM=2 + MACS=($(generateMacAddress "${MODEL}" ${NETIF_NUM})) mac1=${MACS[0]} mac2=${MACS[1]} ;; @@ -1159,7 +1160,7 @@ function extractPatFiles() { fi # Uses the extractor to untar pat file echo "$(TEXT "Extracting ...")" - LD_LIBRARY_PATH=${EXTRACTOR_PATH} "${EXTRACTOR_PATH}/${EXTRACTOR_BIN}" "${PAT_PATH}" "${EXT_PATH}" || true + LD_LIBRARY_PATH=${EXTRACTOR_PATH} "${EXTRACTOR_PATH}/${EXTRACTOR_BIN}" "${PAT_PATH}" "${EXT_PATH}" >"${LOG_FILE}" 2>&1 else echo "$(TEXT "Extracting ...")" tar -xf "${PAT_PATH}" -C "${EXT_PATH}" >"${LOG_FILE}" 2>&1 @@ -1289,7 +1290,7 @@ function make() { function __make() { if [ ! -f "${ORI_ZIMAGE_FILE}" -o ! -f "${ORI_RDGZ_FILE}" ]; then extractDsmFiles - [ $? -ne 0 ] && break + [ $? -ne 0 ] && return 1 fi while true; do @@ -1325,11 +1326,15 @@ function make() { if [ ! "${1}" = "-1" ]; then __make 2>&1 | DIALOG --title "$(TEXT "Main menu")" \ --progressbox "$(TEXT "Making ... ('ctrl + c' to exit)")" 20 100 + else + __make fi if [ -f "${LOG_FILE}" ]; then if [ ! "${1}" = "-1" ]; then DIALOG --title "$(TEXT "Error")" \ --msgbox "$(cat ${LOG_FILE})" 0 0 + else + cat "${LOG_FILE}" fi rm -f "${LOG_FILE}" return 1 @@ -3205,12 +3210,17 @@ function updateMenu() { ############################################################################### function cleanCache() { - ( + if [ ! "${1}" = "-1" ]; then + ( + rm -rfv "${PART3_PATH}/dl/"* + rm -rfv "${TMP_PATH}/"* + ) 2>&1 | DIALOG --title "$(TEXT "Main menu")" \ + --progressbox "$(TEXT "Cleaning cache ...")" 20 100 + else rm -rfv "${PART3_PATH}/dl/"* rm -rfv "${TMP_PATH}/"* - ) 2>&1 | DIALOG --title "$(TEXT "Main menu")" \ - --progressbox "$(TEXT "Cleaning cache ...")" 20 100 - return + fi + return 0 } ############################################################################### @@ -3344,8 +3354,7 @@ else NEXT="m" ;; c) - DIALOG \ - --prgbox "rm -rfv \"${PART3_PATH}/dl/\"*" 0 0 + cleanCache NEXT="d" ;; p) diff --git a/localbuild.sh b/localbuild.sh index e96d14d9..e47ed188 100755 --- a/localbuild.sh +++ b/localbuild.sh @@ -50,9 +50,19 @@ function init() { mkdir -p "/tmp/mnt/p1" mkdir -p "/tmp/mnt/p2" mkdir -p "/tmp/mnt/p3" - sudo mount ${LOOPX}p1 "/tmp/mnt/p1" - sudo mount ${LOOPX}p2 "/tmp/mnt/p2" - sudo mount ${LOOPX}p3 "/tmp/mnt/p3" + sudo mount ${LOOPX}p1 "/tmp/mnt/p1" || ( + echo -e "Can't mount ${LOOPX}p1." + exit 1 + ) + + sudo mount ${LOOPX}p2 "/tmp/mnt/p2" || ( + echo -e "Can't mount ${LOOPX}p2." + exit 1 + ) + sudo mount ${LOOPX}p3 "/tmp/mnt/p3" || ( + echo -e "Can't mount ${LOOPX}p3." + exit 1 + ) echo "Create WORKSPACE" rm -rf "${WORKSPACE}" @@ -75,6 +85,11 @@ function init() { rm -rf "/tmp/mnt/p3" sudo losetup --detach ${LOOPX} + if [ ! -f "${WORKSPACE}/initrd/opt/rr/init.sh" ] || ! [ -f "${WORKSPACE}/initrd/opt/rr/menu.sh" ]; then + echo "initrd decompression failed." + exit 1 + fi + rm -f $(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)/rr.env echo "export LOADER_DISK=\"LOCALBUILD\"" >>$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)/rr.env echo "export CHROOT_PATH=\"${WORKSPACE}\"" >>$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)/rr.env @@ -91,16 +106,24 @@ function config() { pushd "${CHROOT_PATH}/initrd/opt/rr" while true; do if [ -z "${1}" ]; then + echo "init" ./init.sh || break + echo "menu" ./menu.sh || break else + echo "init" ./init.sh || break + echo "model" ./menu.sh modelMenu "${1}" || break + echo "version" ./menu.sh productversMenu "7.2" || break + echo "build" ./menu.sh make -1 || break - ./menu.sh cleanCache || break + echo "clean" + ./menu.sh cleanCache -1 || break RET=0 fi + break done popd [ ${RET} -ne 0 ] && echo "Failed." || echo "Success." @@ -130,9 +153,18 @@ function pack() { mkdir -p "/tmp/mnt/p1" mkdir -p "/tmp/mnt/p2" mkdir -p "/tmp/mnt/p3" - sudo mount ${LOOPX}p1 "/tmp/mnt/p1" - sudo mount ${LOOPX}p2 "/tmp/mnt/p2" - sudo mount ${LOOPX}p3 "/tmp/mnt/p3" + sudo mount ${LOOPX}p1 "/tmp/mnt/p1" || ( + echo -e "Can't mount ${LOOPX}p1." + exit 1 + ) + sudo mount ${LOOPX}p2 "/tmp/mnt/p2" || ( + echo -e "Can't mount ${LOOPX}p1." + exit 1 + ) + sudo mount ${LOOPX}p3 "/tmp/mnt/p3" || ( + echo -e "Can't mount ${LOOPX}p1." + exit 1 + ) echo "Pack image file" cp -af "${CHROOT_PATH}/mnt/p1/.locale" "/tmp/mnt/p1" 2>/dev/null