LINUX.ORG.RU

Каким софтом/скриптом настроить сеть из своего ПО

 


0

1

Всем привет. Занимаюсь сейчас софтом для некоего устройства, внутре устройства x86-комп. На стенку корпуса выведены интерфейсы компа: Ethernet, USB и прочее.

На компе Debian с голыми иксами и либами Qt, нужными для работы моего софта. Нужно научить софт настраивать сеть. Сперва пару дней ковырялся с NetworkManagerQt, а сейчас подключился к устройству и обнаружил, что там сетка вообще сконфигурирована через /etc/network/interfaces, что, в общем-то, видится намного более простым вариантом, чем продираться через иерархию классов NetworkManagerQt.

Поэтому прошу порекомендовать какой-нибудь проверенный инструмент (библиотеку, bash-скрипт), который я буду дёргать из своего софта, спрашивать у него сетевые настройки и передавать новые, которые нужно применить. Наверняка уже есть куча готовых инструментов для решения такой задачи, не самому же парсить и модифицировать этот файл.


который я буду дёргать из своего софта, спрашивать у него сетевые настройки

Хотел предложить iproute2 и ifupdown, но наткнулся на это

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

и как-то призадумался, не встречал готовых парсеров этого дела

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

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

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

ip из iproute2 но она только выставляет настройки не сохраняя их никуда на диск

вроде было так до внедрения systemd, NM и ко. Всё было в /etc/networking/interfaces и м.б. соседних файлах или поддиректориях /etc/networking. При загрузке очередного ранлевела, в котором есть сеть как фича, какой-то скрипт смотрел в /etc/networking, выполнял ifconfig или там ip с нужными параметрами и всё, интерфейсы настроены.

seiken ★★★★★
()
  1. Тебе не надо менять настройки сети

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

2.1. Сделай несколько реализаций скрипта которые настраивают разными способами

2.2. И пусть тот кто инсталирует твое приложение выберет тот скрипт который подходит ему. Или вообще напишет свой

no-dashi-v2 ★★★
()
Последнее исправление: no-dashi-v2 (всего исправлений: 1)

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

Есть нужно надуть щёки и втащить в твой qt-шный гуй настройки сети какбе «бесшовно», то .. ну можно попробовать утилиту nmcli подёргать, если dbus совсем не мил.

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

Лозунги про велосипеды придумали нубы которые сами не умеют писать даже такой тривиальный парсер. Не надо их слушать.

Если у тебя выбор между тратой 2000 человекочасов или использованием имеющегося инструмента, который тебе идеально подходит, то конечно переписывать ровно то же самое с нуля нецелесообразно. Если же у тебя выбор между тратой одного человекочаса на написание или 10 чаловекочасов на поиск, чтение мануалов и адаптацию чужого под свою систему - то очевиден выбор в пользу первого.

Выбирать надо именно исходя из затрат, а категориями велосипедов мыслить не надо.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)

Просто менять /etc/network/interfaces недостаточно, Настройки из него сами по себе не применяются. Придётся ещё что-то запускать (с правами рута), анализировать код завершения, возможно перехватывать stdout/stderr. Зачем эти костыли, если есть NetworkManager и systemd-networkd. Оба демоны (не надо ничего запускать от рута), оба с dbus интерфейсом (не надо ничего перехватывать и парсить). На мой взгляд NetworkManager лучше, потому что умеет wifi, в том числе, умеет показывать список беспроводных сетей.

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

Выбирать надо именно исходя из затрат, а категориями велосипедов мыслить не надо.

Надо только не забыть подсчитать трудозатраты потомков, которым твой замечательный велосипед предстоит портировать, адаптировать, багфиксить, развивать.

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

Ну маны-то полюбас читать придётся. Что та или иная опция в конфиге делает, какие вообще есть опции, как они друг на друга влияют, каковы допустимые значения (включая синтаксис), и тд и тп - в общем, подвсосать предметную область в любом случае нужно.

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

NetworkManager пока не радует. Возможно, я чего-то не понимаю или у меня версия с ошибками. Сетевые настройки через него можно поменять, судя по документации, методом update класса NetworkManager::Connection. Этот самый update принимает мапу с настройками. По всей видимости, сперва надо получить эти settings, поменять параметры, какие мне надо, потом передать в update. По пока неясной причине часть важных настроек типа DNS-серверов и IP-адресов хоста там тупа не заполнены.

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

Я не настолько хорошо знаком с файлом (и не только им) /etc/network/interfaces, чтобы за день сделать свой надёжный велосипед. Т.е. для его написания тоже некоторое (заранее неизвестное) время придётся изучать документацию.

Посмотрю сегодня ещё либу NetworkManager, если каменный цветок не будет выходить, тогда всё.

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

Если железка и дистр заранее определены, то можно сделать шаблон для этого файла с вписанными нужными значениями, и поддерживать только правку полей в этом шаблоне. В начало файла на всякий случай добавить коммент «autogenerated, do not modify». Так будет ещё проще. Дистр сам по себе никогда этот файл не модифицирует (кроме установщика).

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

ну вот мы ровно с этим же сценарием взяли systemd-network, он прекрасно управляется нами из нашего эрланга, решает все задачи и даже когда клиент хочет залезть ручками внутрь железки, в целом мы пускаем и это относительно безболезненно

max_lapshin ★★★★★
()