LINUX.ORG.RU

Сообщения driver

 

Как в python вернуть рефку?

class Matrix(object):
    def __init__(self, rows, cols):
        self.rows = rows
        self.cols = cols
        self._m = [[0] * cols for _ in range(rows)]

    def print(self):
        print(self._m)

    def get(self, i, j):
        return self._m[i][j]


m = Matrix(2, 3)
m.get(0, 0) = 123 # хочу так

Сабж. Как это сделать? Как вернуть рефку?

 , ,

driver
()

Крашится firefox под firejail после установки docker

Появилась необходимость поставить докер, поэтому пришлось переконфигурировать ядро в соответствии с этой статьей https://wiki.gentoo.org/wiki/Docker#Kernel

После этого firefox стал странно себя вести, иногда отказываясь переходить по ссылкам и открывать новые вкладки, т.е. сам он продолжает работать, но на сайты не переходит. Исправляется только после kill -9.

Стоит еще упомянуть, что после пересборки ядра, пришлось убрать seccomp из конфига firejail, чтобы firefox завёлся.

Кусок конфига /etc/firejail/firefox.profile

caps.drop all
# machine-id breaks pulse audio; it should work fine in setups where sound is not required
#machine-id
netfilter
nodvd
#nogroups
nonewprivs
noroot
notv
protocol unix,inet,inet6,netlink
#seccomp
shell none
tracelog

disable-mnt
private-dev

В dmesg такой треш:

[55356.391560] Chrome_~dThread[17079]: segfault at 0 ip 00007fa91d9c7443 sp 00007fa91b64bb00 error 6
[55356.391563] Chrome_~dThread[16956]: segfault at 0 ip 00007fec7f3c7443 sp 00007fec7d04bb00 error 6 in libxul.so[7fec7eeaa000+5676000]
[55356.391569]  in libxul.so[7fa91d4aa000+5676000]
[55356.391571] Code: 
[55356.391571] Code: 8d 
[55356.391572] 8d 0d 
[55356.391574] 0d 
[55356.391574] e5 
[55356.391575] e5 
[55356.391575] f8 
[55356.391576] f8 21 
...
[55356.391636] 0f 
[55356.391637] ae 
[55356.391637] 1f 
[55356.391638] ff 
[55356.391638] 84 
[55356.391639] 66 
[55356.391640] 00 
[55356.391640] 2e 
[55356.391641] 0f 1f 84 00 
[61064.529276] Web Content[17983]: segfault at 0 ip 00007fb4a985e8d0 sp 00007fff7c7a6940 error 6 in libmozsandbox.so[7fb4a9850000+22000]
[61064.529280] Code: 51 ff ff c7 04 25 00 00 00 00 46 02 00 00 e8 87 51 ff ff 0f 1f 80 00 00 00 00 c7 04 25 00 00 00 00 36 01 00 00 e8 70 51 ff ff <c7> 04 25 00 00 00 00 38 01 00 00 e8 60 51 ff ff c7 04 25 00 00 00 
[61116.135785] Chrome_~dThread[17787]: segfault at 0 ip 00007f3e80ec7443 sp 00007f3e7eb4bb00 error 6 in libxul.so[7f3e809aa000+5676000]
[61116.135792] Code: 8d 0d e5 f8 21 04 48 89 08 c7 04 25 00 00 00 00 72 01 00 00 e8 9e dd ae ff 48 8b 05 2f 48 6f 05 48 8d 0d 38 fb 21 04 48 89 08 <c7> 04 25 00 00 00 00 fc 09 00 00 e8 7d dd ae ff 66 2e 0f 1f 84 00

Вопрос такой: какие опции ядра (из статьи по ссылке выше) могли вызвать подобное поведение?

 , , ,

driver
()

Патч для calibre 3.15, добавляющий поддержку QtCore 5.11

Прилетело обновление dev-qt/qtcore-5.11.1, после чего перестало собираться app-text/calibre-3.15.0

error: static assertion failed: sizeof specialLanguages / sizeof *specialLanguages == QChar::ScriptCount
 Q_STATIC_ASSERT(sizeof specialLanguages / sizeof *specialLanguages == QChar::ScriptCount);

Накидал патч на скорую руку, вдруг кому пригодится.

diff -ur calibre-3.15.0/src/calibre/headless/fontconfig_database.cpp calibre-3.15.0-fixed/src/calibre/headless/fontconfig_database.cpp
--- calibre-3.15.0/src/calibre/headless/fontconfig_database.cpp	2018-01-05 07:41:54.000000000 +0200
+++ calibre-3.15.0-fixed/src/calibre/headless/fontconfig_database.cpp	2018-07-04 04:30:27.367199761 +0300
@@ -284,14 +284,27 @@
     "", // Hatran
     "", // Multani
     "", // OldHungarian
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0))
+    "", // SignWriting
+    "", // Script_Adlam
+    "", // Script_Bhaiksuki
+    "", // Script_Marchen
+    "", // Script_Newa
+    "", // Script_Osage
+    "", // Script_Tangut
+    "", // Script_MasaramGondi
+    "", // Script_Nushu
+    "", // Script_Soyombo
+    "", // Script_ZanabazarSquare
+#else
     ""  // SignWriting
+#endif // Qt >= 5.11.0
 #else
     "hoc"  // WarangCiti
 #endif  // Qt >= 5.6.0
 #else
     "doi" // Takri
 #endif // Qt >= 5.5.0
-
 };
 Q_STATIC_ASSERT(sizeof specialLanguages / sizeof *specialLanguages == QChar::ScriptCount);
 

 , , ,

driver
()

Альтернатива initializer_list в Си

Есть задача - инициализировать массив структур:

typedef struct { const double *inputs, *outputs; } Example;

где inputs и outputs - указатели на массивы даблов, произвольной длины, терминированные NaN.

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

Пока что пришел к такому варианту:

#include <stdio.h>
#include <math.h>

#define INIT_LIST(type, ...) ((const type[]){__VA_ARGS__})
#define DOUBLES(...) INIT_LIST(double, __VA_ARGS__, (double)NAN)
#define INIT_STRUCT_PTR(type, ...) (&(type){__VA_ARGS__})
#define EXAMPLE(...) INIT_STRUCT_PTR(Example, __VA_ARGS__)

typedef struct { const double *inputs, *outputs; } Example;

// NAN-terminated array of doubles
void printDoubles(const char *fmt, const double *nandedArray) {
    while(!isnan(*nandedArray)) {
        printf(fmt, *nandedArray++); // не секурно, зато удобно
    }
}

#define TAB "  "

// NULL-terminated array of examples
void printExamples(Example **examples) {
    for( ; *examples; ++examples) {
        printf("Example {\n" TAB "inputs {\n");
        printDoubles(TAB TAB "%f\n", (*examples)->inputs);
        printf(TAB "}\n" TAB "outputs {\n");
        printDoubles(TAB TAB "%f\n", (*examples)->outputs);
        printf(TAB "}\n}\n");
    }
}

int main() {
    Example *examples[] = {
        EXAMPLE(DOUBLES(1.23), DOUBLES(4.56, 7.89)),
        EXAMPLE(DOUBLES(10.11, 12.13), DOUBLES(14.15)),
        NULL
    };
    printExamples(examples);
}
Example {
  inputs {
    1.230000
  }
  outputs {
    4.560000
    7.890000
  }
}
Example {
  inputs {
    10.110000
    12.130000
  }
  outputs {
    14.150000
  }
}

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

Какие есть еще варианты?

 ,

driver
()

firefox под firejail'ом рандомно крашится

$ for p in {firefox,firejail,nvidia-drivers}; do eix -I $p | grep -E "\[I\]|In"; echo; done

[I] www-client/firefox
     Installed versions:  59.0.2^d[1](03:08:27 21.04.2018)(custom-cflags dbus eme-free hardened hwaccel pulseaudio screenshot -bindist -custom-optimization -debug -gmp-autoupdate -jack -neon -selinux -startup-notification -system-harfbuzz -system-icu -system-jpeg -system-libevent -system-libvpx -system-sqlite -test -wifi L10N="ru -ach -af -an -ar -as -ast -az -bg -bn-BD -bn-IN -br -bs -ca -cak -cs -cy -da -de -dsb -el -en-GB -en-ZA -eo -es-AR -es-CL -es-ES -es-MX -et -eu -fa -ff -fi -fr -fy -ga -gd -gl -gn -gu -he -hi -hr -hsb -hu -hy -id -is -it -ja -ka -kab -kk -km -kn -ko -lij -lt -lv -mai -mk -ml -mr -ms -nb -nl -nn -or -pa -pl -pt-BR -pt-PT -rm -ro -si -sk -sl -son -sq -sr -sv -ta -te -th -tr -uk -uz -vi -xh -zh-CN -zh-TW")

[I] sys-apps/firejail
     Installed versions:  0.9.52^t(10:34:26 04.05.2018)(bind chroot file-transfer network network-restricted seccomp userns x11 -apparmor -contrib)

[I] x11-drivers/nvidia-drivers
     Installed versions:  396.18-r1(0/396)^md(13:46:31 29.04.2018)(X acpi driver kms multilib tools uvm -compat -gtk3 -pax_kernel -static-libs -wayland ABI_MIPS="-n32 -n64 -o32" ABI_PPC="-32 -64" ABI_S390="-32 -64" ABI_X86="32 64 -x32" KERNEL="linux -FreeBSD")

/etc/firejail/firefox.profile

caps.drop all
# machine-id breaks pulse audio; it should work fine in setups where sound is not required
#machine-id
netfilter
nodvd
nogroups
nonewprivs
noroot
notv
protocol unix,inet,inet6,netlink
seccomp
shell none
tracelog

disable-mnt
private-dev
private-tmp

noexec ${HOME}
noexec /tmp

Рандомно вылетает с таким логом:

Crash Annotation GraphicsCriticalError: |[0][GFX1-]: [OPENGL] Failed to init compositor with reason: FEATURE_FAILURE_OPENGL_CREATE_CONTEXT (t=0.372391) |[1][GFX1-]: [OPENGL] Failed to init compositor with reason: FEATURE_FAILURE_OPENGL_CREATE_CONTEXT (t=152.096) |[2][GFX1-]: [OPENGL] Failed to init compositor with reason: FEATURE_FAILURE_OPENGL_CREATE_CONTEXT (t=198.388) [GFX1-]: [OPENGL] Failed to init compositor with reason: FEATURE_FAILURE_OPENGL_CREATE_CONTEXT

(firefox:7): Gdk-ERROR **: The program 'firefox' received an X Window System error.
This probably reflects a bug in the program.
The error was 'GLXBadContext'.
  (Details: serial 84490 error_code 168 request_code 153 (GLX) minor_code 4)
  (Note to programmers: normally, X errors are reported asynchronously;
   that is, you will receive the error a while after causing it.
   To debug your program, run it with the GDK_SYNCHRONIZE environment
   variable to change this behavior. You can then get a meaningful
   backtrace from your debugger if you break on the gdk_x_error() function.)

Parent is shutting down, bye...

Гугление пока не принесло результатов. Хелп.

 , , ,

driver
()

Странное поведение initramfs на read-only носителе

Захотелось мне тут секурности и решил зашифровать rootfs & swap, а boot раздел вынести на sd-карту с возможностью физически переключать её в read-only.

Так вот, все работает как надо, если sd-карта в rw режиме, но если переключить её в ro, то по какой-то неведомой мне причине rootfs монтируется тоже в ro и из-за этого половина сервисов не стартует.

Почему так происходит? Как заставить initramfs монтировать rootfs в rw, не переключая sd-карту в rw?

UPD: initramfs создавался genkernel'ом, если это важно

 , , ,

driver
()

Разыскивается usb wifi адаптер: 5ghz + 802.11ac + SoftAP

Требуется:

  • 5ghz
  • 802.11ac
  • SoftAP
  • хорошо поддерживаемый драйвер

Будет плюсом (не критично):

  • разъем для внешней антенны
  • monitor mode
  • packet injection

Найти такое оказалось труднее, чем я думал. Нужна ваша помощь.

 , ,

driver
()

KPTI для arm64

Конфигурирую ядро для девайса на Exynos 5420 (Cortex-A15 + Cortex-A7). Как я понял, Cortex-A15 подвержен meltdown & spectre, поэтому хотелось бы от этого как-то защититься. Нашел в конфиге KPTI (PAGE_TABLE_ISOLATION), а там в дескрипшене написано:

Depends on: X86_64

То есть это значит, что фикс есть только для X86_64?

 , , ,

driver
()

Рут: обретение контроля ценой ослабления безопасноти?

На днях наконец-то снес проприетарную прошивку и вместо неё поставил lineage os. До этого всегда пользовался тем, что предлагал вендор, поэтому имею весьма смутное представление о безопасности мобильной системы без вендорской опеки.

Так вот. Захотелось мне поставить какой-нибудь фаервол, чтобы усилить контроль над системой, но как оказалось, все подобные приложения требуют рута. И тут у меня возникает вопрос: если дать им этого рута, не зашкварно ли это будет? Это же дыра натуральная - любое локальное приложение сможет повысить свои права. Или я ошибаюсь? Если нет, то какой тогда смысл в фаерволах на андроиде, если безопасность от этого только снизится?

Если что - речь идет про su-addon для lineage os https://download.lineageos.org/extras

 , ,

driver
()

Неюзабельный WIFI на самопальном роутере

Проблема такая: при малейшей нагрузке на сеть (вебсерф, загрузка файла, etc), пинг к роутеру (Raspberry Pi 3 Model B / LEDE 17.0.4 ) вырастает до небес, что приводит WIFI к абсолютно неюзабельному состоянию.

Приведу кусок лога при пинговании роутера во время однопоточной загрузки файла из инета:

64 bytes from 10.0.0.1: icmp_seq=521 ttl=64 time=493.635 ms
Request timeout for icmp_seq 522
64 bytes from 10.0.0.1: icmp_seq=523 ttl=64 time=1569.522 ms
64 bytes from 10.0.0.1: icmp_seq=524 ttl=64 time=642.037 ms
64 bytes from 10.0.0.1: icmp_seq=525 ttl=64 time=406.650 ms
64 bytes from 10.0.0.1: icmp_seq=526 ttl=64 time=337.020 ms
Request timeout for icmp_seq 527
64 bytes from 10.0.0.1: icmp_seq=528 ttl=64 time=276.273 ms
64 bytes from 10.0.0.1: icmp_seq=529 ttl=64 time=233.462 ms
64 bytes from 10.0.0.1: icmp_seq=530 ttl=64 time=1009.487 ms
64 bytes from 10.0.0.1: icmp_seq=531 ttl=64 time=324.294 ms
64 bytes from 10.0.0.1: icmp_seq=532 ttl=64 time=241.726 ms
64 bytes from 10.0.0.1: icmp_seq=533 ttl=64 time=233.443 ms
64 bytes from 10.0.0.1: icmp_seq=534 ttl=64 time=255.738 ms
64 bytes from 10.0.0.1: icmp_seq=535 ttl=64 time=277.156 ms
64 bytes from 10.0.0.1: icmp_seq=536 ttl=64 time=403.915 ms
64 bytes from 10.0.0.1: icmp_seq=537 ttl=64 time=297.305 ms
64 bytes from 10.0.0.1: icmp_seq=538 ttl=64 time=394.790 ms
64 bytes from 10.0.0.1: icmp_seq=539 ttl=64 time=8.237 ms
64 bytes from 10.0.0.1: icmp_seq=540 ttl=64 time=10.917 ms
64 bytes from 10.0.0.1: icmp_seq=541 ttl=64 time=7.747 ms
64 bytes from 10.0.0.1: icmp_seq=542 ttl=64 time=7.741 ms
64 bytes from 10.0.0.1: icmp_seq=543 ttl=64 time=4.751 ms
64 bytes from 10.0.0.1: icmp_seq=544 ttl=64 time=7.073 ms
64 bytes from 10.0.0.1: icmp_seq=545 ttl=64 time=7.152 ms
64 bytes from 10.0.0.1: icmp_seq=546 ttl=64 time=4.625 ms
^C
--- 10.0.0.1 ping statistics ---
547 packets transmitted, 541 packets received, 1.1% packet loss
round-trip min/avg/max/stddev = 1.276/50.872/1569.522/137.861 ms

Загрузка файла завершилась на 539 пакете и пинг стабилизировался.

Физически нахожусь через 2 стены от роутера, но это не важно, т.к. проблема наблюдается даже в непосредственной близости. Изменение канала не помогает (выбрал наименее засранный). Ноутовская wifi карта исправна, проверял её с проприетарным зондированным роутером - коннект стабильный, т.е. проблема на стороне роутера. Тестировал сеть с usb-ethernet адаптером (т.к. на малинке всего одно ethernet гнездо) - коннект стабильный даже во время работы торрент-клиента, но нужен именно wifi...

Вайфай чип крутится на brcmfmac, но дело не в нем, потому что точно такая же проблема наблюдается с usb wifi свистком работающим под athk9k.

Итог такой: с wifi картами все ок, с их драйверами все ок, малинка способна предоставить нормальный коннект через usb-ethernet, но проблема есть и причину её я понять не могу. Помогите разобраться.

 , , , ,

driver
()

Нужен совет по обустройству гипервизора на ноуте

Господа, спасайте - тону! Хочется много - знаний и опыта мало. Не знаю с какого края начинать...

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

Хочется максимальной производительности гостевых систем, их изолированности друг от друга, организации файлообмена, сетевого разграничения (виртуалка для банкинга должна ходить в сеть только через определенный vpn сервер, а часть виртуалок вообще не должна иметь доступа к сети), ну и конечно минимум проприетарщины - максимум швободки. Так как сабж должен работать на ноуте, то неплохо бы иметь возможность гибернации всего этого зоопарка с учетом full disk encryption (включая swap).

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

Есть готовые рецепты под такие хотелки?

 , ,

driver
()

Неочевидное поведение компилятора

Народ, выручайте - я в ступоре. Захотелось мне создать безымянный временный объект типа t, конструктор которого принимает строку, но не тут-то было!

#include <iostream>

struct t {
    t(const std::string & s) {
        std::cout << "t(): " << s << "\n";
    }
};

int main() {
  std::string s("string123");
  t(s);
}

 In function 'int main()':
11:6: error: conflicting declaration 't s'
10:15: note: previous declaration as 'std::string s'
http://cpp.sh/84qdi

Неужто парсер подавился на такой банальщине?

 ,

driver
()

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