LINUX.ORG.RU

Сообщения Flotsky

 

keenetic wifi центр в существующую сеть

Есть уже существующая сеть которой управляет микротик. Закупили 3 штуки Keenetic Voyager Pro (KN-3510) с целью сделать бесшовный wifi

С keenetic ранее не работал, желаемое через GUI сделать не смог, полез править startup-config и наковырял примерно такие конфигурации:

для главной точки
для всех вторичных точек

После перезапуска главная точка находит вторичные, клиенты подключаются и получают lease от микротика. НО

  • Клиенты не переключаются между точками
    • висят на той, к которой подключились, даже если уйти он неё максимально далеко
    • если отключить вторичную точку к которой подключен клиент, то он опять отвалится, а не плавно «переключится» на другую точку. В моём случае телефон 8 секунд тупил и потом просто подключился к след точке
  • Я так и не понял как добавить LAN интерфейс в Bridge, после импорта главная точка просто выкидывает этот порт из конфигурации

Основной вопрос: что я забыл в конфиге, как хотябы wifi сделать «бесшовным»?

Вторичные вопросы:

  • Я правильно понимаю, что GUI мне более не помощник в настройке и если я, к примеру, захочу поменять пароль wifi мне придётся обновлять startup-config на всех точках
  • Хотелось бы всёже LAN порт добавить в Bridge, это надо как-то по особому делать? Вот так include GigabitEthernet0 keenetic просто выкидывает строку из конфигурации
  • Может позже мне потребуется ещё и гостевой wifi прикрутить, но это вопрос на потом

 , ,

Flotsky
()

Вынести часть профиля куда-то и сделать общим для нескольких пользователей

Накидайте идей.

Есть netboot образ, несколько пользователей
Домашние директории на NFS

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

Пытался завести overlayfs, как наиболее логичное решение, но nfs не может быть upperdir.

Сейчас скрипт запускается силами pam_exec и копирует /etc/skel в профиль пользователя, чем гарантирует нужные ярлыки и некоторые настройки профиля.

Но вот к примеру удалять старые ярлыки скрипт не умеет.

Какие есть альтернативы кроме как наращивать логику скрипта?

 ,

Flotsky
()

Несколько pv в pipe иногда ломают консоль

Есть комманда внутри скрипта

set -e -o pipefail
...
tar -cf - ./ | pv -cN "RAW" -s $RAW_size | zstd | pv -cN "Compressed" > "${BUILD_RESULT}/rootfs.tar.zstd"

Которая раз через раз «ломает консоль». Проявляется это тем, что все вводимые символы не отображаются, но вводятся.

Если в результате работы комманды выхлоп выглядит так

Compressed: 1,56GiB 0:01:20 [19,9MiB/s] [                                                               <=>                                                                                                         ]
      RAW: 4,16GiB 0:01:20 [53,0MiB/s] [==========================================================================================================================================================>] 100%            

То, всё хорошо, а если

Compressed: 13,7MiB 0:00:01 [13,7MiB/s] [   <=>                                                                                                                                                                     ]
      RAW: 4,16GiB 0:01:15 [56,4MiB/s] [==========================================================================================================================================================>] 100%            
Compressed: 1,56GiB 0:01:15 [21,1MiB/s] [                                                                                    <=>                                                                                    ]

Значит «сломалось»

Локализую сейчас перезапуском ssh сессии до узла или перезапуском mc.

Ищу идей куда посмотреть/что выполнить чтобы починить консоль без перезапуска mc/ssh сессии

 , ,

Flotsky
()

raid5 стабильно отваливается один диск в процессе синхронизации

Было 2 диска в RAID1 и куча данных на них, место стало заканчиваться, я купил 3 диск и сделал:

  • отключил один из дисков в RAID1
  • собрал из 2 дисков RAID5 (--chunk=256 --bitmap=internal --bitmap-chunk=131072, данные параметры подбирал активными тестами fio)
  • перекопировал данные из RAID1 в RAID5
  • разобрал RAID1, добавил диск в RAID5

По итогу раз в несколько часов ловлю отвал одного диска с логами в dmesg

50-150 таких сообщений в течении одной секунды
[Вт сен 17 14:51:00 2024] mpt3sas_cm0: log_info(0x31110d00): originator(PL), code(0x11), sub_code(0x0d00)
далее отвал диска
[Вт сен 17 14:51:01 2024] sd 11:0:12:0: device_block, handle(0x000e)
[Вт сен 17 14:51:04 2024] sd 11:0:12:0: device_unblock and setting to running, handle(0x000e)
[Вт сен 17 14:51:04 2024] mpt3sas_cm0: remove hba_port entry: 00000000635f3795 port: 5 from hba_port list
[Вт сен 17 14:51:04 2024] raid5_end_read_request: 10073 callbacks suppressed
[Вт сен 17 14:51:04 2024] md/raid:md128: read error not correctable (sector 692063616 on sdg1).
[Вт сен 17 14:51:04 2024] md/raid:md128: read error not correctable (sector 692063624 on sdg1).
[Вт сен 17 14:51:04 2024] md/raid:md128: read error not correctable (sector 692063632 on sdg1).
[Вт сен 17 14:51:04 2024] md/raid:md128: read error not correctable (sector 692063640 on sdg1).
[Вт сен 17 14:51:04 2024] md/raid:md128: read error not correctable (sector 692063648 on sdg1).
[Вт сен 17 14:51:04 2024] md/raid:md128: read error not correctable (sector 692063656 on sdg1).
[Вт сен 17 14:51:04 2024] md/raid:md128: read error not correctable (sector 692063664 on sdg1).
[Вт сен 17 14:51:04 2024] md/raid:md128: read error not correctable (sector 692063672 on sdg1).
[Вт сен 17 14:51:04 2024] md/raid:md128: read error not correctable (sector 692063680 on sdg1).
[Вт сен 17 14:51:04 2024] md/raid:md128: read error not correctable (sector 692063688 on sdg1).
[Вт сен 17 14:51:04 2024] md: super_written gets error=-5
[Вт сен 17 14:51:04 2024] md/raid:md128: Disk failure on sdg1, disabling device.
[Вт сен 17 14:51:04 2024] md/raid:md128: Cannot continue operation (2/3 failed).
[Вт сен 17 14:51:04 2024] sd 11:0:12:0: [sdg] Synchronizing SCSI cache
[Вт сен 17 14:51:04 2024] sd 11:0:12:0: [sdg] Synchronize Cache(10) failed: Result: hostbyte=DID_NO_CONNECT driverbyte=DRIVER_OK
[Вт сен 17 14:51:04 2024] mpt3sas_cm0: mpt3sas_transport_port_remove: removed: sas_addr(0x300605b00de92804)
[Вт сен 17 14:51:04 2024] mpt3sas_cm0: removing handle(0x000e), sas_addr(0x300605b00de92804)
[Вт сен 17 14:51:04 2024] mpt3sas_cm0: enclosure logical id(0x500605b00de92800), slot(6)
[Вт сен 17 14:51:04 2024] mpt3sas_cm0: enclosure level(0x0000), connector name( C1  )
[Вт сен 17 14:51:04 2024] md: md128: recovery interrupted.
[Вт сен 17 14:51:04 2024] Buffer I/O error on dev md128, logical block 64, async page read
[Вт сен 17 14:51:04 2024] Buffer I/O error on dev md128, logical block 64, async page read
[Вт сен 17 14:51:04 2024] md128: detected capacity change from 46875004928 to 0
[Вт сен 17 14:51:04 2024] md: md128 stopped.
[Вт сен 17 14:51:12 2024] mpt3sas_cm0: hba_port entry: 00000000f61f8dea, port: 5 is added to hba_port list
[Вт сен 17 14:51:12 2024] mpt3sas_cm0: handle(0xe) sas_address(0x300605b00de92804) port_type(0x1)
[Вт сен 17 14:51:12 2024] scsi 11:0:13:0: Direct-Access     ATA      WDC WD120EFBX-68 0A85 PQ: 0 ANSI: 6
[Вт сен 17 14:51:12 2024] scsi 11:0:13:0: SATA: handle(0x000e), sas_addr(0x300605b00de92804), phy(4), device_name(0x0000000000000000)
[Вт сен 17 14:51:12 2024] scsi 11:0:13:0: enclosure logical id (0x500605b00de92800), slot(6) 
[Вт сен 17 14:51:12 2024] scsi 11:0:13:0: enclosure level(0x0000), connector name( C1  )
[Вт сен 17 14:51:12 2024] scsi 11:0:13:0: atapi(n), ncq(y), asyn_notify(n), smart(y), fua(y), sw_preserve(y)
[Вт сен 17 14:51:12 2024] scsi 11:0:13:0: qdepth(128), tagged(1), scsi_level(7), cmd_que(1)
[Вт сен 17 14:51:12 2024] mpt3sas_cm0: log_info(0x31200205): originator(PL), code(0x20), sub_code(0x0205)
[Вт сен 17 14:51:12 2024] sd 11:0:13:0: Attached scsi generic sg6 type 0
[Вт сен 17 14:51:12 2024]  end_device-11:13: add: handle(0x000e), sas_addr(0x300605b00de92804)
[Вт сен 17 14:51:12 2024] sd 11:0:13:0: Power-on or device reset occurred
[Вт сен 17 14:51:12 2024] sd 11:0:13:0: [sdg] 23437770752 512-byte logical blocks: (12.0 TB/10.9 TiB)
[Вт сен 17 14:51:12 2024] sd 11:0:13:0: [sdg] 4096-byte physical blocks
[Вт сен 17 14:51:12 2024] sd 11:0:13:0: [sdg] Write Protect is off
[Вт сен 17 14:51:12 2024] sd 11:0:13:0: [sdg] Mode Sense: 9b 00 10 08
[Вт сен 17 14:51:12 2024] sd 11:0:13:0: [sdg] Write cache: enabled, read cache: enabled, supports DPO and FUA
[Вт сен 17 14:51:12 2024]  sdg: sdg1
[Вт сен 17 14:51:12 2024] sd 11:0:13:0: [sdg] Attached SCSI disk

Сразу после этого смотрю SMART отвалившегося диска: идеальный, выросли только «Start_Stop_Count» и связанные счетчики

Пересобираю RAID с ключем --force, синхронизация начинается с начала, часа через 2-5 всё повторяется.

Ограничивать скорость синхронизации до 80Mb/s не помогает
В проблемы питания не верю т.к. эта вся куча дисков пережила и активные fio тесты и копирование данных на уровне fs

Странно, что отваливается всегда конкретно этот диск и никакие другие.

Контроллер у меня lsi 9300-8i в HBA режиме

23:00.0 Serial Attached SCSI controller: Broadcom / LSI SAS3408 Fusion-MPT Tri-Mode I/O Controller Chip (IOC) (rev 01)

На диски дует вентилятор, на контроллер тоже, температура дисков держится ~45 градусов, контроллер свою температуру не говорит или я не знаю как смотреть.


Вопросы:

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

 , ,

Flotsky
()

(нет решения) rk3399 pci сетевая карта вешает загрузку

итог: (нет решения) rk3399 pci сетевая карта вешает загрузку (комментарий)


Всё ещё лежит у меня nanopc-t4, у него есть
«PCIe: One M.2 M-Key PCIe x4 socket, compatible with PCIe 2.1, Dual operation mode; Onboard M3 PCB nut for mounting M.2 2280 module»

В который я подключил вот такую железку от китайцев Сетевая карта M.2 на 2 порта RJ45 2,5G Gigabit Ethernet адаптер NIC 2500 Мбит/с B/M ключ M2 Размер 22*80 мм RealTek RTL8125B

После чего грузиться моя платка перестала выплёвывая в debug консоль такое

Starting kernel ...

[    3.118389] Internal error: synchronous external abort: 0000000096000210 [#1] PREEMPT SMP
[    3.119125] Modules linked in:
[    3.119410] CPU: 2 PID: 202 Comm: kworker/u12:6 Not tainted 6.7.9-1-MANJARO-ARM #1
[    3.120085] Hardware name: FriendlyElec NanoPC-T4 (DT)
[    3.120543] Workqueue: events_unbound deferred_probe_work_func
[    3.121084] pstate: 600000c5 (nZCv daIF -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[    3.121706] pc : rockchip_pcie_rd_conf+0x120/0x15c
[    3.122148] lr : rockchip_pcie_rd_conf+0x7c/0x15c
[    3.122578] sp : ffff800082ad3720
[    3.122876] x29: ffff800082ad3720 x28: ffff00000469d000 x27: 0000000000000000
[    3.123525] x26: 0000000000000001 x25: ffff00000469f000 x24: ffff800081a7c640
[    3.124172] x23: 0000000000000000 x22: ffff800082ad3824 x21: ffff800082ad3794
[    3.124818] x20: 0000000000000004 x19: ffff800084200000 x18: ffffffffffffffff
[    3.125466] x17: 000000006df8f788 x16: 0000000051a83996 x15: ffffffffffffffff
[    3.126113] x14: ffff000004692a1c x13: ffff00000469229d x12: 0000000026861548
[    3.126760] x11: 000000009ba7a2e7 x10: 0000000000000000 x9 : 00000000000005a4
[    3.127407] x8 : 000000003d4d554e x7 : ffff00000518c380 x6 : ffff00000469d000
[    3.128054] x5 : ffff00000469f000 x4 : 0000000000c00008 x3 : ffff800087000000
[    3.128700] x2 : 000000000080000b x1 : ffff800087c00008 x0 : ffff800087c0000c
[    3.129355] Call trace:
[    3.129583]  rockchip_pcie_rd_conf+0x120/0x15c
[    3.130004]  pci_bus_read_config_dword+0x7c/0xdc
[    3.130440]  pci_bus_generic_read_dev_vendor_id+0x30/0x190
[    3.130943]  pci_scan_single_device+0xa0/0x108
[    3.131354]  pci_scan_slot+0x68/0x1f4
[    3.131697]  pci_scan_child_bus_extend+0x44/0x2cc
[    3.132131]  pci_scan_bridge_extend+0x30c/0x5a4
[    3.132549]  pci_scan_child_bus_extend+0x1b8/0x2cc
[    3.132783] mmc_host mmc0: Bus speed (slot 0) = 148500000Hz (slot req 150000000Hz, actual 148500000HZ div = 0)
[    3.132989]  pci_scan_bridge_extend+0x30c/0x5a4
[    3.134267]  pci_scan_child_bus_extend+0x1b8/0x2cc
[    3.134709]  pci_scan_root_bus_bridge+0x64/0xd8
[    3.135129]  pci_host_probe+0x18/0xbc
[    3.135471]  rockchip_pcie_probe+0x408/0x5b0
[    3.135874]  platform_probe+0x68/0xc0
[    3.136216]  really_probe+0x184/0x3c8
[    3.136566]  __driver_probe_device+0x7c/0x16c
[    3.136975]  driver_probe_device+0x3c/0x10c
[    3.137370]  __device_attach_driver+0xbc/0x158
[    3.137787]  bus_for_each_drv+0x80/0xdc
[    3.138149]  __device_attach+0x9c/0x1ac
[    3.138513]  device_initial_probe+0x14/0x20
[    3.138909]  bus_probe_device+0xac/0xb0
[    3.139272]  deferred_probe_work_func+0xb4/0x108
[    3.139704]  process_one_work+0x168/0x288
[    3.140089]  worker_thread+0x2b4/0x3cc
[    3.140448]  kthread+0xf4/0x100
[    3.140752]  ret_from_fork+0x10/0x20
[    3.141098] Code: 52800141 97fffb1b 7100129f 54fffb41 (b9400273)
[    3.141647] ---[ end trace 0000000000000000 ]---
[    3.142065] note: kworker/u12:6[202] exited with irqs disabled
[    3.142668] note: kworker/u12:6[202] exited with preempt_count 1
[    3.558604] dwmmc_rockchip fe310000.mmc: Successfully tuned phase to 217
[    3.577955] mmc0: new ultra high speed SDR104 SDIO card at address 0001
[   88.057910] random: crng init done

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

Если карточку вытащить, то соотв всё загрузится нормально, на одноплатнике у меня:

  • система живёт на emmc
  • Linux nanopct4 6.7.9-1-MANJARO-ARM #1 SMP PREEMPT Sat Mar 9 21:00:40 UTC 2024 aarch64 GNU/Linux
  • я накатил последнее доступное из стандартных репозиториев ядро
  • cmdline: initrd=/initramfs-linux.img console=ttyS2,1500000 root=/dev/mapper/nanopct4vg0-system rw audit=0 splash plymouth.ignore-serial-consoles
  • раньше на месте карточки был какой-то китайский noname ssd и работал без каких либо проблем

Сегодня добрался до ПК, к которому можно подключить pci-e карточку и она успешно заработала, вот что схоронил из того теста:

  • lspci -nnk
  • lshw
  • ethtool
  • dmesg (ошибки pcieport 0000:00:1c.7 можно игнорировать, это болячка данного ПК и лечится добавлением pcie_aspm=off)

Прошу подсказать можно ли как-то заставить эту pci-e карточку работать с моим одноплатником?

 , ,

Flotsky
()

mariadb не запускается

Упало на меня

systemd[1]: mariadb.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: mariadb.service: Failed with result 'exit-code'.
systemd[1]: Failed to start MariaDB 10.5.23 database server.

При этом в логе

2024-08-14 11:41:56 0 [ERROR] Failed to setup SSL
2024-08-14 11:41:56 0 [ERROR] SSL error: SSL_CTX_set_default_verify_paths failed
2024-08-14 11:41:56 0 [ERROR] Aborting

При этом в этом же логе видно, что ошибка то есть, то «оно просто запустилось и ему норм», что поменялось между не понятно.

Попытки запустить руками и с различными ключами логирования дают ничего, только exit code 1. Ну, разве что в лог опять то-же самое падает. # /usr/sbin/mariadbd --log-warnings=11 --stack-trace -T

К слову, если запустить # /usr/sbin/mariadbd --verbose --help оно говорит ssl TRUE, хотя в conf файле ssl явно выключен.

Часть conf файла:

[mysqld]
basedir = /usr
bind-address = 0.0.0.0
datadir = /var/lib/mysql
expire_logs_days = 10
key_buffer_size = 16M
log-error = /var/log/mysqld.log
max_allowed_packet = 16M
max_binlog_size = 100M
max_connections = 151
pid-file = /var/run/mysqld/mysqld.pid
port = 3306
query_cache_limit = 1M
query_cache_size = 16M
skip-external-locking
socket = /var/run/mysqld/mysqld.sock
ssl = false
ssl-ca = undef
ssl-cert = undef
ssl-key = undef
thread_cache_size = 8
thread_stack = 256K
tmpdir = /tmp
user = mysql

Я пробовал его запускать с --ssl=false, что тоже не дало никакого эффекта.

Прошу идей понять что этому чуду надо и как его запустить.


О системе:

# cat /etc/debian_version 
11.9
# dpkg -l | grep mariadb-server
ii  mariadb-server                 1:10.5.23-0+deb11u1            all          MariaDB database server (metapackage depending on the latest version)
ii  mariadb-server-10.5            1:10.5.23-0+deb11u1            amd64        MariaDB database server binaries
ii  mariadb-server-core-10.5       1:10.5.23-0+deb11u1            amd64        MariaDB database core server files

 ,

Flotsky
()

В продолжение общего направления тем «о нет, ютуб туту...»

Допустим что я выкачал интересный мне кусок ютуба себе локально.
Вместе с видео я скачал всё, до чего только может дотянутся yt-dlp (комментарии, описания, субтитры, отметки глав видео…)

Локально хранить на диске всю эту кучу можно, но ориентироваться по ней крайне не удобно.

Хочется поднять на своих мощностях какой-то сайт похожий на ютуб по функционалу, а именно:

  • Собственно просмотрщик видео
  • Поиск по имени/описанию/…
  • Редактирование данных видео (не самого видео)
  • Хотелось бы иметь возможность сохранить доступ к субтитрам/главам видео
  • Желательно возможность сохранения отношения видео к каналам, но технически можно просто тег повесить этого хватит, хоть и будет не привычно
  • Как дополнительная хотелка поверх всего этого всё тоже самое, но не только для видео, ещё и для фото/музыки(ибо большая часть скачанного с yt это музыка в моём случае)/других типов данных, которые мне вдруг захочется структурировать подобным образом

Вопрос: а есть ли что-то готовое или хотябы близко к готовому под перечисленные хотелки?

ЗЫ. я не против переноса в talks, просто уже начал создавать тут

ЗЫ 2. я спросил гугл и он привёл меня куда-то https://github.com/rr-/szurubooru бегло вроде подходит, но может кто что ещё посоветует

ЗЫ 3. «места не хватит всё скачать» буду игнорировать. Допустим, что мне хватило скачать всё что я хотел

ЗЫ 4. Децентрализованные сети не устраивают, исхожу от идеи: всё, что хранится не у меня я могу в любой момент больше никогда не увидеть.
Ну разве что оно будет локально подтягивать просмотренное мной на удалённых узлах.

ЗЫ 5. Делиться собираюсь только с устройствами в своём intranet

 ,

Flotsky
()

python soap как правильно

Не работал ранее с soap, навскидку подобрал модуль zeep.
В моём видении я могу через get запрос получить объект, модифицировать его и скормить update запросу.

По факту объекты, которые я получею get запросом содержат поля с None элементами и попытка так это передать далее в update запрос приводит к ValidationError. Предполагаю, что я как-то неправильно это использую и накостылил что-то страшное.

Вот «документация» soap https://bolid.ru/files/373/566/IntegrServ.pdf

Вот мой код (частями)

from zeep import Client, xsd
client = Client(soap_addr)
orion_factory = client.type_factory('urn:OrionProIntf')
keys_request = client.service.GetKeys(0, 0, 0, 0, token)

Я получил ключи, отфильтровал нужные мне, теперь надо поменять оставшиеся

for key in filtered_keys:
    # Костыль 1: я заменяю все None на xsd.SkipValue
    # Костыль в том, как я перебираю ключи объекта
    for name, _ in client.type_factory('urn:OrionProIntf').TKeyData.elements:
        if key.__getattribute__(name) is None:
            key.__setattr__(name, xsd.SkipValue)

    # Set key values for block
    key.IsBlocked = True
    key.Comment = key_block_comment

    # Костыль 2: orion_factory.TKeyData(key) не работает
    # Вот это первое, что пришло в голову и сработало
    key_values = [key.__getattribute__(name) for name, _ in client.type_factory('urn:OrionProIntf').TKeyData.elements]
    key_object = orion_factory.TKeyData(*key_values)

    result = client.service.UpdateKeyData(key_object, token)

Может тут найдётся кто с этим модулем работал, скажите как сделать правильно.

PS. Проверки успешности запросов вида if keys_request.Success я опустил.
PPS. Документацию разработчик не особо то и обновляет, параметры методов немного отличаются от описанного, правильные я беру из wsdl документа самого сервиса.

 , ,

Flotsky
()

fanvil autoprovision vpn

Имеется телефон Fanvil X1SP и желание применить ему autoprovision.

Проблема:

Надо чтобы телефон был абы где, поэтому для него сгенерирован ovpn и сертификаты.

Я встал в тупик на моменте заставить телефон при autoprovision выкачать все файлы относящиеся к ovpn.

Откопал документацию (общую для всех телефонов) https://fanvil.com/service/help/faq/knowledge%20base/20220908/8113.html или https://fanvil.com/trydownfile.aspx?id=7557 если откроется
В документации сказано на 21 странице «если вам надо доп файлы, к примеру сертификаты, то передавайте их через Auto etc Url»
НО, мне надо передать 4 файла. Если я указываю опцию 4 раза телефон просто берёт последнюю запись.
Пробовал использовать в качестве разделителя символы [,;] тогда вся строка становится частью URL запроса.
Пробовал делать inline ovpn конфиг и отдавать его, но тогда на стороне телефона ничего не происходит, видимо он ждёт все 4 файла.

Тупик в общем, телефоны уже не новые, беглый поиск меня ни куда не привёл, но может тут кто уже с похожим сталкивался или умеет гуглить лучше чем я

 fanvil,

Flotsky
()

fastapi и динамическая модель

У меня есть структура из 3 таблиц

  • users
  • userFields (ссылается m2o на users, ссылается o2o на userFieldTypes)
  • userFieldTypes

Хочу на стороне fastapi получать и отдавать users сразу с его доп полями, и уже внутри по sql распихивать как мне удобно.

Я сделал так, чтобы pydantic модель User можно было менять, вот мои модели для view стороны

class UserFieldType(BaseModel):  # create and update
    id: Optional[int]
    name: str
    type: str

    @field_validator('type')
    @classmethod
    def validate_type(cls, value):
        if value not in ALLOWED_USER_FIELD_TYPE:
            raise ValidationError(f'type must be one of {list(ALLOWED_USER_FIELD_TYPE.keys())}')
        return value

class User(BaseModel):
    id: Optional[int]
    login: str
    password: str
    description: Optional[str]

    # dynamic extra fields
    @classmethod
    def add_field(cls, name: str, definition: Any, default: Any = ..., optional=True):
        if name in cls.model_fields:
            raise ValueError(f"Field {name} already exist")
        cls.change_field(name, Optional[definition], default, optional)

    @classmethod
    def change_field(cls, name: str, definition: Any, default: Any = None, optional=True):
        if optional:
            definition=Optional[definition]
        new_field = FieldInfo(annotation=definition, default=default)
        cls.model_fields.update({name: new_field})
        cls.model_rebuild(force=True)

    @classmethod
    def delete_field(cls, name: str):
        cls.model_fields.pop(name)
        cls.model_rebuild(force=True)

И для проверки этого всего сделал несколько маршрутов

@router.get("/users", response_model=(List[schemas.view.User]))
def get_users(
        db_session: Session = Depends(session.get_session)
):
    return db_session.query(models.User).all()


@router.post("/users", response_model=schemas.view.User)
def add_user(
        user: schemas.view.User,
        db_session: Session = Depends(session.get_session)
):
    print(user)
    print('tst' in user)
    print(user.tst if 'tst' in user else "")
    print(schemas.view.User.model_fields)
    return user


@router.get("/user/extra_fields", response_model=(List[schemas.db.UserFieldType]))
def get_user_extra_fields(
        db_session: Session = Depends(session.get_session)
):
    return db_session.query(models.UserFieldType).all()


@router.post("/user/extra_fields", response_model=schemas.db.UserFieldType)
def add_user_extra_field(
        field: schemas.view.UserFieldType,
        db_session: Session = Depends(session.get_session)
):
    new_field = models.UserFieldType(**field.model_dump())
    print(schemas.view.User.model_fields)
    schemas.view.User.add_field(field.name, ALLOWED_USER_FIELD_TYPE[field.type])
    db_session.add(new_field)
    db_session.commit()
    print(schemas.view.User.model_fields)
    from app.main import app
    app.openapi_schema = None
    app.setup()
    return new_field

Проблема 1:
Я ожидал, что с изменением модели openapi схему надо будет пнуть и для этого у меня app.setup(), но документация в http:/.../docs' не обновляется.

Проблема 2:
Даже с учётом того, что я изменил модель User (добавив поле tst) fastapi её не подхватывает,
т.е. запрос к post("/users") с данными '{"id": 1, "login": "l1", "password": "p1", "description": "d1", "tst": "t1"}' выполняется, но в полученном объекте нет поля tst, эти данные потеряны. А именно я вижу:

  • print('tst' in user) -> False
  • print(schemas.view.User.model_fields) -> вижу своё новое поле {'id': FieldInfo(annotation=Union[int, NoneType], required=True), 'login': FieldInfo(annotation=str, required=True), 'password': FieldInfo(annotation=str, required=True), 'description': FieldInfo(annotation=Union[str, NoneType], required=True), 'tst': FieldInfo(annotation=Union[str, NoneType], required=True)}

Вопрос, что надо правильно пнуть в fastapi чтобы хотябы пройти проблему №2 ?

 , ,

Flotsky
()

Посоветуйте оконный менеджер

Сейчас использую awesome wm, 3 монитора, планируется прыгать между состояниями 1-2-3 монитора.

Сейчас у меня условно для каждого монитора своя область для окон и 10 тегов для попыток группировки окон по цели их создания.

Хочется чтобы не теги были привязаны к мониторам, а наоборот назначать теги к мониторам.

К примеру в теге 2 я открою 2 терминала с top и sensors, подключу монитор и выставлю соответствие тэга 2 новому монитору.
Потом отключу монитор и мои окна никуда не уедут, а останутся жить в теге 2 и я спокойно смогу переключить этот тег на любой другой монитор.

Сейчас отключение монитора значит, что открытые окна уедут абы куда, перемешаются по тегам + те, что были открыты в режиме maximized вообще оказываются «вне» рисуемой области оставшихся экранов. Надоело мне это.

Есть ли что-то близкое к моим хотелкам? Я не уверен в какую сторону гугл спрашивать, поэтому начал отсюда.

Я пытался подобное реализовать костылями. Сейчас у меня солянка из:

  • Часть окон упакована в Xephyr + скрипт синхронизации буфера обмена поверх всего этого, удобно, но вот на живую окно в/из Xephyr область не перенести
  • Чтобы окна не прыгали я в их области создал виртуальные дисплеи intel VirtualHeads автонастройка + vnc/weylus поверх для доступа

 ,

Flotsky
()

firejail или что-то подобное, но включать ограничения по комманде

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

Пусть скажем CPU у меня резиновый, но вот перезапускать браузер ни как не хочется т.к. потомучто.

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

В голову приходят контейнеры или firejail, но я что-то не вижу там возможности по комманде «зарезать доступ»

Я наверное могу нагородить всякого сам, но уверен, что я такой не первый и тут кто-то уже знает почти готовое решение

 , , ,

Flotsky
()

wireguard делать что-то при появлении peer

Хочу на сервере выполнять скрипт при подключении peer к WG, перерыл документацию wg, вроде нет такого параметра.

Но вдруг я плохо смотрю, или поделитесь идеями как можно того-же добиться. До cron к примеру я додумался, может ещё что-то?

Зачем?
Есть у меня N микротиков за серыми IP и VPS. Читая https://programmerall.com/article/58262052453/ и https://github.com/jwhited/wgsd адаптировал эту конструцию для микротиков.

Теперь надо когда на VPS подключается peer(или когда его endpoint меняется) пройтись по всем доступным на момент микротикам и актуализировать их endpoint.

 ,

Flotsky
()

intel VirtualHeads автонастройка

Добавил себе Option "VirtualHeads" "2", перелогинился, выполнил

$ xrandr --addmode VIRTUAL1 1920x1080
$ xrandr --addmode VIRTUAL2 1920x1080
$ xrandr --output VIRTUAL1 --right-of eDP1
$ xrandr --output VIRTUAL2 --left-of eDP1

Ок, дисплеи появились, пользоваться можно, но на каждый addmode выскакивал вопрос что делать с новым монитором.

Что мне теперь в Xorg.conf накрутить чтобы не надо было каждый раз выполнять команды руками?

Я пробовал «наугад около навскидку нагугленного» вот так

Section "Monitor"
    Identifier "VIRTUAL1"
    Option "LeftOf" "eDP1"
#    Modeline "1920x1080_60.0"  148.35  1920 2008 2052 2200  1080 1084 1089 1125 +hsync +vsync
#     UseModes "1920x1080"
#    Modeline "1920x1080" +hsync -vsync
EndSection

И вот так

Section "Screen"
#    Monitor "VIRTUAL1"
    Identifier "VIRTUAL1"
    SubSection "Display"
        Modes "1920x1080"
    EndSubSection
EndSection

В том числе комбинации параметров из заремаренного. Увы вообще ничего не происходит(не считая syntax error, которые пояснять не надо)

 , , ,

Flotsky
()

Что-то сломали в samba?

manjaro, обновил завалявшийся ПК, поставил samba, простейший конфиг из одного пользователя и шары.

По итогу

smb: \tst\> mkdir 123:
NT_STATUS_OBJECT_NAME_INVALID making remote directory \tst\123:

Не даёт создать файлы с : в имени.

Также не показывал файлы с : в имени пока я не нагуглил, что надо mangled names = no.

Имею на данный момент:

6.3.8-1-MANJARO-ARM
samba 4.18.2-2
# cat smb.conf 
[global]
   workgroup = WORKGROUP
   dns proxy = no
   log file = /var/log/samba/%m.log
   max log size = 1000
   client min protocol = SMB2
   server role = standalone server
   passdb backend = tdbsam
   obey pam restrictions = yes
   unix password sync = yes
   passwd program = /usr/bin/passwd %u
   passwd chat = *New*UNIX*password* %n\n *ReType*new*UNIX*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*
   pam password change = yes
   map to guest = Bad Password
   usershare allow guests = yes
   name resolve order = lmhosts bcast host wins
   security = user
   guest account = nobody
   load printers = no
   disable spoolss = yes
   show add printer wizard = no

[data]
  comment = data
  browseable = no
  path = /mnt
  guest ok = no
  valid users = flotsky
  force user = flotsky
  writable = yes
  create mask = 0755
  directory mask = 0755
  mangled names = no

При этом этот-же конфиг, но на samba 4.17.5-1 прекрасно позволяет создать файлы с : в имени и без всяких mangled names = no прекрасно всё показывает.

Что мне ещё надо включить в конфиге чтобы было как раньше?

 , ,

Flotsky
()

virsh blockresize не умеет в LVM

Есть VM, диски которой находятся на LVM Надо на лету увеличить диск.

Ранее делал # lvextend -L +2G /dev/ и бежал перезапускать VM

Недавно нагуглил, что можно # virsh blockresize my_vm vda --size 5G
Но злобная консоль мне ответила QEMU «block_resize»: Cannot grow device files

Дальнейший гуглинг не даёт ничего адекватного.

Единственное, что нагуглил, это https://github.com/ganeti/ganeti/issues/28 и указание на подключение к некоему socket и отправку туда block_resize с непонятно откуда взятыми ID.
Но у меня нет такого socket и ID я не знаю откуда взять.

 , ,

Flotsky
()

Проброс директории в windows VM

PS нету тега virtiofs, ок использую virtio

Следую инструкциям
https://virtio-fs.gitlab.io/howto-windows.html
https://libvirt.org/kbase/virtiofs.html

По итогу в windows появляется диск, проброшенный с хоста.

Полазить по диску можно, создать директорию можно.
Но стоит начать что-то копировать, не важно в каком направлении, win гость выплёвывает ошибку ввода вывода и диск отваливается. При этом я явно вижу, что один файл скопировался. Т.е. возможно оно виснет на моменте попытки установить права на файл.

В логах windows добрался до сообщения «virtiofs.exe appcrash» без подробностей. И правда, если перезапустить службу, диск опять появляется в госте.

При этом на стороне хоста я не вижу каких либо ошибок.

Есть у кого-то истории успеха? Или идеи куда смотреть?


Хост Linux flotsky-pc 5.18.12-3-MANJARO (да, давно не обновлялся)
Гость w10 pro
qemu запускается от пользователя libvirt-qemu Пробрасываемая директория на хосте имеет права 755 и пользователя/группу libvirt-qemu
XML гостя

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

 , ,

Flotsky
()

Как пользоваться ansible?

Сейчас использую puppet и мне встречаются ситуации вида:

  • Есть ресурс, который надо переодически поправлять(сервис периодически падает и puppet используется для периодического его запуска)
  • Не всегда машина, которая провизируется доступна прямо сейчас (с puppet удобно, агент сам придёт за провизией как только сможет)

А как это реализуется в ansible? Я не встречал ни каких готовых механизмов периодического запуска ansible, как и вообще автоматизации этого запуска. В инструкциях везде «руками» запускают применение.

Складывается ощущение, что пользоваться ansible надо в виде «вот у меня сейчас абсолютно точно доступный сервер, я его один раз спровизирую и более его состояние меняться не будет» и просто перезапускать (вручную) провизирование при каждом изменении.

Что я упускаю?

 ,

Flotsky
()

compressed file as root image

Пытаюсь оттолкнувшись от mkarchiso сделать что-то похожее, но для debian.

Там по ходу сборки происходит
# Create an EROFS image containing the root file system and saves it on the ISO 9660 file system.
Далее в initramfs тут собранный образ монтируется.

Вопрос, можно ли для экономии места так монтировать сжатый образ?

Из явных ответов знаю squashfs, но хочется tar+zstd. Не могу найти как.

Напрашивается идея, которую я использовал ранее для netboot - распаковать образ в tmpfs смонтированный как newroot.
Но это затратно по RAM, хочется именно смонтировать в RO

PS. Вопрос пока просто академический. У меня сейчас нет образа или работающей системы сборки, я просто пытаюсь расширить функционал mkarchiso под свои нужды.

 , ,

Flotsky
()

Переделать «клавиатуру» во что-то ещё и ловить её ввод отдельно

Вот такая штука.

Прикидывается клавиатурой и при считывании карточки просто выплёвывает её номер как будто его на клавиатуре набрали.

Надо как-то убрать этот ввод скажем в файл.

Идеи? Логика подсказывает мне смотреть в сторону udev, но куда я бегло нагуглить не смог.

PS. Есть ПО для настройки из под windows, но оно только формат ввода переключает, ожидал, что можно будет заставить устройство прикидываться com портом, увы нет.


в логе при подключении выглядит так

usb 3-1: new full-speed USB device number 3 using uhci_hcd
usb 3-1: New USB device found, idVendor=ffff, idProduct=0035, bcdDevice= 0.01
usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 3-1: Product: USB Reader
usb 3-1: Manufacturer: USB Reader
usb 3-1: SerialNumber: SN201706VER1
input: USB Reader USB Reader as /devices/pci0000:00/0000:00:05.1/usb3/3-1/3-1:1.0/0003:FFFF:0035.0003/input/input9
hid-generic 0003:FFFF:0035.0003: input,hidraw1: USB HID v1.10 Keyboard [USB Reader USB Reader] on usb-0000:00:05.1-1/input0

 ,

Flotsky
()

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