LINUX.ORG.RU

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

Традиция перегирывать в старые игры

Форум — Games

У вас такая есть?
Кто то Фолл 1-2 перепроходит раз в год.
Я играю в Quake 1 сингл тоже примерно в раз в год. Еще играю ака проверяю им ноутбуки. Естественно в darkplaces чтобы полностью сделать стресс тест железу.

 

bga_
()

Топ-10 игр для Linux по моему мнению

Форум — Games

1. Герои Меча и Магии 3 - Возрождение Эрафии

Стратегия, думаю нет смысла о ней рассказывать

Порт выполнен в 1999 году компанией Loki Games. Работает даже сейчас. Бинарник слинкован статично, поэтому у меня он работал даже в системе, не имеющей 32-битных либ. Недостатки: вывод звука через OSS, поэтому готовьте aoss/padsp, или подгружайте модуль ядра snd-pcm-oss. А также не работает сетевая игра (там надо вставить костыль, чтобы работала). А также, что Linux-версии официальных дополнений нет

2. Neverwinter Nights 1 и 2

Замечательная RPG, думаю тоже не нуждается в представлении. Порт 2003 работает и сейчас. Скачиваете с сайта icculus.org архив с линуксовыми бинарниками, и распаковываете в Windows-версию игры

3. Unreal Tournament 99, 2004 и 4

Году эдак в 2008 я обнаружил на торрентах в городской локалке Linux-версию UT2004. Прошёл с огромным удовольствием! После чего выяснил, что уровень сложности-то можно и поднять! Оказалось что боты не просто начинают точнее стрелять, но и меняют модель поведения, играя слаженнее и профессиональнее. В режиме прохождения на это влиет скилл команды противника, таким образом были более профессиональные команды и менее, можно было сражаться за самых крутых вояк другой команды и собрать убер-отряд

Мультиплеер отличный, кстати. «Цепляет» не хуже MMORPG, Доты и «танков». В 2018 году онлайн всё ещё есть

Для создания Linux-версии недостаточно только распаковать бинари с icculus.org, надо ещё создать текстовый файл с серийным номером, а также скопировать два файла библиотек. Файл с серийником - System/serial без расширения. Библиотеки - libSDL-1.2.so.0 и openal.so, тоже в директорию System

P.S. Linux-версия UT99 работает ускоренно, если выключен VSync. Включайте VSync, либо скачивайте с сайта Иккулуса другой файл игры - он ест 100% одного ядра CPU, но не ускорен

4. Left 4 Dead 2

Это шутер. Командный шутер, с возможностью сетевой игры. Тут надо «выносить» орды монстров (а именно зомби), но это не Serious Sam какой-нибудь - тут не поле и не коридоры, и не безлимитное оружие. А город, захваченный монстрами, и вы с друзьями удираете. Оружия мало, получать ранение нежелательно. Игра стала очень популярной, я считаю что именно Гейб зародил в мире моду на зомби-апокалипсис, но я могу ошибаться

Игра скачивается в Стиме

5. War Thunder

Самолётная леталка и танковый симулятор в годы 2 Мировой войны.

Самолётная часть очень сильно напоминает Ил-2 Штурмовик 2001 года (Википедия утверждает, что последнюю часть игры Ил-2 Штурмовик делала как раз Gaijin Entertaiment). Управление очень упрощено относительно Ил-2 Штурмовик, играть можно вообще без подготовки, и побеждать. При первом запуске спрашивают, какое управление вы хотите: мышь-клава или джойстик. Ещё там замечательный вид из кабины, очень проработанный. А самолётов много!

Танковая часть очень сильно напоминает World of Tanks, но имеет ряд отличий

Есть два режима игры: аркадный и реалистичный. В аркадных боях команда представляет сборную «солянку» игроков: тут вам и советские самолёты, и немецкие. Реалистичный приближен к реальности, и лично для меня он очень сложен. Также есть режим симуляторных боёв, когда воссоздаются исторические бои. В советах, показываемых при загрузке уровня, вам шутливо предлагают «переписать историю, сыграв в симуляторный бой». Но так-то вообще здорово

Отдельно можно сказать про систему донатов. Соблюдён сложный баланс между играми, в которых можно «нагибать» за донат, и играми, в которых донат не даёт ничего, только «шапочки». Донаты тут действительно что-то дают, но не такое, что позволит плохо играющему игроку побеждать

Под Linux можно скачать с официального сайта, либо из Стима

6. ARMA III

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

В ARMA III можно идти по дороге до линии фронта, причём долго идти, прям как в реальной жизни. А потом «словить» пулю, даже не поняв, откуда она «прилетела»

Игра доступна на официальном сайте, а также в стиме. Стоит 1500 рублей

7. Papers, please

Вы играете за таможенника в тоталитарной стране. Вы можете выбрать путь честного работника, а можете принимать взятки и «закрывать глаза» на нарушения. При перегибе в любую из сторон, вы проиграете: при честной игре, вы не сможете платить за жильё, за еду, за лекарства, а при нечестной вас арестуют. Нужно включать мозг и чутьё. Также чуть ли не каждый день обновляются правила, и изучать их приходится по ходу дела - игра не встаёт на паузу, когда вы открываете инвентарь!

У игры замечательная стилистика рисовки

Для Linux брать в Steam, GOG или Humble Store

8. Euro Truck Simulator 2

Симулятор дальнобойщика. Что может быть весёлого в развозе грузов туда-сюда? Но оказалось, что водить грузовик очень даже весело. Когда я еду по однополосной дороге на скорости 80 км/ч, и дорога идёт влево, а по противоположной стороне едет другой грузовик, то я готов кричать ААААА! Страшно! Хотя это даже не реальная жизнь, а всего лишь игра. Отдельный челленж - парковка задом. Я даже говорить не буду, как это сложно, и как легко потерять сцепку при этом

Под Linux брать в Steam

9. Minecraft

Игра с разрушаемым окружением. Есть два режима: творчество (идеально для пиксель-арта, а также для моделирования сложных скульптур в 3D-пространстве - это скорее лего, чем 3D-редактор) и выживание (где прежде, чем что-то построить, надо добыть ресурсы, а ещё ночью вас пытаются убить, а днём всё нормально). Есть мультиплеер, здесь как раз интересно играть в режиме «выживание». Советую два хороших сервера - это Ttyh.ru и Minecrafting.ru. На остальных - лишь дети

Под Linux брать на официальном сайте minecraft.net, либо на Ттюхе

10. Metro 2033 и Metro: Last Light

Хорошие линейные шутеры от первого лица по вселенной книг «Метро» Дмитрия Глуховского

11. Dwarf Fortress

Одна из лучших игр в жанре Roguelike. Игра в ASCII-графике, очень специфичная, многих «затягивает»

Для Linux брать на официальном сайте

 

ZenitharChampion
()

Защищаемся от Meltdown и Spectre

Форум — General

Привет

Предлагаю собирать инфу о Meltdown и Spectre.

Пока у меня получилось найти пару тестов своей системы, но мало информации о том, как защититься. И никакой конкретной информации о том как увидеть влияние на performance - все ограничиваются цифрами, но не тем как провести реальные тесты.

О чем говорим:

Spectre     - Variant 1 - 2017-5753 - Bounds Check Bypass
Spectre     - Variant 2 - 2017-5715 - Branch Target Injection
Meltdown    - Variant 3 - 2017-5754 - Rogue Data Cache Load
BranchScope -           -           - Attack on Directional Branch Predictor
(еще восемь - см. ниже)
LazyFP                  - 2018-3665 - Exploiting lazy FPU state switching
Wiki
8 новых уязвимостей

SpectrePrime, MeltdownPrime:
То, же что и Spectre, Meltdown, но использующие альтернативный способ восстановления данных из кеша, который увеличивает точность восстановления.
Считается что программные методы защиты от Spectre и Meltdown также защищают и от SpectrePrime и MeltdownPrime. А вот аппаратная защита должна отельно учитывать учитывать SpectrePrime и MeltdownPrime.
Источник: Opennet

BranchScope:
Напоминает второй вариант атаки Spectre но отличается способом создания условий для влияния на состояние блока предсказания переходов.
Метод был протестирован на процессорах Intel Sandy Bridge, Haswell и Skylake, и продемонстрировал уровень ошибок менее 1%.
Утверждается, что предложенный для Spectre V2 метод защиты (Retpoline) не эффективен против BranchScope, но для блокирования атаки предложен иной метод защиты, который может быть реализован как программно, так и на аппаратном уровне. По мнению компании Intel предложенная в обновлении микрокода техника защиты от первого варианта Spectre (на основе инструкции LFENCE) будет эффективна и для защиты от атаки BranchScope. Для защиты важных данных также могут применяться типовые криптографические методы защиты от утечки по сторонним каналам.
Больше деталей - на OpenNet.

LazyFP:
Через проведение атаки по сторонним каналам атакующий может определить значения регистров FPU, MMX, SSE, AVX и AVX-512, используемых другим процессом. Например, в данных регистрах могут содержаться параметры для криптографических вычислений и имеющий доступ к локальной системе злоумышленник может попытаться использовать их для определения ключа шифрования. При использовании систем виртуализации проблема может применяться для определения состояния регистров другой гостевой системы или другого процесса в текущей гостевой системе.
Больше деталей - на OpenNet, Intel, blog.cyberus-technology.de.

Уязвимые архитектуры:
- Meltdown - только Intel, притом практически все начиная с выпуска 1995 года (источник).
- Spectre - все процессоры с фичей speculative execution, то есть почти все современные процессоры, в т. ч. Intel, AMD, ARM, IBM Power, IBM System Z (источник).
- Еще 8 - подтверждено на Intel на AMD и ARM не тестировалось (источник).
- LazyFP - только процессоры линейки Intel Core. Не проявляется на чипах Intel Atom/Knights и CPU AMD.

Тесты на наличие уязвимостей:
- https://github.com/IAIK/meltdown/ - реальный эксплоит.
- https://github.com/speed47/spectre-meltdown-checker - это скорее проверяет наличие фиксо/mitigations в системе.
- https://github.com/tesla707/Spectreprime-attack - SpectrePrime реальный эксплоит - https://blog.cyberus-technology.de/posts/2018-06-06-intel-lazyfp-vulnerabilit... - здесь только куски эксплоита в разделе «The Attack», рабочие версии пока не опубликованы. Если знаете лучше или более полные - говорите.

Защита:
Meltdown
Для защиты активируется Kernel page-table isolation (KPTI, старое название - KEISER)
1. Обновление ядра до версий 4.14.12, 4.9.75, and 4.4.110 или выше (Gentoo Wiki)
2. Активировать Kernel/User page tables isolation в ядре - опция ядра CONFIG_PAGE_TABLE_ISOLATION (askubuntu.com) - доступно только для 64-битного ядра.
- Отключать, если не в ядре - с помощью параметра ядра nopti (источник) или echo 0 > /sys/kernel/debug/x86/pti_enabled (источник - Redhat). Нужно владельцам процессоров не-Intel (например, AMD), так как KPTI дает проседание по performance'у, а для AMD это не актуально, так как уязвимость затрагивает только Intel.
Патчинг компиляторов и гипервизоры не требуется.
Как я понял, это полностью устраняет проблему Meltdown.
Фичи процессоров process-context identifiers (PCID) и invalidate process-context identifiers (INVPCID) позволяет снизить проседание перформанса из-за включения KPTI (источник, источник, источник). Доступна только на процессорах Intel: PCID - некоторые Westmere family, Sandy Bridge, INVPCID - Haswell и выше (источник). Также требуется ядро 4.14.12 или выше (источник). Проверить наличие фич в процессоре можно в /proc/cpuinfo (источник)

Spectre
1. Подгрузка микрокода процессора - Intel Microcode update 01/08/2018
- Мануал для Gentoo
- Если я правильно понял, то критерий успеха подгрузки микрокода процессора с фиксом можно узнать так: grep -q "cpu_insecure\|cpu_meltdown\|kaiser" /proc/cpuinfo (askubuntu.com)
Но как я понял, микрокод есть не для всех процессоров, в частности нет для Core 2 Duo . Подозреваю что здесь полный перечень Интеловских процессоров, для которых есть обновление.
2. Поддержка на уровне ядра начиная с какой верии - непонятно):
- Indirect Branch Restricted Speculation (IBRS) (Как выставлять). Притом у него 2 режима, подробней здесь. как проверять/выставлять - Redhat. Но - создана новая атака
- Indirect Branch Prediction Barrier (IBPB) (SGX - Software Guard Extensions) - тоже описан здесь и здесь, как проверять/выставлять - Redhat. Но новая атака SgxPectre показывает что данный механизм не эффективен.
- STIBP - иногда упоминают (раз, два), но детальной информации вообще не нашел.
3. Патчинг компиляторов
- Для GCC:
- - Добавление опции -mindirect-branch, -mindirect-branch-loop, -mfunction-return, -mindirect-branch-register с которыми нужно перекомпилить... всё? Где скачать - непонятно. Насколько полно решают проблему - непонятно.
- - retpoline - добавление опции -mindirect-branch=thunk-extern. С ней нужно перекомпилить ядро с наложенным патчем (где скачать?). Пока есть для gcc 8 (mailing list) и gcc 7.3 (OpenNet, Phoronix); в планах портировать фикс gcc 6/5/4. Похоже, что для процессоров архитектуры Skylake и более поздних проблему решает не полностью (источник).
- LLVM - TBD
4. Патчинг гипервизоров - https://github.com/hannob/meltdownspectre-patches , раздел Virtualization Не ясно закрывает ли это проблему полностью.
- VirtualBox 5.2.6 и 5.1.32 (источник).
5. Патчинг браузеров (потому как уязвимость можно эксплуатировать даже через JavaScript):
- Chrome 63 - нужно включить опцию chrome://flags#enable-site-per-process ; в Chrome 64 включено по дефолту.
- Firefox 57.0.4 (источник)

LazyFP
- В ядре Linux защита была реализована ещё в феврале 2016 года, путём применения по умолчанию режима Eager FP (eagerfpu=on) и удаления возможности активации Lazy FP. Уязвимость затрагивает ядра Linux до версии 4.6 или системы с процессорами без поддержки инструкции XSAVE (до Sandy Bridge), в которых по умолчанию применялся режим Lazy FP. В старых ядрах Linux для защиты можно использовать опцию «eagerfpu=on», которая присутствует начиная с ядра 3.7.
Влияние на performance:
- Хороший отчет Redhat о том, какое проседание performance'а на каких операциях
- Бенчмарки Phoronix: разные режимы IBRS/IBPB, Spectre, Meltdown
. Как сказано выше, наличие PCID и INVPCID в процессорах делает проседание по performance'у меньше.
Методология (как проверить у себя) - TBD
- Конкретный софт: bind

В каких процессорах Intel какая защита релизована
Habr: Больше кофе, меньше кофеина: Intel 9th Gen (часть 1), искать глава «Исправления безопасности оборудования и программного обеспечения»

Открытые вопросы:
1. Ваш набор тестов на наличие уязвимостей Meltdown и Spectre
2. Ваш рецепт по фиксу
3. Как включать/выключать IBPB и STIBP?
4. Ссылки на патчи для компиляторов
5. Приведите тест (не результаты, а методику), который бы показал влияние на performance
6. Если покупать железо, как знать что оно не подвержено Meltdown и Spectre?

Пожалуйста, дополняйте информацию, особенно там, где написано TBD, где видите неточности или пробелы. Давайте вместе расставим точки над i и победим этот недуг.

 , ,

Kroz
()

проброс видеокарты, игры тормозят

Форум — Games
#!/bin/bash

echo "0000:01:00.0" > /sys/bus/pci/devices/0000\:01\:00.0/driver/unbind
echo "0000:01:00.1" > /sys/bus/pci/devices/0000\:01\:00.1/driver/unbind
echo "10de 1401" > /sys/bus/pci/drivers/vfio-pci/new_id
echo "10de 0fba" > /sys/bus/pci/drivers/vfio-pci/new_id

qemu-system-x86_64 \
-boot d \
-drive file=/media/windows/win10.img,if=virtio \
-enable-kvm \
-machine q35,accel=kvm \
-m 9G \
-cpu host,kvm=off \
-smp 4,sockets=1,cores=4,threads=1 \
-drive if=pflash,format=raw,readonly,file=/usr/share/edk2-ovmf/OVMF.fd \
-drive if=pflash,format=raw,file=/var/lib/libvirt/qemu/nvram/win10_VARS.fd \
-vga none \
-soundhw hda \
-device vfio-pci,host=01:00.1 \
-device vfio-pci,host=01:00.0,multifunction=on \
-usb \
-drive file=/media/media/games0.img,if=virtio,cache=none,aio=native \
-device usb-host,hostbus=1,hostaddr=2 \
-device usb-host,hostbus=1,hostaddr=3 \
-nic user,model=virtio-net-pci \

помогите пожалуйста! В первый раз пробросил визеокарту, игры тормозят. Может я что-то не так делаю? На первый взглятд нагрузка на процессор высокая в госте. Пробовал отключать retpoline и запускал с nopti разницы никакой.

qemu используется всего 50% cpu, получается 2 из 4 потока хотя в госте 4 ядра

Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz

NVIDIA Corporation GM206 [GeForce GTX 960]

4.14.78-gentoo

QEMU emulator version 2.12.1

dmesg

[I] app-emulation/qemu
     Установленные версии:  2.12.1(21:07:51 28.10.2018)(accessibility aio alsa bluetooth bzip2 caps curl fdt filecaps gtk jpeg ncurses nls opengl pin-upstream-blobs png pulseaudio sdl sdl2 seccomp spice usb vhost-net virgl virtfs vnc xattr -capstone -debug -glusterfs -gnutls -gtk2 -infiniband -iscsi -lzo -nfs -numa -python -rbd -sasl -selinux -smartcard -snappy -ssh -static -static-user -systemtap -tci -test -usbredir -vde -vte -xen -xfs KERNEL="linux -FreeBSD" PYTHON_TARGETS="python2_7 python3_6 -python3_4 -python3_5" QEMU_SOFTMMU_TARGETS="x86_64 -aarch64 -alpha -arm -cris -hppa -i386 -lm32 -m68k -microblaze -microblazeel -mips -mips64 -mips64el -mipsel -moxie -nios2 -or1k -ppc -ppc64 -ppcemb -riscv32 -riscv64 -s390x -sh4 -sh4eb -sparc -sparc64 -tricore -unicore32 -xtensa -xtensaeb" QEMU_USER_TARGETS="x86_64 -aarch64 -aarch64_be -alpha -arm -armeb -cris -hppa -i386 -m68k -microblaze -microblazeel -mips -mips64 -mips64el -mipsel -mipsn32 -mipsn32el -nios2 -or1k -ppc -ppc64 -ppc64abi32 -ppc64le -riscv32 -riscv64 -s390x -sh4 -sh4eb -sparc -sparc32plus -sparc64 -tilegx -xtensa -xtensaeb")

 , , ,

Deleted
()

IDE для Vala

Форум — Development

Какие есть IDE с автодополнением для Vala? Была попытка использовать Gnome Builder, но там никак не автодоплняет, хоть и поддержка автодополнения валы заявлена

 , ,

red_widowmaker
()

Primus-vk — Поддержка Vulkan для Optimus

Новости — Hardware and Drivers
Группа Hardware and Drivers

Неким felixdoerre был разработан primus-vk — прослойки для запуска Vulkan-приложений при использовании Bumblebee для работы с дискретной видеокартой NVidia на ноутбуках.

Что это и зачем?

Если в вашем ноутбуке две видеокарты, одна из которых nVidia с проприетарным драйвером — для запуска приложений на дискретной видеокарте используется Bumblebee. К сожалению, Vulkan-приложения (в т.ч. DXVK) не работают с Bumblebee, а его разработка прекращена, поэтому единственным вариантом запустить Vulkan-приложение на дискретной видеокарте был запуск отдельного X-сервера на nVidia, что было не совсем удобно (необходимость переключения в другой VT и запуска отдельной графической сессии). С помощью primus-vk можно запустить Vulkan-приложения, используя optirun, без необходимости запуска отдельного X-сервера.

Производительность

В последнем релизе производительность приблизилась к той, что можно получить запуская отдельный X-сервер на дискретной видеокарте.

Установка и запуск

Инструкция по сборке и установке доступна хдесь. Для запуска Vulkan-приложения необходимо установить переменную окружения ENABLE_PRIMUS_LAYER=1 и PRIMUS_VK_MULTITHREADING=1. К примеру, для запуска игры в Wine (используя DXVK):

ENABLE_PRIMUS_LAYER=1 PRIMUS_VK_MULTITHREADING=1 optirun wine Game.exe

>>> Репозиторий на Github

 , ,

annerleen
()

Объясните про privacy guard и полномочия

Форум — Mobile

Что такое «Privacy Guard» в LineageOS? Чем оно отличается от стандартного (AOSP) механизма полномочий?

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

 , ,

Tanger
()

Ищу C профайлер с хорошей детализацией.

Форум — Development

Сабж. Я попробовал gperftools, но выхлоп меня несколько смущает: я получаю смесь информации о самопальных и библиотечных функциях. В целом это лучше, чем ничего, но не помогает выяснить, откуда хвосты растут.

Пример: gsl_histogram_pdf_free по статистике жрёт 10% ресурсов. Проблема в том, что я вообще не использую эту функцию, никак, она даже подключаться не должна. Я нашёл тот участок кода, который так себя странно ведёт, но больше информации выжать не удалось.

 , ,

ZERG
()

Glade портит файлы в LC_NUMERIC=ru_RU.UTF-8

Форум — Desktop

После открытия файла и его сохранения, все дробные значения сбрасываются до целого. Т.е. проблема в десятичном разделителе. Если запускать так $ LC_NUMERIC=en_US.utf-8 flatpak run org.gnome.Glade то работает нормально. Это баг или проблема на моей стороне?

 ,

nvl
()

GUI к набору консольных команд

Форум — Development

Посоветуйте в какую сторону копать новичку.

Есть идея написать GUI к набору консольных команд. Общий смысл: читать stdout команд и отобразить результат в GUI(treeview, gridview). Есть небольшой опыт в языке Си. Думаю использовать библиотеку GTK+.

Оптимален ли выбор инструментов? Возможно, есть более простые пути?

 ,

mstX
()

Vim: русская раскладка. Три способа

Форум — Development

Как я понимаю, есть три способа работать с русской раскладкой.

Первый способ: использовать langmap. Этот способ, вроде бы, устарел, никаких профитов не приносит.

Там 100500 реализаций, у каждого пользователя своя, но вот официальная:

set langmap=ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯ;ABCDEFGHIJKLMNOPQRSTUVWXYZ,фисвуапршолдьтщзйкыегмцчня;abcdefghijklmnopqrstuvwxyz

Второй способ: использовать keymap. Вроде самый нормальный на сегодня (переключается через Ctrl-^).

set keymap=russian-jcukenwin
set iminsert=0 " Чтобы при старте ввод был на английском, а не русском (start > i)
set imsearch=0 " Чтобы при старте поиск был на английском, а не русском (start > /)
" Дополнительно можно добавить:
inoremap <C-l> <C-^> " Чтобы вместо Ctrl-^ нажимать Ctrl-L
highlight lCursor guifg=NONE guibg=Cyan " Смена цвета курсора

Третий способ: использовать плагин https://github.com/lyokha/vim-xkbswitch. Есть ли там профиты? Не знаю. Про него было несколько тредов, вот один из: Vim. Назначение горячих клавиш кириллицей.

Вопросы:

[*] Правильно я понял, что первый способ использовать вообще смысла нет?
[*] Есть ли смысл использовать плагин вместо второго варианта?
[*] Есть ли недостатки у второго варианта?

 , ,

Deleted
()

Динамические библиотеки, конспект

Форум — Development

Привет. Так вышло, что пришлось основательно разобраться в теме и пока память свежа изложил всё в виде небольшой памятки. Удобно по прошествии некоторого времени освежить память прочитав небольшой конспект. Вообще, по-хорошему, блог что ли какой завести )). Просьба - не флудить, ссылки/комментарии/дополнения по теме приветствуются. ЗЫ: подразумевается, что либы -fpic

1. Утилиты readelf, objdump. Читать man elf, man ld.so. N в именах структор
   подразумевает 32 или 64.
2. Структура ELF файла:
   1. заголовок (смещение 0, struct ElfN_Ehdr). Readelf::ELF Header
   2. program header table (массив struct ElfN_Phdr). Содержит информацию о том
      как отображать секции в память процесса. Readelf::Program Headers
   3. section header table (массив struct ElfN_Shdr). Readelf::Section Headers
3. link_map   
3.1. Загруженные в память модули попадают в список (массив) из struct link_map.
     Списков может быть много, каждый список - "пространство имён". Для
     загрузки модулей в неглобальный список (создание нового) используется
     dlmopen().
3.1. Получать link_map модуля через dlinfo() или dladdr1():
     [--code--]
     #define _GNU_SOURCE
     #include <link.h>
     #include <dlfcn.h>
     #include <stdio.h>
     int main()
     {
        static char addr_in_mod;
        Dl_info __info;
        struct link_map *lm;
        if(dladdr1(&addr_in_mod, &__info, (void*)&lm, RTLD_DL_LINKMAP) != 0) {
           printf("link_map:\n");
           struct link_map *i = lm;
           for(; i->l_prev != NULL; i = i->l_prev);
           for (; i != NULL; i = i->l_next)
              printf("addr diff=%p  name=%s%s",(void*)i->l_addr,  i->l_name, i==lm?"  <--cur\n":"\n");
        }
     }
     //output:
     //link_map:
     //addr diff=0x41f000  name=  <--current module
     //addr diff=0xb7fc4000  name=linux-gate.so.1
     //addr diff=0xb7fa3000  name=/lib/libdl.so.2
     //addr diff=0xb7dc5000  name=/lib/libc.so.6
     //addr diff=0xb7fc6000  name=/lib/ld-linux.so.2
     [/--code--]
3.2. Во время переразмещений символ ищется в модулях указанных в link_map
     списке начиная от начала списка т.е. порядок важен, "gcc -ls1 -ls2"
     libs1.so находится в списке раньше, чем libs2.so.
3.3. При добавлении библиотеки через LD_PRELOAD, она попадает перед остальными
     разделяемыми библиотеками в глобальном link_map списке.
3.4. Опция RTLD_DEEPBIND для dlopen - собственные символы модуля приоритетнее
     символов из вышестоящих в link_map списке модулей.
     Собственные символы загружаемой библиотеки содержат:
      1. символы из самой загружаемой библиотеке
      2. символы из библиотек, которые были слинкованы с загружаемой из
         командной строки (у первых приоритет выше).
3.5. При загрузки через dlopen, библиотеки добавленные с флагом RTLD_GLOBAL
     имеют приоритет над RTLD_LOCAL, не смотря на то, что находятся в link_map
     списке позже (не относится к получению void f() через dlsym()). Например:
     [--code--]
     // предоставляет void f(), ссылается на void f().
     dlopen("lib1.so", RTLD_LOCAL);
     // предоставляет void f().
     dlopen("lib2.so", RTLD_GLOBAL);
     // при ленивом переразмещении, lib1.so будет ссылаться на lib2.so::f().
     [/--code--]
4. RTLD_GLOBAL - символы из загруженного модуля будут участвовать в
   переразмещениях для заргуженных в дальнейшем библиотек. RTLD_LOCAL - не будут.
   Если lib2.so линкуется с lib1.so через командную строку
   "gcc -fpic -shared -l2 s.c -o lib1.so", то видимость символов из lib2.so
   наследуется от видимости символов из lib1.so:
   [--code--]
   dlopen("./lib1.so", RTLD_LAZY|RTLD_GLOBAL);    // символы из lib2.so глобальные
   dlopen("./lib1.so", RTLD_LAZY|RTLD_LOCAL);     // символы из lib2.so локальные
   [/--code--]
   Если lib2.so подгружается из lib1.so через dlopen(), то видимость символов
   из lib2.so контролируется флагом dlopen() при загрузке lib2.so. Способ
   загрузки (через командную строку или dlopen) и флаг для dlopen при
   загрузки lib1.so значения не имеет.
5. Переразмещение (relocation).
5.1. Переразмещение - процесс соединения символьной ссылки с символьным
     определением.
     Переразмещение: ленивое - загрузчик вызывается при ссылке на символ, и
     ненеленивое - переразмещение при загрузке. Переразмещение переменных всегда
     неленивое.
5.2. Символы, требующие переразмещения, содержатся в .rel... секциях. В них
     находятся ElfN_Rel структуры.
     [--code--]
     typedef struct {
         Elf32_Addr r_offset;    \\ адрес внесения правки (адрес в GOT, например. readelf::Offset).
         uint32_t   r_info;      \\ содержит тип переразмещения и индекс в таблице символов (массив Elf32_Sym[]).
     } Elf32_Rel;
     typedef struct {
         uint32_t      st_name;   \\ индекс в таблице строк. Т.е. сопостовляет символ с Си строкой.
         Elf32_Addr    st_value;  \\ адрес символа в текущем модуле (readelf::Sym.Value).
         uint32_t      st_size;
         unsigned char st_info;
         unsigned char st_other;
         uint16_t      st_shndx;
     } Elf32_Sym;
     [/--code--]
5.3. Механизм обращения к переменным (требующим переразмещений):
     1. линкер на старте правит .got секцию, она начинает указывать на нужные
        данные.
     2. ссылка на переменную в коде (в .text секции):
          [--code--]
          call   44c <__x86.get_pc_thunk.ax>  # получаем в eax адрес следующей инструкции
          add    $0x1bcb,%eax                 # в eax адрес .got секции
          mov    0x14(%eax),%edx              # отступ от края .got на адрес переменной,
                                              # разыменовываем в edx
          [/--code--]
5.4. Механизм обращения к функциям, для пример - exfn():
     1. ссылка на exfn() в коде (в .text секции)
     2. переход на "трамплин" в .plt секции - plt@exfn()
     3. переход на разыменованный указатель из .got.plt, если переразмещение
        уже было произведено, то попадаем на exfn(), иначе:
        3.1. возврат в plt@exfn(), в стек кладётся смещение в .rel.plt
             секции Elf32_Rel структуры и указатель на link_map список
        3.2. вызов ld.so, правится указатель в .got.plt
        3.3. переход на exfn().
6. .dynamic секция может быть прочитана из программы через массив _DYNAMIC[],
   который содержит struct ElfN_Dyn, автоматически заполняется линкером.
7. Экспортируемые символы из elf модуля указываются в .dynsym секции.
8. -rdynamic опция линкера (для исполняемого ELF) - символы из exe, которые не
   были востребованы библиотеками, указанными в командной строке, не
   экспортируются (не указываются в .dynsym секции) и не участвуют в
   переразмещениях в библиотеках, которые подргружаются через dlopen. Данная
   опция заставляет линкер помещать в таблицу все функции.
9. Управление экспортом из модуля
   * Управление экспортом по умолчанию:
     gcc -fvisibility=default
     -fvisibility=hidden
     -fvisibility=internal
     -fvisibility=protected
   * Управление экспортом посимвольно:
     __attribute__ ((visibility ("hidden")));
     __attribute__ ((visibility ("hidden")))
   * Для группы:
     #pragma GCC visibility push(hidden)
     ...
     #pragma GCC visibility pop
   * static и анонимные namespace
   * Управление эспортом через export map, через опцию --version-script

 , , ,

pavlick
()

SysRq

Форум — Talks

https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/sysrq...

ALT-SysRq-F прям золотое сочетание, спасает если нет свапа, а почему нет у меня свапа? почему нету свапа у меня? свапа нету у меня почему?

кароч если даже овер 8гб рамки, то свап всё равно нужен по ходу.

 , ,

eR
()

Отменить мерж с другой веткой

Форум — Web-development

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

git reset head~
глупый вопрос, что я сделал сейчас? А по хорошему мерж отменить нужно было вот так
git reset --merge

 

cr0
()

Как по уму собирать вывод порождённого процесса в GLib?

Форум — Development

В Qt есть QProcess, который умеет «сигналить», если дочерний процесс выводит что-либо на stdout. Как добиться схожего функционала, используя GLib/GIO? Теоретически, можно реализовать свой костыль, который будет периодически проверять состояние порождённого процесса и сигналить, если тому есть, что сказать. Но ведь наверняка же есть какие-то встроенные средства для этого?

 , , , ,

meliafaro
()

таблица в LaTeX с повернутыми ячейками и переносы слов

Форум — General

Есть такая таблица в LaTeX:


\documentclass{extarticle}[14pt]
\usepackage[main=russian,english]{babel}  
\usepackage{fontspec} 
\defaultfontfeatures{Ligatures={TeX},Renderer=Basic} 
\setmainfont[Ligatures={TeX,Historic}]{IBM Plex Serif} \setsansfont{IBM Plex Sans}
\setmonofont{IBM Plex Mono}

\usepackage{colortbl} 
\usepackage{longtable}
\usepackage{multirow}
\usepackage{rotating}

\begin{document}

\begin{longtable}{|p{0.05\textwidth}|p{0.5\textwidth}|p{0.1\textwidth}|p{0.15\textwidth}|p{0.15\textwidth}|}
\hline 
\multicolumn{2}{|l|}{Наименование параметра} & Обозна\-чение & Ис\-точник & XX \tabularnewline
\hline 
\multirow{5}{3.5cm}{\begin{turn}{90}
Mei probo apeirian\end{turn}} & Mei probo, \% &  & цифры & \emph{цифры}\tabularnewline
\cline{2-5} 
 & probo apeirian, \%, об/мин &  & цифры & \emph{цифры}\tabularnewline
\cline{2-5} 
 & probo apeirian &  & цифры & цифры (цифры)\tabularnewline
\cline{2-5} 
 & Mei probo apeirian  &  & цифры & \emph{цифры}\tabularnewline
\cline{2-5} 
 & Mei probo apeirian mediocrem ne, id his &  & цифры & цифры (\textasciitilde{}0\%)\tabularnewline
\hline 
\multirow{8}{*}{\begin{turn}{90}
Mei probo apeirian
\end{turn}} & Mei probo apeirian &  & цифры & \emph{цифры}\tabularnewline
\cline{2-5} 
 & Mei probo apeirian mediocrem ne, id his &  & цифры & \emph{цифры}\tabularnewline
\cline{2-5} 
 & Mei probo apeirian mediocrem ne, id his &  & цифры & \emph{цифры}\tabularnewline
\cline{2-5} 
 & Mei probo apeirian &  & цифры & \emph{цифры}\tabularnewline
\cline{2-5} 
 & Mei probo &  & цифры & \emph{цифры}\tabularnewline
\cline{2-5} 
 & Mei probo apeirian mediocrem ne, id his, К &  & цифры & цифры (цифры)\tabularnewline
\cline{2-5} 
 & Mei probo apeirian mediocrem ne, id his, К &  & цифры & цифры (0.7\%)\tabularnewline
\cline{2-5} 
 & Mei probo apeirian mediocrem ne, id his &  & цифры & цифры
\tabularnewline
\hline 
\end{longtable}
\end{document}

В вертикальных ячейках слева текст короче не сделать. Как сделать там переносы по словам и выровнять текст в середине? Задание ширины в \multirow не помогает.

 ,

Deleted
()

Проблемы с обновлением мира (Gentoo)

Форум — General

Всем привет. Проблема в следующем: не обновлял мир целый год. Сейчас пришло самое время - получаю кучу конфликтов, и как проще поступить во всем этом, пока не знаю.

Вывод Portage: https://pastebin.com/Zw6403MZ package.use: https://pastebin.com/VbyyN52B Вывод emerge --info: https://pastebin.com/196yUfmz

 , ,

msdnna
()

Низкая производительность optirun

Форум — General

Без optirun

vblank_mode=0 glxgears
ATTENTION: default value of option vblank_mode overridden by environment.
14489 frames in 5.0 seconds = 2897.690 FPS
11070 frames in 5.0 seconds = 2213.908 FPS
10320 frames in 5.0 seconds = 2063.909 FPS
С optirun
vblank_mode=0 optirun glxgears
ATTENTION: default value of option vblank_mode overridden by environment.
1023 frames in 5.0 seconds = 204.473 FPS
1089 frames in 5.0 seconds = 217.715 FPS
1049 frames in 5.0 seconds = 209.696 FPS
Примерно такие же результаты в glxspheres. И как это можно понимать?

 ,

Sorax_Grand
()

Игры, Linux, Steam, обзоры

Форум — Games

Список 1000+ игр со ссылками на обзоры от GNU/Linux пользователей. Здесь список больше не обновляется.

Список на базе Steam с оглавлением по прежнему улучшается.

English version of the list Games, Steam, Linux, reviews.

Здесь встречаются обзоры на разных языках: [rus] — русский, [eng] — английский, [fra] — французский, [spa] — испанский, [por] — португальский, [ces] — чешский, [deu] — немецкий, [pol] — польский, [fin] — финский и [ukr] — украинский.

Должен предупредить, что в части обзоров крайне мало информации, кроме того факта, что обзор существует и автор как минимум запустил игру в среде GNU/Linux. Со временем я постараюсь улучшить эту ситуацию.

Деление на жанры довольно условно. Распространение ссылок на перечисленные здесь обзоры всячески приветствуется. «Лайкать» обзоры тоже не возбраняется.

Я готов добавлять ссылки на чужие более другие обзоры. Скажем при условии, что в обзоре (или коротеньком сообщении) будет информация хотя бы о дистрибутиве, видеокарте+драйвере и серьёзных препятствующих прохождению багах (если они есть).

 ,

Evgueni
()

Выбор ПО для общения внутри компании.

Форум — General

Добрый день. Помогите с выбором серверной и клиентской части ПО для организации общения внутри компании. Требования не сильно оригинальные но поверхностное гугление только сбивает. 1)и самое главное сервер должен уметь работать на линуксе. 2) он должен работать без доступа с сети интернет. Полностью изолированный сегмент (за исключением доступа по впн). 3) в первую очередь это чат с возможностью отправки файлов и изображений. 4) доставка оффлайн сообщений в том числе файлов и изображений. 5) возможность совершать звонки и видео звонки 6) возможность микроконференций на 3-5 участников* не обязательно но хотелось бы. 7) клиентские приложения под линукс, виндовс, андроид. Или возможность использовать сторонние но с сохранением функционала. 8) возможность работать через впн. (Не только в одной локальной сети) 9) использование шифрования. 10) желательна веб морда от админки (не обязательно но хотелось бы).

 , ,

oleg1345140
()