Comments 33

Скажите, насколько такой подход в целом проще и удобнее по сравнению с использованием нативных IDE для Linux, например, CLion, Netbeans, Eclipse, QtCreator, KDevelop? Дело только в привычке, или есть преимущества в разработке-сборке-отладке? Также, судя по всему, сборка идёт через MSBuild. Не помешает ли это в дальнейшем собирать проект непосредственно на линуксовой машине?


Однако для работы программы нужны повышенные права, так как она открывает файл устройства ввода.

Вот это не совсем понял. Вы же stdin/stdout всего лишь обрабатываете?

подключение через SSH к линукс, обычное такое дело, когда нет иксов, и я могу взять Visual Studio, подключившись к линукс серверу и отлаживать нативный линуксовый код не консольным GDB отладчиком, а в Visual Studio, где он графический и несоизмеримо удобней. Автор же сделал пример с VirtualBox и иксами, но это как один из вариантов, у меня к примеру крутится виртуалка на Microsoft Azure без иксов разумеется, и подключение только по SSH. Да и в добавок, это может быть Raspberry Pi на Raspbian, а монитор по HDMI к нему подключать не всегда самый лучший вариант, поэтому я могу подключаться и отлаживать код со своей машины на Visual Studio.
при использовании Visual C++ for Linux Development проект и собирается непосредственно на линуксовой машине
image

Поэтому вопрос о том, что потребуется, если понадобится собирать проект на CI-сервере, опакечивать или, например, собирать образы для докера? Сами понимаете, что нативные проекты на C/C++ могут быть довольно нетривиальны в сборке.

Да вся система сборки и потребуется.
Студия тут всего лишь для разработки и отладки; она вовсе не заменяет полностью систему сборки/упаковки.
Более того, готовый проект просто так (автоматически) в студию не перетащить: нужно вручную создавать проект, вручную добавлять исходники и настраивать солюшн. И всё ради того, чтобы иметь возможность редактировать и отлаживать.


Вот если бы в CMake добавить в качестве таргета солюшн для студии, но под linux — было бы уже весьма неплохим вариантом.

К вашему списочку CodeLite еще бы добавил, он похож по структуре со студией. Тоже использовал студию для Linux разработки, через VisualGDB по моему, еще второй плагин есть и я их все время путаю. И вот надобность в плагинах уже отпала. В целом да, просто привычнее было, сейчас я уже в основном использую CodeLite и QtCreator.
Программа открывает не stdin а напрямую файл устройства ввода: \dev\input\eventXX по этому и просит sodo.
Сборка осуществляется на удаленной машине, но контролируется Visual Studio, так что собирать все на Linux машине можно будет без проблем.

По поводу IDE сказать сложно. Я толком не писал никогда под Linux. Но ИМХО, Visual Studio лучшая и самая удобная IDE, которой есть куча полезных дополнений :) Один ReSharper C++ чего стоит…
Сборка осуществляется на удаленной машине, но контролируется Visual Studio, так что собирать все на Linux машине можно будет без проблем.

Но ведь скриптов сборки нет. А если писать, то получится дублирование кода.


Visual Studio лучшая и самая удобная IDE, которой есть куча полезных дополнений

Не создавая холивар, но какого ещё ответа ожидать от MVP, который писал только под Windows :) Но вообще да, согласен, VS для C++ пока что лидирует.


Один ReSharper C++ чего стоит…

Жаль, что CLion его возможности не поддерживает.

При сборке код как минимум копируется на целевую машину. Можно наверное генерить руками в постбилде например из под visual studio скрипты для сборки и тоже их копировать.

Ну а по поводу Visual Studio — конечно, другого от меня ждать сложно :) Я Code:Blocks поставил, что так им и не пользовался. Писал под Visual Studio Code в итоге. А потом переехал на этот плагин.

Eclipse я использовал для работы с Java как то. Он очень мне не понравился. Ощущения были как будто работаешь с сырым продуктом в Alpha версии.
По-поводу повышения прав — может можно решить эту проблему добавлением пользователя в нужную группу? Например, для доступа к последовательному порту, добавить пользователя в группу dialout.
Наверное можно так сделать. Мне нужен доступ к \dev\input\eventXX и возможность открыть сокет.
Но дело в том, что я не знаю в какой конфигурации будет работать софтина у заказчика. Будем этот вопрос с ними прояснять позже.
Но сразу подключиться из-под Visual Studio у меня не удалось, так как система почему то не пускала меня под единственным пользователем. Пришлось создать другого. Это можно сделать в System Settings->User Account.

А у пользователя есть пароль? По умолчанию запрещено подключаться по SSH к пользователю без пароля, можно поменять соответствующую настройку PermitEmptyPasswords


$ sudo -e /etc/ssh/sshd_config

Хотя это действие и не рекомендуется (лучше все же поставить пароль), однако на поиграться можно.


если проблема не в этом, тогда надо смотреть вывод лога после попытки подключения:


tac /var/log/auth.log | less
Пароль есть. Собственно я не вижу большой проблемы в создании нового пользователя на тестовой машине. По крайней мере мне так проще и быстрее, чем разбираться почему не пускает под одним пользователем.

Как появится пара свободных минут — попробую посмотреть логи. Спасибо

А как же чувство спортивного интереса? Я бы еще предположил, что в вашем образе пользователь по умолчанию — root (с какого-то времени по умолчанию стал запрет на подключения root-ом по паролю), интересен уже вывод :


echo $(id -u)

Больше на интерес пробило меня, в итоге скачал образ и подключился без проблем


Вывод консоли
 23:00:56  ~ 
$ ssh osboxes@localhost -p 4422
The authenticity of host '[localhost]:4422 ([127.0.0.1]:4422)' can't be established.
ECDSA key fingerprint is SHA256:STXIEoIBOaHeTKu5dzBigsfWri6TmRCeAlZ+JeA4GtM.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:4422' (ECDSA) to the list of known hosts.
osboxes@localhost's password: 
Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 4.4.0-31-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

0 packages can be updated.
0 updates are security updates.

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

osboxes@osboxes:~$ echo $(id -u)
1000
Давно наблюдаю за этим плагином под VS, но пока от его использования останавливает одно — есть куча сборок (кроскомпиляторов) GCC под windows, при этом компилирущих не только под x86 но и например под arm, но прикрутить такой кроскомпиятор к этому плагину пока что, увы ни как:( А это очень сильно ограничивает сферу применения, например у меня есть проект, целевая платформа которого — ARM Linux(raspbery pi, orange pi, итп), но он использует boost, и собирать его на arm linux, просто нереально долго, а иногда и памяти не хватает компилятору:( Если бы можно было настроить кроскомпиляцию при помощи VS а отладку на целевой платформе… Мечты…
Я вот тоже жалею об этом. Только в другом направлении. Мне интересней делать компиляцию под ARM микроконтроллеры. Я как раз сейчас пинаю разных ответственных людей из Microsoft на эти темы, но пока никакого вразумительного ответа от них не получил.
Но вот при копировании файлов почему то ~ воспринимается не как root директория, а просто как имя папки

Попробуйте в Remote Build Root Directory вместо ~/projects вписать /home/test/projects, обычно в таких случаях помогает.

Я попробую, но есть вероятность сломать все пути :) А вообще я уже отправил в MS описание этого глюка. Они обещали разобраться.
Кстати, я еще умею создавать «ярлыки» (.desktop файлы), которые позволяют запускать консольные приложения в графической среде, добавлять их в автозагрузку и отключать спящий режим :) Если кому нужно — могу дописать в статье.

Странная статья. Не очень понял, на кого она рассчитана. Вы показываете, как не разбираясь в устройстве Linux, не вникая в соглашения этой ОС, игнорируя практики разработки под Unix-like системы, разработывать что-то через GUI.


  • Что-то не получается?
  • chown с максимальными привелегиями.


  • Добавить пользователя?
  • Использовать gui.

Эти подходы, наверняка, хорошо работают в Windows, где на каждый чих нужно продавить десяток кнопок в специально для этого сделанных программах. Это, кстати, хорошо видно, на примере указания удалённой директории. Но это совершенно не Unix-way.


Выглядит это всё как заколачивание гвоздей микроскопом.

Странный коммент. Этим Вы показываете как невнимательно читаете
А встатье написано:
Так же, прошу сильно меня не ругать, я все-таки в Linux далеко не гуру. Лучше подскажите, если что-то можно сделать более оптимальным путем.

.

Ну будьте честны, эта ремарка в статье для красного словца. Если бы у автора действительно были сомнения в принятых им решениях и подходах, он бы не писал эту статью, не делал бы аккуратные скриншоты и не упомянал бы обязательное нажатие кнопки Unlock.

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

Устройство Linux на уровне архитектуры, как и устройство операционных систем в принципе, я вполне понимаю. Вопрос в деталях. И если бы я начал с того, что пошел бы изучать «соглашения ОС» читать man'ы и пытаться сделать из себя Linux разработчика — я бы наверное добился бы гораздо более «правильного» с точки зрения экосистемы Linux результата. Но потратил бы на это, допустим, пол года.

А задачу нужно было решать здесь и сейчас с теми навыками, которые есть. Вот и получился такой результат, который вполне удовлетворяет заказчика в рамках поставляемой системы. И при этом, потрачено было максимум 2 недели с учетом написания статьи.

Соответственно, я писал статью для того, чтобы поделиться опытом. Чтобы люди, которым нужно решать похожие задачи, решили их еще быстрее чем я, воспользовавшись тем опытом, который я уже получил.

Другими словами вы поддерживаете подход "оп-хлоп и в продакшн". Я верно понимаю ваши слова о "задачу нужно было решать здесь и сейчас с теми навыками, которые есть"?


И пожалуйста не говорите про полгода изучения соглашений — это какая-то с потолка взятая оценка. Разработчик с вашим опытом должен бы догадываться о таких вещах.


Меня вообще удивляет, что я веду такой диалог с человеком, который имеет за плечами больше 10 лет разработки, да ещё и является руководителем отдела.

Вы правы, это действительно в некотором роде «оп-хлоп и в продакшн». И дело не в Visual C++ for Linux Development, а в самом подходе. Вы рассматриваете происходящее в отрыве от контекста. Поверьте, дело не в лени, неумении или не знании. Это задача не стоит того, чтобы выделять на нее хоть какие-то серьезные ресурсы. И решена она была соответствующим образом. Мы же не подводную лодку строим. В любом случае, поднятые вами вопросы выходят за рамки статьи.

В процессе работы я столкнулся с конкретными трудностями, с которыми скорее всего столкнется множество других пользователей данного расширения для VS. В статье написано то, как с этими трудностями можно справиться. Не более того.
Знаете, мне кажется вы все же лукавите.

Допустим, что мотивация всего вашего туториала — это создание некоторого маленького консольного удалённого клиента на Linux-машине, который будет общаться с Win-сервером. В таком случае, учитывая уровень ресурса, да и ваш многолетний стаж, расписывать базовые шаги с картинками — ну это как-то несерьёзно. Особенно с случае с Linux, в которой ведётся значительная часть разработки(веб, мобильная etc.) в индустрии в 2017 году.

Поэтому рискну предположить, что данный исключительно DevOps туториал на уважаемом ресурсе нацелен на юные неокрепшие умы, которые хочет заполучить/заполучила Microsoft Student Partners.

По содержанию, это словно въехать на огромном глубоком мягком кожаном кресле в мастерскую, пробив при этом дверь, выломать панель управления и воткнуть туда свой здоровенный кабель и уехать, пробив ещё и ворота.
Думаю можно было и просто зайти, оглядеться, прочитать технику безопасности на двери, взять пару простых инструментов и сделать ту несложную задачу, о которой вы говорили.
Да, пришлось бы выбраться из зоны комфорта, осмотреться повнимательней на новой территории, но поверьте и вас, и ваших читателей это бы только обогатило.
Отличная аналогия! В чем-то вы правы. «Выбраться из зоны комфорта, осмотреться повнимательней на новой территории» безусловно было бы на много полезнее, но всему есть своя цена, в данном случае выражающаяся в потраченном на это времени.

В любом случае, статья вызвала такие эмоциональные комментарии, а значит была написана не зря. И люди, прочитав все это, как минимум получат тему для размышления.
Only those users with full accounts are able to leave comments. Log in, please.