LINUX.ORG.RU

Избранные сообщения Dr64h

Выпуск консольного текстового редактора Vis 0.9

Новости — Open Source
Группа Open Source

Vis – консольный текстовый редактор, сочетающий в себе модальное редактирование в стиле vi со структурными регулярными выражениями в стиле sam.

( читать дальше... )

>>> Подробности

 , ,

anonymous
()

Удалённый доступ за NAT

Форум — Admin

Привет!

Есть ноутбук (которым пользуется родственник), на нём установлен calculate linux.

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

Хочется иметь туда доступ по SSH… чтобы иметь возможность обновлять ПО, в первую очередь такие вещи как ядро (исправления уязвимостей) и браузер (тоже уязвимости и чтобы сайты не ломались, если долго, то есть годами не обновлять, бывает что современный сайт просто перестаёт открываться).

Какой-нибудь демон может установить… который бы устанавливал соединение, по которому я мог бы туда попадать?

Раньше я что-то такое делал на связке ipv6+ddns, но потом что-то оно перестало работать, так и не разобрался, из-за чего.

Может есть ещё какие-то варианты, которые мне в голову не пришли?

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

ОТВЕТ: zerotier именно то, что искал, круто, что есть такой продукт, да ещё и бесплатная версия, шикарно.

P.S. ssh-j.com тоже классная штука, подкупает тем, что можно скинуть человеку в чат «запусти пару команд чтобы я к тебе смог подключиться», не надо демон настраивать.

 , , ,

BattleCoder
()

Примеры GUI программ без фреймворков

Форум — General

Знакомы ли вам полноценные десктопные графические программы, написанные без использования фреймворков QT/GTK и подобного?
На чистой манипуляции X11 или Wayland.
Не просто поделки какие-нибудь, а реальные качественные программы, которыми пользуются люди.

 

vvvv
()

Накидайте книг для продвинутого Си под онтопик

Форум — Development

Сто лет назад прочитал K&R и всегда хватало, а если я хочу углУбить?

// друг спрашивает :)

UPD: собрал из темы списочек, особо не редактируя (экстримов и модернов поболее одного, но пусть будет) – думаю, заглянувшим в будущем будет полезно:

  • modern c by jens gustedt
  • Thomas Mailund - Pointers in C Programming (2021)
  • Gustedt - Modern C (2020)
  • Kalin - Modern C Up and Running (2022)
  • King - C Programming. A Modern Approach, 2nd ed. (2008)
  • Хэзфилд «Искусство программировани на C»
  • «Язык C в XXI веке»
  • Экстремальный Си
  • extreme c programming
  • «UNIX. Профессиональное программирование» Уильям Ричард Стивенс, Стивен А. Раго
  • C Interfaces and Implementations: Techniques for Creating Reusable Software
  • Peter van der Linden, Expert C Programming: Deep C Secrets https://progforperf.github.io/Expert_C_Programming.pdf
  • Чан Теренс «Системное программирование на С++ для Unix»

 ,

pihter
()

Лучший генератор речи из текста offline

Форум — General

Ранее пользовался rhvoice, но нашел качественнее - https://github.com/rhasspy/piper

Это лучшее, или есть еще варианты ?

 

x905
()

Как разобраться в формате файла? (было: Как заинструментировать код на Си)

Форум — Development

Пост обновлен, предыдущее название: «Как заинструментировать код на Си и понять что он делает? Реверсинг формата файла»


Вступление

Есть какой-то файл и я хочу понять его внутреннее устройство. В качестве примера, возмем файл формата PNG, так как он достаточно простой и хорошо документирован. Но далеко не все форматы хорошо документированы, поэтому полагаться только на документацию - нельзя.

Итак, у нас есть какой-то файл формата PNG - что с ним дальше можно сделать? Можно было бы взять готовую библиотеку для чтения данного формата (libpng), но она содержит более 100 000 строк кода, что крайне сложно для понимания.

Я предполагаю, что более наглядным для изучения будет разглядывать такие картинки:

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

К сожалению, не все форматы файлов так хорошо описаны, как описан формат PNG. Далеко не для всех форматов файлов есть такие картинки и тем более шаблоны для hex-редакторов. И я бы хотел делать такие картинки самостоятельно.


Идея

Я предполагаю, что если для этого формата есть открытая библиотека (libpng), то для него можно написать свою читалку (my_png_reader). В свою очередь, у нашей библиотеки (libpng) могут быть свои зависимости (zlib) и я предполагаю, что нужно будет разобраться и с устройством этой библиотеки тоже.

Само собой, для тестирования, нужно будет собрать некий тестовый датасет (набор png-файлов с разными разрешениями, режимами компрессии, битые файлы). Для этого было бы неплохо использовать утилиты из набора AFL для уменьшения датасета и уменьшения самих исходных данных: https://youtu.be/0dqL6vfPCek (фаззинг файла вместе с ffmpeg)

Вопрос: как бы заинструментировать имеющийся софт (программу, библиотеки), чтобы понять, что такое оно делает с файлом, что внутри и как его вообще читать? Да и вообще, что можно вытащить из подобной затеи?

Например, очень бы хотелось узнать:

  • Сигнатуру файла (\x89PNG в начале файла)
  • Структуру «чанков», что она представляет собой 4 поля: длинна, тип, данные, CRC32
  • Алгоритм расчета CRC32: какая часть данных считается, с заголовком или без, какой полином
  • Какая часть файла пожата zlib, какие части файла просто являются несжатыми массивами
  • Нарисовать какую-то диаграмму, где какой байт чему соответстует, вроде https://i.imgur.com/eLd44xQ.png или https://i.imgur.com/AwpmSxV.png

Я себе это представляю как-то так:

  1. Читаем кусочек файла и помечаем, что это наш файл (перехватываем read/fread, «отравляем» эти участки памяти)
  2. Ставим брейтпоинт на чтение памяти, логгируем, смотрим по map-файлу где мы это читали, желательно размотать стек
  3. По коду уже можно представить, читаем мы float или int16, находимся ли в структурке или еще где. Если мы внутри функции check_file_signature(), то это вообще очевидно. Можно пометить как ручками, так и чем-то вроде IDA.

Зачем? Это поможет в написании файлов-шаблонов для таких программ как https://ide.kaitai.io/ или 010 Editor. Конечно, в идеале запустить на входе PNG-файл, а на выходе получить KSY (формат описания файлов kaitai) или BT (формат для 010 Editor), но понятно, что идеальной документации не будет. Но я стремлюсь именно к этому.

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

Буду благодарен на статьи просто по инструментации сишного кода. Или не только сишного.


Референсы и идеи

  • https://github.com/AFLplusplus/AFLplusplus - отличное средство для фаззинга (пример фаззинга libpng: https://youtu.be/LsdDRat4S0U), но я не очень понимаю как это применить именно к описанию файла. А вот тулзы вроде afl-cmin - чистое золото
  • https://www.intel.com/content/www/us/en/developer/articles/tool/pin-a-dynamic-binary-instrumentation-tool.html - Intel PIN
  • Address Sanitizer or ASAN - можно попробовать поиграться с ним и залоггировать доступ к памяти
  • valgrind + lackey - очень многообещающе, но боюсь не осилить
  • Попробовать сделать доступ к страничке PROT_NONE, получить сегфолт, но непонятно как возвращать управление (сделал, но споткнулся на последнем пункте)

 , , , ,

ruzisufaka
()

Быстрые аналоги ImageMagick(convert)

Форум — General

convert отличается исключительным тугодумством. Есть ли что-то побыстрее?

 

hateWin
()

Си. Почему бы не запретить запись в стек?

Форум — Development

Решил немного разобраться как работают уязвимости. Как я понял, весомая их часть модифицирует стек.

#include <stdio.h>

register long unsigned rsp asm("rsp");

void print_arg(int arg) {
    ((int*)rsp)[3] = 0xBADC0DE;
    printf("arg = %x\n", arg);
}

int main(int argc, char **argv) {
    print_arg(0xF00D);
    return 0;
}

Этот код отрабатывает и не выводит ошибкок с

-fhardened -fcf-protection=full

На мой взгляд выглядит небезопасно.

Почему бы не вставлять проверки на ассемблере при записи в память, на включаемость в регион стека? Если нужно записать что то в аргумент на стеке (int), то проверку можно не вставлять. При записи по указателю, уже обязательно вставлять. Если адрес стека то ошибка. В memset проверять пересечение двух диапазонов.

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

void read_file(const char *name)
{
        char buff[999];
        FILE *f = fopen(name, "rb");
        read_block(f, buff);
}

void read_block(FILE *f, char *buff)
{
        // тут компилятор должен вывести что len(buff) == 999
        fread(buff, 1, 9999, f);
}

Что бы все идеально работало, нужно будет:

  • Пометить libc функции
  • Если функция работает со стеком как у меня в верхнем примере, но это правильное поведение, пометить и ее
  • Перекомпилировать основные библиотеки, что бы не ломать ABI можно ввести экспорт двух прототипов, с доп.значениями для проверки диапазонов и без, дублирование прототипов понадобится для малого числа функций

 

MOPKOBKA
()

Проект на чистом Си

Форум — Development

Камрады, всем доборый день!

Решил тряхнуть стариной, написать кое-что полезное для себя и таких же упоротых личностей. Заодно вспомнить Си (который без «крестов»). Естественно, хочется сделать «красиво, модно, молодёжно» и удобно. Вопрос - как проекты на Си принято начинать в 2024? Ну там пакетные менеджеры (а они вообще есть?), линтеры и прочее счастье. Какой стандарт сейчас считается «правильным» для использования и какую литературку/доку по нему почитать? Буду благодарен, если покидаетесь статьями или книгами.

 , , ,

small-entropy
()

60фпс, но нет плавности

Форум — Games

Добрый день. Может поможете разобраться нубу со следующей проблемой: запускаю игры из-под протоновского Wine и в таких играх, как battlefiled 4,1,5 при стабильных 60фпс периодически появляется какая-то тормознутость. На графике фреймтайма ничего не происходит, фпс держится на 60 (залочено), но фпс как-будто проседает до 40. Какой-то закономерности не заметил. То идёт плавно, то начинается такая фигня при взгляде на забор какой-то левый, то в другой случайной сцене. Вертикалку отключать и включать пробовал. Проц 50%, видеокарта с запасом АМД, дрова от kisak (пробовал и стоковые, и оибаф), ядро xanmod (на стоковом 6.5 тоже самое). Linux mint 21.3. В Интернете не нашел ничего по этому поводу,на протонДБ тишина, значит проблема частная. Пробовал также через лутрис запускать. В других играх более-менее нормально, кроме Rage2 - там при локе на 60фпс фреймтайм идет в виде симметричного забора и картинка по восприятию кадров 20. Может кто сталкивался или знает, куда копать?

Перемещено hobbit из general

 , ,

Krapkert
()

litehtml v0.9

Новости — Open Source
Группа Open Source

Состоялся выпуск litehtml, легковесного движка рендеринга HTML/CSS. Основная цель библиотеки litehtml – предоставить разработчикам простой способ отображения HTML-страниц в своих приложениях. Например, он может использоваться программах-словарях вместо WebEngine. Qt Assistant использует эту библиотеку для показа справки.

Библиотека не занимается отрисовкой текста или изображений, поэтому у нее нет привязки к какому-либо тулкиту.

Кроме множества улучшений, выпуск примечателен базовой реализацией CSS Flexbox.

litehtml распространяется на условиях New BSD License и использует gumbo-parser с лицензией Apache v.2.

>>> Подробности

 , , litehtml

NickNotNick
()

Модификация заголовков входящих IPv4 пакетов через iptables

Форум — Development

Сап, лор.

Есть необходимость модифицировать входящие/исходящие пакеты ip по некоторой логике (не NAT и прочее). Интернеты говорят, что для этого можно использовать nf queue или match-модуль для iptables. Для последнего нашлось несколько тестовых/примерных реализаций, напр, https://github.com/vt-alt/tripso. Этот проект оперирует достаточно сложными (в данном случае) вещами - метки безопасности, у них какой-то там формат и прочее, поэтому я сильно упростил код, чтобы просто понять, как оно работает. А оно не работает. Подробнее:

  1. Исходящие пакеты:
  • Правим код, убираем проверки на наличие security options в заголовке ip и просто в ip_hdr->check пишем 0. Добавляем отладочный вывод, чтобы убедиться, что код отрабатывает.
  • Подключаем-запускаем # iptables -t security -I OUTPUT -j TRIPSO --to-astra
  • Сеть не фунциклирует, понятно. # tcpdump -w ~/dump.pcap, видим все исходящие пакеты с checksum == 0

Т.е. для исходящих пакетов все работает.

  1. Входящие пакеты:
  • Ребутим (не получилось корректно выгрузить, неважно), запускаем для входящих # iptables -t security -I INPUT -j TRIPSO --to-cipso
  • Сеть жива. tcpdump показывает, что все КС на месте, никаких нулей. dmesg показывает, что код модуля работает.

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

Вариант # iptables -t raw -A PREROUTING -j TRIPSO --to-astra счастья тоже не принес. Игры с -A и -I тоже.

TL;DR match-модуль для iptables модифицирует исходящие пакеты, но не входящие. Как модифицировать входящие пакеты? Ну или что я не так делаю? nf queue не предлагать.

 ,

leet27
()

Не запускается Steam (бесконечный экран загрузки)

Форум — Games

Ещё пару недель назад стим запускался без проблем. Железо с тех пор не поменялось никак. А сегодня его запустить не получилось - бесконечный экран загрузки: https://i.redd.it/fwhr0ommda6c1.png

Пробовал удалять и переустанавливать, из официальных репозиториев и из flatpak. Не помогло.

Пробовал удалять папку .steam и аналогичные папки в .cache и .local - не помогло.

С помощью Timeshift откатил систему до состояния «только что после установки и настройки» - всё та же бесконечная загрузка. Хотя на момент создания этой контрольной точки всё работало прекрасно.

С видеодровами всё в порядке: Blender на GPU отлично рендерит.

Полный вывод консоли здесь: https://pastebin.com/ZKHjmxFR

Что происходит?

OS - Manjaro

Update: вот здесь описание точно такой же проблемы: https://github.com/ValveSoftware/steam-for-linux/issues/8859

Разница лишь в том, что на https://store.steampowered.com/ я залогинился без проблем.

 ,

Mapper720
()

Вопрос по стандартам синтаксиса C++

Форум — Development

Навеяно i++ + i++

Вот есть int a = 1 и int b = 3. Какой результат должен быть у a+++b? 4 или 5? Иными словами, компилятор должен воспринимать это как (a++) + b или как a + (++b)?

 , , ,

ad0c
()

Mayo 0.8

Новости — Open Source
Группа Open Source

Состоялся выпуск Mayo, программы для просмотра и конвертирования 3D-файлов. Поддерживается довольно много форматов, среди них STEP, IGES и STL.

( читать дальше... )

>>> Подробности

 , , mayo

NickNotNick
()

Для тех, кто думает перейти на Gentoo

Форум — General

Привет

Достаточно часто создаются темы, где люди думают переходить на Gentoo и хотят уточнить некоторые моменты. Чтобы сэкономить время себе и другим, решил создать этот топик, в котором буду собирать ответы на частые вопросы.

TL; DR: Для тех, кто думает перейти на Gentoo (комментарий)

Преимущества
#1 Gentoo очень гибкая и всенастраиваема
Пример того что в Gentoo делается просто:
- Использовать openrc вместо systemd или наоборот; pulseaudio или без него
- Наложить кастомный патч; пример когда это нужно
- Подключить или отключить такие вещи как vaapi, vdpau, opencv и т. п.
- Иметь несколько веток софта; уточню, что это работает только для определённых пакетов; например можно одновременно установить python 2.7, 3.4, 3.5 или qt4 и qt5, но нельзя одновременно установить qt 5.7 и 5.8

#2 Очень удобный и функциональный пакетный менеджер
Примеры удобных фич:
- Прервать установку (вплоть до перегрузки компьютера), а потом ее продолжить. Можно продолжить с последнего пакета (emerge --resume), продолжить но пропустить последний пакет, например, если его установка прервалась с ошибкой (emerge --resume --skipfirst, некоторые нюансы); для больших пакетов можно продолжить саму компиляцию (ebuild <полный путь и имя файла>.ebuild merge).
- Когда при установке обновляется конфиг приложения, определяется редактировался ли предыдущий конфиг пользователем. Если да, конфиг не перезаписывается, а кладётся радом, и выводится сообщение пользователю с предложением обновить конфиг.
- Обновить всю систему, но исключить некоторые пакеты (удобно для исключения больших пакетов из ежедневного обновления)
- Почистить зависимости - удалить те пакеты, которые больше никому не нужны.
- Поскольку ebuild - текстовый файл, то можно пропарсить на предмет требований к количеству ресурсов для установки:

$ for F in $(find /usr/portage -name "*.ebuild") ; do REQ=$(grep "CHECKREQS" "$F") ; if [[ -n "$REQ" ]]; then echo -e "\n$F\n$REQ" ; fi; done
- Вынести компиляцию на другой компьютер (поддержка distcc на уровне пакетного менеджера). Важно когда Gentoo устанавливается на слабый компьютер.


#3 Хорошая документация, по крайней мере на английском. Более того, поскольку Gentoo-специфичные утилиты являются лишь надстройкой на generic механизмами, документация от других дистрибутивов (например от Arch) в большинстве случаев тоже подходит.
Опрос 2014: У какого дистрибутива лучшая документация

#4 Достаточно свежий софт, много сторонних репозиториев.
Список сторонних репозиториев
Gentoo - rolling release, а значит как только новая версия конкретного софта появилась в репозитории, её можно установить. Но здесь не имеется ввиду, что как только новая версия зарелизилась, она моментально становится доступна в основном дереве; лаг есть, но он как правило не большой, хотя зависит от пакета. В тестинг ветке новые версии появляются раньше. Кроме того мейнтейнеры Gentoo могут маскировать некоторые версии, если в них обнаруживаются серьезные баги. Однако всегда можно размаскировать нужную версию. Кроме того для некоторых пакетов есть -live версии, когда исходники скачиваются напрямую из github или аналога.
Пример когда «у меня не самый свежий софт в Gentoo»

#5 Полный порядок в системе, ничего лишнего - эстетическое удовольствие, плюс возможно можно немного улучшить перформанс

#6 В процессе установки и эксплуатации получаешь полное понимание как работает система, а значит возникающие проблемы решаются быстро. На самом деле без должного знания Линукса (или желания его узнать в процессе) Gentoo нормально не установить.

Недостатки
#1 Сложная и долгая первичная установка. Если устанавливать в первый раз, нужно готовиться потратить несколько дней. Для опытных - несколько часов + компиляция.
Время установки (компиляции) Gentoo, еще немного цифр по большим пакетам

#2 Пакетный менеджер хоть и удобный, но очень медленный

#3 Если не обновлять систему долго (полгода и более), то сложность обновления сопоставима с установкой новой системы. Есть мнение, что emerge-webrsync --revert=yyyymmdd должен помочь (лично я не проверял).

Особенности
#1 Высокий порог входа; дистрибутив не для новичков. Если человек не комфортно чувствует себя в командной строке, никогда не компилировал ядро, не разбивал диски на разделы, не привык изучать докуменацию, вчитываться в сообщения и анализировать логи, то Gentoo покажется сложной в обслуживании, а возникающие проблемы будут списываться на дистрибутив.

#2 Обновляться нужно часто.

#3 Основные фичи - в командной строке. Для тех, кто не привык работать в командной строке, это будет минусом. А для тех, кто комфортно чувствует себя в командной строке, это будет плюсом, так как работа в командной строке более эффективна, а типовые сценарии можно обернуть в скрипты и еще больше сократить время на обслуживание системы.

#4 Есть две ветки: stable и testing. В stable меньше шансов встретить проблему, но в testing более свежий софт. Ветки можно комбинировать.

Мифы
Миф #1 Gentoo даст прирост производительности за счет того, что весь софт компилируется под конкретное железо.
Краткий ответ: В 99% случаев при смене дистрибутива X на Gentoo вы не заметите какого-либо улучшения в плане скорости работы. Если вы зададитесь целью сравнить свежеустановленный дистрибутив X с свежеустановленной Gentoo, то в 90% вы не увидите значительной разницы.

Детальный ответ.
Не следует ожидать что просто скомпилировав систему из исходников вы получите сколько-нибудь заметное улучшение перформанса.
Для большинства приложений компиляции под конкретное железо даст прирост производительности в районе 1-2%.
Ложка дегтя: в некоторых случаях даже может быть замедление. Например Firefox, можно ускорить с помощью PGO. В Gentoo по умолчанию это отключено, так как PGO увеличивает время компиляции почти в два раза. В бинарных дистрибутивах соотв. софт может быть скомпилирован с PGO.
Так как добиться улучшения производительности? Узкий круг приложений может быть значительно ускорен при компиляции под конкретную платформу - на 30%-50% и больше. В основном это приложения которые активно занимаются вычислениями. Но для этого требуется соотв. настройки. Например, активация SIMD инструкций, даст прирост производительности в мультимедиа приложениях. Некоторые процессоры имеют аппаратную поддержку шифрования AES. В бинарных дистрибутивах подобные фичи будут отключены, так как не все процессоры это поддерживают, а бинарные дистрибутивы в первую очередь заботятся о совместимости.
Небольшое улучшения перформанса возможно если убрать из системы всё лишнее (мнение 1, мнение 2).
Еще интересный случай

Миф #2 Обновления занимают много времени
Краткий ответ: 5-10 минут на фоне, не мешая основной работе.

Детальный ответ.
Обновления не занимают много времени, но опять же, при правильном подходе.
Во-первых, как было сказано выше, обновляться нужно часто. Для testing ветки это каждый день, или по крайней мере не реже чем в раз 2-3 недели. Для стабильной ветки - раз в неделю достаточно (на стабильной ветке намного реже выпускаются обновления)
Во-вторых, есть пакеты которые правда очень долго компилятся: libreoffice, firefox, chromium... Их всего 10-15. Я их исключаю из ежедневного обновления, а обновляю раз в несколько месяцев.
Еще нужно сказать, что на этом вопросе часто заостряют неоправданно много внимания. Обычно обновления происходят на фоне, и не сильно влияют на работу; так какая разница как долго они выполняются?
В итоге, у меня обновления занимают примерно 5-10 мин ежедневно (у меня тестинг-ветка).
К тому же всё происходит на фоне, в любой момент можно поставить на паузу (Ctrl+Z, fg), продолжить после прерывания (умышленного или случайного).
Мой скрипт ежедневного обновления

Миф #3 Gentoo требует много времени на обслуживание
Краткий ответ: Может быть больше, может быть меньше по сравнению с другими дистрибутивами. Очень зависит от того, насколько вы будете вчитываться в то, что пишет вам пакетный менеджер, и разбираться первопричинах.

Детальный ответ.
Обслуживание Gentoo занимает меньше времени по сравнению с другими дистрибутивами, но только при грамотном обращении, конечно. Достигается это за счет следующего:
- хороший пакетный менеджер: маскировки, глобальные и индивидуальные установки для пакетов (USE флаги, опции компиляции, каталоги), хуки, приоритеты (чтобы компиляция происходила на фоне и можно было работать), много опций для установки и анализа, подсказки после установки.
- всё происходит в CLI, а значит типовые операции можно обернуть в скрипты/алиасы.
- уже существуют много утилит для облегчения обслуживания: eselect, equery, eix, eclean, euse, genlop и др.
Грамотное обращение означает, что вы правильно и регулярно обновляете систему, исполняете предписания emerge, которые он выдает после установки, держите в порядке конфигурационные файлы, а если таки возникает проблема, которую решить вы не можете, то вы обращаетесь в форумы, а не просто жалуетесь на жизнь.
Что до проблем с обновлениями - см. следующий пункт «Миф #4 Установка, обновление постоянно падают; частые блокировки»

Миф #4 Установка, обновление постоянно падают; частые блокировки
Краткий ответ: Не чаще чем в других дистрибутивах

Детальный ответ.
Если говорить про «часто» и «постоянно», то проблемы с обновлением/установкой могут быть если:
- система давно не обновлялась
- система неправильно обслуживается (см. выше про Грамотное обращение)

В редких случаях пакет просто не компилируется. На самом деле это проблема не Gentoo, а тех, кто писал этот софт. И в подавляющим большинстве случаев это не является проблемой, и вот почему. Если это обновление, то можно продолжить процесс запустив emerge с параметрами --resume --skipfirst - он обойдет проблемный пакет, пересчитает зависимости чтобы система осталась консистентной, и продолжит обновление (а можно изначально передать параметр --keep-going, тогда это будет происходить автоматически, прерываний вообще не будет). Если пакет критичен, можно установить предыдущую версию, которая компилировалась (а проблемную замаскировать чтобы пакетный менеджер ее не видел).

Что может заблокировать обновление полностью:
- просьба пакетного менеджера поменять флаги пакета. При этом emerge предлагает сделать это автоматически, но лично я предпочитаю делать вручную. Для ручного способа, решается добавлением строчки в package.use
- просьба пакетного менеджера задать лицензию. Это валидно только для не-свободных лицензий, например EULA, Skype, Adobe Flash и т. п. Если мы говорим имено про обновление, то такое бывает только когда лицензия обновляется, что бывает очень редко (как много у вас пакетов под не-свободной лицензией, и как часто они меняют лицензию?). Решается добавлением одного слова в make.conf
- просьба пакетного менеджера размаскировать пакет. По моему опыту нужно не размаскировывать, а наоборот замаскировывать пакеты, которые тянут замаскированные зависимости. Это, да, требует минут 5-10 на разобраться. Но, если только у вас нет смешения веток и live пакетов, такой вариант случается раз в пятилетку.
- сложные блокировки. Большинство блокировок пакетный менеджер разрешает сам; по моим наблюдениям, качество данного механизма значительно улучшилось пару лет назад. Из своего опыты скажу, что (учитывая частые обновления) блокировок, которые бы совсем останавливали обновление я уже не видел года 1.5. Но если они есть, то это действительно сложный кейс.

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

Миф #5 В Gentoo нет бинарных пакетов
Краткий ответ: Есть там, где это действительно нужно.

Детальный ответ
Во-первых есть Calculate Linux - полностью бинарный форк Gentoo.
Во-вторых даже в самом Gentoo в основном репозитории есть несколько бинарных пакетов: libreoffice-bin, firefox-bin, некоторые другие. Связано это с тем, что из исходников они очень долго компилируются, и иногда проще поставить бинарник.
Бинарный пакет можно сделать самому командой quickpkg --include-config y <установленный пакет> - удобно для бекапов.

FAQ

#1 Установка на слабый компьютер
Смотря что есть слабый компьютер.
Из собственного опыта: Intel Core2 Duo 6600 @ 2.40GHz, 2Gb RAM + 4Gb swap хватало для комфортной работы в Gentoo.
Зачастую ebuld'ы содержат информацию о том, сколько нужно памяти для компиляции пакета. TOP 5:
16G - chromium
8G - ledger, isabelle
7G - ceph
6G - firefox x64 (для x32 нужно 3G), pypy x64 (для x32 нужно 3G)
5G - electron
Если компьютер и вправду слабый, то лучше выбрать не Gentoo (точнее не-source-based дистрибутив). Альтернатива - можно вынести компиляцию на другой «не-слабый» компьютер с помощью distcc.


Опрос 2021: Какую операционную систему и/или дистрибутив GNU/Linux вы используете на ПК?
Опрос 2018: Какой ОС вы пользуетесь на основном ПК?
Опрос 2017: Какую ОС вы используете на основном ПК?
Опрос 2014: Какой дистрибутив вы используете на десктопе?
W3Tech стастика дистрибутивов на серверах
Отличия дистрибутивов, время работы ноутбука
Чем удобны USE флаги
Сколько памяти нужно для РАБОТЫ Gentoo (сколько нужно для компиляции было указано выше)
Сколько места на диске нужно для Gentoo
Правильное полное обновление Gentoo, Мой скрипт ежедневного обновления, Еще вариант
Gentoo для девелоперов
Практика инсталляции Gentoo: в двух словах простым языком
Небольшой скрипт - сборка livecd

 

Kroz
()

Линукс, ассемблер и X11

Статьи — Разработка
Линукс, ассемблер и X11

Это текстовая версия моей статьи про разработку графического приложения на чистом ассемблере под линукс.

( читать дальше... )

 , ,

alex0x08
()

Как сделать свой QTableView

Форум — Development

В общем хочу поделится открыто классом QpTableView, который выводит ячейки в строке таблицы по шаблону в несколько рядов.

Небольшое видео для наглядности https://youtu.be/zgqkdXJhbpc?si=F0zMMr8oJgx69_47

По итогам работы понятно, что создавать свои виджеты на основе QAbstractItemView можно и нужно.

Но похоже придется из собирать свои виджеты в составе исходников Qt, что на самом деле не проблема (надо один раз попробовать только).

Надо сказать что на то, чтобы изучить исходный QTableView и QHeaderView и сделать свои варианты ушло 5 рабочих недель.

В основном время убило изменение ширины и высоты секций интерактивно мышкой (там отрисовка сразу идёт при перетаскивании края секции мышкой).

И ещё много ушло времени на модель выделения ячеек (selectionModel), что тоже оказалось не просто.

В общем, если кому интересно на гитхабе здесь: https://github.com/PavelDorofeev/How-to-create-own-QTableView-with-new-capabilities

 , ,

kkmspb
()

TeXstudio 4.7.0

Новости — Open Source
Группа Open Source

После более трёх месяцев разработки состоялся выпуск 4.7.0 редактора документов LaTeX TeXstudio, написанного на языке C++ с использованием фреймфорка Qt (поддерживаются версии 5 и 6).

( читать дальше... )

>>> Подробности

 , , , ,

dataman
()

Первый выпуск мультимедийной библиотеки LDL c поддержкой старых систем

Новости — Open Source
Группа Open Source

Представляю Вашему вниманию разработанную мной первую версию мультимедийной библиотеки Little DirectMedia Layer, сокращённо LDL.

Библиотека написана на С++ 98 стандарта, что позволяет компилировать ее начиная с Visual C++ 6.0. Код распространяется на условиях Boost Software License 1.0. Но библиотека не ограничивает программистов в выборе стандарта языка C++, программист может использовать любой современный стандарт языка. Я придерживаюсь философии downgrade — это использование старых устройств и софта в повседневной жизни, когда компании не поддерживают свои же «устаревшие» операционные системы или устройства, увеличивая с каждой новой версией своего продукта системные требования, или прекращают поддержку девайса. Миллиарды устройств по всему миру ежесекундно перемалывают миллиарды инструкций неоптимизированного кода.

В этом году я выступил на конференции С++ 2023 с докладом «Вперед в прошлое, или Разрабатываем фреймворк под Windows 95 в 2023 году».

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

В самом начале процесса разработки я и не предполагал, что данная библиотека вообще возможна. Но при практической реализации прототипа, добавляя строчку за строчкой в фундамент будущей библиотеки, убеждался в возможности ее создания и практическом применении.

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

Возможности библиотеки:

  • поддержка Linux Debian 3 и выше (обеспечена нативная сборка);
  • поддержка Windows 95 — Windows 11;
  • простое API для работы с 2D графикой;
  • загрузка множества графических форматов (bmp, png, tga, jpg);
  • кроссплатформенное API над окнами и событиями ОС;
  • для аппаратного ускорения графики используется OpenGL 1.2 и
  • OpenGL 3.3, присутствует поддержка обработки графики только на ЦПУ, если отсутствует аппаратное ускорение;
  • рендер может быть выбран динамически при загрузке приложения;
  • единое API для всех систем — напиши один раз и компилируй везде!
  • воспроизведение звука;
  • динамическая и статическая линковка.

Планы на будущее:

  • поточное воспроизведение звука;
  • вывод текста с поддержкой библиотеки freetype;
  • дополнительные рендеры Direct3D 9, 10, 11;
  • API для работы с потоками;
  • встроенная поддержка API для работы с сетью;
  • портирование фреймворка на другие платформы: Android, IOS, MacOs.

Ссылки:

>>> Подробности

 ,

JordanCpp
()