Запускаємо командний рядок Linux на iOS

Alex Alex 30 жовтня
Запускаємо командний рядок Linux на iOS

А ви знали, що можна запустити командний рядок Linux на пристрої з iOS? Можливо, ви запитаєте: «Навіщо мені користуватися текстовими застосунками на iPhone?» Користувачі Linux хочуть мати можливість працювати з ним на будь-якому пристрої і хочуть користуватися власними налаштуваннями.

Але найбільше вони жадають вирішення складних завдань.

У мене є семирічний iPad 2 Mini, який як і раніше непогано підходить для читання електронних книг та інших задач. Однак я хочу використовувати його і для доступу до командного рядка з моїм набором програм і скриптів, без яких я не можу працювати. Мені потрібне оточення, до якого я звик, а також моє стандартне середовище розробки. І ось як мені вдалося цього досягти.

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

Працювати з командним рядком для програмування через екранну клавіатуру телефону або планшета досить незручно. Я рекомендую підключити зовнішню клавіатуру, або через Bluetooth, або скориставшись адаптером підключення камери, щоб підключити дротову клавіатуру (я вибрав друге). При підключенні розділеної клавіатури Kinesis Advantage до iPhone 6 виходить дивний пристрій, що нагадує корпоративний кібердек з класичної рольової гри Shadowrun.

Встановлюємо оболонку на iOS

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

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

В якості альтернативи існують два open source застосунки-емулятори терміналу, які надають можливість роботи з open-source інструментами в обмеженому оточенні. Це найбільш урізаний варіант - насправді так ви запускаєте не в Linux, а інструменти Linux. При роботі з цими застосунками існують жорсткі обмеження можливостей, однак ви отримуєте часткову функціональність командного рядка.

Перш ніж перейти до складних рішеннь, я розгляну найпростіший спосіб.

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

Один з найпростіших способів - встановити застосунок для iOS LibTerm. Це опенсорсна командна оболонка в «пісочниці» з підтримкою більше 80 команд за ціною $0. У комплекті з нею поставляються Python 2.7, Python 3.7, Lua, C, Clang і багато іншого.

Приблизно такою ж функціональністю володіє a-Shell , описуваний розробниками як «тестовий інтерфейс користувача для платформи з екранним введенням». Вихідні тексти a-Shell викладені open source, вона знаходиться в активній розробці, надає доступ до файлової системи і поставляється з Lua, Python, Tex, Vim, JavaScript, C і C ++, а також з Clang і Clang ++. Вона навіть дозволяє встановлювати пакети Python за допомогою pip.

Варіант 2: SSH

Ще одним кроком вперед у порівнянні зі скачуванням програми є налагодження SSH-клієнта. Вже довгий час можна використовувати будь-який з безлічі SSH-клієнтів для iOS, щоб з'єднатися із сервером, на якому запущений Linux або BSD. Перевага використання SSH полягає в тому, що на сервері може працювати будь-який дистрибутив з будь-яким програмним забезпеченням. Ви працюєте віддалено і результати роботи просто передаються в емулятор терміналу на пристрої iOS.

Blink shell - це популярний платний open source SSH-застосунок. Якщо не звертати уваги на маленький екран пристрою, то використання цього ПО схоже на підключення до сервера через будь-який іншу командний рядок. Термінал Blink чудово виглядає, має безліч готових тем і функцію створення власних, в тому числі можливість налаштування і додавання нових шрифтів.

Варіант 3: Запуск Linux

Використання SSH для підключення до сервера під Linux - це відмінний спосіб доступу до командного рядка, але для нього потрібен зовнішній сервер і підключення до мережі. Це не найбільша перешкода, але її не можна повністю ігнорувати, тому ви можливо хочете використовувати Linux без сервера.

Якщо це ваш випадок, то вам потрібно буде зробити ще один крок вперед. TestFlight - це пропріетарний сервіс для розгортання  застосунків на стадії розробки до того, як вони будуть викладені в Apple App Store. Застосунок TestFlight можна встановити з App Store, а потім користуватися тестовими програмами. Застосунки в TestFlight дозволяють протягом обмеженого часу працювати з ними обмеженій кількості бета-тестерів (зазвичай до 10 000). Щоб завантажити тестове застосунок, потрібно перейти зі свого пристрою за посиланням, яка зазвичай знаходиться на веб-сайті розробника тестового застосунка.

Запуск Alpine Linux з iSH

iSH - це open-source застосунок TestFlight, що запускає віртуальну машину з готовим дистрибутивом Alpine Linux (трохи попрацювавши, можна запускати й інші дистрибутиви).

Важлива особливість: застосунок експериментальний. Оскільки iSH зараз в тестовому стані, не чекайте постійної і надійної роботи. Застосунки TestFlight мають часове обмеження. Моя поточна збірка буде працювати всього 60 днів. Це означає, що через 60 днів мене виключать і доведеться знову приєднуватися до наступного етапу тестування iSH. Більш того, я втрачу всі свої файли, якщо не експортую їх за допомогою Files на iOS або НЕ скопіюю їх на Git-хост або через SSH. Іншими словами: Не сподівайтеся, що все це буде продовжувати працювати! Ніколи не кладіть у систему нічого важливого для вас! Виконуйте резервне копіювання в окреме місце!

Установка iSH

Почніть з установки TestFlight з App Store. Потім встановіть iSH, отримавши посилання на установку з веб-сайту програми. Є ще один спосіб установки з використанням AltStore, але я його не пробував. Або, якщо у вас є платний аккаунт розробника, можете скачати репозиторій iSH з GitHub і встановити його самостійно.

За допомогою посилання TestFlight встановить застосунок iSH на ваш пристрій. Як і у випадку з будь-яким іншим застосунком, на екрані з'явиться значок.

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

iSH запускає емулятор x86 з Alpine Linux. Alpine - це крихітний дистрибутив розміром менше 5 МБ. Я вперше працював з Alpine, тому думав, що такий мінімалізм буде дратувати, але насправді він мені дуже сподобався.

Запускаємо командний рядок Linux на iOS

В Alpine використовується менеджер пакетів apk, який навіть простіше, ніж  apt або pacman.

Як встановити пакет:

apk add package

Як видалити пакет:

apk del package

Як дізнатися інші команди і інформацію:

apk --help

Оновлення менеджера пакетів:

apk update
apk upgrade

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

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

apk add vim

При бажанні можна встановити Nano або Emacs.

Зміна оболонки

Не знаю, як щодо вас, а мені потрібна була fish shell. Інші люди воліють Bash або Zsh. Однак в Alpine використовується ash! Ash - це форк оболонки Dash, яка сама є Форком оригінального ash, або Almquist shell. Її пріоритетом є швидкість. Я вирішив обміняти швидкість на вбудоване автодоповнення, кольори, управління клавішами Vim і підсвічування синтаксису, які я люблю і знаю по fish shell.

Установка fish:

apk add fish

Якщо вам потрібен Bash з його автодоповненням та man-сторінками, то встановіть його:

apk add bash bash-doc bash-completion

Мінімалістичний ідеологія Alpine зазвичай означає, що деякі програми, які в інших дистрибутивах є одним пакетом, будуть розділені на кілька пакетів поменше. Також це означає, що ви можете налаштовувати і зменшувати розмір системи рівно так, як вам цього хочеться.

Детальніше про встановлення Bash можна дізнатися з цього туторіалу.

Зміна оболонки за замовчуванням

Після установки 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

Налаштування Python і pip

Я вирішив додати Python (версію 3.x), не тільки для того, щоб писати код, але і тому, що я користуюся кількома програмами на Python. Встановимо його:

apk add python3

Хоча Python 2.x застарів, можна встановити і його:

apk add python

Встановимо менеджер пакетів Python під назвою pip і setuptools:

python3 -m ensurepip --default-pip

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

Потім можна буде скачати інструмент для передачі файлів по мережі curl:

apk add curl

Читаємо мануали

Fish використовує вбудоване автодоповнення на основі man-сторінок. Як і інші користувачі командного рядка, я користуюся мануалом man, а в Alpine він не встановлений. Тому я встановив його з термінальним пейджером less :

apk add man man-pages less less-doc

На додаток до man я використовую чудовий проєкт tldr pages, що надає спрощені і керовані спільнотою man-сторінки.

Я встановив його за допомогою pip:

pip install tldr

Команда tldr з'єднується з Інтернетом для отримання сторінок, коли зустрічає запит на нову сторінку. Якщо вам потрібно дізнатися, як користуватися командою, то ви можете написати щось типу tldr curl та отримати опис на простому англійською мовою і хороші приклади з використання команди.

Зрозуміло, всю цю роботу по установці можна автоматизувати за допомогою dotfiles або скрипта установки, але насправді це не дуже відповідає ідеології Alpine - налаштування мінімальної установки чітко під свої потреби. Крім того, це ж не зайняло так багато часу, правда?

Додаткова інформація

У Віки iSH є сторінка "what works" зі звітами про те, які пакети зараз працюють. До речі, схоже, що npm зараз не працює.

На ще одній вікі-сторінці пояснюється, як отримати доступ до файлів iSH з програми iOS Files. Це один із способів, яким можна переміщати і копіювати файли.

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

Детальніше про iSH можна дізнатися за цим посиланням:

Джерело: opensource.com

Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Війти / Зареєструватися