diff --git a/files/initrd/opt/arc/arc.sh b/files/initrd/opt/arc/arc.sh index 27ddf569..ab34720c 100755 --- a/files/initrd/opt/arc/arc.sh +++ b/files/initrd/opt/arc/arc.sh @@ -359,7 +359,6 @@ function arcsettings() { fi # Get Portmap for Loader getmap - getportmap # Check Warnings if [ ${WARNON} -eq 1 ]; then dialog --backtitle "$(backtitle)" --title "Arc Warning" \ @@ -1711,7 +1710,6 @@ function storageMenu() { DT="$(readModelKey "${MODEL}" "dt")" # Get Portmap for Loader getmap - getportmap writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}" BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")" } diff --git a/files/initrd/opt/arc/include/storage.sh b/files/initrd/opt/arc/include/storage.sh index e8a8cdec..44f45bdd 100755 --- a/files/initrd/opt/arc/include/storage.sh +++ b/files/initrd/opt/arc/include/storage.sh @@ -1,70 +1,67 @@ # Get PortMap for Loader function getmap() { - if [ ! "${DT}" = "true" ]; then + if [ ! "${DT}" = "true" ] && [ ${SATACONTROLLER} -gt 0 ]; then + # Clean old files + [ -f "${TMP_PATH}/drivesmax" ] && rm -f "${TMP_PATH}/drivesmax" + touch "${TMP_PATH}/drivesmax" + [ -f "${TMP_PATH}/drivescon" ] && rm -f "${TMP_PATH}/drivescon" + touch "${TMP_PATH}/drivescon" + [ -f "${TMP_PATH}/ports" ] && rm -f "${TMP_PATH}/ports" + touch "${TMP_PATH}ports" + [ -f "${TMP_PATH}/remap" ] && rm -f "${TMP_PATH}/remap" + touch "${TMP_PATH}/remap" # Sata Disks SATADRIVES=0 - if [ ${SATACONTROLLER} -gt 0 ]; then - # Clean old files - [ -f "${TMP_PATH}/drivesmax" ] && rm -f "${TMP_PATH}/drivesmax" - touch "${TMP_PATH}/drivesmax" - [ -f "${TMP_PATH}/drivescon" ] && rm -f "${TMP_PATH}/drivescon" - touch "${TMP_PATH}/drivescon" - [ -f "${TMP_PATH}/ports" ] && rm -f "${TMP_PATH}/ports" - touch "${TMP_PATH}ports" - [ -f "${TMP_PATH}/remap" ] && rm -f "${TMP_PATH}/remap" - touch "${TMP_PATH}/remap" - # Do the work - let DISKIDXMAPIDX=0 - DISKIDXMAP="" - let DISKIDXMAPIDXMAX=0 - DISKIDXMAPMAX="" - for PCI in $(lspci -d ::106 | awk '{print $1}'); do - NUMPORTS=0 - CONPORTS=0 - unset HOSTPORTS - declare -A HOSTPORTS - while read -r LINE; do - ATAPORT="$(echo ${LINE} | grep -o 'ata[0-9]*')" - PORT=$(echo ${ATAPORT} | sed 's/ata//') - HOSTPORTS[${PORT}]=$(echo ${LINE} | grep -o 'host[0-9]*$') - done < <(ls -l /sys/class/scsi_host | grep -F "${PCI}") - while read -r PORT; do - ls -l /sys/block | grep -F -q "${PCI}/ata${PORT}" && ATTACH=1 || ATTACH=0 - PCMD=$(cat /sys/class/scsi_host/${HOSTPORTS[${PORT}]}/ahci_port_cmd) - [ ${PCMD} = 0 ] && DUMMY=1 || DUMMY=0 - [ ${ATTACH} = 1 ] && CONPORTS=$((${CONPORTS} + 1)) && echo "$((${PORT} - 1))" >>"${TMP_PATH}/ports" - [ ${DUMMY} = 1 ] # Do nothing for now - NUMPORTS=$((${NUMPORTS} + 1)) - done < <(echo ${!HOSTPORTS[@]} | tr ' ' '\n' | sort -n) - [ ${NUMPORTS} -gt 8 ] && NUMPORTS=8 - [ ${CONPORTS} -gt 8 ] && CONPORTS=8 - echo -n "${NUMPORTS}" >>"${TMP_PATH}/drivesmax" - echo -n "${CONPORTS}" >>"${TMP_PATH}/drivescon" - DISKIDXMAP=$DISKIDXMAP$(printf "%02x" $DISKIDXMAPIDX) - let DISKIDXMAPIDX=$DISKIDXMAPIDX+$CONPORTS - DISKIDXMAPMAX=$DISKIDXMAPMAX$(printf "%02x" $DISKIDXMAPIDXMAX) - let DISKIDXMAPIDXMAX=$DISKIDXMAPIDXMAX+$NUMPORTS - SATADRIVES=$((${SATADRIVES} + ${CONPORTS})) - done - SATAPORTMAPMAX="$(<"${TMP_PATH}/drivesmax")" - SATAPORTMAP="$(<"${TMP_PATH}/drivescon")" - LASTDRIVE=0 - # Check for VM + let DISKIDXMAPIDX=0 + DISKIDXMAP="" + let DISKIDXMAPIDXMAX=0 + DISKIDXMAPMAX="" + for PCI in $(lspci -d ::106 | awk '{print $1}'); do + NUMPORTS=0 + CONPORTS=0 + unset HOSTPORTS + declare -A HOSTPORTS while read -r LINE; do - if [[ "${BUS}" != "usb" && ${LINE} -eq 0 && "${LOADER_DISK}" = "/dev/sda" ]]; then - MAXDISKS="$(readModelKey "${MODEL}" "disks")" - if [ ${MAXDISKS} -lt ${SATADRIVES} ]; then - MAXDISKS=${SATADRIVES} - fi - echo -n "${LINE}>${MAXDISKS}:" >>"${TMP_PATH}/remap" - elif [ ! ${LINE} = ${LASTDRIVE} ]; then - echo -n "${LINE}>${LASTDRIVE}:" >>"${TMP_PATH}/remap" - LASTDRIVE=$((${LASTDRIVE} + 1)) - elif [ ${LINE} = ${LASTDRIVE} ]; then - LASTDRIVE=$((${LINE} + 1)) + ATAPORT="$(echo ${LINE} | grep -o 'ata[0-9]*')" + PORT=$(echo ${ATAPORT} | sed 's/ata//') + HOSTPORTS[${PORT}]=$(echo ${LINE} | grep -o 'host[0-9]*$') + done < <(ls -l /sys/class/scsi_host | grep -F "${PCI}") + while read -r PORT; do + ls -l /sys/block | grep -F -q "${PCI}/ata${PORT}" && ATTACH=1 || ATTACH=0 + PCMD=$(cat /sys/class/scsi_host/${HOSTPORTS[${PORT}]}/ahci_port_cmd) + [ ${PCMD} = 0 ] && DUMMY=1 || DUMMY=0 + [ ${ATTACH} = 1 ] && CONPORTS=$((${CONPORTS} + 1)) && echo "$((${PORT} - 1))" >>"${TMP_PATH}/ports" + [ ${DUMMY} = 1 ] # Do nothing for now + NUMPORTS=$((${NUMPORTS} + 1)) + done < <(echo ${!HOSTPORTS[@]} | tr ' ' '\n' | sort -n) + [ ${NUMPORTS} -gt 8 ] && NUMPORTS=8 + [ ${CONPORTS} -gt 8 ] && CONPORTS=8 + echo -n "${NUMPORTS}" >>"${TMP_PATH}/drivesmax" + echo -n "${CONPORTS}" >>"${TMP_PATH}/drivescon" + DISKIDXMAP=$DISKIDXMAP$(printf "%02x" $DISKIDXMAPIDX) + let DISKIDXMAPIDX=$DISKIDXMAPIDX+$CONPORTS + DISKIDXMAPMAX=$DISKIDXMAPMAX$(printf "%02x" $DISKIDXMAPIDXMAX) + let DISKIDXMAPIDXMAX=$DISKIDXMAPIDXMAX+$NUMPORTS + SATADRIVES=$((${SATADRIVES} + ${CONPORTS})) + done + SATAPORTMAPMAX="$(<"${TMP_PATH}/drivesmax")" + SATAPORTMAP="$(<"${TMP_PATH}/drivescon")" + LASTDRIVE=0 + # Check for VM + while read -r LINE; do + if [[ "${BUS}" != "usb" && ${LINE} -eq 0 && "${LOADER_DISK}" = "/dev/sda" ]]; then + MAXDISKS="$(readModelKey "${MODEL}" "disks")" + if [ ${MAXDISKS} -lt ${SATADRIVES} ]; then + MAXDISKS=${SATADRIVES} fi - done < <(cat "${TMP_PATH}/ports") - fi + echo -n "${LINE}>${MAXDISKS}:" >>"${TMP_PATH}/remap" + elif [ ! ${LINE} = ${LASTDRIVE} ]; then + echo -n "${LINE}>${LASTDRIVE}:" >>"${TMP_PATH}/remap" + LASTDRIVE=$((${LASTDRIVE} + 1)) + elif [ ${LINE} = ${LASTDRIVE} ]; then + LASTDRIVE=$((${LINE} + 1)) + fi + done < <(cat "${TMP_PATH}/ports") # SAS Disks SASDRIVES=0 if [ $(lspci -d ::107 | wc -l) -gt 0 ]; then @@ -131,16 +128,12 @@ function getmap() { dialog --backtitle "$(backtitle)" --colors --title "Arc Disks" \ --msgbox "${TEXT}" 0 0 fi - fi -} -function getportmap() { - # Compute PortMap Options - if [ ${SATACONTROLLER} -gt 0 ]; then + # Compute PortMap Options SATAREMAP="$(awk '{print $1}' "${TMP_PATH}/remap" | sed 's/.$//')" # Show recommended Option to user - if [[ -n "${SATAREMAP}" && ( ${SASCONTROLLER} -eq 0 && ${SCSICONTROLLER} -eq 0 )]]; then + if [[ -n "${SATAREMAP}" && ${SASCONTROLLER} -eq 0 && ${SCSICONTROLLER} -eq 0 ]]; then REMAP3="*" - elif [[ -n "${SATAREMAP}" && ( ${SASCONTROLLER} -gt 0 || ${SCSICONTROLLER} -gt 0 ) && "${MACHINE}" = "NATIVE" ]]; then + elif [ -n "${SATAREMAP}" ] && [[ ${SASCONTROLLER} -gt 0 || ${SCSICONTROLLER} -gt 0 ]] && [ "${MACHINE}" = "NATIVE" ]; then REMAP2="*" else REMAP1="*"