LINUX.ORG.RU

Сообщения tsmx

 

Не заводится Tor, не вижу никаких подключений в wireshark

Форум — General

Всем привет.

Есть машина с арчом, на ней есть тор с дефолтным конфигом. Тор не работает. Здесь можно много разбираться, почему так происходит, но меня смущает одна деталь: когда тор рестартится, он не шлёт вообще никаких исходящих пакетов. Вот кусок лога:

$ journalctl -r -u tor.service | head -33
Jan 10 22:12:47 #### systemd[1]: Started Anonymizing overlay network for TCP.
Jan 10 22:12:47 #### Tor[3853]: Signaled readiness to systemd
Jan 10 22:12:47 #### Tor[3853]: Starting with guard context "default"
Jan 10 22:12:47 #### Tor[3853]: Bootstrapped 0% (starting): Starting
Jan 10 22:12:47 #### Tor[3853]: Parsing GEOIP IPv6 file /usr/share/tor/geoip6.
Jan 10 22:12:47 #### Tor[3853]: Parsing GEOIP IPv4 file /usr/share/tor/geoip.
Jan 10 22:12:47 #### Tor[3853]: Opened Control listener connection (ready) on 127.0.0.1:9051
Jan 10 22:12:47 #### Tor[3853]: Opening Control listener on 127.0.0.1:9051
Jan 10 22:12:47 #### Tor[3853]: Opened Socks listener connection (ready) on 127.0.0.1:9050
Jan 10 22:12:47 #### Tor[3853]: Opening Socks listener on 127.0.0.1:9050
Jan 10 22:12:47 #### Tor[3853]: Read configuration file "/etc/tor/torrc".
Jan 10 22:12:47 #### Tor[3853]: Tor was compiled with zstd 1.5.0, but is running with zstd 1.5.1. For safety, we'll avoid using advanced zstd functionality.
Jan 10 22:12:47 #### Tor[3853]: Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning
Jan 10 22:12:47 #### Tor[3853]: Tor 0.4.6.9 running on Linux with Libevent 2.1.12-stable, OpenSSL 1.1.1m, Zlib 1.2.11, Liblzma 5.2.5, Libzstd 1.5.1 and Glibc 2.33 as libc.
Jan 10 22:12:47 #### Tor[3853]: We compiled with OpenSSL 101010cf: OpenSSL 1.1.1l  24 Aug 2021 and we are running with OpenSSL 101010df: 1.1.1m. These two versions should be binary compatible.
Jan 10 22:12:47 #### tor[3853]: Jan 10 22:12:47.267 [notice] Opened Control listener connection (ready) on 127.0.0.1:9051
Jan 10 22:12:47 #### tor[3853]: Jan 10 22:12:47.267 [notice] Opening Control listener on 127.0.0.1:9051
Jan 10 22:12:47 #### tor[3853]: Jan 10 22:12:47.267 [notice] Opened Socks listener connection (ready) on 127.0.0.1:9050
Jan 10 22:12:47 #### tor[3853]: Jan 10 22:12:47.267 [notice] Opening Socks listener on 127.0.0.1:9050
Jan 10 22:12:47 #### tor[3853]: Jan 10 22:12:47.265 [notice] Read configuration file "/etc/tor/torrc".
Jan 10 22:12:47 #### tor[3853]: Jan 10 22:12:47.265 [warn] Tor was compiled with zstd 1.5.0, but is running with zstd 1.5.1. For safety, we'll avoid using advanced zstd functionality.
Jan 10 22:12:47 #### tor[3853]: Jan 10 22:12:47.265 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning
Jan 10 22:12:47 #### tor[3853]: Jan 10 22:12:47.265 [notice] Tor 0.4.6.9 running on Linux with Libevent 2.1.12-stable, OpenSSL 1.1.1m, Zlib 1.2.11, Liblzma 5.2.5, Libzstd 1.5.1 and Glibc 2.33 as libc.
Jan 10 22:12:47 #### tor[3852]: Configuration was valid
Jan 10 22:12:47 #### tor[3852]: Jan 10 22:12:47.247 [notice] Read configuration file "/etc/tor/torrc".
Jan 10 22:12:47 #### tor[3852]: Jan 10 22:12:47.247 [warn] Tor was compiled with zstd 1.5.0, but is running with zstd 1.5.1. For safety, we'll avoid using advanced zstd functionality.
Jan 10 22:12:47 #### tor[3852]: Jan 10 22:12:47.247 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning
Jan 10 22:12:47 #### tor[3852]: Jan 10 22:12:47.247 [notice] Tor 0.4.6.9 running on Linux with Libevent 2.1.12-stable, OpenSSL 1.1.1m, Zlib 1.2.11, Liblzma 5.2.5, Libzstd 1.5.1 and Glibc 2.33 as libc.
Jan 10 22:12:47 #### systemd[1]: Starting Anonymizing overlay network for TCP...
Jan 10 22:12:46 #### systemd[1]: Stopped Anonymizing overlay network for TCP.
Jan 10 22:12:46 #### systemd[1]: tor.service: Deactivated successfully.
Jan 10 22:12:46 #### systemd[1]: Stopping Anonymizing overlay network for TCP...
Jan 10 22:12:46 #### Tor[3735]: Interrupt: exiting cleanly.

Вот кусок капа в wireshark: https://0x0.st/oiy2.png

Виден мой пинг до 8.8.8.8 с целью убедиться, что захват работает, и ещё несколько очевидно не торовских пакетов. Вопрос: где трафик тора, почему его заело, как это диагностировать вообще?

Вот конфиг, если нужно (не менял почти ничего, только control port включил):

$ cat /etc/tor/torrc | grep -v '^\(#\|$\)'
User tor
Log notice syslog
DataDirectory /var/lib/tor
ControlPort 9051
HashedControlPassword 16:##########################################################

 ,

tsmx
()

Как натянуть торрент между двумя машинами в VPN?

Форум — General

Есть VPN, состоящий из ноута с малюсеньким SSD в злой тоталитарной стране, в которой за торренты приходят письма счастья от провайдера, и сидбокса с HDD на несколько терабайт в святой Россиюшке, в которой до такого ещё не догадались. На обоих узлах в качестве клиента юзается Transmission. Чтобы скачать торрент, я качаю его на сидбокс и оттуда тащу через VPN с помощью scp.

Проблема в том, что с таким подходом задержка между началом загрузки на сидбокс и окончанием загрузки на ноут удваивается, и это не считая того, что я не сразу реагирую на окончание загрузки на сидбоксе и могу добавить ещё пару часов человеческого фактора.

Собсна, хочу сделать так, чтобы можно было сразу после добавления раздачи на сидбокс добавить такую же раздачу на ноут, причём единственным доступным пиром должен быть сидбокс в VPN. Как это сделать с минимальным объёмом лишних телодвижений? Трансмиссия так умеет? Что-то типа подъёма трекера для VPN на сидбоксе?

 

tsmx
()

Зачем mpd нужен каталог с музыкой (и годится ли он вообще для моего юзкейса)?

Форум — Desktop

Собсна, начну с юзкейса: у меня на андроиде стоит AIMP, в нём один здоровый плейлист, в который я постоянно собираю ручками звуковой мусор, накачанный с интернетов в разные уголки файловой системы. И вот этот плейлист слушаю в разных местах, переключаясь между треками на кнопки в постоянном уведомлении в «шторке».

Теперь я хочу абсолютно аналогичную штуку в линухе: где-то в фоне висит демон плеера, у него есть клиент, который умеет штуки типа «добавить файл ~/cum.mp3 в конец плейлиста», «пауза», «плей» и т.д. - без интерфейса, чисто чтобы забиндить отдельные действия на сочетания клавиш в оконном менеджере. В идеале чтобы этот плейлист был ещё где-то в виде текстового файлика со списком путей и его можно было руками легко подредачить.

Глянул на описание mpd/mpc и мне они на первый взгляд подошли. Но когда дело дошло до настройки, у меня начали требовать указать каталог с библиотекой музыки, и я немного запутался: а зачем ему это? Т.е. я не хочу, чтобы демон какие-то там библиотеки поддерживал, читал теги и т.д., я просто ручками хочу составлять один жирный плейлист с путями, кроме него, никакой информации демон поддерживать между запусками не обязан.

Собственно, если не указывать в конфиге каталог библиотеки и путь к базе данных, mpc add ~/cum.mp3 валится с ошибкой error adding cum.mp3: No database.

Как сделать то, что я хочу, и годится ли для этого mpd?

 ,

tsmx
()

Full-mesh VPN без публичных узлов?

Форум — General

В текущий момент юзаю tinc с одной публичной нодой на халявном инстансе AWS EC2, все остальные ноды за провайдерскими NAT-ами. Всё бы хорошо, всё работает, но триал скоро истекает, платить не хочу, да и сообщения от AWS на мыло «ваш лимит скоро будет исчерпан» немного нервируют: tinc служебным трафиком как раз примерно гигабайт в месяц жрёт. Хочу другое решение.

Смотрел на Zerotier, пока думаю остановиться на нём, но возникла мысля: а есть ли истинно децентрализованное решение, вообще не подвязанное на каких-то чужих серверах для установки соединений? Типа как поставил софтину на каждую ноду, бутстрапнул их ручками, а дальше оно само крутится, каждая нода поддерживает адреса всех остальных нод, и неважно, что ноды под NAT-ами, с динамическими адресами и вообще всё плохо. Понятно, что в плане стабильности всё будет куда хуже, чем когда у нас есть служебный сервер с публичным IP (особенно когда одну ноду выдернуть на недельку, а за это время у всех остальных адреса поменялись), но всё-таки: есть ли на свете что-то похожее?

 

tsmx
()

Торрент-клиент на сервер, умеющий нормально работать со многими пользователями

Форум — General

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

По советам из г*гла попробовал поставить transmission-daemon, но он мне не очень понравился, т.к. завязан на системный сервис, работающий от имени отдельного пользователя и файлы создающий от него же. Другими словами, любой другой пользователь, имеющий доступ к серверу, сможет посмотреть любые непотребства, которые я накачал себе в домашний каталог. Кажется, это не совсем правильный подход.

Хотелось бы, чтобы сервис запускался в пользовательской сессии от имени пользователя (systemd вроде должен так уметь, правда? вижу, что на основном компутере пучок каких-то непонятных процессов с пульсой во главе у меня, например, от systemd –user форкается) и файлы создавал от него же, а если другой пользователь захочет тоже торрентить, то пусть свой сервис запускает.

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

Ну, или скажите, что я чего-то недолуркал и трансмиссия так умеет.

 

tsmx
()

Настройка pulseaudio для работы с bluetooth-наушниками

Форум — Desktop

Есть ноут с archlinux+i3 на борту.

В общем, пока не было блютус-наушников, всё работало примерно так: по дефолту звук идёт на динамики, если втыкаю проводные уши, звук идёт на уши. У обоих девайсов из коробки различный набор настроек громкости, так что если замутить динамики и воткнуть уши, которые в прошлый раз были включены на полную громкость, звук пойдёт на полную громкость. Синк пульсы выглядит вот так:

$ pactl list sinks
Sink #0
	State: IDLE
	Name: alsa_output.pci-0000_05_00.6.analog-stereo
	Description: Family 17h (Models 10h-1fh) HD Audio Controller Analog Stereo
	Driver: module-alsa-card.c
	Sample Specification: s16le 2ch 44100Hz
	Channel Map: front-left,front-right
	Owner Module: 7
	Mute: no
	Volume: front-left: 65504 / 100% / -0.01 dB,   front-right: 65504 / 100% / -0.01 dB
	        balance 0.00
	Base Volume: 65536 / 100% / 0.00 dB
	Monitor Source: alsa_output.pci-0000_05_00.6.analog-stereo.monitor
	Latency: 100765 usec, configured 100136 usec
	Flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY 
	Properties:
		alsa.resolution_bits = "16"
		device.api = "alsa"
		device.class = "sound"
		alsa.class = "generic"
		alsa.subclass = "generic-mix"
		alsa.name = "ALC257 Analog"
		alsa.id = "ALC257 Analog"
		alsa.subdevice = "0"
		alsa.subdevice_name = "subdevice #0"
		alsa.device = "0"
		alsa.card = "1"
		alsa.card_name = "HD-Audio Generic"
		alsa.long_card_name = "HD-Audio Generic at 0xd05c0000 irq 78"
		alsa.driver_name = "snd_hda_intel"
		device.bus_path = "pci-0000:05:00.6"
		sysfs.path = "/devices/pci0000:00/0000:00:08.1/0000:05:00.6/sound/card1"
		device.bus = "pci"
		device.vendor.id = "1022"
		device.vendor.name = "Advanced Micro Devices, Inc. [AMD]"
		device.product.id = "15e3"
		device.product.name = "Family 17h (Models 10h-1fh) HD Audio Controller"
		device.string = "front:1"
		device.buffering.buffer_size = "17664"
		device.buffering.fragment_size = "2944"
		device.access_mode = "mmap"
		device.profile.name = "analog-stereo"
		device.profile.description = "Analog Stereo"
		device.description = "Family 17h (Models 10h-1fh) HD Audio Controller Analog Stereo"
		alsa.mixer_name = "Realtek ALC257"
		alsa.components = "HDA:10ec0257,17aa5127,00100001"
		module-udev-detect.discovered = "1"
		device.icon_name = "audio-card-pci"
	Ports:
		analog-output-speaker: Speakers (priority: 10000, not available)
		analog-output-headphones: Headphones (priority: 9900, available)
	Active Port: analog-output-headphones
	Formats:
		pcm

В i3blocks висел такой скриптик, которого с одним синком вполне хватало:

#!/bin/bash
vol=$(pactl list sinks | grep "^\sVolume:" | sed "s/^.*\s\([0-9]\+%\).*$/\1/")
mute=$(pactl list sinks | grep "^\sMute:" | sed "s/^.*:\s\([a-z]\+\).*$/\1/")
[ $mute = "no" ] && echo "V: $vol" || echo "V: -"

Потом появились bluetooth-уши. Подключал вроде просто через bluetoothctl, звук появился из коробки. При подключении они зачем-то создают свой синк:

Sink #9
	State: IDLE
	Name: bluez_sink.3B_94_CC_98_2C_0F.a2dp_sink
	Description: T12
	Driver: module-bluez5-device.c
	Sample Specification: s16le 2ch 48000Hz
	Channel Map: front-left,front-right
	Owner Module: 34
	Mute: no
	Volume: front-left: 26204 /  40% / -23.89 dB,   front-right: 26204 /  40% / -23.89 dB
	        balance 0.00
	Base Volume: 65536 / 100% / 0.00 dB
	Monitor Source: bluez_sink.3B_94_CC_98_2C_0F.a2dp_sink.monitor
	Latency: 59641 usec, configured 43666 usec
	Flags: HARDWARE DECIBEL_VOLUME LATENCY 
	Properties:
		bluetooth.protocol = "a2dp_sink"
		device.description = "T12"
		device.string = "3B:94:CC:98:2C:0F"
		device.api = "bluez"
		device.class = "sound"
		device.bus = "bluetooth"
		device.form_factor = "headset"
		bluez.path = "/org/bluez/hci0/dev_3B_94_CC_98_2C_0F"
		bluez.class = "0x240404"
		bluez.alias = "T12"
		device.icon_name = "audio-headset-bluetooth"
		device.intended_roles = "phone"
	Ports:
		headset-output: Headset (priority: 0, available)
	Active Port: headset-output
	Formats:
		pcm

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

Вопрос: какой кусок софта (bluez, alsa, pulseaudio, …) за автоматическую настройку синков отвечает и что конкретно мне нужно писать в конфигах, чтобы ликвидировать указанную проблему?

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

 ,

tsmx
()

Как разобрать в ассемблер и собрать обратно дамп памяти от ардуины?

Форум — Development

Собсна, есть ATmega328P и дамп флеш-памяти. Юзаю binutils от avr-gcc, т.к. это первое, что я нашёл в репах, и по названию вроде как подходит. Сейчас зачаток процесса выглядит примерно так.

Получаем ассемблер:

$ avr-objdump -D -b binary -m avr flash.bin --no-show-raw-insn > flash.s

Подчищаем вывод обждампа в начале, дописываем к меткам адресов какую-нибудь буковку sed-ом, чтобы as кушал.

Собираем обратно:

$ avr-as -mmcu=atmega328p flash.s -o flash.o
$ avr-ld flash.o -o flash.bin
avr-ld: flash.bin section `.text' will not fit in region `text'
$ avr-ld --oformat binary flash.o -o flash.bin
avr-ld: error: cannot change output format whilst linking AVR binaries

Вот тут загвоздка. as заменяет адреса в прыжках на нули. Видимо, куда-то в другое место в ELF записывает. Следовательно, просто objcopy не катит, нужно прогнать через линковщик, чтобы тот поставил адреса обратно. Но линковщик почему-то отказывается работать - как я понял, секция в процессе пересборки якобы толстеет и в итоге может не поместиться на чип. За счёт чего толстеет - пока непонятно.

Вообще говоря, я действую почти наугад и, возможно, иду не тем путём и использую не те инструменты, так что если кто-то подскажет, чем, кроме avr-gcc+vim можно нормально пореверсить на досуге прошивку от дуины, будет очень здорово.

UPD: большую часть файла с ассемблером составляет забитие дампа 0xff-ами. Если их убрать и оставить только осмысленный текст, получившийся объектник станет гораздо меньше и по случайности уместится в 32 кБ, чем и отличается от варианта с оставленным забитием. При этом он успешно проходит через ld, а извлечённая из него секция .text побайтово совпадает с концом оригинального дампа. Всплывает вопрос: ld думает, что я буду сам эльф писать на чип?

 

tsmx
()

Роутер не вывозит много девайсов, на что его заменить?

Форум — Talks

Случай немного специфический: есть здоровая частная хата в небольшом городке, в неё проведен хлипенький интернет где-то на 10 Мбит/с или даже меньше с ADSL-роутером ZTE от провайдера. Увеличить скорость за адекватную цену невозможно по техническим причинам.

Иногда в этом доме собирается много людей, и тогда некоторые устройства просто перестают подключаться к роутеру. Очевидно, что затычку от провайдера нужно заменить чем-то нормальным. На какие параметры стоит смотреть в первую очередь, если стоит задача обеспечить стабильное подключение если не к интернету, то хотя бы к локальной сети? Стоит ли смотреть на роутеры от 40 долларов, или можно подобрать что-то дешевле, если требований на высокую скорость нету?

Имеет ли смысл использовать диапазон 5 ГГц? Чистый эфир - это, конечно, здорово, но в частном секторе он и так не очень-то засран, а ещё я слышал, что 5 ГГц сигнал хуже пробивает стенки. Есть ли другие преимущества?

UPD: я ещё немного полазил в настройках роутера и обнаружил в настройках вафли поле, ограничивающее максимальное количество клиентов. При максимальном значении в 32 там стояло 8. Кто и зачем выставил там такую цифру, остаётся загадкой. Переставил на побольше, проблема исчезла. Всем спасибо за конструктивные предложения, возможно, в будущем пригодится.

 

tsmx
()

Подружить UART на Orange Pi Zero (3.3V) и китайской Arduino Pro Mini (5V)

Форум — Linux-hardware

Есть такие два девайса. На апельсине стоит армбиан. UART рабочий, проверял замыканием TX-RX и minicom-ом. Ардуину заказывал с алика, явно не оригинальная, т.к. красная кнопка сброса и расположение деталей другое. Бодро мигает красным диодом при подключении как 3.3В, так и 5В по VCC, но кажется, что всё-таки пятивольтовая версия (подключал 5В к RAW, на VCC 4 с чем-то, плюс китайцы на товаре вроде писали, что 5В).

Хочу, в общем, эту шнягу шить с апельсина. Из других девайсов с последовательным портом только малина, на которой тоже 3.3V, так что выбор у меня невелик. Пока попытался в тупую слить текущую прошивку: GND-GND, VCC-VCC (на pi пробовал как 3.3В, так и 5В пины), TX-RX, RX-TX, потом одновременно тыкаю на Reset (т.к. пин DTR никуда не подключен, у какого-то индуса на ютубе посмотрел, что так можно) и выполняю на апельсине вот эту шнягу:

$ avrdude -p m328p -c arduino -P /dev/ttyS1 -U flash:r:flash.bin:r
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00

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

Собственно, вопрос в чём: можно ли заколхозить из подручных материалов (резисторов там всяких, например) что-то типа преобразователя 5v<->3.3v, или лучше не морочить голову и где-нибудь в своём усть-перезвездюйске найти нормальный пятивольтовый USB свисток для прошивки ардуин?

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

 ,

tsmx
()

Есть ли производители, позволяющие блокировать загрузчик своим ключом?

Форум — Linux-hardware

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

А есть ли в природе смартфоны, на которых можно не просто разблокировать загрузчик обычной командой fastboot-а, но и самому поменять ключ и заблокировать обратно, вроде того, как на ПК работает правильно настроенный Secure Boot, или запароленный BIOS (не уверен, что ближе по смыслу)?

 

tsmx
()

P2P за NAT с помощью внешнего VPS?

Форум — General

Ситуация следующая: есть две машины в разных сетях с хорошей скоростью интернета, но находящиеся на NAT-ами провайдеров. Есть также слабенький внешний сервер с плохим интернетом, зато с белым IP и доступом по SSH.

Вопрос: возможно ли, с помощью внешнего сервера или без, наладить TCP соединение между этими двумя машинами так, чтобы оно не проходило через внешний сервер, создавая таким образом бутылочное горлышко, и если возможно, то как это сделать, по возможности используя уже готовые инструменты?

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

 

tsmx
()

Условная компиляция кросплатформенного класса и его поля

Форум — Development

Допустим, у меня есть некий класс Process, позволяющий запускать исполняемый файл с аргументами, приделывать файл на ввод-вывод и ждать завершения. Интерфейс по возможности платформонезависимый, т.е. всякие там std::filesystem вместо строк для путей и т.д.

Думаю, что будет process.h с интерфейсом и что-то типа process_unix.cpp и process_win.cpp, которые приделываются CMake-ом в зависимости от платформы. Вопрос: куда пихать приватные платформозависимые поля, типа PID в Unix?

Пока в голову приходит только void* на структуру с полями, определённую в cpp-шнике, и каст к указателю на структуру в нём же, но выглядит некрасиво. Есть решения получше?

 

tsmx
()

Почему ifstream не читает нормальные значения из sysfs?

Форум — Development
#include <chrono>
#include <filesystem>
#include <fstream>
#include <iostream>
#include <unordered_map>
#include "log_entry.h"

const auto delta = std::chrono::seconds(5);

std::filesystem::path FindHwmonByName(const std::string& mon_name) {
  std::optional<std::filesystem::path> mon_path;
  for (auto& p : std::filesystem::directory_iterator("/sys/class/hwmon")) {
    std::string path = p.path() / "name";
    std::ifstream ifs(path);
    if (!ifs.is_open()) {
      std::ostringstream ss;
      ss << "Failed to open " << path << " for read";
      throw std::runtime_error(ss.str());
    }
    std::string name;
    ifs >> name;
    if (name == mon_name) {
      mon_path = p.path();
      break;
    }
  }
  if (!mon_path) {
    std::ostringstream ss;
    ss << "No hwmon with name " << mon_name;
    throw std::runtime_error(ss.str());
  }
  return mon_path.value();
}

int main(int argc, char** argv) {
  try {
    if (argc != 4) {
      std::ostringstream ss;
      ss << "Usage: " << argv[0] << " [OUTPUT FILE] [HWMON NAME] [INPUT NAME]";
      throw std::runtime_error(ss.str());
    }
    auto mon_path = FindHwmonByName(argv[2]);
    std::string input_path = mon_path / argv[3];
    std::cerr << input_path << std::endl;
    while (true) {
      std::ifstream ifs(input_path);
      if (!ifs.is_open()) {
        std::ostringstream ss;
        ss << "Failed to open " << input_path;
        throw std::runtime_error(ss.str());
      }
      int input_value;
      if (!ifs >> input_value) {
        std::ostringstream ss;
        ss << "Failed to read value from " << input_path;
        throw std::runtime_error(ss.str());
      }
      std::cout << input_value << std::endl; // !!!!!!!!!!!!
    }
  } catch (const std::exception& e) {
    std::cerr << e.what() << std::endl;
    return 1;
  }
  return 0;
}
$ ./hwmon_logger /dev/stdout amdgpu temp1_input | head -10
/sys/class/hwmon/hwmon1/temp1_input
0
0
0
0
0
0
0
0
0
0
$ cat /sys/class/hwmon/hwmon1/temp1_input
44000

Иногда просто какой-то мусор выводит, типа 32766.

Что такого делает cat, чего не умеет ifstream?

 

tsmx
()

Почему загрузочный диск с оффтопиком, dd-нутый на флеху, не работает?

Форум — General

Собсна, сабж.

Просмотрел, чё там в начале диска, и выяснил, что там какая-то хитрожопая ISO 9660 без MBR и GPT, со своей собственной схемой загрузки. Судя по всему, она будет работать при прожиге на диск, но на флехе биос пытается найти MBR и у него это не получается.

Где-то на оффсете 35328 нашёл чёт похожее на код загрузчика, пытался добавить на него jmp в оффсете 0, но то ли я асм херово в универе учил, то ли это так не работает.

Кто-то в курсе, как эта шняга работает? Можно ли как-то заставить работать то, что есть? Если нет, то почему?

Чисто в образовательных целях, т.к. дисковод есть и, я уверен, где-то можно отрыть уже прожжённый диск с этим образом.

 ,

tsmx
()

Жава не освобождает память после выхода

Форум — Desktop

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

Целых два гига оттяпано сверх нормы!

Перезагрузился, повторил эксперимент. То же самое: было порядка 500М занято, а после приложеньки уже 2 с лишним гига. Погрепал по ps aux, никаких жав не имеется. Tmpfs-ы тоже вроде почти пустые.

Что за ерунда, товарищи? Где искать проблему?

Система - Arch Linux, OpenJDK 8 + OpenJFX 8.

 ,

tsmx
()

Автодополнение для MinGW в vim

Форум — General

Всем ку. Хочу прикрутить к виму какой-нибудь плагин, умеющий в сабж, т.к. без него уж очень больно винапи даётся. Пока всё, что я пересмотрел, включая всякие новомодные плагины с LSP, основывалось на шланге, который мне с MinGW подружить не удалось. Есть предложения?

 ,

tsmx
()

Как выбрать ноут, чтобы петли не сдохли первыми?

Форум — Talks

Тема такая: чувствую, что уже у второго моего ноута начинают отваливаться петли. Симптомы такие же, как и у прошлого: крышка начинает слегка болтаться от любого тычка, при этом края основной части корпуса слегка люфтят. Проводить техосмотр побаиваюсь: вдруг отвалятся окончательно.

Первым ноутом был Acer Aspire 5552G, этот - Lenovo Ideapad 510-15IKB.

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

Возможно, имеет смысл в следующий раз приобрести ноут с корпусом из металла? Спасает ли это от петель, или там тоже есть свои нюансы? Ну и я так посмотрел и не смог найти ни одного ноута с металлическим корпусом и AMDшным видеоадаптером за нормальную цену. Тоже немножко напрягает, т.к. хочется после долгих лет мучений со связкой интел+нвидия разнообразить жизнь и узнать, как дела у красных с их хвалёным опенсорсным драйвером.

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

Короче, посоветуйте, как выбрать ноут?

 

tsmx
()

Как на сегодняшний день обстоят дела с ноутами на пассивном охлаждении?

Форум — Linux-hardware

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

Интересует, правда ли они способны постоянно работать в штатном режиме без кулера, или там на второй год использования начинаются всякие отвалы чипов? В каком примерно ценовом сегменте следует искать более-менее надёжные модели?

Ещё интересна производительность: на что следует рассчитывать сверх просмотра видосиков на ютубе и на сколько в таком режиме работы хватает батареи? Очевидно, что энергозатраты будут куда меньше, чем в обычных ноутах, но интересует конкретный масштаб.

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

Любая инфа будет полезна. Рассказывайте.

 ,

tsmx
()

Как сделать так, чтобы so-шки к бинарнику искались в его директории?

Форум — Development

Пишем проектик на плюсах и CMake. К нему подключаются некоторые библиотеки, которые могут отсутствовать на многих машинах, поэтому в релизную версию включаются so-шники этих библиотек, лежащие там же, где и запускаемый бинарник.

В данный момент запуск на других производится путём установки LD_LIBRARY_PATH=«$PWD». Можно ли этого избежать ещё на этапе компиляции, или лучше просто написать стартовый скрипт и забить на всё это?

 

tsmx
()

Есть ли способ красиво указать NASM-у, какой опкод из нескольких подходящих юзнуть?

Форум — Development

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

К примеру, имеем такую инструкцию:

mov si,sp
В справочнике указаны два вот таких варианта опкода:
89 /r  |  MOV r/m16,r16
8B /r  |  MOV r16,r/m16
В данном случае подходят оба варианта, т.к. оба аргумента - регистры, но в оригинале используется второй вариант, а NASM выдаёт мне первый. Есть ли способ мягко (т.е. без костылей типа ручного задания машинного кода через db) намекнуть NASM-у, что здесь нужно использовать второй опкод?

 

tsmx
()

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