Loess.ru

having fun

Базовые инструменты для трассировки приложений в Linux

$ strace -e trace=open,access -o strace.log uname

$ strace -e trace=read,write -p <PID>

классы вызовов: file, process, network, signal, ipc, <etc, etc>:

-e trace=network (Trace all the network related system calls.)
-e trace=signal (Trace all signal related system calls.)
-e trace=ipc (Trace all IPC related system calls.)
-e trace=desc (Trace all file descriptor related system calls.)
-e trace=memory (Trace all memory mapping related system calls.)
(https://stackoverflow.com/questions/7482076/how-does-strace-connect-to-an-already-running-process)

Опции strace:
-i — выводить указатель на инструкцию во время выполнения системного вызова;
-k — выводить стек вызовов для отслеживаемого процесса после каждого системного вызова;
-o — выводить всю информацию о системных вызовах не в стандартный поток ошибок, а в файл;
-q — не выводить сообщения о подключении о отключении от процесса;
-qq — не выводить сообщения о завершении работы процесса;
-r — выводить временную метку для каждого системного вызова;
-s — указать максимальный размер выводимой строки, по умолчанию 32;
-t — выводить время суток для каждого вызова;
-tt — добавить микросекунды;
-ttt — добавить микросекунды и количество секунд после начала эпохи Unix;
-T — выводить длительность выполнения системного вызова;
-x — выводить все не ASCI-строки в шестнадцатеричном виде;
-xx — выводить все строки в шестнадцатеричном виде;
-y — выводить пути для файловых дескрипторов;
-yy — выводить информацию о протоколе для файловых дескрипторов;
-c — подсчитывать количество ошибок, вызовов и время выполнения для каждого системного вызова;
-O — добавить определённое количество микросекунд к счетчику времени для каждого вызова;
-S — сортировать информацию выводимую при опции -c. Доступны поля time, calls, name и nothing. По умолчанию используется time;
-w — суммировать время между началом и завершением системного вызова;
-e — позволяет отфильтровать только нужные системные вызовы или события;
-P — отслеживать только системные вызовы, которые касаются указанного пути;
-v — позволяет выводить дополнительную информацию, такую как версии окружения, статистику и так далее;
-b — если указанный системный вызов обнаружен, трассировка прекращается;
-f — отслеживать также дочерние процессы, если они будут созданы;
-ff — если задана опция -o, то для каждого дочернего процесса будет создан отдельный файл с именем имя_файла.pid.
-I — позволяет блокировать реакцию на нажатия Ctrl+C и Ctrl+Z;
-E — добавляет переменную окружения для запускаемой программы;
-p — указывает pid процесса, к которому следует подключиться;
-u — запустить программу, от имени указанного пользователя.

ldd — показывает список совместно используемых библиотек ELFфайла

$ cat ~/script.sh
while inotifywait -e modify \
/var/log/apache2/error.log;
do
tail -1 /var/log/apache2/error.log | \
notify-send "Apache needs love!"
done

incrontab:
Формат заданий:
<путь> <событие> <команда> (с разделением через пробел)

Самые интересные события:
IN_ACCESS — файл был прочитан
IN_ATTRIB — изменились метаданные файла/каталога
IN_MODIFY — файл был изменен
IN_CREATE — файл или каталог был создан в отслеживаемой директории
IN_DELETE — файл или каталог был удален в отслеживаемой директории
IN_DELETE_SELF — отслеживаемый файл или каталог был удален
IN_MOVE — файл был перемещен из отслеживаемого каталога или в него
IN_ALL_EVENTS — все события
В описании команды можно использовать внутренние переменные. Самые полезные:

$@ — полное имя отслеживаемого файла/каталога
$# — относительное имя файла, вызвавшего событие (только при мониторинге каталога)
$% — название события

https://xakep.ru/2011/01/13/54477/ (pdf)

более современные инструменты:
https://github.com/iovisor/bcc/blob/master/docs/tutorial.md
BCC is a toolkit for creating efficient kernel tracing and manipulation programs, and includes several useful tools and examples. It makes use of extended BPF (Berkeley Packet Filters), formally known as eBPF, a new feature that was first added to Linux 3.15. Much of what BCC uses requires Linux 4.1 and above.

Wireguard VPN added to 5.6 kernel

https://www.opennet.ru/opennews/art.shtml?num=52636

Представлен знаковый выпуск VPN WireGuard 1.0.0, который отметил собой поставку компонентов WireGuard в основном составе ядра Linux 5.6 и стабилизацию разработки. Включённый в состав ядра Linux код прошёл дополнительный аудит безопасности, выполненный независимой фирмой, специализирующейся на подобных проверках. Аудит не выявил каких-либо проблем.

Напомним, что VPN WireGuard реализован на основе современных методов шифрования, обеспечивает очень высокую производительность, прост в использовании, лишён усложнений и хорошо зарекомендовал себя в ряде крупных внедрений, обрабатывающих большие объёмы трафика. Проект развивается с 2015 года, прошёл аудит и формальную верификацию применяемых методов шифрования. Поддержка WireGuard уже интегрирована в NetworkManager и systemd, а патчи для ядра входят в базовый состав дистрибутивов Debian Unstable, Mageia, Alpine, Arch, Gentoo, OpenWrt, NixOS, Subgraph и ALT.

Размещённые на сайте проекта результаты тестирования охватывают старую обособленную реализацию WireGuard и отмечены как недостаточно качественные. Со времени проведения тестов код WireGuard и IPsec был дополнительно оптимизирован и теперь работает быстрее. Более полное тестирование, охватывающее интегрированную в ядро реализацию, пока не проведено. Тем не менее, отмечается, что WireGuard в некоторых ситуациях по-прежнему обгоняет IPsec в силу многопоточности, в то время как OpenVPN остаётся очень медленным.

Useful linux network cmds

sudo lsof -i -P -n | grep LISTEN
netstat -tulnp | grep LISTEN

Show iptables nat with packet counters:

iptables -L -t nat -nvx

tcpdump -n -nn -v -i eth0 host 192.168.0.1

conntrack-tools (apt-get install conntrack):

conntrack -L [-j 192.168.0.1]

apache2ctl fullstatus

apache2 -V

python -m SimpleHTTPServer
python -m http.server 8000

Революция в фотографии (постепенная)

Давненько был пост о фотоаппарате с шестнадцатью камерами light.co:

сейчас практически все камеры смартфонов используют подобные технологии, но только с одной или парой — модифицированных — камер. Основная работа выполняется процессором, а не объективом.
Отлично, «на пальцах» рассказана эволюция камер с той поры: https://vas3k.ru/blog/computational_photography/ (pdf)
осторожно! очень долго и очень залипательно!
Read More

Конец эмпатии

Так воот откуда все невзгоды современного мира:
https://telegra.ph/Konec-ehmpatii-05-18 (pdf)

«более десяти лет назад люди, и в особенности молодые, начали сомневаться в эмпатии. Одной из первых это заметила Сара Конрат, доцент в университете Индианы. С конца 1960-х годов ученые изучали уровень эмпатии у молодых людей: они наблюдали за их реакцией на утверждения вроде «меня не интересуют чужие проблемы» или «перед тем, как критиковать кого-то, я попытаюсь поставить себя на его место».

Конрат собрала результаты исследований последних десятилетий и обнаружила очевидную закономерность. Начиная с 2000-х годов, уровень эмпатии стал падать. Все больше студентов отвечали, что чужие проблемы их не касаются и они не обязаны ставить себя на место других. Конрат удалось установить, что к 2009 году молодые люди стали в среднем на 40% менее чуткими к окружающим, чем представители моего поколения — на 40%!

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

Они рассуждали так: зачем ставить себя на место другого человека, особенно того, кто может причинить вред? На самом деле отказ сопереживать другому обрел положительную ценность, стал возможностью выразить собственную позицию»

Routing src vs sNAT vs masquerading

1. src field of linux routing table
https://serverfault.com/questions/451601/ip-route-show-src-field

Note that the src you are giving would only affect the traffic originating at your very host. If a foreign packet is being routed, it obviously would already have a source IP address so it would be passed on unaltered (unless you are using NAT of course, but this is an entirely different matter). Also, this setting might be overridden by a process specifically choosing to bind to a specific address instead of using the defaults when initiating connections (rather rare).

2 и 3.
http://sysadminz.ru/index.php?topic=3872.0

Принципиально SNAT ничем не отличается от MASQUERADE, разница лишь в том что SNAT может транслировать адрес источника в любой заданный адрес, а MASQUERADE — только в адрес физического интерфейса, непосредственно установленного на данном компьютере. MASQUERADE рекомендуется использовать только с интерфейсами, имеющими динамические IP адреса (например, при dialup соединении).

Пример:
* Делаю Snat из одной сетки в другую, условием является source IP и имя исходящего интерейса.
* Со временем на интерфейсе появляется ещё один ip, соответственно в эту подсеть начинает отправляться другой src-ip. А там, где Reverse Path Filtering включен, их не видно.
* Переделываю srcnat на masquerade — src-ip становится правильным на всех подсетях выходного интерфейса

—————
Ещё чтива по теме: https://www.tecmint.com/setup-linux-as-router/ http://xgu.ru/wiki/Маршрутизация_в_Linux

Реальность

Пора заводить тег для постов про восприятие, реальность и когнитивность
1) Виртуальные миры — реальны
2) Анил Сет — Реальность, которую мы воспринимаем, — всего лишь галлюцинация [TED]
3) СОЗДАНИЕ ТОННЕЛЕЙ РЕАЛЬНОСТИ
или как мы воспринимаем окружающий мир

Наши модели вселенной и ее восприятие имеют генетические ограничения. Наша ДНК произошла от ДНК приматов. Она до сих пор имеет 98%-е сходство с ДНК шимпанзе и 85%-е — с ДНК южноамериканских паукообразных обезьян.

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

ДНК и производный от нее нейро-сенсорный аппарат создает тоннель реальности [окружающий мир], как он воспринимается данным субъектом. Собаки и кошки видят и ощущают не такой же «тоннель реальности», как приматы. [Отсюда и Закон Хайнлайна: «Никто и никогда еще не мог переупрямить кошку»]. Однако собачьи, кошачьи и обезьяньи тоннели реальности остаются в достаточной степени сходными для того, чтобы между собаками, кошками и приматами легко могли возникать общение и даже дружба.

Змеи живут в гораздо сильнее отличающемся тоннеле реальности. Они, например, видят тепловые волны и, кажется, не видят «объектов». Тот мир, который видит змея, очень похож на спиритический сеанс — во мраке плавают поля «жизненной энергии». Вот почему змея бросится на воздушный шарик, надутый горячим воздухом, если он «вторгнется» на ее территорию. Для змеи тепло воздушного шарика и тепло ноги охотника имеют одно и то же значение: пришел непрошеный гость. В обоих случаях змея будет защищать свою территорию.

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

Роберт Уилсон, из книги «Квантовая психология»

Технология «промывания мозгов». китай

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

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

Но ох уж эти «безобидные» уступки… Письменное заявление могло уже само по себе изменить поведение человека в нужную сторону.

https://telegra.ph/Kitajskij-opyt-kontrolya-soznaniya-11-27
https://graph.org/Kitajskij-opyt-kontrolya-soznaniya-11-27
https://tgraph.io/Kitajskij-opyt-kontrolya-soznaniya-11-27
pdf

Ожирение софта

Спустя ещё два года после «ожирения сайтов» https://loess.ru/ожирение-сайтов/ и ряда катастроф (например, npm и leftpad, M.E.Doc и NotPetya и т.п.), ещё кто-то всё понял:
«Windows 10 takes 30 minutes to update. What could it possibly be doing for that long? That much time is enough to fully format my SSD drive, download a fresh build and install it like 5 times in a row.»
http://tonsky.me/blog/disenchantment/
https://habr.com/post/423889/ (pdf)
деффективный менеджмент и кинопоиск

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