LINUX.ORG.RU

Сообщения vi0

 

«Rust in Minsk» скоро исчезнет с meetup.com

 ,

vi0
()

Написал библиотеку, чтобы открывать файлы HEIC в feh

https://github.com/vi/imlib2-heic

Библиотека использует готовый декодировщик libheif.

Также есть аналогичная для bpg.

https://en.wikipedia.org/wiki/High_Efficiency_Image_File_Format

 ,

vi0
()

websocat: работаем с WebSocket'ами в стиле socat

Анонсирую [пред]-релиз своей утилиты.

  • Просто клиент командной строки для WebSocket'ов в стиле netcat:
    $ websocat - wss://echo.websocket.org/
    fdsa
    fdsa
    sadfasf
    sadfasf
    
  • Пробрасываем SSH:
    
    server$ websocat ws-l:0.0.0.0:8080 tcp:127.0.0.1:22
    client$ ssh -c ProxyCommand='websocat - ws://myserver:8080/mywebsocket' user@myserver
    
  • Интегрируем с Nginx
    umask 0000
    websocat --unlink ws-l:unix-l:/tmp/wstest sh-c:'bash -i 2>&1'
    
        location /ws {
            proxy_read_timeout 7d;
            proxy_send_timeout 7d;
            proxy_pass http://unix:/tmp/wstest;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
    
  • Интегрируемся с обычном socat'ом:
    $ socat -x - exec:"websocat - ws\://echo.websocket.org/"
    dsaf
    > 2018/05/10 21:47:56.609581  length=5 from=0 to=4
     64 73 61 66 0a
    < 2018/05/10 21:47:56.745260  length=5 from=0 to=4
     64 73 61 66 0a
    dsaf
    123123123
    > 2018/05/10 21:47:58.087129  length=10 from=5 to=14
     31 32 33 31 32 33 31 32 33 0a
    < 2018/05/10 21:47:58.222838  length=10 from=5 to=14
     31 32 33 31 32 33 31 32 33 0a
    123123123
    
    websocat --ws-c-uri=ws://echo.websocket.org - ws-c:sh-c:'socat - tcp:echo.websocket.org:80'
    

    Предсобранные версии: https://github.com/vi/websocat/releases/tag/v1.0.0-alpha

 ,

vi0
()

udpnat - user-space транслятор адресов для UDP-пакетов (для P2P)

Написал очередную ненужну: программа с одной стороны открывает tun/tap-интерфейс, а с другой стороны использует обычные AF_INET-SOCK_DGRAM-сокеты (без connect(2)-а), снимая ограничение для UDP hole punching. Слегка похоже на SLiRP. TCP предполагается пускать в обычный -j MASQUERADE.

До: Primary: Independent Mapping, Port Dependent Filter, preserves ports, no hairpin

После: Primary: Independent Mapping, Independent Filter, preserves ports, no hairpin

Исходный код, предсобраная версия, краткая инструкция: https://github.com/vi/udpnat

 ,

vi0
()

videomedian: фильтр для восстановления видео с сильными артефактами

Мой мини-проект: https://github.com/vi/videomedian

Основной сценарий использования: улучшение видео при оцифровке плохого оригинала.

Принцип работы: каждый пиксель на выходе - это медиана от значения расположенного в этом месте пикселя за N последних кадров.

Может, где-нибудь уже есть такие фильры, но по-нормальному реализованные?

 

vi0
()

OutOfOrderFS - утилита для экспериментов с реакцией ФС на сбои

https://github.com/vi/outoforderfs

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

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

outoforderfs файл_с_образом_ФС файл_точка_монтирования размер_блока максимальная_задержка_в_миллисекундах максимальное_число_задержанных_блоков
# dd if=/dev/zero bs=4096 count=1000 of=sf.dat
# yes | mkfs.ext4 sf.dat 
# touch mp.dat
# outoforderfs sf.dat mp.dat 4096 20000 10000000 &
[1] 9317
# mkdir -p m
# mount -t ext4 -o loop mp.dat m/
# yes | nl > m/test.txt
^C
# umount m
# kill %%
# 
352 dirty blocks lost

[1]+  Done                    outoforderfs sf.dat mp.dat 4096 20000 10000000
# mount -o loop -t ext4 sf.dat m/
# ls -lh m/test.txt 
-rw-r--r-- 1 root root 2.7M Mar 20 23:53 m/test.txt
# hd m/test.txt | grep -m 2 '00 00 00' -C 2
000013e0  35 36 36 09 79 0a 00 00  00 00 00 00 00 00 0a 20  |566.y.   567.y. |
000013f0  00 00 00 00 00 00 00 0a  00 00 00 00 00 00 00 00  |  568.y.   569.y|
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000000  00 00 00 00 30 09 79 0a  00 00 00 00 00 00 00 00  | 1480.y.  1481.y|
--
000063e0  0a 00 00 00 00 00 00 00  00 0a 20 20 32 38 34 33  |.  2842.y.  2843|
000063f0  09 79 0a 00 00 00 00 00  00 00 00 0a 20 20 32 38  |.y.  2844.y.  28|
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000000  00 00 00 0a 00 00 00 00  00 00 00 00 0a 20 20 33  |0.y.  3301.y.  3|

 , ,

vi0
()

Проброс части сети из VPS без tun/tap.

Обычный OpenVPN что-то не очень работает на супердешёвой VPS-ке на OpenVZ, поэтому очевидный способ пробросить подсеть IPv6 отпадает.

Для осуществления такой операции придумал «треугольник из костылей»:

  • ipvampire - избирательно извлекает пакеты из сетевого интерфейса и пишет из в stdout, посылает пакеты из stdin в интерфейс;
  • openvpn --dev stdout - используется stdin вместо устройства tun/tap;
  • seqpackettool - запускалка двух вышеприведённых программ, чтобы они были соединены через socketpair(... SOCK_SEQPACKET ...). seqpackettool - это как мини-socat, ориентированный на SOCK_SEQPACKET.

https://github.com/vi/udptap_tunnel#ipvampire

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

 ,

vi0
()

Переопределялка файлов на основе LD_PRELOAD

Не нашёл с ходу, написал: https://github.com/vi/fopen_override

Код основан на другом костыле: https://github.com/vi/syscall_limiter/tree/master/writelimiter

Может, где-то в интернете есть более нормальная реализация? А то я когда-то написал библиотеку для автоматического setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE всем сокетам, но потом оказалось, что такая в интернете уже есть (хотя почему-то сразу не нашлась)...

 

vi0
()

ipv6proxy - проброс IPv6 stateless autoconfiguration в другую сеть.

Написал хак для ipv6: полу-мост, полу-маршрутизатор.

Основной сценарий использования: компьютер получает IPv6 по Router Advertisings на одном интерфейсе, но хочется подключить ещё один хост к этой же сети на другом.

По-нормальному для этого используется мост (brctl), но это может быть проблемным: во-первых, на Wi-Fi с ограниченными драйверами мост может не работать - можем посылать пакеты только с нашего MAC-адреса, во-вторых поднятие моста сбрасывает всякие настройки, маршруты и т.д.

Для IPv4 обычно можно просто включить NAT. Но тянуть NAT в IPv6 не хочется, а если пытаться «дробить» /64 дальше, то stateless autoconfiguration не будеть работать...

Программа ipv6proxy делает 3 вещи:

  • Слушает и перенаправляет ICMPv6;
  • Добавляет маршруты (/128) на найденные в другой сети узлы;
  • Настраивает интерфейс при запуске (ipv6.forwarding=1, ipv6.accept_ra=2, allmulticast=true)

    --

    Проект на Github: https://github.com/vi/ipv6proxy

 ,

vi0
()

Можно ли на ЛОРе пиарить свои маленькие ненужны?

Обычно я просто выкладываю проектики на Github.

Иногда получается схема: спросил на StackExchange → нет приемлемых ответов → накодил → ответил сам со ссылкой. Тогда дополнительная видимость проекта получается сама собой.

Можно ли ещё тут добавлять сообщения про них?

Если да, то:

  • В какой раздел? Development? Talks? В разные в зависимости от тематики?
  • Как часто? Раз в неделю OK?
  • Как лучше оформлять? Как-нибудь или есть образец/шаблон?
vi0
()

Где тот самый блоб openh264?

А этот волшебный блоб, который как джокер против патентов на H.264... Он вообще есть или может быть он потом будет? FAQ написан скорее в будущем времени...

Или я просто как-то не так ищу?

 , , ,

vi0
()

GUI log viewer

Есть gst-log-viewer, который читает логи GStreamer'а и строит график их «интенсивности» во времени. Можно щёлкнуть на график и сразу перейти к строке. Рисунок: http://i.stack.imgur.com/xKDMr.png

Есть ли что-нибудь похожее, но универсальное (не для GStreamer, а, например, для любых логов, пропущенных через ts '%.s').

Также хороша была бы функция фильрации и/или выделения цветом строчек лога с показом на графике где во времени и сколько прошедших grep строчек относительно общего количества.

 ,

vi0
()

Консолидированный ответ всего linux.org.ru на тему «выбор ноутбука»

На ЛОРе тредов «выбор ноутбука» море...

Как-то лень все их читать, а создавать N+1-вый уныло.

Есть ли где-нибудь хорошое, правильное, поддерживаемое в актуальном состоянии howto про «Выбор ноутбука для линуксоида», где отмечены и истории [не]успеха, и то чем чипсеты отличаются, и про то насколько нужен SSD, и про экраны, и про корпуса, ну, и, естественно, про особенности работы в GNU/Linux, и всё в гармоничной краткой форме с удобными запросами. Чтобы было видно какие устройства часто рекомендуют, а какие наборот.

vi0
()

Вопрос по просмотру удалённых тредов

Регулярно напарываюсь на то, что тред исчёзает прямо «из-под носа» (например, при переходе на другую страницу обсуждения или при нажатии на кнопку «Показать удалённые комментарии»).

При этом часто в Гугле тред находится, но кнопки «Cached» почему-то нет (например, как для forum/talks/9370585 - на последней странице нет интересных комментариев, а первые уже недоступны)...

Иногда для сайтов делают специализированные «восстанавливалки» (например, deletionpedia для википедии или stackprinter для stackoverflow). Есть ли что-либо похожее для linux.org.ru?

Двух звёзд (которые, насколько я помню, нужны чтобы «официально» смотреть удалённые нити) нет и не светит...

vi0
()

ЛОРовцы о cjdns

Каково мнение пользователей linux.org.ru о cjdns? А то по netsukuku здесь ищется много сообщений, а по cjdns — пустота...

 

vi0
()

Написаны ли уже программы чтобы использовать SECCOMP_MODE_FILTER ?

В Linux уже есть возможность задать ограничение на то, какие сисвызовы могут выполняться программой (включая после fork/execve), а какие будут возвращать ошибку, использовать эмулятор или вообще SIGKILL. Работает из-под пользователя тоже.

В качестве демо есть программа, которая «отключает» один сисвызов.

Есть ли что-то большее, чтобы задать можно было задавать «белый» или «чёрный» списки (с аргументами для некоторых типа prctl), но не настолько большое чтобы охватывать всю систему (типа SELinux) или требовать много всяких конфигов.

Что-то типа

limit_syscalls  access brk close connect dup \
      execve exit_group fcntl64 fstat64 getsockname \
      getuid32 mmap2 mprotect munmap open read set_thread_area \
      setuid32 socket write -- /bin/ping 127.0.0.1

 

vi0
()

Сгенерируйте кто-нибудь tcpdump того, как должно работать 6to4

У меня нет подключений с «белым» IP, а там где есть (на VPS-ке), там нельзя настроить туннели (и я не знаю фильтруется ли там протокол 41).

Кто-нибудь, у кого настроено 6to4 или у кого есть белый IP, который пропускает протокол 41, снимите tcpdump того, как оно работает (например, «ping6 ipv6.google.com» и «curl -6 ipv6.google.com»).

Чтобы настроить 6to4, можно использовать скрипт http://vi-server.org/pub/6to4.sh

Дамп можно снять через

tcpdump -i ... proto 41 -w dump.cap

 , ,

vi0
()

Запускалка программ через unix socket. Нужно или не нужно?

Примеры применений:

* Простой запуск программ внутри LXC или unshare.

* Типа sudo, только простое и не нужен setuid-bit.

* Позволить пользоватеям chroot в определённую директорию.

https://github.com/vi/dive

 , ,

vi0
()

Есть ли аналог Kickstarter, но для WebMoney?

Есть ли сервис, где можно публиковать проекты и собирать (или не собирать) взносы, которые потом зачисляться на счёт в WebMoney?

 ,

vi0
()

[решето] А где новость про Github и ruby on rails?

Через уязвимость в ruby on rails взломан Github.

 

vi0
()

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