Показать статистику
0 голосов
от (1.7тыс. баллов)
Интересует информация по поводу установки Линукс на 13-й iPhone. Дистрибутив не принципиален - подойдет что угодно. Основная задача - иметь возможность работать с айфона в консоли, заходить по SSH на удаленные сервера (работаю с гугл клауд и часто бывает нужен удаленный доступ, а ноут с собой носить неудобно).
1.2тыс. просмотров 1 ответов

1 Ответ

0 голосов
от (4.6тыс. баллов)

По поводу самого устройства - советую почитать неплохой обзор на ixbt про Айфон 13. На мой взгляд, там неплохо разложили по полочкам основные ньюансы гаджета, его плюсы и минусы. 

Установить Linux в чистом виде мне не удавалось. Но для ваших целей - консоль, SSH, тому подобные утилиты - подойдет эмулятор теринала. Существует проект iSH, это приложение вы можете скачать с официального Apple Store. Утилита предоставляет консольный доступ для запуска SSH. Выглядит это примерно так: 

В англоязычном интернете есть неплохая статья по установке PostmarketOS на iPhone. Вот примерный перевод этой статьи с небольшими комментариями.

Для начала, небольшая цитата о самой PostmarketOS (словами разработчиков с официального сайта):

"Мы полностью избегаем системы сборки Android. Вместо построения монолитного образа системы для каждого устройства вся ОС разбита на небольшие пакеты. Эти же бинарные пакеты можно установить на все устройства с одинаковой архитектурой центрального процессора. Детали, специфичные для устройства, сведены к минимуму. В идеале имеется только один пакет устройства. На практике часто используется и нисходящее ядро Linux (которое так же называется дженериком, или "vendor kernel"), но мы заменяем его ядром Mainline везде, где это возможно. В духе большинства других дистрибутивов Linux для postmarketOS упакованы несколько пользовательских интерфейсов из независимых проектов, таких как Plasma Mobile, Phosh и Sxmo."

Далее так же сообщают некоторые дополнительные сведения:

"postmarketOS основана на Alpine Linux, который настолько мал (менее 10 МБ), что разработка pmOS может быть выполнена быстро на любом дистрибутиве Linux. Мы устанавливаем Alpine в несколько chroot для кросс-компиляции пакетов, сборки и прошивки postmarketOS, запуска на виртуальной машине с QEMU или интерактивного переноса нового оборудования. Все это с помощью нашей облегченной программы Python pmbootstrap, без установки чего-либо в хост-системе. Между прочим, писать пакеты несложно: если вы знаете, как писать сценарии оболочки, вы готовы к работе. У нас есть непрерывная интеграция, которая гарантирует, что все сборки будут отправлены в наш репозиторий пакетов".

Подготовка образа postmarketOS

Начнем с компиляции базового образа с помощью утилиты postmarketOS pmbootstrap.

pmbootstrap init
# Work path [/home/onny/.local/var/pmbootstrap]
# Vendor: qemu
# Device codename: aarch64
# Kernel: virt
# User interface: weston
pmbootstrap install

Во время инициализации вы можете оставить большинство переменных как есть. Для примера мы выбираем Weston в качестве пользовательского интерфейса. После установки мы должны изменить конфигурацию и снова запустить процесс установки.

pmbootstrap chroot -r
# vi /etc/xdg/weston/weston.ini # change one variable
# [...]
# backend=fbdev-backend.so
# [...]
pmbootstrap install

Далее, мы должны извлечь initramfs и добавить нашу пользовательскую процедуру монтирования файловой системы в сценарий инициализации.

pmbootstrap initfs extract
~/.local/var/pmbootstrap/chroot_rootfs_qemu-aarch64/tmp/initfs-extracted/init
[...]
mount_root-partition

/bin/mkdir -p /mnt/apfs /mnt/ro /mnt/rw
/bin/mount -t apfs -o ro,relatime,vol=5 /dev/nvme0n1p1 /mnt/apfs
/sbin/losetup /dev/loop0 /mnt/apfs/qemu-aarch64.img -o 60817408 -r
/bin/mount -t ext4 -o ro /dev/loop0 /mnt/ro
/bin/mount -t tmpfs tmpfs /mnt/rw
/bin/mkdir -p /mnt/rw/data /mnt/rw/work
/bin/mkdir -p /sysroot
/bin/mount -t overlay -o lowerdir=/mnt/ro,upperdir=/mnt/rw/data,workdir=/mnt/rw/work overlay /sysroot

init="/sbin/init"
[...]

В приведенном выше фрагменте кода есть две переменные. Во-первых, это параметр vol=5, который указывает целевой том APFS, который мы создадим позже. Если вы уже создали больше пользовательских томов на своем телефоне, это значение, вероятно, выше. Во-вторых, lossup указывает смещение -o 60817408, которое представляет собой смещение в байтах для системного раздела ext4 внутри образа. Вы можете рассчитать это смещение, умножив размер сектора и начальный сектор с помощью fdisk.

Теперь заново сожмем initramfs для ядра:

cd ~/.local/var/pmbootstrap/chroot_rootfs_qemu-aarch64/tmp/initfs-extracted/
sh -c "find . | cpio  --quiet -o -H newc | gzip -9 > /tmp/ramdisk.cpio.gz"

Сборка ядра с кастомным ramdisk

Следующая часть похожа на уже изложенные шаги выше, но на этот раз мы напрямую используем образ initramfs pmbootstrap.

pacman -S aarch64-linux-gnu-gcc 
cd /tmp
git clone https://github.com/corellium/linux-sandcastle.git
cd linux-sandcastle
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
make hx_h9p_defconfig
cp /tmp/ramdisk.cpio.gz .
make -j4
./dtbpack.sh
lzma -z --stdout arch/arm64/boot/Image > arch/arm64/boot/Image.lzma

Прошивка образа системы и ядра

На этом этапе начинается зона повышенного риска. Можно превратить ваш айфон в кирпич. Если вы все таки решились, то следуем далее по тексту. Хочу заметитьЮ что это не «прошивка» в традиционном смысле, но теперь мы собираемся использовать эксплойт bootrom checkra1n, чтобы получить root-доступ по ssh на телефоне. Переведите телефон в режим DFU и выполните следующую команду:

checkra1n -cE
iproxy 2222 222 # leave this running while accessing via ssh
sshpass -p "alpine" ssh -p2222 root@localhost

Внутри оболочки iPhone (запущенной от рута) мы собираемся создать новый том APFS и смонтировать его. Вы должны выполнить эти шаги только один раз, просто перемонтируйте раздел, если хотите удалить или перезаписать существующий образ системы:

newfs_apfs -A -v postmarketOS -e /dev/disk0s1
mkdir -p /tmp/mnt
mount -t apfs /dev/disk0s1s6 /tmp/mnt

Том /dev/disk0s1s6 должен быть новым томом «postmarketOS». Вы можете проверить это с помощью /System/Library/Filesystems/apfs.fs/apfs.util -p /dev/disk0s1s6. 

Теперь мы можем перенести образ системы внутрь нового тома с помощью scp:

sshpass -p "alpine"  scp -P2222 -v ~/.local/var/pmbootstrap/chroot_native/home/pmos/rootfs/qemu-aarch64.img root@localhost:/tmp/mnt/

После этого размонтируйте раздел на iPhone и снова переведите его в режим DFU. Следующие команды запустят ядро Linux и запустят процесс загрузки в нашу графическую пользовательскую сессию. 

cd /tmp
git clone https://github.com/corellium/projectsandcastle
cd projectsandcastle/loader
make
checkra1n -cpE
./load-linux ../../linux-sandcastle/arch/arm64/boot/Image.lzma ../../linux-sandcastle/dtbpack

Если вы хотите перезагрузиться в свою систему postmarketOS, вам просто нужно повторно запустить две последние команды. Изменения, сделанные во время работы системы, будут потеряны при перезагрузке и еще не сохранятся.

Доступ к оболочке через порт USB

Поскольку все это находится в состоянии разработки, удобно иметь серийный/шелловый доступ к работающей системе. Для этого нужно добавить CONFIG_USB_G_SERIAL в конфигурацию ядра и добавить следующую строку в файл inittab в целевой корневой файловой системе postmarketOS:

ttyGS0::respawn:/sbin/getty -n -l /bin/sh ttyGS0 9600 linux

Во время следующей загрузки вы сможете получить доступ к своему айфону, например, с помощью minicom, в /dev/ttyACM0.

...