- PVSM.RU - https://www.pvsm.ru -

Запускаем командную строку Linux на iOS

Запускаем командную строку Linux на iOS - 1

А вы знали, что можно запустить командную строку Linux на устройстве iOS? Возможно, вы спросите: «Зачем мне пользоваться текстовыми приложениями на iPhone?» Справедливый вопрос. Но если вы читаете Opensource.com, то, вероятно, знаете на него ответ: пользователи Linux хотят иметь возможность работать с ним на любом устройстве и хотят пользоваться собственными настройками.

Но больше всего они жаждут решения сложных задач.

У меня есть семилетний iPad 2 Mini, который по-прежнему неплохо подходит для чтения электронных книг и других задач. Однако я хочу использовать его и для доступа к командной строке приложений с моим набором программ и скриптов, без которых не могу работать. Мне нужно окружение, к которому я привык, а также моя стандартная среда разработки. И вот как мне удалось этого добиться.

Подключение к клавиатуре

Работать с командной строкой для программирования через экранную клавиатуру телефона или планшета довольно неудобно. Я рекомендую подключить внешнюю клавиатуру, или через Bluetooth, или воспользовавшись адаптером подключения камеры, чтобы подключить проводную клавиатуру (я выбрал второе). При подключении разделённой клавиатуры Kinesis Advantage к iPhone 6 получается странное устройство, напоминающее корпоративный кибердек [1] из классической ролевой игры [2] Shadowrun.

Устанавливаем оболочку на iOS

Для запуска полнофункциональной системы Linux на iOS есть два варианта:

  • Secure shell (SSH), подключаемая к компьютеру с Linux
  • Запуск виртуальной системы с помощью Alpine Linux с iSH, который является open source, но должен устанавливаться с помощью проприетарного приложения TestFlight компании Apple

В качестве альтернативы существуют два приложения-эмулятора терминала в open source, предоставляющие возможность работы с open-source-инструментами в ограниченном окружении. Это самый урезанный вариант — на самом деле так вы запускаете не Linux, а инструменты Linux. При работе с этими приложениями существуют жёсткие ограничения возможностей, однако вы получаете частичную функциональность командной строки.

Прежде чем перейти к сложным решениями, я рассмотрю простейший способ.

Вариант 1: оболочка в «песочнице»

Один из самых простых способов — установить приложение для iOS LibTerm [3]. Это опенсорсная [4] командная оболочка в «песочнице» с поддержкой более 80 команд по цене в ноль долларов. В комплекте с ней поставляются Python 2.7, Python 3.7, Lua, C, Clang и многое другое.

Примерно такой же функциональностью обладает a-Shell [5], описываемая разработчиками как «тестовый интерфейс пользователя для платформы с экранным вводом». Исходники a-Shell выложены open source [6], она находится в активной разработке, предоставляет доступ к файловой системе и поставляется с Lua, Python, Tex, Vim, JavaScript, C и C++, а также с Clang и Clang++. Она даже позволяет устанавливать с помощью pip пакеты Python.

Вариант 2: SSH

Ещё одним шагом вперёд по сравнению со скачиванием приложения является настройка SSH-клиента. Уже долгое время мы могли использовать любое из множества приложений SSH-клиентов для iOS, чтобы подключаться к серверу, на котором запущен Linux или BSD. Преимущество использования SSH заключается в том, что на сервере может работать любой дистрибутив с любым программным обеспечением. Вы работаете удалённо и результаты работы просто передаются в эмулятор терминала на устройстве iOS.

Blink shell [7] — это популярное платное SSH-приложение в open source [8]. Если не обращать внимания на маленький экран устройства, то использование этого ПО похоже на подключение к серверу через любую другую командную строку. Терминал Blink замечательно выглядит, имеет множество готовых тем и функцию создания собственных, в том числе возможность настройки и добавления новых шрифтов.

Вариант 3: запуск Linux

Использование SSH для подключения к серверу под Linux — это отличный способ доступа к командной строке, но для него требуется внешний сервер и сетевое подключение. Это не самая большая преграда, но её нельзя полностью игнорировать, поэтому вам может потребоваться работать с Linux без сервера.

Если это ваш случай, то вам нужно будет сделать ещё один шаг вперёд. TestFlight [9] — это проприетарный сервис для установки разрабатываемых приложений ещё до того, как они были выложены в Apple App Store. Приложение TestFlight можно установить из App Store, а затем пользоваться тестовыми приложениями. Приложения в TestFlight позволяют в течение ограниченного времени работать с ними ограниченному количеству бета-тестеров (обычно до 10 000). Чтобы скачать тестовое приложение, нужно перейти со своего устройства по ссылке, которая обычно находится на веб-сайте разработчика тестового приложения.

Запуск Alpine Linux с iSH

iSH [10] — это open-source-приложение TestFlight, запускающее виртуальную машину с готовым дистрибутивом Alpine Linux [11] (немного потрудившись, можно запускать и другие дистрибутивы).

Важная особенность: приложение экспериментальное. Так как iSH сейчас пока являются тестовым приложением, не ожидайте постоянной и надёжной работы. Приложения TestFlight ограничены по времени. Моя текущая сборка будет работать всего 60 дней. Это означает, что через 60 дней меня исключат и придётся снова присоединяться к следующему этапу тестирования iSH. Более того, я потеряю все свои файлы, если не экспортирую их с помощью Files на iOS или не скопирую их на Git-хост или через SSH [12]. Иными словами: Не надейтесь, что всё это будет продолжать работать! Не помещайте в систему ничего важного для вас! Выполняйте резервное копирование в отдельное место!

Установка iSH

Начните с установки TestFlight [13] из App Store. Затем установите iSH, получив ссылку на установку [14] с веб-сайта приложения. Есть ещё один способ установки с использованием AltStore, но я его не пробовал. Или, если у вас есть платный аккаунт разработчика, можете скачать репозиторий iSH с GitHub и установить его самостоятельно.

При помощи ссылки TestFlight установит приложение iSH на ваше устройство. Как и в случае с любым другим приложением, на экране появится значок.

Управление пакетами

iSH выполняет эмулятор x86 с Alpine Linux. Alpine — это крошечный дистрибутив размером меньше 5 МБ. Я впервые работал с Alpine, поэтому думал, что такой минимализм будет раздражать, но на самом деле он мне очень понравился.

Запускаем командную строку Linux на iOS - 2

В Alpine используется менеджер пакетов apk [15], который проще, чем даже apt или pacman.

Как установить пакет:

apk add package

Как удалить пакет:

apk del package

Как узнать другие команды и информацию:

apk --help

Обновление менеджера пакетов:

apk update
apk upgrade

Установка текстового редактора

Стандартным текстовым редактором Alpine является Vi, но я предпочитаю Vim, поэтому установил его:

apk add vim

При желании можно установить Nano или Emacs.

Смена оболочки

Не знаю, как насчёт вас, а мне нужна была fish shell [16]. Другие люди предпочитают Bash [17] или Zsh [18]. Однако в Alpine используется ash! Ash — это форк оболочки Dash, которая сама является форком оригинального ash, или Almquist shell [19]. Её приоритетом является скорость. Я решил обменять скорость на встроенное автодополнение, цвета, управление клавишами Vim и подсветку синтаксиса, которые я люблю и знаю по fish shell.

Установка fish:

apk add fish

Если вам нужна Bash с её автодополнением и man-страницами, то установите их:

apk add bash bash-doc bash-completion

Минималистичная идеология Alpine обычно означает, что некоторые программы, которые в других дистрибутивах являются одним пакетом, будут разделены на несколько пакетов поменьше. Также это означает, что вы можете настраивать и уменьшать размер системы ровно так, как вам этого хочется.

Подробнее об установке Bash можно узнать из этого туториала [20].

Смена оболочки по умолчанию

После установки fish можно временно переключиться на неё, введя fish и перейдя в оболочку. Но я хочу сделать fish оболочкой по умолчанию, а команда chsh, которую я использовал в других дистрибутивах, не работала.

Сначала узнаем, куда установилась fish:

which fish

Вот, что получилось у меня:

/usr/bin/fish

Далее изменим login shell на fish. Можете использовать любой удобный вам редактор. Если в новичок, то установите Nano (командой apk add nano), чтобы можно было отредактировать файлы конфигурации и сохранить их через CTRL+X, подтвердить и выйти.

Но я использовал Vim:

vim /etc/passwd

У меня первая строка была такой:

root:x:0:0:root:/root:/bin/ash

Чтобы сделать fish оболочкой по умолчанию, изменим эту строку на следующую:

root:x:0:0:root:/root:/usr/bin/fish

Затем сохраним файл и выйдем.

Я уверен, что существует хороший способ изменить путь к оболочке, чтобы её можно было использовать сразу. Но я его не знаю, поэтому рекомендую вернутся в браузер приложений, принудительно выполнить выход из оболочки и для надёжности выключить и перезагрузить iPad или iPhone. Снова откройте iSH и теперь кроме сообщения «Welcome to Alpine!» и информации о запуске с apk вы увидите стандартное приветственное сообщение логина fish: Welcome to fish, the friendly interactive shell. Ура!

Запускаем командную строку Linux на iOS - 3

Настройка Python и pip

Я решил добавить Python [21] (версию 3.x), не только для того, чтобы писать код, но и потому, что я пользуюсь несколькими программами на Python. Установим его:

apk add python3

Хотя Python 2.x устарел, можно установить и его:

apk add python

Установим менеджер пакетов Python под названием pip и setuptools [22]:

python3 -m ensurepip --default-pip

Для установки и настройки менеджера пакетов понадобится какое-то время, поэтому просто подождите.

Затем можно будет скачать инструмент для передачи файлов по сети curl [23]:

apk add curl

Читаем мануалы

Fish использует встроенное автодополнение на основе man-страниц. Как и другие пользователи командной строки, я пользуюсь мануалом man, а в Alpine он не установлен. Поэтому я установил его с терминальным пейджером less [24]:

apk add man man-pages less less-doc

В дополнение к man я использую великолепный проект tldr pages [25], предоставляющий упрощённые и управляемые сообществом man-страницы.

Я установил его с помощью pip:

pip install tldr

Команда tldr соединяется с вебом для получения страниц, когда встречает запрос на новую страницу. Если вам нужно узнать, как пользоваться командой, то вы можете написать что-то типа tldr curl и получить описание на простом английском языке и хорошие примеры по использованию команды.

Разумеется, всю эту работу по установке можно автоматизировать с помощью dotfiles [26] или скрипта установки, но на самом деле это не очень соответствует идеологии Alpine — настройке минимальной установки чётко под свои потребности. Кроме того, это ведь заняло так много времени, правда?

Дополнительная информация

В Вики iSH есть страница "what works [27]" с отчётами о том, какие пакеты сейчас работают. Кстати, похоже, что npm сейчас не работает [28].

На ещё одной вики-странице объясняется, как получить доступ к файлам iSH [29] из приложения iOS Files. Это один из способов, которым можно перемещать и копировать файлы.

Можно также установить Git (да! apk add git ) и пушить свою работу в удалённый репозиторий или передавать его на сервер через SSH. И, разумеется, можно скачивать и запускать любое количество замечательных open-source-проектов с GitHub.

Подробнее об iSH можно узнать по этим ссылкам:

На правах рекламы

Вдсина предлагает виртуальные серверы на Linux [33] или Windows. Используем исключительно брендовое оборудование [34], лучшую в своём роде панель управления серверами собственной разработки и одни из лучших дата-центров в России и ЕС. Поспешите заказать!

Автор: Mikhail

Источник [35]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/ssh/357500

Ссылки в тексте:

[1] корпоративный кибердек: https://www.shadowruntabletop.com/products/setting-sourcebooks/

[2] ролевой игры: https://opensource.com/article/20/7/free-rpg-day

[3] LibTerm: https://libterm.app/

[4] опенсорсная: https://github.com/ColdGrub1384/LibTerm

[5] a-Shell: https://holzschu.github.io/a-Shell_iOS/

[6] open source: https://github.com/holzschu/a-shell/blob/master/LICENSE

[7] Blink shell: https://blink.sh

[8] open source: https://github.com/blinksh/blink/blob/raw/COPYING

[9] TestFlight: https://testflight.apple.com/

[10] iSH: https://ish.app/

[11] Alpine Linux: https://alpinelinux.org/

[12] через SSH: https://opensource.com/article/20/9/ssh

[13] TestFlight: https://apps.apple.com/us/app/testflight/id899247664

[14] получив ссылку на установку: https://ish.app/#get

[15] apk: https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management

[16] fish shell: https://opensource.com/article/20/3/fish-shell

[17] Bash: https://opensource.com/resources/what-bash

[18] Zsh: https://opensource.com/article/19/9/getting-started-zsh

[19] Almquist shell: https://en.wikipedia.org/wiki/Almquist_shell

[20] этого туториала: https://www.cyberciti.biz/faq/alpine-linux-install-bash-using-apk-command/

[21] Python: https://www.python.org/

[22] setuptools: https://pypi.org/project/setuptools/

[23] curl: https://curl.haxx.se/

[24] less: https://en.wikipedia.org/wiki/Less_%28Unix%29

[25] проект tldr pages: https://tldr.sh/

[26] dotfiles: https://opensource.com/article/19/3/move-your-dotfiles-version-control

[27] what works: https://github.com/ish-app/ish/wiki/What-works%3F

[28] npm сейчас не работает: https://github.com/ish-app/ish/issues/874

[29] получить доступ к файлам iSH: https://github.com/ish-app/ish/wiki/View-iSH-files-in-Files-App

[30] Subreddit: https://www.reddit.com/r/ish/

[31] GitHub issues: https://github.com/ish-app/ish/issues

[32] Wiki: https://github.com/ish-app/ish/wiki

[33] виртуальные серверы на Linux: https://vdsina.ru/cloud-servers?partner=habr124

[34] брендовое оборудование: https://habr.com/ru/company/vdsina/blog/514570/

[35] Источник: https://habr.com/ru/post/521676/?utm_source=habrahabr&utm_medium=rss&utm_campaign=521676