fix something

This commit is contained in:
Ing 2024-03-31 01:52:06 +08:00
parent d1a498a421
commit 208e8a791b
5 changed files with 129 additions and 53 deletions

View File

@ -121,7 +121,7 @@ jobs:
- name: Run Build - name: Run Build
if: env.iscustom == 'true' if: env.iscustom == 'true'
run: | run: |
# 累了, 毁灭吧 # 累了, 毁灭吧!
REPO=${{ github.server_url }}/${{ github.repository }} REPO=${{ github.server_url }}/${{ github.repository }}
MODEL=${{ env.model }} MODEL=${{ env.model }}
@ -146,9 +146,27 @@ jobs:
export TERM=xterm export TERM=xterm
sudo ./localbuild.sh init rr 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} sudo ./localbuild.sh config ${MODEL}
if [ $? -ne 0 ]; then
echo "config failed"
exit 1
fi
sudo ./localbuild.sh pack rr/rr.img sudo ./localbuild.sh pack rr/rr.img
if [ $? -ne 0 ]; then
echo "pack failed"
exit 1
fi
ls rr -al ls rr -al
zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.img.zip" -j rr/rr.img zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.img.zip" -j rr/rr.img

View File

@ -114,10 +114,13 @@ function generateMacAddress() {
PRE="$(readModelArray "${1}" "serial.macpre")" PRE="$(readModelArray "${1}" "serial.macpre")"
SUF="$(printf '%02x%02x%02x' $((${RANDOM} % 256)) $((${RANDOM} % 256)) $((${RANDOM} % 256)))" SUF="$(printf '%02x%02x%02x' $((${RANDOM} % 256)) $((${RANDOM} % 256)) $((${RANDOM} % 256)))"
NUM=${2:-1} NUM=${2:-1}
MACS=""
for I in $(seq 1 ${NUM}); do for I in $(seq 1 ${NUM}); do
printf '%06x%06x' $((0x${PRE:-"001132"})) $(($((0x${SUF})) + ${I})) MACS+="$(printf '%06x%06x' $((0x${PRE:-"001132"})) $(($((0x${SUF})) + ${I})))"
[ ${I} -lt ${NUM} ] && printf ' ' [ ${I} -lt ${NUM} ] && MACS+=" "
done done
echo "${MACS}"
return 0
} }
############################################################################### ###############################################################################
@ -132,19 +135,16 @@ function validateSerial() {
P=${2:4:3} P=${2:4:3}
L=${#2} L=${#2}
if [ ${L} -ne 13 ]; then if [ ${L} -ne 13 ]; then
echo 0 return 0
return
fi fi
echo "${PREFIX}" | grep -q "${S}" echo "${PREFIX}" | grep -q "${S}"
if [ $? -eq 1 ]; then if [ $? -eq 1 ]; then
echo 0 return 0
return
fi fi
if [ "${MIDDLE}" != "${P}" ]; then if [ "${MIDDLE}" != "${P}" ]; then
echo 0 return 0
return
fi fi
echo 1 return 1
} }
############################################################################### ###############################################################################
@ -199,13 +199,21 @@ function _set_conf_kv() {
# @ - url list # @ - url list
function _get_fastest() { function _get_fastest() {
local speedlist="" local speedlist=""
for I in $@; do if ! command -v ping >/dev/null 2>&1; then
speed=$(ping -c 1 -W 5 ${I} 2>/dev/null | awk '/time=/ {print $7}' | cut -d '=' -f 2) for I in $@; do
speedlist+="${I} ${speed:-999}\n" # Assign default value 999 if speed is empty 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)}')
done 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)" fastest="$(echo -e "${speedlist}" | tr -s '\n' | sort -k2n | head -1)"
URL="$(echo "${fastest}" | awk '{print $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}" echo "${URL}"
[ $(printf "%.0f" ${SPD:-999}) -ge 999 ] && return 1 || return 0 [ $(printf "%.0f" ${SPD:-999}) -ge 999 ] && return 1 || return 0
} }
@ -275,6 +283,7 @@ EOF
done done
rm -f ${TMP_PATH}/ethlist rm -f ${TMP_PATH}/ethlist
return 0
} }
############################################################################### ###############################################################################
@ -289,6 +298,7 @@ function getBus() {
# usb/scsi(sata/ide)/virtio(scsi/virtio)/mmc/nvme # 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 [ -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}" 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) [ -z "${IP}" ] && IP=$(ip addr show scope global 2>/dev/null | grep -E "inet .* eth" | awk '{print $2}' | cut -f1 -d'/' | head -1)
fi fi
echo "${IP}" echo "${IP}"
return 0
} }
############################################################################### ###############################################################################
@ -357,4 +368,5 @@ function connectwlanif() {
rm -f /var/run/wpa_supplicant.pid.${1} rm -f /var/run/wpa_supplicant.pid.${1}
fi fi
wpa_supplicant -i ${1} -c "${CONF}" -B -P "/var/run/wpa_supplicant.pid.${1}" >/dev/null 2>&1 wpa_supplicant -i ${1} -c "${CONF}" -B -P "/var/run/wpa_supplicant.pid.${1}" >/dev/null 2>&1
return 0
} }

View File

@ -61,18 +61,20 @@ initConfigKey "addons.mountloader" "" "${USER_CONFIG_FILE}"
initConfigKey "addons.reboottoloader" "" "${USER_CONFIG_FILE}" initConfigKey "addons.reboottoloader" "" "${USER_CONFIG_FILE}"
initConfigKey "modules" "{}" "${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 for ETH in ${ETHX}; do
[ "${ETH::4}" = "wlan" ] && connectwlanif "${ETH}" && sleep 1 [ "${ETH::4}" = "wlan" ] && connectwlanif "${ETH}" && sleep 1
MACR="$(cat /sys/class/net/${ETH}/address 2>/dev/null | sed 's/://g')" MACR="$(cat /sys/class/net/${ETH}/address 2>/dev/null | sed 's/://g')"
IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")" IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")"
if [ -n "${IPR}" ]; then if [ -n "${IPR}" ]; then
ip addr add ${IPC}/24 dev ${ETH} ip addr add ${IPC}/24 dev ${ETH}
sleep 1 sleep 1
fi fi
[ "${ETH::3}" = "eth" ] && ethtool -s ${ETH} wol g 2>/dev/null [ "${ETH::3}" = "eth" ] && ethtool -s ${ETH} wol g 2>/dev/null || true
done done
fi
# Get the VID/PID if we are in USB # Get the VID/PID if we are in USB
VID="0x46f4" VID="0x46f4"
@ -80,11 +82,12 @@ PID="0x0001"
TYPE="DoM" TYPE="DoM"
BUS=$(getBus "${LOADER_DISK}") BUS=$(getBus "${LOADER_DISK}")
BUSLIST="usb sata scsi nvme mmc"
if [ "${BUS}" = "usb" ]; then if [ "${BUS}" = "usb" ]; then
VID="0x$(udevadm info --query property --name ${LOADER_DISK} 2>/dev/null | grep ID_VENDOR_ID | cut -d= -f2)" 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)" PID="0x$(udevadm info --query property --name ${LOADER_DISK} 2>/dev/null | grep ID_MODEL_ID | cut -d= -f2)"
TYPE="flashdisk" 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 if [ "LOCALBUILD" = "${LOADER_DISK}" ]; then
echo "LOCALBUILD MODE" echo "LOCALBUILD MODE"
TYPE="PC" TYPE="PC"
@ -187,7 +190,7 @@ echo -e "$(TEXT "Default SSH \033[1;31mroot\033[0m password is") \033[1;31mrr\03
echo echo
DSMLOGO="$(readConfigKey "dsmlogo" "${USER_CONFIG_FILE}")" 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)" IP="$(getIP)"
[ -n "${IP}" ] && URL="http://${IP}:7681" || URL="http://rr:7681/" [ -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" 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 "${LKMS_PATH}"
mkdir -p "${ADDONS_PATH}" mkdir -p "${ADDONS_PATH}"
mkdir -p "${MODULES_PATH}" mkdir -p "${MODULES_PATH}"
exit 0

View File

@ -221,8 +221,8 @@ function modelMenu() {
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}" writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
writeConfigKey "kernel" "official" "${USER_CONFIG_FILE}" writeConfigKey "kernel" "official" "${USER_CONFIG_FILE}"
# Remove old files # Remove old files
rm -f "${ORI_ZIMAGE_FILE}" "${ORI_RDGZ_FILE}" "${MOD_ZIMAGE_FILE}" "${MOD_RDGZ_FILE}" >/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 rm -f "${PART1_PATH}/grub_cksum.syno" "${PART1_PATH}/GRUB_VER" "${PART2_PATH}/"* >/dev/null 2>&1 || true
touch ${PART1_PATH}/.build touch ${PART1_PATH}/.build
fi fi
return 0 return 0
@ -362,8 +362,8 @@ function productversMenu() {
writeConfigKey "modules.\"${ID}\"" "" "${USER_CONFIG_FILE}" writeConfigKey "modules.\"${ID}\"" "" "${USER_CONFIG_FILE}"
done <<<$(getAllModules "${PLATFORM}" "$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}") done <<<$(getAllModules "${PLATFORM}" "$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}")
# Remove old files # Remove old files
rm -f "${ORI_ZIMAGE_FILE}" "${ORI_RDGZ_FILE}" "${MOD_ZIMAGE_FILE}" "${MOD_RDGZ_FILE}" >/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 rm -f "${PART1_PATH}/grub_cksum.syno" "${PART1_PATH}/GRUB_VER" "${PART2_PATH}/"* >/dev/null 2>&1 || true
touch ${PART1_PATH}/.build touch ${PART1_PATH}/.build
return 0 return 0
} }
@ -496,8 +496,8 @@ function ParsePat() {
done <<<$(getAllModules "${PLATFORM}" "$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}") done <<<$(getAllModules "${PLATFORM}" "$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}")
# Remove old files # Remove old files
rm -f "${ORI_ZIMAGE_FILE}" "${ORI_RDGZ_FILE}" "${MOD_ZIMAGE_FILE}" "${MOD_RDGZ_FILE}" >/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 rm -f "${PART1_PATH}/grub_cksum.syno" "${PART1_PATH}/GRUB_VER" "${PART2_PATH}/"* >/dev/null 2>&1 || true
touch ${PART1_PATH}/.build touch ${PART1_PATH}/.build
break break
done 2>&1 | DIALOG --title "$(TEXT "Main menu")" \ done 2>&1 | DIALOG --title "$(TEXT "Main menu")" \
@ -953,7 +953,8 @@ function cmdlineMenu() {
;; ;;
3) # extra-button 3) # extra-button
sn=$(generateSerial "${MODEL}") sn=$(generateSerial "${MODEL}")
MACS=($(generateMacAddress "${MODEL}" 2)) NETIF_NUM=2
MACS=($(generateMacAddress "${MODEL}" ${NETIF_NUM}))
mac1=${MACS[0]} mac1=${MACS[0]}
mac2=${MACS[1]} mac2=${MACS[1]}
;; ;;
@ -1159,7 +1160,7 @@ function extractPatFiles() {
fi fi
# Uses the extractor to untar pat file # Uses the extractor to untar pat file
echo "$(TEXT "Extracting ...")" 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 else
echo "$(TEXT "Extracting ...")" echo "$(TEXT "Extracting ...")"
tar -xf "${PAT_PATH}" -C "${EXT_PATH}" >"${LOG_FILE}" 2>&1 tar -xf "${PAT_PATH}" -C "${EXT_PATH}" >"${LOG_FILE}" 2>&1
@ -1289,7 +1290,7 @@ function make() {
function __make() { function __make() {
if [ ! -f "${ORI_ZIMAGE_FILE}" -o ! -f "${ORI_RDGZ_FILE}" ]; then if [ ! -f "${ORI_ZIMAGE_FILE}" -o ! -f "${ORI_RDGZ_FILE}" ]; then
extractDsmFiles extractDsmFiles
[ $? -ne 0 ] && break [ $? -ne 0 ] && return 1
fi fi
while true; do while true; do
@ -1325,11 +1326,15 @@ function make() {
if [ ! "${1}" = "-1" ]; then if [ ! "${1}" = "-1" ]; then
__make 2>&1 | DIALOG --title "$(TEXT "Main menu")" \ __make 2>&1 | DIALOG --title "$(TEXT "Main menu")" \
--progressbox "$(TEXT "Making ... ('ctrl + c' to exit)")" 20 100 --progressbox "$(TEXT "Making ... ('ctrl + c' to exit)")" 20 100
else
__make
fi fi
if [ -f "${LOG_FILE}" ]; then if [ -f "${LOG_FILE}" ]; then
if [ ! "${1}" = "-1" ]; then if [ ! "${1}" = "-1" ]; then
DIALOG --title "$(TEXT "Error")" \ DIALOG --title "$(TEXT "Error")" \
--msgbox "$(cat ${LOG_FILE})" 0 0 --msgbox "$(cat ${LOG_FILE})" 0 0
else
cat "${LOG_FILE}"
fi fi
rm -f "${LOG_FILE}" rm -f "${LOG_FILE}"
return 1 return 1
@ -3205,12 +3210,17 @@ function updateMenu() {
############################################################################### ###############################################################################
function cleanCache() { 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 "${PART3_PATH}/dl/"*
rm -rfv "${TMP_PATH}/"* rm -rfv "${TMP_PATH}/"*
) 2>&1 | DIALOG --title "$(TEXT "Main menu")" \ fi
--progressbox "$(TEXT "Cleaning cache ...")" 20 100 return 0
return
} }
############################################################################### ###############################################################################
@ -3344,8 +3354,7 @@ else
NEXT="m" NEXT="m"
;; ;;
c) c)
DIALOG \ cleanCache
--prgbox "rm -rfv \"${PART3_PATH}/dl/\"*" 0 0
NEXT="d" NEXT="d"
;; ;;
p) p)

View File

@ -50,9 +50,19 @@ function init() {
mkdir -p "/tmp/mnt/p1" mkdir -p "/tmp/mnt/p1"
mkdir -p "/tmp/mnt/p2" mkdir -p "/tmp/mnt/p2"
mkdir -p "/tmp/mnt/p3" mkdir -p "/tmp/mnt/p3"
sudo mount ${LOOPX}p1 "/tmp/mnt/p1" sudo mount ${LOOPX}p1 "/tmp/mnt/p1" || (
sudo mount ${LOOPX}p2 "/tmp/mnt/p2" echo -e "Can't mount ${LOOPX}p1."
sudo mount ${LOOPX}p3 "/tmp/mnt/p3" 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" echo "Create WORKSPACE"
rm -rf "${WORKSPACE}" rm -rf "${WORKSPACE}"
@ -75,6 +85,11 @@ function init() {
rm -rf "/tmp/mnt/p3" rm -rf "/tmp/mnt/p3"
sudo losetup --detach ${LOOPX} 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 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 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 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" pushd "${CHROOT_PATH}/initrd/opt/rr"
while true; do while true; do
if [ -z "${1}" ]; then if [ -z "${1}" ]; then
echo "init"
./init.sh || break ./init.sh || break
echo "menu"
./menu.sh || break ./menu.sh || break
else else
echo "init"
./init.sh || break ./init.sh || break
echo "model"
./menu.sh modelMenu "${1}" || break ./menu.sh modelMenu "${1}" || break
echo "version"
./menu.sh productversMenu "7.2" || break ./menu.sh productversMenu "7.2" || break
echo "build"
./menu.sh make -1 || break ./menu.sh make -1 || break
./menu.sh cleanCache || break echo "clean"
./menu.sh cleanCache -1 || break
RET=0 RET=0
fi fi
break
done done
popd popd
[ ${RET} -ne 0 ] && echo "Failed." || echo "Success." [ ${RET} -ne 0 ] && echo "Failed." || echo "Success."
@ -130,9 +153,18 @@ function pack() {
mkdir -p "/tmp/mnt/p1" mkdir -p "/tmp/mnt/p1"
mkdir -p "/tmp/mnt/p2" mkdir -p "/tmp/mnt/p2"
mkdir -p "/tmp/mnt/p3" mkdir -p "/tmp/mnt/p3"
sudo mount ${LOOPX}p1 "/tmp/mnt/p1" sudo mount ${LOOPX}p1 "/tmp/mnt/p1" || (
sudo mount ${LOOPX}p2 "/tmp/mnt/p2" echo -e "Can't mount ${LOOPX}p1."
sudo mount ${LOOPX}p3 "/tmp/mnt/p3" 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" echo "Pack image file"
cp -af "${CHROOT_PATH}/mnt/p1/.locale" "/tmp/mnt/p1" 2>/dev/null cp -af "${CHROOT_PATH}/mnt/p1/.locale" "/tmp/mnt/p1" 2>/dev/null