LINUX.ORG.RU
ФорумMobile

Поднять SSH в chroot

 


0

1

Поставил Debian в chroot на Android 4.4 таким образом. Запускаю контейнер

cd /data
mount -o bind /dev/ debian-atom/dev
mount -o bind /sys/ debian-atom/sys
mount -o bind /proc/ debian-atom/proc
mount -o bind /dev/pts debian-atom/dev/pts
mount -t tmpfs none debian-atom/run
chroot debian-atom/ /bin/login -f root
Внутри поставил SSH из реп, но получаю
root@localhost:~# systemctl start sshd.service
Running in chroot, ignoring request: start
root@localhost:~#
Как починить? Или таким образом можно только дистрибутив без systemd поставить?

★★★

Последнее исправление: damix9 (всего исправлений: 2)

sysfs и procfs лучше монтировать не с хоста, а как none. sshd запускается просто, нет необходимости в юнитах. Тем более вряд ли у тебя там вообще будет нормальная инициализация, для начала.

anonymous
()
Ответ на: комментарий от anonymous

sshd запускается просто

Просто - это как?

Ну ок. Допустим, на SSH я забью. А как с остальными службами быть?

Тем более вряд ли у тебя там вообще будет нормальная инициализация, для начала.

Ну вот я и хочу узнать, как сделать эту самую нормальную инициализацию в контейнере. Я хочу устанавливать туда серверное ПО. Это будет домашний сервер.

damix9 ★★★
() автор топика
Ответ на: комментарий от Anoxemian

Это в Андроиде, тут нельзя просто systemd-nspawn. Anoxemian, sin_a, не будьте токсиками, объясните всё по-доброму и чтобы я дураком себя не почувствовал, я новичок так я не пойму, это проблема только с системди или хоть с каким инитом она была бы? Вот тут что-то возможно по теме, но непонятно.
http://0pointer.de/blog/projects/changing-roots

damix9 ★★★
() автор топика
Ответ на: комментарий от damix9

Таки по твоей ссылке все расписано, в хостовой стстеме systemd работает от pid=1, посему не может оперировать в чруте. Используй либо nspawn либо по моей ссылке в user mode через tmux или аналоги, чтобы сессия не прибивалась.

Anoxemian ★★★★★
()
Ответ на: комментарий от damix9

То, что ты делаешь – сервер в контейнере, реализовано в lxc (а ранее в openvz). Ничего не надо, всё уже готово. В качестве готового решения можно взять proxmox, хотя бы в качестве примера.

Но если это в контексте андроида то готового lxc там скорее всего нет и придётся что-то делать самому.

sin_a ★★★★★
()

pfg, запускается без ошибок.

sin_a, Anoxemian, так в хостовой нет системди.

Используй либо nspawn

так нельзя nspawn. Или я что-то туплю?

Таки по твоей ссылке все расписано

А чего нажать-то надо?
Скопировать юнит в

/etc/systemd/system/
и добавить ему
RootDirectory=/data/debian-atom
?

Либо создать еще одного юзера, скопировать юнит в

/etc/systemd/user/
и запускать его
systemctl --user start sshd
?

damix9 ★★★
() автор топика
Ответ на: комментарий от mittorn

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

damix9 ★★★
() автор топика
Ответ на: комментарий от damix9

Ну вот я и хочу узнать, как сделать эту самую нормальную инициализацию в контейнере.

Тут проблема в том, что у тебя нет контейнера, у тебя есть образ (chroot). Контейнер это пространство имён в ядре, и для него нужна поддержка. Если у тебя оно будет, все вопросы в основном снимутся автоматически. А так лепи инициализацию из палок и того, что было рядом. systemd даже в нормальном контейнере предъявляет какие-то требования к хосту, в твоём случае я вообще не уверен, что он сможет нормально работать.

anonymous
()
Ответ на: комментарий от damix9

Если ты используешь chroot, а не контейнер, то не сможешь использовать init обычным способом, потому да.
В принципе у systemd должна быть возможность работы в chroot, но я не в курсе подробностей.
Для нужных сервисов у меня обычно есть скрипт, запускающий их через start-stop-daemon

mittorn ★★★★★
()
Ответ на: комментарий от damix9

sshd в systemd системе может быть вообще сетевым сервисом наподобии inetd. То есть systemd вместо того чтобы поддерживать процесс sshd запущенным, сам принимает подключение и запускает воркеры sshd, которым передаёт его. Из плюсов - не надо держать sshd постоянно в памяти, из минусов - обработка соединений яжелее, чем при обычном запуске sshd, для которого нужен только fork() а не fork() + exec() ну и отсутствие авозможности запуска через start/stop, для systemd просто он существует как сетевая сущность пока сщуествует сетевое подключение

mittorn ★★★★★
()
Ответ на: комментарий от mittorn

А какие проблемы с аккумулятором, кроме того, что он от этого изнашивается?

Я имел в виду, что Android не приспособлен к тому, чтобы в нём запускать службы из серверного Линукса, даже в chroot.

damix9 ★★★
() автор топика

https://www.reddit.com/r/termux/comments/17ze7wj/systemd_in_chroot/ разработчик termux пишет, что в принципе возможно. Но 4.4 очень старая версия, вполне возможно что там cgroups не поддерживаются, или еще чего нужного в ядре. Я бы не рассчитывал на сустемд в этом отношении.

Lrrr ★★★★★
()
Ответ на: комментарий от damix9

Проблемы такие, что стоит, стоит сервер, аккумулятор постоянно хоть чуть чуть раьотает, потом в какой-то момен начинаеет раздуваться, взрывается и бахает, сжигая всё вокруг. И не все soc будут запускаться без подключенного аккумулятора. На allwinner a10/a13/a20 вроде проблем с этим не было.
касательно android, так а в чём проблема тебе самому запустить сервис? при желании даже openrc можно попытаться запустить.
На systemd - не расчитан, да. Но зачем тебе на таком устройстве systemd? Если действительно хочешь systemd - тебе потребуется pid namespace. Если pid namespace поддерживается к ядре - можно chrootнуться в init через unshare - фактически это и есть контейнер со своим инитом. Но я не вижу смысла заморачиваться, если ты просто хочешь запустить сервисы. Для этого есть start-stop-daemon. Если нужен автоперезапуск - то через этот start-stop-daemon можно запустить shell скрипт, который будет в цикле перезапускать. Так же есть screen/tmux, которые можно запускать сразу в detached режиме. Я это использую для сервисов с интерактивным управлением

mittorn ★★★★★
()
Последнее исправление: mittorn (всего исправлений: 2)
Ответ на: комментарий от mittorn

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

Так чем это принципиально отличается от ноута, все время воткнутого в розетку? Почему они не взрываются?

damix9 ★★★
() автор топика
Ответ на: комментарий от damix9

ноуты могут отключать заряд и могут питаться без подключенного аккумулятора. Контроллёра питания/заряда в телефонах может даже не хватать для его питания, в этом случае аккумулятор играет роль буффера при скачках потребления. Даже если хватит, телефон просто не запрограммирован так, чтобы не гонять аккумулятор будучи постоянно подключенным к сети

mittorn ★★★★★
()
Последнее исправление: mittorn (всего исправлений: 1)
Ответ на: комментарий от mittorn

На правах оффтопа:

Обидно как-то. У меня на этом A1-840 FHD идет тяжелейшая современная лиса с расширениями, а на современном Android 7 смартфоне с такими же 2 Гб памяти она еле шевелится. Я этот планшет погонял, он такой шустрый, у него настройки открываются мгновенно, и главное меню, и любое меню в настройках. Веб-серфинг по тем сайтам, которые не отказываются работать в браузере 2020 года, последнем идущим на этом api, тоже достаточно бодрый. Newpipe legacy бы еще собирали, можно было бы слушать ютуб. Но и тот, который есть последний, тоже не тормозит. И еще я офигел, какой же красивый был этот четвертый андроид. Вот самый закат эпохи скевоморфизма. Еще где-то он местами оставался. Я не знаю, может это уже сквозь призму ностальгии.

damix9 ★★★
() автор топика