Перейти к содержанию
    

Удаленная отладка программ на Linux

Не знаю, в ту ли ветку пишу, но назрел вопрос.

Есть удалённая железка на Raspbian, на ней работают некоторые программные модули. На железке есть хреновый мобильный интернет и можно открыть несколько портов. Один порт открыт для SSH.  Редактировать код, запускаемый на малине, необходимо с локального компа. Как автоматизировать процесс  загрузки новых файлов с локальной машины и их запуск ?  Кто нибудь такое делал ?

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

Может есть какое либо более изящное решение ?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, Digi сказал:

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

Может есть какое либо более изящное решение ?

наплодить ключ для ssh, положить в нужное место, т.с. обеспечив доверенное соединение, потом скриптами гонять пакеты нужную сторону

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в чем, собственно, проблема? У меня достаточно железок вроде "апельсинки" или "куби". Просто монтирую хомяка по sshfs. Открываю на своем компьютере в qtcreator и правлю спокойно код. А собираю и отлаживаю по ssh в терминале. Разницы с локальной работой почти никакой — только тормоза из-за "задумчивости" одноплатников (правда, иной раз реально бесит, когда перекомпиляция секунд 20 длится — и это гольный С, а не кресты с бустами и шаблонами!).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 часов назад, Digi сказал:

Как автоматизировать процесс  загрузки новых файлов с локальной машины и их запуск ?  Кто нибудь такое делал ?

Да. Речь идет о кросскомпиляции? Настройка шагов в 10, дальнейший процесс выгрузки и отладки в ОДИН клик. Уже обсуждалось, почитайте тут

Если хотите собирать исходники прямо на малине, то в Eclipse настраивается ремоут достут. все исходники на малине... запскт gcc из локального эклипса прямо на малине..... блин - забудьте удаленную сборку на таргете. Настройте кросскмпиляцию. Готовых кросскомпиляторов для малины полно. Если на локале не будет нужных сторонних библиотек (например boost, wiringpi, qt и т.п.) то их с малины на локальный десктоп скопировать и эклипсу указать путь к ним. 

11 часов назад, Eddy_Em сказал:

правда, иной раз реально бесит, когда перекомпиляция секунд 20 длится — и это гольный С

при кросскомпиляции натравить эклипс на 8 ядер на все ядра - сборка махом!!! Да и отладка прямо на таргете в человеческой в лучшей IDE возможна

 

Изменено пользователем razrab83

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не вижу смысла делать кросс-компиляцию чего-то мелкого. Можно и 20 секунд подождать.

Другое дело - генту собирать. Вот там — да, приходится делать qemu'вский чрут, чтобы собрать образ для "малинки" или "апельсинки". Армбиан, к сожалению, скатился в самое оно — ведь он основан на бубунте, а это — днище!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

SSHFS  у меня пару лет назад постоянно падало.

Самый простой вариант:

Как отправить с Линукса.

заходите в папку из которой надо скопировать файл "file" на малинку.

запускаете команду sftp pi@remote_raspberry_pi_ip_address. Полагаю, что username pi. Если сделали другое имя, то пишите его.

У вас будут работать команды ls cd, но уже на малинке. Заходите в нужную папку.

из директории, в которой вы находились копируете файл "file" командой "put file"

 

Второй вариант:

команда scp похожа на команду cp, только она копирует на удаленный или с удаленного компьютера. Перед абсолютным путем к файлу на удаленном компьютере необходимо написать pi@remote_raspberry_pi_ip_address:

Двоеточие в конце обязательно

 

scp /home/devel/raspberry_design/file pi@remote_raspberry_pi_ip_address:/home/pi/location

скопирует файл file из папки /home/devel/raspberry_design/ в папку /home/pi/location на удаленной малинке с IP адресом  remote_raspberry_pi_ip_address.

 

Если копировать с винды, то поставьте на нее winscp.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тогда давайте еще вспомним rsync…

Вообще же, если соединение нестабильное (а только по этой причине могут быть проблемы с sshfs), можно подмонтировать удаленный ресурс при помощи NFS. Прошло уже то время, когда NFS приводила к зависаниям компьютера. Сейчас все нормально работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 12/23/2019 at 4:43 PM, Digi said:

Не знаю, в ту ли ветку пишу, но назрел вопрос.

Есть удалённая железка на Raspbian, на ней работают некоторые программные модули. На железке есть хреновый мобильный интернет и можно открыть несколько портов. Один порт открыт для SSH.  Редактировать код, запускаемый на малине, необходимо с локального компа. Как автоматизировать процесс  загрузки новых файлов с локальной машины и их запуск ?  Кто нибудь такое делал ?

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

Может есть какое либо более изящное решение ?

 

Основных способов для отладки ПО с локальной машины всего два: компилируем на локальной машине (кросс компиляция) и отправляем на плату или компилируем непосредственно на плате. Для первого способа выбираете IDE для разработки, прописываете компилятор и как связываетесь с платой (TCF агент, SSH), для второго способа использую SSH и Visual Studio, проект создаю для удаленной компиляции под Линуксом. В этом случае исходники копируются на плату и там собираются. Запускать и отлаживать можно в VS. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Через SSH можно и копировать файлы (командой scp) и запускать команды и приложения на удаленной системе.

Вам надо публичный ключ с вашего рабочего компа положить в соответствующий файл на железке. Здесь написано как его сделать и добавить, но вам не надо делать. Просто возьмите тот которым  ваш локальный комп пользуется, когда подключается по SSH
https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server

или меньше букв:
https://serverfault.com/questions/241588/how-to-automate-ssh-login-with-password

 

Второй способ:

На локальный комп установите sshpass
sudo apt-get install sshpass
И используйте таким образом
sshpass -p your_password ssh user@hostname

Второй способ плох тем, что светите пароль, но исполнить его проще.

Как исполнять команды удаленно. 
Вот я на малинке 192.168.1.161, подключенной по первому способу (иначе попросит пароль) исполняю команду ifconfig

$ ssh -t [email protected] ifconfig
eth0      Link encap:Ethernet  HWaddr 02:хх:хх:хх:хх:хх
          inet addr:192.168.1.161  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::f8c5:eba9:81ff:fa60/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:369712530 errors:0 dropped:0 overruns:0 frame:0
          TX packets:14193387 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2751495000 (2.7 GB)  TX bytes:971323255 (971.3 MB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:588 errors:0 dropped:0 overruns:0 frame:0
          TX packets:588 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:49807 (49.8 KB)  TX bytes:49807 (49.8 KB)

Connection to 192.168.1.161 closed.

 

Теперь пишите скрипты и автоматизируйте процесс.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не пойму, какое отношение всё это копирование имеет к отладке? Отладка - GDB, который прекрасно работает по сети. Тулчейн с кросскомпилятором и gdb под целевую платформу собрать на ПК и подключаться. На цели понадобится только gdb (сервер).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 hours ago, NStorm said:

Я не пойму, какое отношение всё это копирование имеет к отладке? Отладка - GDB, который прекрасно работает по сети. Тулчейн с кросскомпилятором и gdb под целевую платформу собрать на ПК и подключаться. На цели понадобится только gdb (сервер).

Вы перечитайте вопросы, заданные ТС. Там в частности есть:
Как автоматизировать процесс  загрузки новых файлов с локальной машины и их запуск ?"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да читал, и даже заметил, что заданы они были в давнюю докороновируную эпоху ) Но т.к. тему продолжают, решил высказать своё удивление неподходящему к названию теме, а также оставить всё-таки пост по сабжу )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...