LINUX.ORG.RU

Сообщения max_lapshin

 

как соединить сервер с мобилой по шнурку (протокол общения по USB)?

стоит сервер на котором весь софт мы можем залить какой хотим

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

Я не понимаю, какой протокол общения будет между ними. На сервере что-то должно слушать USB, на телефоне должно пытаться найти кого-то с другой стороны USB.

Что это за протокол? Просто интернет между ними поднимать или искать какой-то ещё протокол общения?

UPD: https://github.com/libimobiledevice/ Этот демон запускается на линуксе и ловит пришедший айфон. На айфоне запускаем софтину, которую мы сами написали и она пытается соединиться с устройством по шнурку. Прототип айосного приложения там же, на гитхабе.

с андроидом пока не получилось.

 , ,

max_lapshin
()

стабильность PCI путей

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

Я для одного сервера написал systemd link правила по PCIe пути, выдающие имена, которые мне нужны.

Вопрос: можно ли рассчитывать на то, что в одной партии у одинаковых серверов будут одинаковые PCIe пути одинаковых карт?

 ,

max_lapshin
()

uboot aarch64 zImage: unsupported?

Ядро собирается в 30 мегабайт Image и порядка 6 мегабайт zImage

uboot на aarch64 не умеет грузить zImage.

Кто-нибудь видел объяснения, почему так?

Может встречал патчи для 64-битного декомпрессора?

UPD: uboot aarch64 zImage: unsupported? (комментарий) возможно

 , ,

max_lapshin
()

Управление systemd-networkd через API

Привет.

Я хочу управлять настройками сетевого интерфейса из веб-интерфейса.

Сеть построена на systemd-networkd

1) не могу найти, есть ли правильный способ спросить у systemd какие настройки сети используются?

Хочется узнать, что там вообще: dhcp или статический адрес и если статика, то какая?

2) судя по strace, networkctl ходит через NETLINK. Это разумный и легитимный способ получения фактической информации о сети?

 ,

max_lapshin
()

Что происходит в ядре, когда драйвер делает udelay?

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

Когда драйвер делает udelay, то он остается на ядре и занимает его? Другие драйверы или юзерские программы не могут пользоваться этим ядром?

Или всё таки внутри ядра есть какой-нибудь шедулер, который займет это время чем-то ещё?

 , ,

max_lapshin
()

Как правильно поллить результат inb (данные с порта)?

По LPT порту воткнута железка, на которой есть кнопка.

Когда кнопка нажата, из порта по адресу можно прочитать 1, когда не нажата — 0

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

 , , , ,

max_lapshin
()

Bounty: добавить в драйвер ядра intel/igb управление software defined pins

Есть сетевая карта intel i350 ( Intel i350: как подергать за gpio )

У неё есть возможность воспользоваться software defined pins.

У меня есть экземпляр карты (к сожалению пока только один, серию ещё будем заказывать), у которого к одному из пинов припаяна внешняя система

Мне нужно из userland управлять этими пинами.

Судя по документации и коду, который я вижу https://github.com/torvalds/linux/blob/master/drivers/net/ethernet/intel/igb/...

нужно подергать за нужные биты регистра CTRL (раздел 8.2.1) и CTRL_EXT (8.2.3) для доступа к пинам от 0 до 3.

Выглядит, что надо добавить к драйверу API для работы через gpio.

Я хочу:

1) получить возможность подергать за эти биты (это нужно сделать максимально быстро любым, даже самым грязным способом)

2) оформить это в виде патча к ядру линукса

3) по возможности отправить этот патч в mainline

UPD: вопрос снят, будем вливать патч в апстрим

 , , ,

max_lapshin
()

Intel i350: как подергать за gpio

Есть сетевая карта Intel i350:

04:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
	Flags: bus master, fast devsel, latency 0, IRQ 17
	Memory at df600000 (32-bit, non-prefetchable) [size=128K]
	I/O ports at e000 [size=32]
	Memory at df640000 (32-bit, non-prefetchable) [size=16K]
	Capabilities: [40] Power Management version 3
	Capabilities: [50] MSI: Enable- Count=1/1 Maskable+ 64bit+
	Capabilities: [70] MSI-X: Enable+ Count=10 Masked-
	Capabilities: [a0] Express Endpoint, MSI 00
	Capabilities: [100] Advanced Error Reporting
	Capabilities: [140] Device Serial Number 00-90-0b-ff-ff-5e-0a-a5
	Capabilities: [150] Alternative Routing-ID Interpretation (ARI)
	Capabilities: [160] Single Root I/O Virtualization (SR-IOV)
	Capabilities: [1a0] Transaction Processing Hints
	Capabilities: [1d0] Access Control Services
	Kernel driver in use: igb
	Kernel modules: igb

https://www.intel.com/content/www/us/en/embedded/products/networking/ethernet...

У неё есть GPIO выходы, к которым припаяли лампочку.

Мне хочется программно управлять этими выходами.

В спеке в разделе 1.4.8 указано, что есть Software definable pins и ими можно рулить через eeprom

Наверное мне надо научиться изменять eeprom что бы добраться до этих пинов через /sys/gpio?

 , ,

max_lapshin
()

Забрать в линуксе DHCP опции из PXE

Компьютер загружается по IPXE.

Скачивает ядро, initrd, запускает. Потом ещё раз получает настройки по dhcp.

Можно ли каким-то штатным образом забрать первый полученный dhcp ответ, что бы не делать повторное dhcp ожидание?

 ,

max_lapshin
()

Минимальная компиляция glibc: как правильно?

Хочу собрать glibc в минимальном размере. Дефолтная инсталяция make install занимает 178 мегабайт, хочется ужаться где-то до 2.

В glibc идут всякие штуки, которые мне для моей задачи не нужны абсолютно: sunrpc, hesiod, crypto и т.п.

План собрать маленькую glibc + busybox + dropbear и получить initramfs где-то мегабайт на 4-5 что бы быстро грузилось по PXE.

Меня удивило полное отсутствие туториалов. Обычно накопипастишь с серверфолта из первой половины страницы (где правильные ответы) и что-то работает, а тут полный ноль. Единственное упоминание попыток уменьшить размер установки glibc — https://wiki.netbsd.org/tutorials/how_to_reduce_libc_size/

Это очень круто, но не то.

В glibc при установке образуется куча всякого хлама, который в теории нужен десктопу, но никак не нужен изолированному серверу: iconv, gconv, локали, инклюды и т.п.

Есть какие-то правильные механизмы по сборке и упаковке glibc для минимального размера?

 , ,

max_lapshin
()

ipxe — он в ROM сетевухи или она его загружает?

Никак не могу разобраться, подскажите пожалуйста.

Когда dhcpd отдает сетевухе filename «menu.ipxe», в котором просто текстовый файл:

``` menu title PXE Boot Menu

timeout 50 default Network

label Network menu label Boot from PXE server kernel Image initrd uRamdisk ```

то кто этот файл читает и показывает? Сама прошивка сетевухи, верно?

 

max_lapshin
()

Bounty: добавить в mksquashfs поддержку чтения из tar напрямую (docker -> squash)

Есть утилита mksquashfs из пакета https://github.com/plougher/squashfs-tools

Она умеет делать readonly образ файловой системы.

Есть докер, который умеет выгружать свои образы в tar.

Когда в CI под не рутом распаковываешь tar в директорию, что бы из неё сделать squashfs, то убиваются все права, владение файлами и нельзя сделать файлы из /dev

Хочется что бы mksquashfs перепаковывал tar в образ напрямую, без распаковки на диск.

Мейнтейнер не понял, зачем это нужно: https://github.com/plougher/squashfs-tools/issues/25 а ему плохо объяснили.

Я готов заплатить за эту работу, нужен патч, который делает эту вещь. Достаточно уметь делать это не из стрима, а из файла, но из tar-стрима будет ещё лучше.

Код нужно будет залить в наш репозиторий https://github.com/flussonic/squashfs-tools и надо будет оформить pull request, который хорошо бы что бы приняли.

Оценки по времени и деньгам можно прислать мне напрямую на max@erlyvideo.org

 , ,

max_lapshin
()

упаковка debian для запуска с флешки (а-ля buildroot)

Хочу взять USB флешку и залить на неё дебиан так, что бы он запускался оттуда, сохранял на неё конфиги, но ничего типа логов не писал.

Для всяких ip-камер и роутеров есть buildroot, который позволяет удобно собрать готовый дистрибутив.

Есть что-то похожее для дебиана?

Не очень понятно: сделать ondemand чтение из сжатого образа ФС на USB флешке или сделать ramdisk, в который копировать всё на старте.

 ,

max_lapshin
()

разработчик на C в Эрливидео

Всем привет!

Я ищу нового коллегу нам в Эрливидео писать на C под линукс обработку видео.

Нужно будет:

  • девелопить наш транскодер (nvidia, ffmpeg, quicksync и прочие смежные технологии)
  • пилить обвязку вокруг видео-аналитики (нейросетки, Caffe), связанную с транскодированием видео

Работать можно как в Москве в офисе, так и удаленно.

Мы активно работаем с современными инструментами: git, redmine, CI/CD. Так, например, в большинстве проектов принято не давать мержить ветки без прогона тестов, а результат сразу пакуется в deb пакеты для установки.

Команда распределенная, так что много общения проходит в чате.

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

Зарплата: 120-170 тыс р, оформление белое по ТК РФ.

Присылайте резюме на hire@flussonic.com

 ,

max_lapshin
()

PLX PCIe switch + Amd threadripper

Есть потребность воткнуть как можно больше видеокарт на 16x PCI-E в компьютер.

Существуют материнки с PLX свитчами, которые берут у процессора, скажем, 20 линий и превращают их в ненастоящие 4*16 линий для того, что бы видеокарта думала, что у неё 16 линий и все 4 карты включались бы на полном режиме.

Чуда там конечно не происходит, но работает лучше, чем 4 в режиме 8 линий.

Есть AMD threadripper, у него 64 линии на выход, но из них несколько заняты под периферию.

А существует ли подобная штука типа plx для AMD? Ведь если из проца выходят свободные 60 линий, то превратить их в 64 будет гораздо эффективнее, чем 20 линий в 64.

Ведь очень обидно: стоит threadripper и на болте крутит интел, а воспользоваться этим не получается.

 , ,

max_lapshin
()

при установке старой версии пакета apt вытягивает слишком новые версии зависимостей

Есть репозиторий в котором лежита пакеты mytool версий 1.0, 1.5 и 2.0

Каждый из них зависит соответственно от пакетов mylib версий 1.0, 1.5 и 2.0

Я ставлю apt install mytool и получаю mytool-2.0 и mylib-2.0

Теперь я хочу откатиться до старого пакета (потому что мы же все знаем, что от долгого лежания из пакета улетучиваются баги):

apt install mytool=1.5

Я хочу что бы apt сам откатил зависимости до нужных, ведь я же не ставил сам руками mylib.

Вместо этого он пищит и всё портит, ругаясь на то, что неправильная версия mylib.

Проблеме не первый год: https://askubuntu.com/questions/531567/why-does-apt-get-install-a-newer-depen... и не первое десятилетие.

Она так и остается? Или для большинства это вообще не проблема?

 , ,

max_lapshin
()

Работа с systemd без sd_notify

Мы переводим наш flussonic на работу с systemd и я захотел воспользоваться его механизмом подтверждения того, что приложение запустилось.

Стандартный и официальный способ — использовать библиотеку systemd и использовать оттуда функцию sd_notify

Например для эрланга для этого есть библиотека https://github.com/systemd/erlang-sd_notify и похожее есть и для других платформ.

С этим подходом есть проблемы: 1) в любой современный язык втаскивать библиотеку на С — это задача, гораздо более неприятная, добавить библиотеку на самом языке. 2) в современных крутых платформах есть очень развитые подсистемы для работы с сокетом, а эта libsystemd делает чего-то, непойми что и не встраивается ни в libevent, ни в эрланговский event loop, ни в торнадо под питон.

Я решил сделать попроще, чего и вам советую:

https://gist.github.com/maxlapshin/01773f0fca706acdcb4acb77d91d78bb

ready() -> call(<<"READY=1">>).
reloading() ->call(<<"RELOADING=1">>).
stopping() -> call(<<"STOPPING=1">>).
watchdog() -> call(<<"WATCHDOG=1">>).


call(Call) ->
  case os:getenv("NOTIFY_SOCKET") of
    false ->
      {error, not_configured};
    Path ->
      case gen_udp:open(0, [local]) of
        {error, SocketError} ->
          {error, SocketError};
        {ok, Socket} ->
          Result = gen_udp:send(Socket, {local,Path}, 0, Call),
          gen_udp:close(Socket),
          Result
      end
  end.

в принципе вот всё, что нужно для работы с systemd. По ссылке более полный код на эрланге, его легко переписать за 10 минут на %LANG%

Понятно, что systemd не обещает сохранять api, но я бы вообще не стал рассматривать systemd как что-то очень продуманное и что не будет меняться следующие 10 лет. Всё равно всё будут перекраивать

 ,

max_lapshin
()

можно ли логинить ssh юзера сразу в /dev/ttyUSB0

Стоит компьютер, в него воткнуто несколько USB-TTL адаптеров.

Можно сделать так, что бы ssh usb0@host авторизовывало по ключу из /home/usb0/.ssh/authorized_keys, но терминал открывало сразу в ttyUSB0?

Хочется избежать промежуточного вызова миникома.

Кажется, надо что-то помудрить с pty, но никак не пойму что.

 ,

max_lapshin
()

Как избежать race в epoll edge-triggered режиме

Коллеги, я немного не понял вот какой момент.

Допустим, у меня есть сокет, который в неблокирующем режиме.

Я сделал epoll_wait, узнал что он активен. Читаю из него до EWOULDBLOCK, после чего сразу ухожу в epoll_wait.

Между последним чтением и вызовом epoll_wait мне приходят данные, но из-за edge-triggered режима я не получаю нотификацию (как мне кажется), потому что данные пришли до вызова epoll_wait.

Я правильно проинтерпретировал документацию? Если да, то как избежать этого race condition?

 , ,

max_lapshin
()

Прошу объяснить причину удаления тем

Некто jollheef без объяснения причин удалил две темы касающиеся Linux и Rust

www.linux.org.ru/forum/development/14181742 и старую тему Писать на Rust прошивку IP-камеры

Как узнать по какой причине?

 ,

max_lapshin
()

RSS подписка на новые темы