我需要使用 libimobiledevice 备份 iphone,使用 ubuntu,检测到该设备,但要启动备份命令时会显示以下错误:
在端口 49343 上启动“com.apple.mobilebackup2”服务。无法执行备份协议版本交换,错误代码 -1
它能依赖什么?
几个 Github 问题报告了这个问题,比如这个。
解决方案:
您需要使用最新版本的 idevicebackup 和 libimobiledevice
事实上,如果您使用 Ubuntu 20.04(例如),到目前为止,libimobiledevice 软件包已经过时。
如果是这种情况,您将不得不等待下一个 Ubuntu 版本 (22.04) 或从源代码编译它,无论如何,在 Ubuntu 22.04 发布后的某个时候可能会需要这样做。
免责声明:自己编译的缺点是您的二进制文件不受包管理器管理。您必须更新自己,git pull下载或下载最新的源代码版本并每次都重新编译所有内容。发行版升级后,您可能必须重做所有这些。好处是你的二进制文件确实可以工作......
注:官网描述的编译步骤仅适用于debian;我可以在 Linux Mint 20.3(基于 Ubuntu,基于 debian)上同样出色地执行它们。OP 没有提及他或她使用的操作系统,但基于 debian 的操作系统似乎是目前唯一可用的操作系统,因此接下来的内容应该适用于基于 debian 的操作系统。
从源码编译,一步一步:
卸载官方包及其依赖项:
安装构建依赖项:(请参阅此处的sudo apt install build-essential checkinstall git autoconf automake libtool-bin libplist-dev libusbmuxd-dev libssl-dev usbmuxd“来自源代码” )
从其存储库获取 libimobiledevice 源代码,例如使用git clone https://github.com/libimobiledevice/libimobiledevice.git. 您可能会进入发布页面并使用最新的 tar.gz(目前为 1.3)。
还可以获得 libimobiledevice 所需的其他库的源代码:libplist、libimobiledevice-glue和libusbmuxd。(我也编译了usbmuxd而不是使用官方包,但我不确定是否有必要)。对于其中的每一个,您都可以git clone下载并解压最新的源代码版本(如果有)。
选择一个前缀目录,库和二进制文件将存放在其中。如有必要,请创建它(官方 libimobiledevice 网站建议/opt/local,我也将在接下来的步骤中使用它;为了使编译正常工作,您必须在sudo mkdir /opt/local开始export PKG_CONFIG_PATH=/opt/local/lib/pkgconfig第一次编译之前创建它)
编译并安装cd到每个 git 克隆(或源下载)目录的根目录(按此顺序:lipblist、libimobiledevice-glue、libusbmuxd 和 libimobiledevice,因为每个目录都依赖于前一个目录)并在每个目录中执行其中:./autogen.sh --prefix=/opt/local,然后make,最后sudo make install。(请注意,autogenlibimobiledevice 的行可能是./autogen.sh --prefix=/opt/local --enable-debug,如此处建议的)。
完成所有这些后,iPhone 没有自动安装,我必须手动运行idevicepair pair,然后可以使用安装它ifuse ./iphone_mount_point/(sudo apt install ifuse如果需要的话)并使用 执行备份idevicebackup2 backup --full iphone_backup/。请阅读帮助idevicebackup2以获取更多信息。