Add partial Linux ARM support (armhf)

This commit is contained in:
LukeZGD 2022-12-24 11:49:22 +08:00
parent 4348ec5cef
commit bb163957c6
5 changed files with 64 additions and 22 deletions

View File

@ -36,10 +36,10 @@ jobs:
mv ./exclude/lib/* ./resources/lib mv ./exclude/lib/* ./resources/lib
mv ./exclude/tools/* ./resources/tools mv ./exclude/tools/* ./resources/tools
mv ./resources/tools/*macos* ./exclude/tools mv ./resources/tools/*macos* ./exclude/tools
mv ./resources/libimobiledevice_macos ./exclude
- name: Download and extract libimobiledevice_linux - name: Download and extract libimobiledevice_linux
run: | run: |
mv ./resources/libimobiledevice_macos ./exclude
curl -LO https://github.com/LukeZGD/iOS-OTA-Downgrader-Keys/releases/download/tools/libimobiledevice_linux.zip curl -LO https://github.com/LukeZGD/iOS-OTA-Downgrader-Keys/releases/download/tools/libimobiledevice_linux.zip
mkdir ./resources/libimobiledevice_linux mkdir ./resources/libimobiledevice_linux
unzip libimobiledevice_linux.zip -d ./resources/libimobiledevice_linux unzip libimobiledevice_linux.zip -d ./resources/libimobiledevice_linux
@ -49,16 +49,30 @@ jobs:
run: zip -r ${{ github.event.repository.name }}_linux_${{ env.DATE }}-${{ env.SHA_SHORT }}.zip resources/ restore.sh README.md run: zip -r ${{ github.event.repository.name }}_linux_${{ env.DATE }}-${{ env.SHA_SHORT }}.zip resources/ restore.sh README.md
- name: Move linux binaries and other files - name: Move linux binaries and other files
run: |
mv ./resources/tools/*linux* ./exclude/tools
mv ./resources/libimobiledevice_linux ./exclude
- name: Download and extract tools_linux_arm
run: |
curl -LO https://github.com/LukeZGD/iOS-OTA-Downgrader-Keys/releases/download/tools/tools_linux_arm.zip
unzip tools_linux_arm.zip -d ./resources
- name: Zip linux arm files
run: zip -r ${{ github.event.repository.name }}_linux_arm_${{ env.DATE }}-${{ env.SHA_SHORT }}.zip resources/ restore.sh README.md
- name: Move linux arm binaries and other files
run: | run: |
mv ./resources/lib/* ./exclude/lib mv ./resources/lib/* ./exclude/lib
mv ./resources/tools/*linux* ./exclude/tools mv ./resources/tools/*linux* ./exclude/tools
mv ./resources/libimobiledevice_linux/* ./exclude/libimobiledevice_linux
rm -r ./resources/libimobiledevice_linux
mv ./resources/firmware/FirmwareBundles ./resources/firmware/JailbreakBundles ./exclude/firmware mv ./resources/firmware/FirmwareBundles ./resources/firmware/JailbreakBundles ./exclude/firmware
mkdir ./resources/firmware/FirmwareBundles mkdir ./resources/firmware/FirmwareBundles
mv ./exclude/firmware/FirmwareBundles/Down_iPhone3* ./resources/firmware/FirmwareBundles mv ./exclude/firmware/FirmwareBundles/Down_iPhone3* ./resources/firmware/FirmwareBundles
- name: Download and extract libimobiledevice_win - name: Download and extract libimobiledevice_win
run: | run: |
mv ./resources/libimobiledevice_linux ./exclude
curl -LO https://github.com/LukeZGD/iOS-OTA-Downgrader-Keys/releases/download/tools/libimobiledevice_win.zip curl -LO https://github.com/LukeZGD/iOS-OTA-Downgrader-Keys/releases/download/tools/libimobiledevice_win.zip
mkdir ./resources/libimobiledevice_win mkdir ./resources/libimobiledevice_win
unzip libimobiledevice_win.zip -d ./resources/libimobiledevice_win unzip libimobiledevice_win.zip -d ./resources/libimobiledevice_win
@ -66,7 +80,7 @@ jobs:
- name: Download and extract tools_win - name: Download and extract tools_win
run: | run: |
curl -LO https://github.com/LukeZGD/iOS-OTA-Downgrader-Keys/releases/download/tools/tools_win.zip curl -LO https://github.com/LukeZGD/iOS-OTA-Downgrader-Keys/releases/download/tools/tools_win.zip
unzip tools_win.zip -d ./resources unzip -o tools_win.zip -d ./resources
- name: Zip win files - name: Zip win files
run: zip -r ${{ github.event.repository.name }}_win_${{ env.DATE }}-${{ env.SHA_SHORT }}.zip resources/ restore.cmd restore.sh README.md run: zip -r ${{ github.event.repository.name }}_win_${{ env.DATE }}-${{ env.SHA_SHORT }}.zip resources/ restore.cmd restore.sh README.md
@ -90,4 +104,5 @@ jobs:
${{ github.event.repository.name }}_complete_${{ env.DATE }}-${{ env.SHA_SHORT }}.zip ${{ github.event.repository.name }}_complete_${{ env.DATE }}-${{ env.SHA_SHORT }}.zip
${{ github.event.repository.name }}_macos_${{ env.DATE }}-${{ env.SHA_SHORT }}.zip ${{ github.event.repository.name }}_macos_${{ env.DATE }}-${{ env.SHA_SHORT }}.zip
${{ github.event.repository.name }}_linux_${{ env.DATE }}-${{ env.SHA_SHORT }}.zip ${{ github.event.repository.name }}_linux_${{ env.DATE }}-${{ env.SHA_SHORT }}.zip
${{ github.event.repository.name }}_linux_arm_${{ env.DATE }}-${{ env.SHA_SHORT }}.zip
${{ github.event.repository.name }}_win_${{ env.DATE }}-${{ env.SHA_SHORT }}.zip ${{ github.event.repository.name }}_win_${{ env.DATE }}-${{ env.SHA_SHORT }}.zip

View File

@ -93,6 +93,22 @@ SetToolPaths() {
ipwndfu="$python2 ipwndfu" ipwndfu="$python2 ipwndfu"
rmsigchks="$python2 rmsigchks.py" rmsigchks="$python2 rmsigchks.py"
SimpleHTTPServer="$python -m http.server 8888" SimpleHTTPServer="$python -m http.server 8888"
if [[ $(uname -m) == "a"* && $(getconf LONG_BIT) != 64 ]]; then
# these still need sudo even with the udev rule for some reason
idevicerestore="sudo ${idevicerestore}_arm"
idevicererestore="sudo ${idevicererestore}_arm"
irecovery="sudo ${irecovery}_arm"
pwnedDFU="sudo ${pwnedDFU}_arm"
ideviceenterrecovery="${ideviceenterrecovery}_arm"
ideviceinfo="${ideviceinfo}_arm"
iproxy="${iproxy}_arm"
ipsw="${ipsw}_arm"
partialzip="${partialzip}_arm"
powdersn0w="${powdersn0w}_arm"
tsschecker="${tsschecker}_arm"
xpwntool="${xpwntool}_arm"
fi
elif [[ $platform == "macos" ]]; then elif [[ $platform == "macos" ]]; then
sha1sum="$(which shasum)" sha1sum="$(which shasum)"
@ -189,12 +205,12 @@ InstallDepends() {
Echo "* Arch Linux repos do not ship python2, which is needed for ipwndfu" Echo "* Arch Linux repos do not ship python2, which is needed for ipwndfu"
Echo "* If you need to use ipwndfu, python2 can be installed from the AUR" Echo "* If you need to use ipwndfu, python2 can be installed from the AUR"
sudo pacman -Sy --noconfirm --needed base-devel bsdiff curl libimobiledevice openssh python udev unzip usbmuxd usbutils vim xmlstarlet zenity zip sudo pacman -Sy --noconfirm --needed base-devel bsdiff curl libimobiledevice openssh python udev unzip usbmuxd usbutils vim xmlstarlet zenity zip
elif [[ $ID == "gentoo" || $ID_LIKE == "gentoo" || $ID == "pentoo" ]]; then elif [[ $ID == "gentoo" || $ID_LIKE == "gentoo" || $ID == "pentoo" ]]; then
Echo "* Gentoo repos do not ship python2, which is needed for ipwndfu" Echo "* Gentoo repos do not ship python2, which is needed for ipwndfu"
Echo "* If you need to use ipwndfu, python2 can be installed from the official site" Echo "* If you need to use ipwndfu, python2 can be installed from the official site"
sudo emerge -av bsdiff net-misc/curl libimobiledevice openssh python udev unzip usbmuxd usbutils vim xmlstarlet zenity zip sudo emerge -av bsdiff net-misc/curl libimobiledevice openssh python udev unzip usbmuxd usbutils vim xmlstarlet zenity zip
elif [[ -n $UBUNTU_CODENAME && $VERSION_ID == "2"* ]] || elif [[ -n $UBUNTU_CODENAME && $VERSION_ID == "2"* ]] ||
(( DebianVer >= 11 )) || [[ $DebianVer == "sid" ]]; then (( DebianVer >= 11 )) || [[ $DebianVer == "sid" ]]; then
[[ -n $UBUNTU_CODENAME ]] && sudo add-apt-repository -y universe [[ -n $UBUNTU_CODENAME ]] && sudo add-apt-repository -y universe
@ -250,9 +266,14 @@ InstallDepends() {
elif [[ $MPath != "./resources"* ]]; then elif [[ $MPath != "./resources"* ]]; then
mkdir ../resources/libimobiledevice_$platform mkdir ../resources/libimobiledevice_$platform
fi fi
touch ../resources/first_run
cd .. if [[ $platform == "linux" && $(uname -m) == "a"* && ! $(ls ../resources/tools/*linux_arm*) ]]; then
SaveFile https://github.com/LukeZGD/iOS-OTA-Downgrader-Keys/releases/download/tools/tools_linux_arm.zip tools_linux_arm.zip b95b2bc1589ff1fe1e16ab7ac43e9d88d9880296
Log "Extracting Linux ARM tools..."
unzip -oq tools_linux_arm.zip -d ../resources
fi
touch ../resources/first_run
Log "Install script done! Please run the script again to proceed" Log "Install script done! Please run the script again to proceed"
Log "If your iOS device is plugged in, unplug and replug your device" Log "If your iOS device is plugged in, unplug and replug your device"
ExitWin 0 ExitWin 0

View File

@ -142,7 +142,7 @@ iDeviceRestore() {
ExtraArgs="-e" ExtraArgs="-e"
elif [[ $Baseband == 0 ]]; then elif [[ $Baseband == 0 ]]; then
Log "Device $ProductType has no baseband/disabled baseband update" Log "Device $ProductType has no baseband/disabled baseband update"
elif [[ $platform == "win" && $ProductType != "iPhone3"* ]]; then elif [[ $platform == "win" || $LinuxARM == 1 ]] && [[ $ProductType != "iPhone3"* ]]; then
ExtraArgs="-r" ExtraArgs="-r"
idevicerestore="$idevicererestore" idevicerestore="$idevicererestore"
re="re" re="re"
@ -258,7 +258,7 @@ Downgrade() {
IPSWCustomA7 IPSWCustomA7
fi fi
if [[ $platform == "win" || $IPSWA7 == 1 ]]; then if [[ $platform == "win" || $LinuxARM == 1 || $IPSWA7 == 1 ]]; then
DowngradeOTAWin DowngradeOTAWin
return return
elif [[ $OSVer == "Other" ]]; then elif [[ $OSVer == "Other" ]]; then

View File

@ -22,7 +22,7 @@ JailbreakSet() {
[[ $OSVer == "8.4.1" ]] && JBDaibutsu=1 [[ $OSVer == "8.4.1" ]] && JBDaibutsu=1
fi fi
[[ $platform == "win" ]] && IPSWCustom+="JB" [[ $platform == "win" || $LinuxARM == 1 ]] && IPSWCustom+="JB"
if [[ $JBDaibutsu == 1 ]]; then if [[ $JBDaibutsu == 1 ]]; then
JBName="daibutsu" JBName="daibutsu"
IPSWCustom+="D" IPSWCustom+="D"
@ -82,7 +82,7 @@ JailbreakOption() {
fi fi
Baseband=0 Baseband=0
IPSWCustom+="B" IPSWCustom+="B"
if [[ $platform != "win" && $Jailbreak != 1 ]]; then if [[ $platform != "win" && $LinuxARM != 1 && $Jailbreak != 1 ]]; then
IPSWCustom+="N" IPSWCustom+="N"
fi fi
fi fi
@ -235,7 +235,7 @@ IPSW32() {
#JailbreakFiles $JBURL/sshdeb.tar sshdeb.tar 0bffece0f8fd939c479159b57e923dd8c06191d3 # uncomment to add openssh to custom ipsw #JailbreakFiles $JBURL/sshdeb.tar sshdeb.tar 0bffece0f8fd939c479159b57e923dd8c06191d3 # uncomment to add openssh to custom ipsw
fi fi
[[ $ProductType == "$DisableBBUpdate" ]] && BBUpdate= [[ $ProductType == "$DisableBBUpdate" ]] && BBUpdate=
[[ $platform == "win" ]] && WinBundles="windows/" [[ $platform == "win" || $LinuxARM == 1 ]] && WinBundles="windows/"
if [[ ! -e $IPSWCustom.ipsw ]]; then if [[ ! -e $IPSWCustom.ipsw ]]; then
Log "Preparing custom IPSW..." Log "Preparing custom IPSW..."

View File

@ -139,6 +139,14 @@ Main() {
if [[ $platform == "macos" && $(uname -m) != "x86_64" ]]; then if [[ $platform == "macos" && $(uname -m) != "x86_64" ]]; then
Log "Apple Silicon Mac detected. Support may be limited, proceed at your own risk." Log "Apple Silicon Mac detected. Support may be limited, proceed at your own risk."
elif [[ $platform == "linux" && $(uname -m) == "a"* ]]; then
Log "Linux ARM detected. Support may be limited, proceed at your own risk."
Echo "* Note that only 32-bit (armhf) is compiled natively for now. For 64-bit, box64 might work."
if [[ $(getconf LONG_BIT) != 64 ]]; then
LinuxARM=1
Echo "* 32-bit Linux ARM support is also very limited."
fi
elif [[ $(uname -m) != "x86_64" ]]; then elif [[ $(uname -m) != "x86_64" ]]; then
Error "Only 64-bit (x86_64) distributions are supported." Error "Only 64-bit (x86_64) distributions are supported."
fi fi
@ -146,10 +154,6 @@ Main() {
if [[ $1 == "Install" || -z $bspatch || ! -e $ideviceinfo || ! -e $irecoverychk || if [[ $1 == "Install" || -z $bspatch || ! -e $ideviceinfo || ! -e $irecoverychk ||
! -e $ideviceenterrecovery || ! -e $iproxy || -z $python || ! -e $ideviceenterrecovery || ! -e $iproxy || -z $python ||
! -e ./resources/first_run ]]; then ! -e ./resources/first_run ]]; then
if [[ ! -e $ideviceinfo || ! -e $irecoverychk ||
! -e $ideviceenterrecovery || ! -e $iproxy ]]; then
rm -rf ./resources/libimobiledevice_$platform
fi
Clean Clean
InstallDepends InstallDepends
fi fi
@ -173,7 +177,7 @@ Main() {
if [[ $DeviceProc != 7 ]]; then if [[ $DeviceProc != 7 ]]; then
Selection+=("Create Custom IPSW") Selection+=("Create Custom IPSW")
[[ $DeviceState == "Normal" ]] && Selection+=("Put Device in kDFU Mode") [[ $DeviceState == "Normal" ]] && Selection+=("Put Device in kDFU Mode")
[[ $DeviceProc != 4 && $platform != "win" ]] && Selection+=("Restore to latest iOS") [[ $DeviceProc != 4 && $platform != "win" && $LinuxARM != 1 ]] && Selection+=("Restore to latest iOS")
fi fi
Selection+=("(Re-)Install Dependencies" "(Any other key to exit)") Selection+=("(Re-)Install Dependencies" "(Any other key to exit)")
@ -205,7 +209,7 @@ Main() {
Log "Found existing Custom IPSW, stopping here." Log "Found existing Custom IPSW, stopping here."
Echo "* If you want to re-create the custom IPSW, move/delete the existing one first." Echo "* If you want to re-create the custom IPSW, move/delete the existing one first."
ExitWin 0 ExitWin 0
elif [[ $Jailbreak != 1 && $platform != "win" ]]; then elif [[ $Jailbreak != 1 && $platform != "win" && $LinuxARM != 1 ]]; then
if [[ $DeviceProc == 4 && $OSVer == "7.1.2" ]]; then if [[ $DeviceProc == 4 && $OSVer == "7.1.2" ]]; then
Log "Creating custom IPSW is not needed for non-jailbroken 7.1.2 restores." Log "Creating custom IPSW is not needed for non-jailbroken 7.1.2 restores."
ExitWin 0 ExitWin 0
@ -225,7 +229,7 @@ Main() {
Log "Custom IPSW has been created: $IPSWCustom.ipsw" Log "Custom IPSW has been created: $IPSWCustom.ipsw"
[[ $Jailbreak == 1 ]] && Echo "* This custom IPSW has a jailbreak built in ($JBName)" [[ $Jailbreak == 1 ]] && Echo "* This custom IPSW has a jailbreak built in ($JBName)"
Echo "* Run the script again and select Downgrade Device to use the custom IPSW." Echo "* Run the script again and select Downgrade Device to use the custom IPSW."
if [[ $DeviceProc != 4 && $platform != "win" ]]; then if [[ $DeviceProc != 4 && $platform != "win" && $LinuxARM != 1 ]]; then
Echo "* You may also use futurerestore manually (make sure to use the latest beta)" Echo "* You may also use futurerestore manually (make sure to use the latest beta)"
fi fi
ExitWin 0 ExitWin 0
@ -235,7 +239,9 @@ Main() {
ExitWin 0 ExitWin 0
fi fi
if [[ $DeviceProc == 7 && $platform == "win" ]]; then if [[ $DeviceProc == 7 && $LinuxARM == 1 ]]; then
Error "Restoring A7 devices is not supported on Linux ARM 32-bit."
elif [[ $DeviceProc == 7 && $platform == "win" ]]; then
local Message="If you want to restore your A7 device on Windows, put the device in pwnDFU mode." local Message="If you want to restore your A7 device on Windows, put the device in pwnDFU mode."
if [[ $DeviceState == "Normal" ]]; then if [[ $DeviceState == "Normal" ]]; then
Error "$Message" Error "$Message"
@ -354,7 +360,7 @@ SelectVersion() {
Echo "* iOS 4.3.x downgrades are supported on Linux only" Echo "* iOS 4.3.x downgrades are supported on Linux only"
Echo "* For macOS users, use cherryflowerJB instead" Echo "* For macOS users, use cherryflowerJB instead"
fi fi
if [[ $platform != "win" ]]; then if [[ $platform != "win" && $LinuxARM != 1 ]]; then
Selection+=("4.3.5") Selection+=("4.3.5")
Selection2+=("4.3.3" "4.3") Selection2+=("4.3.3" "4.3")
fi fi
@ -383,7 +389,7 @@ SelectVersion() {
fi fi
fi fi
if [[ $platform != "win" && $Mode == "Downgrade"* ]]; then if [[ $platform != "win" && $LinuxARM != 1 && $Mode == "Downgrade"* ]]; then
Selection+=("Other (use SHSH blobs)") Selection+=("Other (use SHSH blobs)")
fi fi
Selection+=("(Any other key to exit)") Selection+=("(Any other key to exit)")