LINUX.ORG.RU

Сообщения vlad9486

 

Сломал систему на сервере

Оказывается, без libpthread.so на линуксе ничего не работает. Даже ls, mv, и sudo. Вот с sudo случился облом. Короче, переименовал я libpthread.so.0 -> libpthread.so.0_ хотел на ее место другую сборку поставить. Но не смог, потому что всё отвалилось. Смог заставить работать mv с помощью LD_PRELOAD, но шел был обычного юзера и без sudo это бесполезно. А LD_PRELOAD не работает с sudo.

Сервер удаленный, доступ по ssh, хорошо что важных данных там не было, завтра накачу новый образ.

 

vlad9486 ()

Не работает сеть в гостевой системе в qemu kvm

Использую virt manager, установил ubuntu server 20.10 (гостевая система). Хочу конектиться к гостевой системе по ssh и чтобы из гостевой системы был доступ в интернет.

Установил в гостевой системе ssh, он заработал systemctl status ssh говорит что всё active и running. На хост системе ip route возвращает 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 попробовал ssh 192.168.122.1 и подключился, вроде все хорошо.

Но ping 8.8.8.8 на гостевой системе говорит что Network is unreachable.

Надеялся что это типичный юзкейс и не придется узнавать что такое интерфейс, нат, бридж и прочие заклинания.

Уже пару часов брожу по стекоферфлоу и прочих статьях и ничего не понял.

 ,

vlad9486 ()

Неявное указание порта в ядре. Как докер (и другие) это делает.

Пусть у нас работает два докер контейнера, один слушает входящие соединения на порте 60000 и другой тоже на порте 60000. Но докер ремапит их на разные порты хоста, например на 50001 и 50002.

Так вот вопрос. Когда процесс в контейнере делает сискол bind, ядро получает 60000. Какую еще переменную смотрит ядро чтобы узнать что порт на самом деле должен быть другой?

Как это вообще гуглить? Гугл выдает кучу ерунды о настройке докера. Буду благодарен за ссылку.

 , , ,

vlad9486 ()

/proc/1/statm и /sys/fs/cgroup паказывают разный объем использованной памяти

Все происходит в докер контейнере. Если сделать запрос к докеру /containers/.../top\?ps_args='u', то будет 7 гигабайт для первого процеса и поменьше для всех остальных, а если сделать /containers/.../stats, то будет 1.32 гигабайта по всей системе. Открыл баш в работающем контейнере и вижу ту самую картину:

~ $ cat /sys/fs/cgroup/memory/memory.usage_in_bytes 
2192117760
~ $ cat /sys/fs/cgroup/memory/memory.stat | grep cache
cache 830414848
total_cache 830414848
~ $ cat /sys/fs/cgroup/memory/memory.kmem.usage_in_bytes 
55189504

Собственно, 2192117760+55189504-830414848=1416892416=1.32GiB - это cgroups показывает память по всей системе. Даже если не отнимать кэш, все равно выходит 2 гигабайта.

~ $ ps -opid,rss,vsz
PID   RSS  VSZ
    1 7.0g  39g
   29 361m 369m
   42 1128 1628
  144 1184 1628
  155    4 1548
~ $ cat /proc/1/statm
10245369 1836008 1604370 5767 0 238744 0

Но ps показывает 7.0g уже для первого процесса. /proc показывает тоже самое, 1836008 * 4096 = 7520288768 = 7.0GiB. Похоже что ps берет данные с /proc.

Для контейнеров с другим софтом такой проблемы нет, сумма вывода ps совпадает с данными cgroups.

Может причина в том, что виртуальной памяти 39g потрачено, но таблицы страниц занимают в 512 раз меньше, то есть 80 мегабайт и погоды не сделают.

Вопрос в том, что я пропустил? Что бы такого еще посчитать, чтобы сошлись объемы?

 , ,

vlad9486 ()

Включать bluetooth до монитрования home раздела

Bluetooth клавиатура очень удобна для переключения между mac и pc. Но у меня зашифрованный home. Пароль спрашивается до включения bluetooth, потому без обычной клавиатуры линукс запустить не выходит.

У меня manjaro, я понятия не имею как работает systemd, подозреваю что где-то можно дописать зависимость для luks от bluetooth, но не знаю где.

 , ,

vlad9486 ()

Как купить безделушку из-за границы?

Кто нибудь покупал RISC-V SoC? Интересует HiFive1 Rev B, но сойдет и другой. Хочу себе игрушку на ДР, но не понятно как купить в Украине (в РФ, наверное, те же проблемы).

 ,

vlad9486 ()

Кем работаешь? - Собой.

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

 

vlad9486 ()

512-битный компьютер

Как известно, максимальный объем информации заключенной в конечный объем пространства ограничен. Радиус видимой вселенной приблизительно равен 4.4×10^26 метров, проведя нехитрые вычисления находим, внутри поместится максимально 9.4985×10^123 бит. Одев на это все дело логарифм находим. Ха-ха 412 бит адреса. Ну и еще 100 бит на всякие флаги, ну и расширение мира продолжается!

Интересно, что если провести такие вычисления для земли, то выйдет около 259 бит, но не унываем, адресовать же можно не только биты, но и байты, например. Тогда нужно на три бита меньше (8 = 2 ^ 3). Землю можно запускать на 256 битной машине. К сожалению, человеческий мозг не выйдет вместить в 128 бит, там выходит 141 и нужно очень длинное машинной слово, что-бы сократить адрес до нужного размера. Разве что мозг маленький взять.

Вот уж действительно ситуация, можно уверенно сказать что 512 бит хватит всем очень на долго.

 

vlad9486 ()

Почему бы IDE не общаться с компилятором бинарными блобами?

Можно же передавать между IDE и компилятором сразу AST. Все равно IDE парсит исходники и создает какое-то дерево внутри (не обязательно AST), а потом компилятор делает подобную работу второй раз. Автокомплит, форматирование, все это ведь может делать компилятор, в нем уже есть нужные абстракции.

И сохранять исходники нужно сразу как обогащенный AST, что-бы по нему однозначно восстанавливался правильно форматированный текст, который нужен только в окне редактора. Тогда неправильно форматированный код просто не можно будет сохранить и не будет этого всего страдания, не будет табы vs. пробелы.

 ,

vlad9486 ()

Кортежи в современных ЯП и устаревший синтаксис

В rust и swift (мб Kotlin тоже) есть типы данных - кортежи (tuple). И все равно для передачи параметров в функцию есть отдельный синтаксис. Можно было же упростить языки, функция может принимать только один параметр и без скобок, как в Хаскеле. Если нужно больше, делай кортеж. Но нет же, повторим C. Что это такое? Инертность?

Огорчает что в таких типа новых и прогрессивных языках такая фигня в синтаксисе.

В swift даже можно давать имена полям, это же как анонимные структуры, которых так не хватало в C. В итоге можно было бы сделать objC стайл для функций. Но разрабов C ужалил.

Ok(())

 , ,

vlad9486 ()

Пакетный менеджер cargo

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

Пусть есть игра с динамически загружаемым контентом. Игрок покупает или открывает предметы и происходит скачивание файла в хомяк юзера. Должна ли игра это опакетить и использовать системный пакетный менеджер? В чем отличие от cargo, который тоже качает в хоум?

И сразу еще один вопрос. А если cargo не создавал бы новых файлов, а хранил все в базе данных, был бы только распухающий файл ~/.cargo.db, он все равно считался бы конкурентом системному ПМ?

 ,

vlad9486 ()

Пробелы и другие спецсимволы в идентификаторах

Сферический пример:

https://github.com/slide-rs/specs/blob/master/examples/basic.rs#L52

Автор кода назвал систему «sys_a» но мог бы и назвать «sys a», мне кажется что страх пробелов какой-то нездоровый. Из-за длительного унижения линуксовыми шелами программисты и другие айтишники боятся пробелов в именах и это печально.

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

 

vlad9486 ()

Алгебраические типы данных, инволюция и квантовая логика

Размышления о математической логике и программировании.

Когда-то давно я изобретал инволюцию, расширяющую натуральные числа, которая бы меняла местами умножение и сложение. Вот так:

(a + b)` = a` * b`
(a * b)` = a` + b`
a`` = a

все началось с уравнений:

a * a = a
a + a = a

первое в действительных (и комплексных?) числах имеет два корня: 0 и 1, а второе - только один корень: 0. А хотелось сделать сложение и умножение равноправными. И тогда я подумал, а пусть первое уравнение тоже имеет только один корень: 1, но не 0. То есть

0 * 0 != 0

как натуральные числа N - свободный моноид с генератором 1 и сложением, так и «звездные» натуральные числа N* - свободный моноид с генератором 0 и умножением. Тогда,

n` := 0 ^ n

пусть все такие числа различные и не нули (кроме первого, конечно же).

Дальше я все зафейлил, потому что не смог определить смешанные операции.

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

(a -> b)` = (b -> a)

чувствуете это?

(Void -> T)` = (T -> Void)

это же ах*енно...

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

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

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

Вот вопрос номер один этого топика, как кто видит теорию типов на квантовой логике? Не жрать же Q# от MS для квантовых вычислений. Нужен язык программирования отражающий суть.

Ну и второй вопрос более математический. Есть такое пространство Гильберта, это бесконечномерное пространство над действительными или комплексными числами, в котором все скалярные произведения конечны. Так вот, штриховые простые числа образуют что-то вроде базиса такого пространства в... натуральных числах. Их же нельзя разложить в сумму других чисел. Другими словами, простые числа не раскладываются на множители (кроме единицы), значит простые штриховые не раскладываются на слагаемые (кроме нуля, который и есть штриховая единица). Значит простые штриховые образуют аналог базиса? Но ведь их бесконечно много. Значит уже на натуральных числах есть... пространство Гильберта (конечно же, это не оно, ведь нету поля, да и вообще, упоротость какая-то). Так вот вопрос, а скорее не вопрос, а просто информация к размышлению... Как эта инволюция связанна с проблемами Гольдбаха и гипотезой Римана?

Может кто-то когда-то будет гуглить что-то такое и найдет эту тему. Может кто-то угостит вкусной ссылкой.

 , ,

vlad9486 ()

Как опубликовать опенсорс

Есть один моральный вопрос связан с опенсорсом. Возможно есть стандартная практика о которой я не знаю.

Предположим, пацанчик пишет опенсорс на работе за деньги. И ему понадобилось для проекта сделать (за два вечера) утилиту или библиотеку, которая будет полезная и другим. А пацанчик еще и тщеславный. Может ли он публиковать утилиту под своим именем? Лицензия, разумеется, та же самая что и в основного проекта.

Понятное дело, что ответ зависит от отношений с работодателем (контрактом) и от того, писал ли ее наш герой в рабочее время или в личное. Хочу что бы кто-то объяснил за все варианты.

Юридическая часть вопроса. Что означает имя автора в опенсорсе? Кто автор, тот владеет кодом и может закрыть его, а все остальные должны соблюдать лицензию. Правильно ли я понимаю? Но если у нас MIT, например, то кто угодно может закрыть код. Что тогда означает имя автора в лицензиях типа MIT или Apache 2.0? Подозреваю что ничего не означает, но не уверен.

 ,

vlad9486 ()

Выбросить файловую систему

А может даже и интерпретатор команд тоже выбросить.

Файловая система и интерпретатор команд - дебажные инструменты разработчика ОС. Просто их оставили.

Идея ОС, которую не дебажат пользователи:

Без файловой системы можно если добавить аналог виртуальных адресных пространств для дисковой памяти, это легко сделать даже программно. Каждое приложение имеет базу данных или что-то свое на этом пространстве. Книги будут объектами читалки (блобами в БД), а музыка и фильмы - объектами плеера, и т.д. Установленные приложения будут объектами ОС (типа libpng:1.0.0, это похоже на файловую систему, но это не она, просто реестр пакетов).

Для использования внешнего кода (библиотек), программист просто пишет в коде типа:

import libpng:1.0.0;

В своем приложении пишет что-то такое

program myapp:0.0.1;

Еще должна быть какая-то libruntime (которая и есть ядро, но тоже импортится обычным способом). В libruntime есть функция, которая забирает анонимный блоб в памяти (в котором ельф файл) и превращает его в еще один объект ОС (можно будет написать с ее использованием пакетный менеджер и репозиторий).

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

Интерпретатор команд вообще не нужен. Если что-то нужно запустить, программист или статически пишет вышеупомянутый импорт в коде или динамически грузит через libruntime, как so в линуксах.

Если очень нужно скриптовать, никто не отбирает питон и лисп.

Девопс, сисадмин не нужны (соседняя тема). Всё делают программисты.

Все уходят от файлов. Многие ide, docker, git прячут файлы от пользователя. Потому что это изначально отладочная абстракция, от которой больше вреда.

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

Проблемы подхода?

 ,

vlad9486 ()

Отказаться от аппаратной защиты используя байткод

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

Идея такая: пишем модуль ядра (.ko), который будет тащить с диска пользовательский код и пускать на нем треды в контексте ядра в нулевом кольце. Это небезопасно. Потому тащим в ядро еще и Rust компилятор, загружаем только растокод «mid-level IR», например. Позже сделать какой-то байткод, по которому можно будет валидировать отсутствие unsafe, и интерпретатор с jit компиляцией.

Запускаем только то, что не содержит unsafe. Естественно, очень тонкую стандартную библиотеку нужно предоставить тоже, она не будет использовать сисколы, но полагаться на внутренности ядра напрямую.

Профит: небольшое увеличение производительности и пылающие пуканы растохейтеров.

Я вообще не разбираюсь в низкоуровневом программировании но думаю что взлетит. Взлетит?

 , , ,

vlad9486 ()

USB wifi TP-LINK TL-WN821N (v4, поэтому realtek)

Вывод uname:

Linux archlinux 3.11.4-1-ARCH #1 SMP PREEMPT Sat Oct 5 21:22:51 CEST 2013 x86_64 GNU/Linux
Драйвер: опенсорсный с aur. Пакет называется dkms-8192cu. Заблэклистил r8169 с ядра, интернет стал норм, как на винде. Но, нормальный он только с проприетарным драйвером на видеокарту nvidia-304xx (у меня не новая карточка), с опенсорсным драйвером nouveau-dri опять медленный. Как могут быть связаны эти драйвера? Что можно сделать?

vlad9486 ()

Отключить Data Execution Prevention в Wine

Крашется GTA3, здесь http://www.gamersgate.com/gametutor?issue=190091 пишут, что нужно отключить DEP для этой игры. Как отключить DEP в вайне? Или, на худой конец, отключить DEP во всей системе?

 ,

vlad9486 ()

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