Как сделать клон linux приложений

Обновлено: 08.07.2024

У меня есть задача клонировать всю систему 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.

Кроме того, вместо клонирования вы можете создать скрипт для настройки каждого компьютера. Этот подход имеет ряд преимуществ. Наиболее заметно:

Как сделать клон HD с помощью RHEL 5.4?

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, запущен­ный под 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

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

Се­анс 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

Пе­рех­ватыва­ем пакеты, содер­жащие сло­во 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. Пос­мотрим, что это за биб­лиоте­ки:

В общем, с точ­ки зре­ния пор­тирова­ния при­ложе­ний выб­рать есть из чего.

Читайте также: