Как сделать клон linux приложений
У меня есть задача клонировать всю систему Ubuntu на множество новых компьютеров; включая RVM, Rails, . все бинарные файлы, библиотеки, пакеты в существующей системе Ubuntu должны быть перенесены на новые ПК.
Есть ли какой-нибудь инструмент, который вы можете порекомендовать?
Есть ли в Ubuntu что-то похожее на Time Machine для Mac OS?
Другой вопрос заключается в том, что в последние годы все мои компьютеры основаны на продуктах Intel.
Такие, как Ivy Bridge, Sandy Bridge, Haswell, . варьируется от I3 до I7.
Могу ли я по-прежнему использовать Clonezilla, потому что я думал, что наиболее хлопотными задачами являются установка и компиляция всех установленных пакетов.
1 ответ 1
Если ваши машины идентичны / очень похожи, может подойти очень простое решение (и мы много раз использовали его для управления нашим более чем 100 компьютерами). Если ваши машины изменяются, это все еще может работать довольно хорошо с Ubuntu; Единственная критическая вещь, о которой я могу подумать, это архитектура процессора - вы просто не сможете загрузить несовместимую арку, как бы вы ни старались. Любая вариация машины может потребовать некоторой настройки после установки.
Загрузите оригинальную систему из livecd и просто tar содержимое вашего диска и распакуйте его во вновь созданные разделы. Вам нужно только следить за тремя вещами:
- /etc/fstab
- порядок разбиения
- загрузчик
Подробно это выглядит примерно так (на livecd, на root)
Теперь отредактируйте etc/fstab чтобы использовать /dev/sd$ вместо UUID.
Теперь просто не забудьте правильно размонтировать pendrive (или любой съемный диск) (это может занять некоторое время).
Теперь загрузите целевую систему с livecd и (с правами root):
Теперь все готово.
Если у вас действительно много компьютеров, вы можете захотеть сделать загрузочный pendrive со скриптом, чтобы избавить вас от повторяющейся работы. После некоторого привыкания, ручной метод довольно быстр.
Вы также можете попробовать скопировать весь диск или разделы, используя dd . Я не пробовал этого раньше, но это кажется разумным. Таким образом, вы можете избежать перезаписи mbr на каждой машине.
Если вы хотите более надежное решение, есть Clonezilla, которая делает что-то очень похожее на AFAIK.
Кроме того, вместо клонирования вы можете создать скрипт для настройки каждого компьютера. Этот подход имеет ряд преимуществ. Наиболее заметно:
1) Использование других дистрибутивов невозможно, включая live CD, поскольку у нас очень строгий процесс утверждения и единственный дистрибутив, который мы можем использовать, - это RHEL.
2) Если возможно, нам нужно использовать программное обеспечение, входящее в состав пакетов RHEL. Мы по-прежнему приветствуем рекомендации другого программного обеспечения, но если мы сможем использовать что-то, что уже является частью RHEL, это сэкономит нам много документов.
Я понимаю, что мне кажется, что я пытаюсь усложнить работу, чем она должна быть, но такова природа корпоративных правил.
Спасибо за любую помощь!
Насколько точный клон вам нужен? Например, если есть LVM, должны ли совпадать идентификаторы? ext2 (и 3, и, вероятно, действительно большинство файловых систем Linux) имеет универсальный уникальный идентификатор (UUID) для каждой файловой системы; они должны совпадать между оригиналом и клоном?
Другими словами, зачем вам клон?
Нет ничего быстрее, чем dd для создания точного клона диска.
Некоторые альтернативы dd
Это шаги, которые я записал для перехода с большого управляемого LVM диска с установленной CentOS 5.5 на меньший диск (очевидно, что использованное пространство на большом диске было меньше, чем размер меньшего диска). Я уверен, что есть способы сделать это лучше, но этот метод оказался удачным. Некоторые шаги могут быть специфичными для нашей ситуации, при необходимости измените их.
Подключите новый диск
Проверить предыдущую геометрию с помощью fdisk -l . Скорее всего, у вас будет /dev/sda1 и /dev/sda2 в обычной конфигурации LVM. sda1 будет вашим / загрузочным разделом, который существует вне LVM. Его размер должен быть 1-13, а остальная часть диска предназначена для LVM.
- Создайте файловую систему для / boot на / dev / sdb1
- Настройте новый физический том, группу томов и логические тома и их файловые системы на / dev / sdb2. Заменить ?G с нужным размером. LogVol00 должен быть размером раздела LVM за вычетом необходимого размера тома подкачки, LogVol01 должен быть размером вашего подкачки.
- Смонтируйте новый диск и скопируйте на него содержимое старого диска с помощью cp -ax . Избегайте копирования /dev , /proc , /sys , /boot , /lost+found и /mnt
- Установите новый /boot и скопируйте на него содержимое со старого диска, затем размонтируйте его
На этом этапе выключите и удалите старый диск. Снова загрузитесь в режим восстановления. /dev/sdb теперь будет /dev/sda и установить на /mnt/sysimage
- Удалите компакт-диск, и на этом этапе вы сможете загрузиться с диска с измененным размером.
Что ж, если вы избегаете использования 'dd' и любого другого инструмента, не предоставляемого RHEL, то вы застряли с дублированием файловых систем и копированием содержимого (с помощью выбранного вами инструмента, cpio, tar, rsync и т. Д.) И установка GRUB на новый диск (и). Лучше всего это делать с остановленными дисками (возможно, загруженными в режим восстановления RHEL).
Какова цель клонирования диска? Чтобы быстро установить несколько систем? Затем создайте файл кикстарта с сервера, который нужно клонировать, и используйте его для установки других машин.
Для создания образов копий ваших дисков вы можете попробовать Ghost, Fog, Clonezilla и т. Д. (Даже VMware Converter и т. Д.).
Чем можно клонировать жесткий диск с Linux? (Кроме Acronis)
Модератор: Bizdelnick
Чем можно клонировать жесткий диск с Linux?
Чем можно клонировать жесткий диск с linux?
один вариант - Acronis
вот , что еще - можно попробовать Кроме Acronis ?
я бы использовал dd
но есть даже такие вещи
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
а вообще гугл рулит
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
Чем можно клонировать жесткий диск с linux?
один вариант - Acronis
вот , что еще - можно попробовать Кроме Acronis ?
1. Acronis --
2.
3.
4.
2.norton GHost
3. cp -a
dd if=/dev/hdX of=/dev/hdY (hdX - копируемый диск, hdY - диск, на который производится копирование)
Задача передо мной такая :
Есть один диск в сервере и второй диск , на котором должна возникнуть копия диска в сервере для Backup
Прошу пояснить - что происходит по вышеприведенной команде
а именно
1. как нужно подготовать жесткий диск hdY к копированию
нужно ли создать на нем файловую систему -аналог той , что на первом диске
лучше создать файловую систему иным способом -как именно?
либо же лучше вообще иметь неотформатированный винт
2. После того как произойдет загрузка linux - какой командой можно выяснить какой диск у меня /dev/hdX а какой
/dev/hdY
3. Какую дать команду лучше для монтирования /dev/hdY к /dev/hdX
4. Что именно будет выполняться затем по команде dd if=/dev/hdX of=/dev/hdY
а) произойдет создание файловой системы (то есть если были / на ext3 и /var на ext3 и /home на ext3 -тоже будет получено и на новом диске с такими же каталогами -то есть полный клон -видимо за исключением загрузочной записи)
b) копируются только каталоги -файловая система не создается
5. Если имеем диски разного обьема -как это отразится
Например 40 GB занято 4 GB
и 8 GB пустой диск
отразится ли разный обьем на переносе информации
6. . Прошу отнестись с пониманием к поставленным вопросам - очень буду признателен за ответ
И (понимаю, что счас меня убьют ) просьба не посылать к man или Google
отразится ли разный обьем на переносе информации
6. . Прошу отнестись с пониманием к поставленным вопросам - очень буду признателен за ответ
И (понимаю, что счас меня убьют ) просьба не посылать к man или Google
Правильно ставишь вопрос.
Сам я ничего советовать не буду, поскольку так и пользуюсь Акронисом. Все другие средства показались мне недостаточно удобными и адекватными. Но, возможно, просто я с ним давно уже работаю и поэтому доверяю больше. Я не нашёл аналогичного бесплатного продукта, который бы предоставил те же возможности, что и Акронис (это прежде всего гибкость, о которой и идёт речь).
Кстати, когда используешь загрузочный диск Акронис, то загружается ядро Linux (это видно по запросу для параметра ядра).
Разработчикам нужно отдать должное, что они сделали универсальный продукт для обеих систем. А то, что они за него просят денег - тоже вполне понятно. Хороший продукт. Можно купить одну копию и использовать с загрузочного диска. Что я и собираюсь сделать в ближайшее время. Осталось только определиться, какую версию купить.
"Нету смысла искать смысл там где нет ни какого смысла это бесмыслица ее все равно не осмыслить!" Burhan Haldun (Бесмысленые высказывания)
Уже не первый год использую Акронис, который выручал неоднократно.
Просто это универсальный продукт для обеих систем, который очень надёжен, функционален и гибок.
Перечисленные же средства самого Linux нельзя назвать универсальными, если речь идёт об обеих операционках.
Особенно это важно, когда на одном ПК установлены и Linux и Windows, либо когда система убита полностью и не загружается.
После установки и настройки системы на новом ПК (либо после глобальных обновлений) я сразу же делаю резервную копию с помощью Акронис. Если даже пользователь (либо ещё что-либо) полностью загубят систему, то я легко восстановлю её.
Все данные я храню всегда на отдельном от системы разделе. Там же храню и резервную копию в каталоге с правами только для администратора. Пока жёсткий диск живой - проблем с восстановлением не возникнет.
Для серверов используется немного другая схема. Для них я делаю периодически клонирование жёстких дисков целиков и ежедневный бекап важной информации (обычным копированием файлов и каталогов).
здесь есть ответы на все мои вопросы -надеюсь не только мои вопросы
Хорошо : вывод мы переносим только на жесткий диск большего размера или такого же
Тогда рассмотрим 2 очень даже реальные ситуации -собственно то, с чем столкнулся :
1. Есть рабочий диск на одном сервере -40GB . Под рукой для этого только старенькая -но вполне рабочая (без бэдов) восьмерочка -8GB
из некоторых соображений выписать новый жесткий диск -очень не желательно -поэтому хотелось бы использовать то , что есть -тем более , что жесткий диск рабочий -то есть жесткий диск 8GB
Итак у нас 40 GB с Linux разделами и пустой 8GB (из 40 используется 4. 4 на 8 влезет )
a ) Acronis - выполнить сию процедуру не может (пробовал Acronis 8 и Acronis 9) из-за разницы в обьеме
b) dd if=/dev/hdX of=/dev/hdY не подойдет ибо мы не сможем создать аналогичные партиции на жестком диске меньшего размера
2. Ситуация такая же -реальная -сейчас ее решаю
Рабочий сервер - Процессор Intel 75 Mhz ,память - 32Mb , жесткий диск -1GB . На нем крутится Firewall -и вообщем никто не жаловался
Делаю клон жесткого диска . Жесткий диск - WD 80GB . Жесткий диск WD теперь будет работать -а старый 1 GB - Backup диск
a) dd if=/dev/hdX of=/dev/hdY позволит осуществить перенос при котором будет использоваться 1GB из 80 GB . Хотя при этом все будет работать
b) Acronis позволит тоже самое - перенос 1 в 1 позволит далее использовать 1 GB
как посовеутете поступить ?
насколько грамотным выглядит решение использовать 1GB из 80 GB -если при этом все работает ?
поступили бы так ВЫ?
Подчеркиваю -обе ситуации счас стоят передо мной . Никакой фантазии
спасибо за внимание
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Я ничего об этом не знаю
здесь есть ответы на все мои вопросы -надеюсь не только мои вопросы
Хорошо : вывод мы переносим только на жесткий диск большего размера или такого же
Тогда рассмотрим 2 очень даже реальные ситуации -собственно то, с чем столкнулся :
1. Есть рабочий диск на одном сервере -40GB . Под рукой для этого только старенькая -но вполне рабочая (без бэдов) восьмерочка -8GB
из некоторых соображений выписать новый жесткий диск -очень не желательно -поэтому хотелось бы использовать то , что есть -тем более , что жесткий диск рабочий -то есть жесткий диск 8GB
Итак у нас 40 GB с Linux разделами и пустой 8GB (из 40 используется 4. 4 на 8 влезет )
a ) Acronis - выполнить сию процедуру не может (пробовал Acronis 8 и Acronis 9) из-за разницы в обьеме
b) dd if=/dev/hdX of=/dev/hdY не подойдет ибо мы не сможем создать аналогичные партиции на жестком диске меньшего размера
2. Ситуация такая же -реальная -сейчас ее решаю
Рабочий сервер - Процессор Intel 75 Mhz ,память - 32Mb , жесткий диск -1GB . На нем крутится Firewall -и вообщем никто не жаловался
Делаю клон жесткого диска . Жесткий диск - WD 80GB . Жесткий диск WD теперь будет работать -а старый 1 GB - Backup диск
a) dd if=/dev/hdX of=/dev/hdY позволит осуществить перенос при котором будет использоваться 1GB из 80 GB . Хотя при этом все будет работать
b) Acronis позволит тоже самое - перенос 1 в 1 позволит далее использовать 1 GB
как посовеутете поступить ?
насколько грамотным выглядит решение использовать 1GB из 80 GB -если при этом все работает ?
поступили бы так ВЫ?
Подчеркиваю -обе ситуации счас стоят передо мной . Никакой фантазии
спасибо за внимание
Акронис как раз предоставляет любые варианты. Проверено опытным путём. Нужно выбрать ручной режим и можешь делать всё, что угодно. Лишь бы на новом диске места хватало.
Видимо не разобрался.
Всем хороши Android-девайсы, но порой им крайне не хватает возможностей и утилит, имеющихся в настольной Linux. Отдельные инструменты, такие как Terminal IDE, частично выручают, но некоторого нужного функционала в них нет. Как же исправить ситуацию?
Введение
Как всем известно, Android имеет под собой фундамент в виде ядра Linux. Из этого следует, что в теории на смартфоне можно запустить все те приложения, что доступны на десктопном Linux. На практике же все сложнее. Поскольку набор Native-библиотек в Android отличается от такового на десктопе (не говоря уже об архитектуре платформы), приложения требуется компилировать статически. А иногда еще и патчить. Но и в этом случае работоспособность приложения не всегда гарантирована.
Что касается модулей ядра, которые могут быть весьма полезны на смартфоне (поддержка NTFS, например), то здесь все еще интереснее. Во многих ядрах от вендора отключена функция загрузки модулей (начиная с Android 4.3, это фактически требование Google. — Прим. ред.). Поэтому нам придется не только подобрать правильную версию ядра для сборки модулей, но и, возможно, пересобрать само ядро, включив такую поддержку, или просто добавить модуль в сам образ ядра.
Далее в статье мы рассмотрим, как побороть эти проблемы, и попробуем собрать модули Linux-ядра и несколько приложений.
Подготовка
Для сборки модулей (ядра) и приложений нам потребуется тулчейн, то есть связка из кросс‑компилятора и линковщика, плюс набор стандартных инструментов сборки, которые можно установить из репозитория (пример для Ubuntu):
$ sudo apt- get install git-core gnupg flex bison gperf build-essential zip curl libc6-dev lib32ncurses5-dev x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 git libtool
Теперь можно установить тулчейн. Их существует как минимум два — стандартный гугловский NDK и тулчейн от Linaro, куда сильнее оптимизирующий код. Различаются они еще и набором target-библиотек — если NDK содержит те библиотеки, которые имеются в Android и, соответственно, могут не подходить для сборки обычных POSIX-совместимых приложений, то Linaro включает минимальный набор стандартных POSIX-библиотек под ARM, для использования которых в гуглооси понадобится статическая линковка.
Добавим путь к тулчейну в ~/.bashrc (и заодно определим отдельные переменные, которые на время компиляции ядра, возможно, и не пригодятся, но в дальнейшем могут ой как понадобиться):
export PATH = $PATH : $ < HOME >/ android- ndk- r10c/ toolchains/ arm- linux- androideabi- 4. 6/ prebuilt/ linux- x86_ 64/ bin: $ < HOME >/linaro-toolchain-4.6/bin
Компиляция модулей и ядра
Далее настраиваем ядро с помощью стандартной команды make menuconfig, чтобы включить нужные нам модули. Затем собираем:
Конфигурирование ядра для устройства
Другие статьи в выпуске:
Сборка модулей
Для сборки исключительно модулей без самого ядра можно использовать либо команду make modules, либо, если ты включил всего один модуль, следующие команды (вместо net/netfilter подставь каталог собираемого модуля):
После сборки нам нужно все получившиеся файлы скопировать в единый каталог:
Затем, в случае полной компиляции, нужно собрать файлы в ZIP-архив. Не абы какой, а сформированный определенным образом (речь идет о файле обновления для кастомной консоли восстановления. — Прим. ред.). Для этого клонируем с гитхаба шаблон для данного файла:
Поскольку те утилиты, что имеются в этом автоматическом апдейтере, немного устарели (во всяком случае, на моем планшете они завершались с сегфолтом), нужно их заменить рабочими, которые берем на d-h.st/RgI, и, распаковав, заменяем ими файлы с теми же названиями в каталоге AnyKernel/kernel/. Кроме того, нужно изменить скрипт для автоапдейтера, находящийся в AnyKernel/META-INF/com/google/android/updater-script. В конечном итоге должно получиться примерно следующее:
run_ program ( "/ sbin/ busybox" , "dd" , "if=/ tmp/ newboot. img" , "of=/ dev/ block/ mmcblk0p9" ) ;
Путь /dev/block/mmcblk0p9 здесь — та часть, которую необходимо изменить. Это раздел boot, и почти на всех устройствах он будет представлен разными файлами. Чтобы узнать имя файла на своем устройстве, выполни следующую команду:
После правки запаковываем каталог:
Затем кидаем файл на устройство и устанавливаем его с помощью кастомного рекавери (TWRP или CWM).
После сборки и установки ядра должна получиться примерно такая картинка
Сборка приложений
Модули ядра позволяют добавлять функциональность исключительно низкого уровня, которую в общем случае нельзя использовать напрямую. Для добавления же функциональности, которую можно использовать напрямую, нужно собирать программы, чем мы сейчас и займемся, — попробуем собрать несколько приложений. Перед сборкой почти всех приложений нужно экспортировать ряд переменных:
И лишь затем можно приступать.
Bash собирать с помощью тулчейна Linaro очень легко — скачиваем исходники c официального FTP и распаковываем:
Выполняем скрипт configure и собираем:
$ . / configure --host = arm- linux --enable-static-link --without-bash-malloc --disable-rpath --disable-nls
После сборки появится файл bash, который мы и копируем на устройство в /system/xbin.
Bash, запущенный под Android
Стоит дать комментарии, почему bash нужно компилировать с помощью тулчейна Linaro. В Bionic, стандартной реализации библиотеки libc в Android, отсутствуют некоторые POSIX-совместимые функции, используемые bash (такие, например, как mkfifo() или wctomb()). Соответственно, собрать bash с использованием этой библиотеки без танцев с бубном не выйдет. В Linaro же, с другой стороны, используется стандартная POSIX-совместимая библиотека glibc. Поскольку мы собираем bash статически, нам все равно, что используется в Android, — главное, чтобы версия glibc, с которой мы собираем, подошла к ядру. Впрочем, сегодня обратное маловероятно.
Lshw — удобная консольная утилита, позволяющая быстро собрать информацию о доступном железе. Компилировать ее (опять же используя Linaro) достаточно просто. Скачиваем последнюю версию, распаковываем и заменяем в файлах src/Makefile и src/core/Makefile компилятор C++ на компилятор от Linaro (переменной CXX нужно присвоить значение arm-unknown-linux-gnueabi-g++), добавив также опцию --static в CXXFLAGS. Затем собираем обычным образом.
Это достаточно удобный консольный менеджер процессов для Linux. Для вывода информации он использует библиотеку ncurses, так что для его компиляции потребуется чуть больше времени. Создаем каталог htop, переходим в него и скачиваем ncurses:
Устанавливаем переменную $SYSROOT_ADDITIONS, запускаем configure с нужными параметрами и собираем:
$ . / configure --with-normal --without-shared --without-cxx-binding --enable-root-environ --disable-widec --disable-GPM --without-ada --without-tests --host = arm- linux --prefix = $SYSROOT_ADDITIONS
Поскольку нам нет смысла включать поддержку юникода и мыши и мы не собираемся делать эту библиотеку динамической, отключаем эти опции (а также отключаем поддержку языка Ada).
Скачиваем и распаковываем сам htop, предварительно перейдя на уровень выше:
Вновь переопределяем переменные окружения для сборки:
Конфигурируем и собираем:
После этого htop запустится без заморочек.
Htop, запущенный под Android
Tmux — менеджер терминалов, более продвинутая альтернатива известного всем админам screen, созданная разработчиками OpenBSD. В случае с Android его удобно использовать для работы с устройством через adb shell или SSH (например, ходить на TV Box или HDMI-стик под управлением Android. — Прим. ред.).
Для компиляции tmux нам понадобится все та же ncurses — ее можно взять из предыдущей сборки, скопировав каталог rootdir. Помимо ncurses, потребуется библиотека libevent. Создаем каталог tmux, устанавливаем переменную $SYSROOT_ADDITIONS и скачиваем libevent и сам tmux:
$ . / configure --host = arm- linux --disable-shared --disable-openssl --disable-samples -prefix = $SYSROOT_ADDITIONS
Подготавливаемся к сборке tmux:
И наконец, собираем сам tmux:
После сборки и заливки исполняемого файла перед запуском tmux, помимо переменной TERMINFO, нужно определить переменную TMPDIR — лично я использовал /data/local/tmp.
Стоит заметить, что tmux может работать только от рута, потому что права доступа не позволяют писать в вышеуказанную папку кому попало.
Сеанс SSH-соединения с Android. Для разделения терминала используется tmux. В левой части можно увидеть вывод lshw
Ngrep
А это крайне полезная утилита, позволяющая отлавливать пакеты с заданным паттерном (может быть нужно, например, для отладки RESTful-приложений). Для ее сборки потребуется собрать еще и libpcap. Как обычно, создаем каталог, куда и скачиваем libpcap, распаковываем его и собираем:
$ . / configure --host = arm- linux --disable-shared --with-pcap = linux --disable-dbus --prefix = $SYSROOT_ADDITIONS
Скачиваем сам ngrep, распаковываем, собираем:
$ . / configure --enable-static --disable-dropprivs --host = arm- linux --with-pcap-includes = $ < SYSROOT_ADDITIONS >/include/pcap
Разберем опции обоих configure. В случае с libpcap мы отключили поддержку DBUS по понятной причине отсутствия его в Android и указали тип захвата пакетов (поскольку компилируем мы в конечном итоге под Linux, то и тип захвата ставим соответствующий). Для ngrep же мы указали путь к заголовочным файлам libpcap и отключили понижение привилегий по причине отсутствия файла /etc/passwd в Android, куда эта функциональность смотрит.
Перехватываем пакеты, содержащие слово google, используя ngrep
Linux Deploy
Компиляция программ может занять немало времени, да и не всякое приложение можно с легкостью собрать (например, текстовый torrent-клиент rtorrent потребует сборку libtorrent, а уж эта библиотека, в свою очередь, потянет за собой Boost). И если для пары‑тройки приложений это не столь критично, то в случае сборки большего количества трудозатраты становятся слишком велики. Да и сами приложения в случае статической компоновки могут раздуваться до невообразимых размеров. Однако есть решение и для этой ситуации — Linux Deploy, который с легкостью можно найти в Google Play.
Поскольку Android построен на базе ядра Linux, а изменения в нем не настолько сильны, чтобы мешать запуску обычных POSIX-приложений (что и было продемонстрировано выше), существует возможность развертывания chroot-окружения (с пробросом соответствующих псевдофайловых систем) и установки в нем userland-части дистрибутивов, поддерживающих архитектуру ARM. Приложение Linux Deploy делает именно это, создавая образ и монтируя его как loop-устройство.
Поддерживаются следующие дистрибутивы:
- Ubuntu;
- OpenSUSE;
- Fedora;
- Arch Linux;
- Gentoo;
- и, наконец, Kali Linux (его наличие, несомненно, обрадует пентестеров).
После развертывания и запуска системы в нее необходимо каким‑то образом войти. Для этого существует два метода: по SSH и через VNC. При наличии SSH-сервера в самом Android в Linux Deploy нужно либо его отключить, либо переопределить порт. А если использовать VNC, необходимо доустановить в Android VNC-клиент (рекомендую bVNC). Стандартные имя пользователя / пароль — android/changeme соответственно.
Запуск окружения Ubuntu в Linux Deploy Ubuntu в Linux Deploy по виду неотличим от десктопного
В данном контейнере можно производить практически те же действия, что и в обычном настольном дистрибутиве Linux, — со скидкой на поддерживаемую ядром функциональность. Замечу, что контейнер не изолирован от основной системы, и запуск служб в некоторых дистрибутивах не поддерживается по причине использования в них современных систем инициализации. Также стоит помнить, что приложения в контейнере нативные, — это изрядно кушает батарею.
Заключение
В статье были описаны два (а если считать компиляцию ядра с модулями, то три) метода расширения функциональности на Android. Подведем итоги.
Компиляция ядра и модулей имеет смысл только в тех случаях, когда тебе нужна низкоуровневая функциональность — будь то поддержка ФС или, допустим, модуль iptables. В современных стоковых ядрах поддержка загрузки модулей чаще всего отключена, так что для добавления функциональности всяко потребуется компиляция всего ядра.
В случае с компиляцией небольших POSIX-приложений можно попытаться использовать гугловский NDK, идущий с Bionic и практически несовместимый с POSIX, а можно использовать сторонний тулчейн для архитектуры ARM, в котором, как правило, есть библиотека glibc, и компилировать приложения статически. Однако следует помнить, что статически слинкованное приложение весит достаточно много, таким образом, нелишним будет еще раз подчеркнуть, что этот метод годится лишь для небольших приложений.
Для запуска крупных приложений можно использовать Linux Deploy, позволяющий развернуть на Android полноценную userland-часть популярных дистрибутивов. Однако и у него есть недостатки. Во‑первых, он изрядно кушает батарею, а во‑вторых, размер образа с данной userland-частью не может быть больше 4 Гб, так что, если раскатал губу на кучу приложений, закатай ее обратно.
В целом же запуск POSIX-приложений в Android вполне возможен — что и было показано в статье. А уж каким способом ты будешь что‑то делать, ты волен выбирать сам. Stay freedom.
Библиотеки, портированные на Android
Несмотря на то что Android не является в полной мере POSIX-совместимой ОС, под него все же были портированы некоторые из библиотек, доступных под десктопной Linux. Посмотрим, что это за библиотеки:
В общем, с точки зрения портирования приложений выбрать есть из чего.
Читайте также: