commit -m "better"
2.96K subscribers
872 photos
105 videos
3 files
2.08K links
just random thoughts
Download Telegram
commit -m "better"
У меня для вас сегодня парочка анекдотов. Про сборку, конечно. * https://github.com/pg83/mix/blob/main/pkgs/bin/net/tools/mix.sh#L18 Авторы net-tools настолько упоролись, что решили, что их сборка может быть запущена только руками, и ответы на вопросы надо…
Сегодня у меня для вас анекдот про мое чувство прекрасного.

Меня лично бесят программы, которые хотят создавать временные файлы. Вообще, "временный файл" - это какой-то нонсенс, потому что захера писать эфемерные данные в персистентный файл?

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

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

В первом случае, кстати, в современном linux можно использовать memfd_create(), довольно полезная вещь, в плане "замести мусор под кровать".

Другая проблема с временными файлами - всякие странные программы не уважают настройку TMPDIR, и пытаются напрямую писать в /tmp, причем, придумывая какие-то дикие способы разграничения доступов и "непересечения" с другими экземплярами.

Вот вам содержимое моего сессионного tmp:

./epiphany-pg-aaNPpb
./d9ca075b14fe84b587843f702e0d2466-
{87A94AB0-E370-4cde-98D3-ACC110C5967D}
./6b047d326310867001cb39f5218a36ba-
{87A94AB0-E370-4cde-98D3-ACC110C5967D}
./mc-pg
./mc-pg/mc-pg
./sway-ipc.10000.9709.sock
./wayland-1
./wayland-1.lock
./dbus.sock
./dbus-1
./dbus-1/services
./dbus.cfg
./ssh-XXXXXXJIAMlN
./ssh-XXXXXXJIAMlN/agent.9704

Сколько вы тут насчитали разных способов "уникализации"?

Повторю, меня это дико бесит, и я себе поставил цель - все программы, которые я использую, должны уметь в TMPDIR.

Кстати, немного в сторону, #TMPDIR, конечно, должна быть "сложным" путем, включающем в себя id пользователя, и session id(например, чтобы уметь эффективно очищать это барахло по окончанию сессии):

pg-> echo ${TMPDIR}
/var/tmp/10000/10953

Поэтому у меня в #stal/ix нет корневой папки /tmp.

Почему?

Потому что, по странному стечению обстоятельств, все программы, которые имеют свое сильное мнение про именование папки с временными файлами, пытаются писать в /tmp.

А у меня ее нет, зато есть /var/tmp, с разделением по сессиям.

Поэтому все такие программы ломаются, и я их все исправляю.

Чтобы этот процесс не был мучительным, я запилил небольшую библиотечку для этого - https://github.com/pg83/ix/tree/main/pkgs/lib/shim/ix

Ее применение почти автоматизировано - https://github.com/pg83/ix/blob/main/pkgs/bin/got/ix/ix.sh#L10
👍20🔥9🤔2💩1
commit -m "better"
А у меня ее нет, зато есть /var/tmp, с разделением по сессиям.
Будни #bootstrap

Я как-то писал про то, что стараюсь делать так, чтобы все программы уважали ${#TMPDIR} - https://t.iss.one/itpgchannel/757

Сейчас я пошел еще дальше, и удалил системную /var/tmp - https://github.com/pg83/ix/commit/ff64cbcb480c9f0557fccce7de3dd9a51ae3aed3#diff-3814a46e233f2ebc67e3992e03a9eaf741405849ee94ff7de2506582e02e1f1bL110.

Да, у меня теперь нет этой помойки под названием "/tmp".

Каждый процесс в моей системе - он либо принадлежит какому-то сервису, или сессии. Каждая сессия тоже принадлежит какому-то сервису, поэтому, можно сказать, что любой процесс в моей системе принадлежит какому-то сервису. Есть, конечно, исключение - это ранние моменты инициализации, до запуска супервизора, но они и не гадят в /tmp.

Сервис у меня - это вполне формализованное понятие, он хранит все свои файлы в /var/run/{{service_name}}/, и нигде больше. В том числе, все сокеты, нужные для взаимодействия с ним.

Поэтому теперь временные папки создаются для каждого сервиса/сессии, и очищаются, когда они заканчиваются - https://github.com/pg83/ix/blob/main/pkgs/bin/vt/runit/scripts/ix.sh#L9-L13.

Это позволило очищать всякие остатки за завершившимися сессиями, ну и вообще, стало приятнее!
👍29🔥15😁2🆒2
commit -m "better"
Да, у меня теперь нет этой помойки под названием "/tmp".
Приятно осознавать себя на острие прогресса!

Вот, я недавно (ну как "недавно", в первый раз так-то в 22 году, когда я только начал этот quest) писал про #TMPDIR, и тут, внезапно:

https://dotat.at/@/2024-10-22-tmp.html

Годный, очень созвучный моим мыслям текст, почему общая TMPDIR - плохо.

https://systemd.io/TEMPORARY_DIRECTORIES/

А потом и авторы #systemd подтянулись (они вообще горазды пиздить у меня годные идеи, типа https://t.iss.one/itpgchannel/1871 #suid). Чуть менее годный, но тоже неплохой, текст, на эту тему. Решение проблемы, которое озвучивается там, мне не нравится.

К сожалению, оба текста недостаточно радикальны.

Софта, в котором захардкожено /tmp или /var/tmp, не так уж и много, и его надо патчить, и исправлять. Надеюсь, теперь это станет mainstream, и кода, который хардкодит эти значения, со временем станет меньше.
🔥14👍6😁41
commit -m "better"
Для сборки ядра нужна тулза bc. Тулза bc от проекта GNU требует для сборки программу ed. Но если собирать bc от GNU с ed от GNU, то ed зависает на входе. При этом, замечательно срабатывает ed из проекта heirloom, но на получившемся bc виснет сборка самого ядра(я смотрел на выхлоп heirloom ed, и почти готов дать зуб, что он таки правильный). На этом замечательном результате я остановился, и взял bc из проекта busybox.
Будни #bootstrap

В итоге, проблему со сборкой gnu bc пришлось раздебажить, потому что надоело костылизировать сборку ed от #heirloom.

Все оказалось до смешного просто - ed от GNU хочет завести временный файл, и именно в /tmp, которого у меня нет (#TMPDIR https://t.iss.one/itpgchannel/2350), молча глотает ошибку, и дальше мы получаем мусор на вход в сборку gnu bc.

Вот однострочник, который фиксит проблему - https://github.com/pg83/ix/blob/main/pkgs/bin/ed/ix.sh#L10
🔥124🤩4🤮3🤡3❤‍🔥1👍1🥱1🐳1