eddy_em: (Default)
Как оказалось, есть такие непонятные вещи, как MTU и MSS, о которых я впервые узнал как раз намедни (когда увидел, что этот самый MTU у ppp на 8 байт меньше, чем у остальных).
И почему я сразу не наткнулся на эту замечательную статью в генту-вики? Там как раз описываются все вещи, необходимые для организации домашнего маршрутизатора.
Проблема синхронизации размеров MSS с MTU решается одной строчкой:
iptables -A FORWARD -t mangle  -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Ну и т.к. в дефолтном ядре кальки все, что только можно, запихнули в модули, нужно добавить в /etc/modules-load.d/net.conf автозагрузку модуля xt_tcpmss.

Вот почему все так сложно?
eddy_em: (Default)
А ведь лежит себе в ящике: купил когда-то, чтобы разукрасить и на стенку на работе повесить, да так и не дошли руки ☺
Преамбула: еще с месяц назад на фоне падения курса зеленой туалетной бумаги я задался вопросом, что бы такое прикупить на алике. Ну и решил себе файлопомойку поменять. Пришло все достаточно быстро, но вот преобразователь питания с 12В на материнку оказался мертвым (увы, единственная материнка, что я нашел, оказалась на каком-то адски мощном процессоре, потребляющем аж 8Вт, из-за чего там даже вентилятор есть; ну и вместо обычного питания 12В, как на всех мини-материнках "микрокомпьютеров", там полноценный ATX-разъем еще и с допом на 4 контакта). Поэтому заказал новый на озоне, он достаточно быстро пришел (но т.к. ездим мы в Зелик раз в неделю - по пятницам или субботам, то только в эту пятницу забрал). По всяким тестам и характеристикам сделаю отдельную публикацию, если не лень будет (там уж больно долгий tl;dr получится), а пока — просто про то, как сегодня страдал (подробности конфигураций тоже потом выложу, наверное).
Дальше )
eddy_em: (Default)
После выходки пидараса Линуса не исключено, что в ближайшее время начнется целенаправленная атака на компьютеры с российскими IP.
На русские зеркала хотя бы фашисты с меньшей вероятностью попадут, чтобы поднасрать нам.

Кстати, глянул сейчас: а калька почему-то только на гитхабе лежит. Гитхаб же — один из наифашистейших серверов (мало того, что пиндосский, так еще и мелкомягкие - хозяева!)… Ищу, есть ли у кальки вообще российские зеркала. Странно, если у российского дистра таких не окажется. Не ставить же парашу вроде "астры"!
eddy_em: (Default)
Давно уже надо было добавить всяких полезностей в терминальный клиент и пофиксить кое-какие баги. Основное — режимы ввода и отображения данных. При вводе доступны такие режимы.
  • TEXT — все, что ввели, отправляется; строки завершаются заданным в параметрах командной строки EOL. Непечатаемые символы можно через escape-последовательности вводить.

  • RAW — пробелы не учитываются; текст отправляется как текст; числа в пределах 0..255 распознаются в системах по основанию 2, 8, 10 и 16.

  • HEX — все числа трактуются как шестнадцатеричные; если число длинное, оно разбивается на пары и считается одним байтом; пробелы игнорируются.

  • RTU RAW — тот же RAW, но каждый раз в конце посылки вставляется контрольная сумма.

  • RTU HEX — тот же HEX, но с контрольной суммой.


При выводе доступны режимы TEXT (непечатаемые символы выдаются как "0xXX"), RAW (в 16-й форме с разделением пробелами) и HEX (в формате hexdump -C).
Учитывая то, что в скором времени придут китайские частотники, с которыми надо будет экспериментировать (понимаю ли они широковещательный адрес, или придется каждый оснащать переходником CAN-modbus), очень даже вовремя я это все доделал.
Read more... )
eddy_em: (Default)
Имеем домашний комп с одной сетевухой (вторую пока взять негде) и сдохший (видимо) роутер микротик. Очень хочется иметь выход как в интернет (через роутер 10.0.0.1), так и в локалку (таки наблюдать с компьютера удобней, чем с ноута, но и интернет нужен).
ОК, добавляем новый адрес:
ip addr add 192.168.3.119/16 dev net0

Матюков нет, все ОК:
ip addr
2: net0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 1c:6f:65:3e:9f:ab brd ff:ff:ff:ff:ff:ff
    altname enp4s0
    inet 10.0.0.2/24 brd 10.0.0.255 scope global net0
       valid_lft forever preferred_lft forever
    inet 192.168.3.119/16 scope global net0
       valid_lft forever preferred_lft forever

И даже маршрутизация добавляется:
route add -net 192.168.0.0/16 gw 192.168.43.201
route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         KEENETIC_LITE   0.0.0.0         UG    2      0        0 net0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 net0
loopback        localhost       255.0.0.0       UG    0      0        0 lo
192.168.0.0     192.168.43.201  255.255.0.0     UG    0      0        0 net0
192.168.0.0     0.0.0.0         255.255.0.0     U     0      0        0 net0

Однако, по-прежнему, не пингуется сеть!
(я воткнул шнурок из роутера и шнурок локалки в один свитч; если настраиваю уникальный IP на компьютере, то работает туда либо сюда, а если общий — нет!)
Вот что за нафиг?!
eddy_em: (Default)
Сижу, никого не трогаю, STM32F407 мучаю (что-то пока даже "blink" не получается: где-то косяк в активации тактирования), вдруг бац: мыша не работает. Воткнул в другой порт USB — ноль реакции. Воткнул другую — аналогично. Флешку — тихо. В dmesg ничего по поводу новых устройств, зато вот такая ругань:
[926551.236558] xhci_hcd 0000:00:14.0: Abort failed to stop command ring: -110
[926551.236566] xhci_hcd 0000:00:14.0: xHCI host controller not responding, assume dead
[926551.236577] xhci_hcd 0000:00:14.0: HC died; cleaning up
[926551.236603] xhci_hcd 0000:00:14.0: Timeout while waiting for setup device command

ОК, нашел в интернетах, что нужно сделать: закинуть отмерший адрес сначала в /sys/bus/pci/drivers/xhci_hcd/unbind, а затем — в bind. Чтобы упростить задачу набросал скрипт:
#!/bin/bash

BROKEN=$(dmesg | grep "HC died" | tail -n1| awk '{print $3}' | sed 's/:$//')

echo -n "${BROKEN}" > /sys/bus/pci/drivers/xhci_hcd/unbind 
sleep 2
echo -n "${BROKEN}" > /sys/bus/pci/drivers/xhci_hcd/bind 

Хорошо хоть, клавиатура жива осталась. В прошлый раз пришлось по ssh комп перезагружать (тогда я про эти bind/unbind не знал).
eddy_em: (Default)
Теперь у меня два компьютера с одинаковыми именами/IP: TeA'шный (который я решил сделать новым `bgd`) и старый `bgd`. Старый уже больше года не обновлялся, а там гента. Сам компьютер очень слабый, так что я решил и на него накатить calculate.
Рекомендую такую последовательность.
0. Сохраняем куда-нибудь выхлоп lspci -k и lsmodules — пригодится для конфигурации ядра, чтобы сразу все указать (а не как у меня это бывает, когда я в 3-4 захода дохожу до полностью рабочей конфигурации: то сеть забуду, то видео, то звук).
1. Поставить CSS (calculate server from scratch): там вообще самый-самый минимум, что очень хорошо для первичной установки. Грузимся с загрузочной флешки, запускаем cl-install с кучей аргументов (где сразу можно прописать и сетевые настройки, и т.д., и т.п. — чтобы потом не нестраивать это отдельно).
2. "Пропатчить" косяки разработчиков: зайти в /usr/lib/python3.9/site-packages/calculate/lib/utils и отредактировать два файла. В binhost.py ищем коммент (на русском языке!!!!11) "Получить URL, без прокси" далее убираем строчку
proxy_handler = urllib2.ProxyHandler({}), а в следующей пишем opener = urllib2.build_opener()
(иначе оно через прокси не будет работать). В git.py удаляем все содержимое функции checkUrl, оставляя лишь return True (вот змееводы ненормальные: TRUE вот так писать!). Эти оба файла сохраняем, т.к. любой вызов cl-update их уничтожит.
3. Вызываем cl-update для обновления всего. Далее мы будем вызывать ее не чаще раза в год-два-три. Или вообще никогда. Т.к. она нафиг не нужна. Наши забекапленные "пропатченные" змеескрипты копируем в изуродованные.
4. Ставим последнюю версию sys-kernel/gentoo-sources, переходим в корень исходников этого ядра, запускаем make menuconfig и с нуля (если нет уже заготовленного нормального .config) правим конфигурацию ядра. У меня ушло около часа.
5. Собираем новое ядро. Устанавливаем. При этом ни в коем случае не пользоваться калькуляторскими убогими утилитами — все по-старинке, как в делается в генте.
Обновляем grub. Перезагружаемся. Если все ОК, удаляем к чертовой бабушке старые ненужные ядра и обновляем grub. Если в работе нужны будут иксовые утилиты, меняем профиль на distros:CLDL/amd64/20.
6. Ставим все необходимые пакеты. Пользуемся…
eddy_em: (Default)
По сути, если стоит пакет dev-vcs/git, то и сервер у вас уже стоит, остается лишь добавить пользователя, изменить настройки и запустить. В вики все доступно расписано. А вот дальше — косячок: ведь для работы с репами у пользователя git шеллом должен быть /usr/bin/git-shell, а для любых прочих манипуляций (ключи SSH забросить, да просто даже новый репозиторий сделать), нужен баш. Поэтому если у вас нет доступа рута на удаленную машину с git-сервером, просто так вы там ничего не сделаете, придется просить, чтобы вам развернули жирного монстра gitlab.
У меня же доступ есть, поэтому все просто. От рута заходим в /home/git и рисуем там скриптик initrepo:
#!/bin/bash

DIR=${1}.git
mkdir $DIR
cd $DIR
git init --bare
chown -R git.git .
cd ..
echo "$DIR done!"

Теперь на локальной машине во всех репах, которые нужно экспортировать, делаем
git remote set-url --add --push origin ssh://git@server/home/git/user/reponame.git

а на удаленной рутом запускаем скриптик:
./initrepo reponame

Потом на локальной git push и, после всех push-url'ов последним будет наш, который отправит сведения на удаленный сервер в локалке.
Для массовой миграции можно собрать список директорий и скормить его скрипту на удаленном сервере, а у себя локально скриптом добавить везде новый push-url и сделать push.
eddy_em: (Default)
Я тут интересную (и, главное, актуальную: судя по скудной информации в интернете, если этим кто-то и занимался, то результаты закопаны под NDA) задачку для студентов-технарей придумал.
Тема работы: Сравнение производительности методов частотного анализа на микроконтроллерах STM32: с использованием быстрого преобразования Фурье (БПФ), дискретного косинусного преобразования (ДКП) и периодограммы Ломба-Скаргла (ПЛС).
Да, математика там жестокая, времени может уйти очень много. Зато из нее можно сделать очень приличные дипломные работы как студенту бакалавриата, так и магистранту. Ну или просто в рамках практики хотя бы часть реализовать.
В работе я предлагаю оценить производительность определения первых N базовых гармоник сигнала, поступающего на вход АЦП STM32F103 (не имеет FPU) и STM32F072 (не имеет FPU и аппаратного деления). А) сравнить разные реализации БПФ для микроконтроллеров. Б) портировать реализацию ДКП и сравнить с производительностью БПФ. В) портировать реализацию ПЛС и разработать реализацию одного из альтернативных методов построения периодограмм. Сравнить с предыдущими. По возможности повторить исследования на STM32F303 или STM32F401 (имеют FPU).
В качестве реализации результатов работы может стать измеритель частоты вращения вала асинхронного электродвигателя. Да и вообще, частотный анализ — весьма интересная тема. Можно аналогичное исследование на ПК провести, чтобы по нашим измерениям попытаться восстановить кривые блеска переменных звезд и звезд, затмевающихся планетами.
Еще работы )
eddy_em: (Default)
Уже давно на эту статейку натыкался, но все забывал в "закладки" добавить. Вот, добавляю: "systemd — отстой". Советую эту статейку почитать вендузятникам, которые бубунту считают линуксом.
А еще целый сайт есть: nosystemd.org.
Просто зацепился сейчас на astronomy.ru с вендовозом одним, который думает, что и бубунта, и андроид — это есть хорошо. А на самом деле все они — та же самая ненавидимая всеми венда, где производитель считает пользователя идиотом.
eddy_em: (Default)
Собираю свои велосипеды на свежеустановленной бубунте (компьютер, который будет рулить спектрографом НЭС). И бац — ругается при сборке. Попробовал поменять местами имена файлов и опции — заработало. В генте работает безразлично к порядку. Что за очередное рукожопие?
И вообще, как-то все через одно место в бубунте сделано. Совершенно неудобно работать. Вот только gentoo на не очень мощном компьютере замучился бы собирать, а calculate на стадии установки не смог победить: наши "доблестные" информатики все никак не выкинут прокси, а caclucate упорно отказывался работать через прокси! Что я там только ни делал! Вручную файлы с гита качаются, а автоматом — нет. Судя по всему, косяк кроется где-то в недрах скриптов. А они написаны на мерзком пытхоне! Нафиг этот график, лучше чуть помучаюсь с systemd (все равно мне там нужно будет лишь пару-тройку демонов запустить, на armbian-то с этим проблем нет; разве что приходится постоянно запускать скрипт, который пишет правильные настройки в resolv.conf и и т.п.).
eddy_em: (Default)
Задал вопрос на SO.
С логами я уже давно вожусь: много демонов требуют ведения журналов, но все у меня сделано, как обычно, через одно место! В моей сниппетобиблиотеке ведется учет времени с момента создания лога, и если файл старше суток, он автоматически ротируется. Но это: а) лишает возможности работы, если сначала открыл лог, а потом сделал fork() (один из процессов продолжит писать после ротации логов в старый лог), б) не очень-то это атомарно (хотя пока что прецедентов, когда логи портятся из-за одновременной записи в нескольких потоков не было; но это, скорей всего, из-за того, что логи пишутся редко).
Другой вариант продемонстрирован в коде на SO. И здесь тоже полная фигня с fork() и атомарностью.

Как вариант — вообще убрать openlog, а в putlog сразу делать все: открывать файл в режиме добавления данных, писать туда, закрывать файл. Для надежности можно добавить мьютекс. Но это чревато раздуванием аргументов putlog'а (либо структуру придется передавать): помимо уровня сообщения и собственно самого сообщения, надо будет каждый раз передавать уровень лог-файла и его имя, если захотеть иметь возможность одновременного ведения нескольких журналов.

Использовать жирные библиотеки вроде log4c не хочу.

Кто как решил для себя проблему логгирования в С?
eddy_em: (Default)
Дошли-таки руки до "бананки". Думаю прицепить на чип радиатор, подключить USB'шный накопитель на 4ТБ и сделать файлопомойку + торрентокачалку. Пока радиатора нет, да и коробочку надо будет в "леруа" прикупить, чтобы все это красиво под потолком в коридоре повесить.
Но сильно напрягает, что из "легко и просто" устанавливаемых дистров все — на основе клятой бубунты или дебиана! А это — systemd со всеми его проблемами.
Собирать генту в чруте не хочется: долго это. Да и обновлять муторно. Если же компилировать на самом одноплатнике, будет перегреваться и даже вентилятор не сильно поможет.

Вот и задаю в очередной раз вопрос: есть ли вменяемые бинарные дистры для ARM'овских одноплатников, которые так же, как raspbian или armbian — "просто накатил на флешку, запустил, сконфигурировал и подчистил ненужное"?..
Ну и насчет пункта "подчистил ненужное": сейчас я воткнул raspbian, так там больше сотни мусорных совершенно ненужных пакетов: иксы, всякие браузеры и т.п. На кой черт оно нужно в базовой системе?
eddy_em: (Default)
Пишут, что еще и systemd-homed появился... Ну, теперь юзерам точно крышка. Будут себя в "свободном линуксе" чувствовать не хуже, чем под колпаком винды: поцтеродемоны будут следить за каждым движением юзера и стучать "куда надо".
Я уж молчу о том, что systemd изначально нарушает главные принципы UNIX: UNIX-way и KISS!
В общем, лет через 5 даже внутри линуксоидов будут кардинальные разделения: те, кто не прогнулся под поцтеринга, и остальные.
Какое счастье, что в генте нет этого дерьма (а также pulseaudio, networkmanager'а и прочей дряни)!

Kernel-5.0

Mar. 25th, 2019 02:04 pm
eddy_em: (Default)
Товарищи, а кто уже пользуется? Захотел сделать suspend to disk на ноутбуке (правда, свопа у меня нет, нужно будет своп-файл делать), но для этого нужно ведро пересобрать. Раз такая пьянка, решил уже обновить.
Стоит на пятое переходить, или пока 4.20 поюзать?
eddy_em: (Default)
Пока сижу в Ставрополе, для захода на работу приходится соединяться по ssh с одним компьютером, далее - с другим, и лишь с него по ssh можно выйти на рабочий компьютер. Копировать файлы таким образом очень неудобно.
А есть ли возможность как-то настроить туннель, чтобы нужно было только пароль рабочей машины ввести и сразу на нее попасть через две промежуточные?
UPD: проблема решилась довольно-таки просто. Здесь указано о замечательной опции ssh: ProxyJump. Так что, я просто записал себе в ~/.ssh/config:
Host ishtar.sao.ru
  ProxyJump SERVER2.sao.ru
Host SERVER2.sao.ru
  ProxyJump SERVER1.sao.ru

Теперь пароли нужны только от конкретных хостов, и нет нужды сохранять ключи на сторонних компьютерах. Просто генерим ключи к каждому хосту из прокси на своем локалхосте и все отлично!
// (понятно, что в локальной сети надо будет этот файлик сохранить под другим именем, чтобы не проксировалось).
eddy_em: (Default)
вернуть NULL, если памяти не хватает. Что сделали в ядре? Правильно, сказали нехер и стали всегда возвращать указатель на память, даже если ее нет.
Если ты хочешь 100% получить память - ты можешь её получить mmap + map_populate. Я выше уже отвечал эдику. Тогда ты 100% получишь память, либо ошибку, если памяти не хватает.
Забавно, что под все остальные системы я просто могу использовать стандартный и простой в использовании malloc из libc, а для линукса нужно пердолиться для того, чтобы получить память.

(ЛОР)

Действительно, механизм выделения памяти в линуксе уж очень черезжопный.
Добавил в свои сниппеты:
#include <stdio.h>
#include <unistd.h>

static unsigned long long get_available_mem(){
    return sysconf(_SC_AVPHYS_PAGES) * (unsigned long long) sysconf(_SC_PAGE_SIZE);
}

int main(){
    unsigned long long m = get_available_mem();
    printf("MEM: %llu == %lluGB\n", m, m/1024/1024/1024);
    return 0;
}

// Never allocate memory by big pieces with malloc! Only mmap with MAP_POPULATE!!!!!!!!!11111111111
eddy_em: (Default)
Фух! Таки управился!
Протестировал все варианты компиляции: и с SGREAD, и без него, и с ASYNCWRITE. Не знаю, чем эти методы отличаются, но скорость считывания во всех трех случаях была примерно одинаковой — около 3.5с на весь кадр 4k×4k. По сравнению с apogee, конечно, это очень шустро. Но вот использовать для USB'шного устройства модуль ядра в 21 веке — дикость какая-то!!!

Обновил архив с модулем на гитхабе в репе "mytakepic" (вот такое дурацкое название осталось у читалки). Теперь надо будет переделать этот mytakepic, чтобы он работал с фокусером и турелью от тех же FLI (надо будет для отладочно-юстировочных работ, пока не запустим RTS2).
Модуль проверен на ядрах 4.9.4 и 4.12.5.
eddy_em: (Костерок)
Что-то у меня на работе гента совсем криво встала: вроде бы почти 1-в-1 все как дома, но странные вещи с Qt-шными приложениями творятся. Okular не дает выделять и/или искать текст в документе (при попытке это сделать пропадает изображение соответствующей страницы) + почему-то не сглаживает шрифты (во всем остальном сглаживание работает). Kile нещадно тормозит, приходится вместо него для редактирования латеховских файлов использовать geany, что не так удобно. Больше Qt-шного ничего не припомню, чтобы проверить можно было.

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

В чем может быть дело?
eddy_em: (Костерок)
Поменял сегодня xdm на lightdm — автоматом решилась проблема с косыми раскладками. Правда, если нажать ctrl+alt+backspace на экране входа, lightdm не перезапускаются. В IceWM же это сочетание работает нормально. Одновременно с возвратом нормальной реакции на клавиши "пропала" проблема клавосочетаний + вернулась возможность изменять их, жамкая нужное на пункте меню.
Правда, не решилась проблема с вырвиглазными шрифтами в firefox. Так и не понял: вроде с fontconfig все ОК, в других приложениях разные шрифты кажут, а здесь — только уродство без засечек...
С отчетом пока проблему не решил, вот, на SO вопрос задал, ответа нет.
Криостат собрал, запустил качать. Пока там 0.3Па и как-то никуда не движется, боюсь, течет, собака. Придется искать.
stm8flash, stm32flash и st-util пока не ставил. Работа с криостатом прервала мое изучение PLC для новых приводов БТА. Руководитель ругается — их бы поскорей поставить, а надо еще понять, как эту заразу программировать... Благо, разобрались хотя бы с "работой в лоб": теперь если вдруг чего, мы сможем шустро заменить дышащие на ладан старые привода. А резервный использовать для изучения работы через PLC (есть желание все экстренные вещи делать автоматом, не ожидая команд с CAN-шины + PLC позволит легко менять сгоревшие модули — даже сам PLC — так как все настройки хранятся на SD-карте).

September 2025

S M T W T F S
 123456
78910111213
14151617181920
21222324252627
282930    

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 7th, 2025 04:45 pm
Powered by Dreamwidth Studios