Meefik's Blog

Freedom and Open Source

Предварительный обзор Linux Deploy 2.0

Готовится к выходу следующая версия Linux Deploy, которая будет включать много новых интересных функций. Вот основные из них:

  • работа с контейнерами без прав суперпользователя (на базе proot), в том числе эмуляция архитектуры без необходимости поддержки модуля binfmt_misc на уровне ядра;
  • модульная архитектура на основе подключаемых компонентов;
  • обновленный интерфейс приложения для Android;
  • встроенный в Android-приложение интерфейс управления через telnet и веб-интерфейс;
  • расширенный CLI для управления контейнерами из командной строки;
  • CLI с поддержкой различных платформ на базе ядра Linux, не только Android;
  • репозиторий готовых контейнеров (конфигурации контейнеров и rootfs-архивы к ним).

Уже сейчас доступен для тестирования интерфейс командной строки Linux Deploy 2.0, который существенно изменился. Теперь он позволяет создавать, настраивать и полностью управлять контейнерами через команду linuxdeploy. Каждый контейнер имеет конфигурационный файл, содержащий в себе все параметры развертывания и запуска конкретного дистрибутива. Можно работать с несколькими конфигурациями, переключаясь между ними при необходимости. Linux Deploy теперь имеет модульную архитектуру, состоящую из отдельных компонентов, написанных на Bash-совместимом языке сценариев Ash. Компоненты связаны между собой зависимостями и подключаются в заданном порядке, есть защита от циклических зависимостей. Каждый компонент имеет пять базовых функций, которые являются обработчиками действий: установка, конфигурация, запуск, остановка, справка. Компоненты имеют древовидную структуру и располагаются в корневом каталоге, который задается в переменной окружения INCLUDE_DIR. Каждый компонент представляет собой каталог, в котором содержатся необходимые компоненту файлы. Основных файлов два: deploy.conf - конфигурация компонента, deploy.sh - функции компонента.

Компоненты разделены на несколько групп, отвечающих за какой-то определенный функционал. Например, группа компонентов bootstrap отвечает за подготовку rootfs и развертывание дистрибутива. Группа компонентов core включает основные настройки дистрибутивов и базовые функции для работы с контейнерами. Есть еще группы для поддержки различных систем инициализации (init), графических подсистем (graphics) и окружений рабочего стола (desktop), а также коллекция компонентов для установки и запуска различного программного обеспечения. Комбинируя компоненты можно собрать собственную версию дистрибутива с необходимым набором программ.

Допустим, мы хотим создать контейнер с Arch Linux в базовой комплектации. Чтобы создать контейнер, первым делом, нужно задать его параметры, для этого следует использовать команду config:

linuxdeploy -p arch config --target-path='linux.img' --chroot-dir='/mnt' \
--target-type='file' --disk-size='2000' --fs-type='auto' \
--source-path='http://mirrors.kernel.org/archlinux/' --distrib='archlinux' --arch='i686' \
--user-name='android' --include='bootstrap'

Дамп получившегося конфигурационного файла можно получить командой:

linuxdeploy -p arch config -x
TARGET_PATH="linux.img"
CHROOT_DIR="/mnt"
TARGET_TYPE="file"
DISK_SIZE="2000"
FS_TYPE="auto"
SOURCE_PATH="http://mirrors.kernel.org/archlinux/"
DISTRIB="archlinux"
ARCH="i686"
USER_NAME="android"
INCLUDE="bootstrap"

Когда базовые параметры установлены, можно запускать установку командой deploy:

linuxdeploy -p arch deploy

Эта команда без параметров запускает установку и конфигурацию всех подключенных через параметр INCLUDE компонентов, в данном случае это bootstrap. После завершения процесса развертывания и конфигурации можно подключиться к контейнеру командой shell:

linuxdeploy -p arch shell -u root

Возможно, нам понадобится в последствии установить какие-то дополнительные компоненты без переустановки базовой системы, тогда можно воспользоваться следующей командой, например, для установки ssh-сервера:

linuxdeploy -p arch deploy -n bootstrap extra/ssh

Здесь опция “-n bootstrap” исключает из установки компоненты группы bootstrap, от которых зависит компонент extra/ssh. Аналогичным образом будут работать следующие команды, однако компонент extra/ssh будет сохранен в конфигурации контейнера:

linuxdeploy -p arch config --include='${INCLUDE} extra/ssh'
linuxdeploy -p arch deploy -n bootstrap

Здесь переменная ${INCLUDE} берется из текущей конфигурации и в данном случае содержит “bootstrap”. Развернутый контейнер можно экспортировать как rootfs-архив:

linuxdeploy -p arch export rootfs.tar.gz

Иногда нужно импортировать дистрибутив из rootfs-архива, для этого можно воспользоваться такими командами:

linuxdeploy -p arch config --source-path='rootfs.tar.gz'
linuxdeploy -p arch deploy bootstrap/rootfs

Список созданных конфигураций можно посмотреть через команду conf:

linuxdeploy -p arch config
arch archlinux i686 latest bootstrap extra/ssh
centos centos i386 7 bootstrap init
debian debian i386 jessie bootstrap graphics desktop
fedora fedora i386 21 bootstrap
gentoo gentoo i686 latest bootstrap
kali kalilinux i386 sana bootstrap
opensuse opensuse i586 13.2 bootstrap
slackware slackware x86 latest bootstrap
ubuntu ubuntu i386 wily bootstrap

Список доступных компонентов можно посмотреть через команду conf. Каждый компонент имеет совместимость со всеми или только некоторыми дистрибутивами. Список подключенных (через INCLUDE) и совместимых с текущей конфигурацией компонентов с их зависимостями можно получить командой:

linuxdeploy -p arch config -l
bootstrap Installer of Linux distibution
bootstrap/debian Bootstrap for Debian GNU/Linux
bootstrap/rootfs Prepare and import RootFS
core Core components
core/aid Android users and groups
core/emulator CPU emulation
core/hostname Hostname
core/hosts Hosts file
core/locale Localization
core/mnt Mount points configuration
core/motd Message after a successful login
core/net Network configuration
core/profile User and its environment
core/proot PRoot configuration
core/su SU command
core/sudo Sudoers file
core/timezone Time zone
core/unchroot Break chroot

Список всех компонентов:

linuxdeploy config -la

Список зависимостей для конкретного компонента:

linuxdeploy -p arch config -l extra/ssh

Запуск/остановка текущей конфигурации со всеми компонентами делается командами start и stop, например:

linuxdeploy -p arch start

Справку по всем подключенным компонентам можно получить командой help, информацию о конкретном компоненте можно получить так:

linuxdeploy help extra/ssh
Name: extra/ssh
Description: Secure shell (SSH) server
Target: debian:*:* ubuntu:*:* kalilinux:*:* archlinux:*:* fedora:*:* opensuse:*:* gentoo:*:* slackware:*:*
Depends: extra
Help:
--ssh-port=PORT
Port of SSH server.
--ssh-args=STR
Defines other sshd options, separated by a space.

На данный момент идет тестирование и отладка CLI, удалось добиться установки без прав суперпользователя дистрибутивов Debian (wheezy), Ubuntu (precise), Kali Linux (moto), Arch Linux, Gentoo и Slackware.