Midnight Commander Shell Link на Андроид-сервер

kaztost
Сообщения: 223
Зарегистрирован: 17 июл 2017, 00:29

Сообщение kaztost » 17 дек 2017, 02:59

Долго не мог понять, почему mc-shell link не хочет соединять с андроидным ssh-сервером. Поколдовав с strace на обоих концах, понял причину: по fish-протоколу mc лезет на сервер командой /bin/sh. То есть симлинк /bin/sh->/system/bin/sh лучше создать на сервере независимо от наличия entware. От самого сервера тут вроде ничего не зависит. Если я здесь не ошибаюсь, то хотелось бы как-то это пофиксить в энтварном mc. Чтобы использовался шелл из переменной SHELL при неудаче с /bin/sh, например. Иначе какой-нибудь сервер может работать на нерутованном устройстве без возможности сделать /bin/sh. Эх... и еще бы c полурабочим sftp link как-нибудь разобраться.

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1912
Зарегистрирован: 09 авг 2015, 15:33

Сообщение Zyxmon » 17 дек 2017, 11:04

Действительно, в коде mc в нескольких местах жестко прошит путь /bin/sh
Заменил для fish /bin/sh на /opt/bin/sh (без проверки)
Если есть возможность - проверьте (entware-3x, armv7):
http://entware-3x.zyxmon.org/binaries/a ... mv7-3x.ipk
Если поможет, добавим проверку, есть ли /opt/bin/sh при использовании fish.

PS Проблема может быть не только тут.

kaztost
Сообщения: 223
Зарегистрирован: 17 июл 2017, 00:29

Сообщение kaztost » 17 дек 2017, 19:33

Проверил. В том смысле, что на новой версии shell link стал работать после создания /opt/bin/sh на сервере. То есть место в коде, которое вы меняете - правильное. Теперь хорошо бы туда поставить значение $SHELL или $(which sh) для лучшей совместимости с безрутовыми серверами на андроиде, таких как SSHelper и Termux-sshd.

Но и совсем менять /bin/sh на что-то иное тоже не надо. Этот путь - часть протокола. Надо попытаться дополнить его для случаев, когда /bin/sh отсутствует.

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1912
Зарегистрирован: 09 авг 2015, 15:33

Сообщение Zyxmon » 17 дек 2017, 20:05

Давненько я не брал в руки шашек (С) не мой.
Столько строк кода (целых девять) давно не писал. забыл уже как это делается. Теперь используется значение переменной окружения SHELL. Если его нет, то /bin/sh
Проверяем - http://entware-3x.zyxmon.org/binaries/a ... mv7-3x.ipk
Надеюсь не забыл совсем программирование.

kaztost
Сообщения: 223
Зарегистрирован: 17 июл 2017, 00:29

Сообщение kaztost » 17 дек 2017, 20:42

Кажись работает, но нужно догадаться как: пока используется $SHELL клиента, а не сервера. То есть запускаем SHELL=/system/bin/sh mc - начинает все работать. А тут как-то лучше брать дефолтный шелл на сервере, а не локальный.

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1912
Зарегистрирован: 09 авг 2015, 15:33

Сообщение Zyxmon » 17 дек 2017, 20:52

Ну так как сделать.
1. Чтобы работало?
2. Чтобы было универсально, не только под android?

Может переменную окружения для этого дела завести. EXTSHELL например. Если переменная не задана, то все будет (не работать) как и раньше.... Если же задана ....

kaztost
Сообщения: 223
Зарегистрирован: 17 июл 2017, 00:29

Сообщение kaztost » 17 дек 2017, 21:29

Надо будет мне тоже код глянуть (сейчас я пока только на маленьких девайсах). Переменные на клиенте вообще не катят - может потребоваться соединиться как с андроидом, так и с типичным линуксом, одновременно. Разве что-только завести файл типа ~/.ssh/ssh_config со списком серверов и соответствующих шеллов и его читать.

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1912
Зарегистрирован: 09 авг 2015, 15:33

Сообщение Zyxmon » 17 дек 2017, 21:37

kaztost писал(а):Источник цитаты Надо будет мне тоже код глянуть

Файл src/vfs/fish/fish.c. Патч - http://entware-3x.zyxmon.org/binaries/a ... _env.patch

kaztost
Сообщения: 223
Зарегистрирован: 17 июл 2017, 00:29

Сообщение kaztost » 18 дек 2017, 01:26

Вроде так работает:

Код: Выделить всё

/*    argv[i++] = "echo FISH:; /bin/sh"; */
    argv[i++] = "echo FISH:; $SHELL";

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1912
Зарегистрирован: 09 авг 2015, 15:33

Сообщение Zyxmon » 18 дек 2017, 10:46

kaztost писал(а):Источник цитаты Вроде так работает:

Элегантно. Можно даже разработчикам mc предложить. У меня (не android) по любому не работает.
Поэтому пакет для проверки http://entware-3x.zyxmon.org/binaries/a ... mv7-3x.ipk


Вернуться в «Entware на Android»

Кто сейчас на конференции

Всего 2 посетителя :: 0 зарегистрированных, 0 скрытых и 2 гостя (основано на активности пользователей за последние 5 минут)
Больше всего посетителей (162) здесь было 16 ноя 2019, 18:33

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя