LINUX.ORG.RU

Сообщения 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
()

odbc segfault

Был debian9, asterisk и postgres. В dialplan запускался скрипт, который внутри силами isql делает пару запросов.

Потребовалось обновиться. Развернул debian11, поставил те-же пакеты для asterisk/postgres/odbc. Конфиги и БД перенёс со старого сервера.

И теперь получаю ситуацию:

Asterisk работает успешно.

isql из консоли запускается, к БД цепляется, запросы выполняет.

Но, как только asterisk из dialplan запускает(SHELL) скрипт, у которого внутри вызов isql, то я ловлю segfault и запросы идут «коту под хвост».

авг 18 23:02:22 pbx kernel: isql[8136]: segfault at 0 ip 00007fb931af7846 sp 00007ffdbae8e4b8 error 4 in libc-2.31.so[7fb931a7f000+14b000]
авг 18 23:02:22 pbx kernel: Code: 0f 1f 40 00 66 0f ef c0 66 0f ef c9 66 0f ef d2 66 0f ef db 48 89 f8 48 89 f9 48 81 e1 ff 0f 00 00 48 81 f9 cf 0f 00 00 77 6a <f3> 0f 6f 20 66 0f 74 e0 66 0f d7 d4 85 d2 74 04 0f bc c2 c3 48 83

Беглый поиск привёл меня к «я дурак криво поставил/настроил odbc», тогда я откатил настройки odbc к по умолчанию и продолжил получать ошибку. Что касается «криво поставил», то тут даже добавить не чего odbc-postgresql из стандартного репозитория врятли может быть «кривым».

Куда ещё можно посмотреть? Складывается ощущение, что я забыл что-то установить, но разве оно не должно было придти в виде зависимостей?


root@pbx:~# cat /etc/odbc.ini
[PostgreSQL-asterisk]
Description         = PostgreSQL connection
Driver              = PostgreSQL ANSI
Trace               = No
TraceFile           = /tmp/psqlodbc.log
Database            = asterisk
Servername          = localhost
UserName            = $login
Password            = $passwd
Port                = 5432
ReadOnly            = No
RowVersioning       = No
ShowSystemTables    = No
ShowOidColumn       = No
FakeOidIndex        = No
ConnSettings        =
...
root@pbx:~# cat /etc/odbcinst.ini 
[PostgreSQL ANSI]
Description=PostgreSQL ODBC driver (ANSI version)
Driver=psqlodbca.so
Setup=libodbcpsqlS.so
Debug=1
CommLog=1
UsageCount=1

[PostgreSQL Unicode]
Description=PostgreSQL ODBC driver (Unicode version)
Driver=psqlodbcw.so
Setup=libodbcpsqlS.so
Debug=0
CommLog=1
UsageCount=1

...

Мой скрипт, который падает будучи запущенным из asterisk dialplan

root@pbx:~# cat /usr/src/recall_me.sh 
#!/bin/bash

NUM=$1
request="select * from recall where number='${NUM}' and status='new'"

result=$(echo "${request}" | /usr/bin/isql PostgreSQL-asterisk $login $passwd -b -d'|' 2>&1)
if [ $? = 0 ]; then
  if [ -z "$result" ];then
    request="INSERT INTO recall(date, number, status) VALUES('$(date +"%F %T")', '${NUM}','new')"
    echo ${request} | /usr/bin/isql PostgreSQL-asterisk $login $passwd -b -d'|' 2>&1
  fi
  exit 0
else
  exit 1
fi

И в dialplan скрипт запускается вот такой конструкцией

exten => 9,3,Set(recall_request=${SHELL(bash /usr/src/recall_me.sh ${CALLERID(num)})})

 , , ,

Flotsky
()

Где должен быть mkdir?

Тестовый debian11 сервер, на котором в виду издевательств на системой как-то оказалось

root@debian:~# which mkdir
/usr/bin/mkdir
root@debian:~# dpkg -S /usr/bin/mkdir
dpkg-query: не найден путь, подходящий под шаблон /usr/bin/mkdir
root@debian:~# dpkg -L coreutils | grep mkdir
/bin/mkdir
/usr/share/man/man1/mkdir.1.gz
root@debian:~# cat /etc/debian_version 
11.4
root@debian:~# ls -lha /usr/bin/mkdir
-rwxr-xr-x 1 root root 84K сен 24  2020 /usr/bin/mkdir
root@debian:~# md5sum /usr/bin/mkdir /bin/mkdir 
e70b34a37b294e638e63fbff22632a90  /usr/bin/mkdir
e70b34a37b294e638e63fbff22632a90  /bin/mkdir

И продакт сервер

root@h398:~# which mkdir
/bin/mkdir
root@h398:~# dpkg -S /bin/mkdir
coreutils: /bin/mkdir
root@h398:~# dpkg -L coreutils | grep mkdir
/bin/mkdir
/usr/share/man/man1/mkdir.1.gz
root@h398:~# cat /etc/debian_version 
11.3

А теперь мне потребовалось сделать /opt/puppetlabs/puppet/bin/gem install ruby-lxc

На тестовом сервере всё ок, а вот на продакт я вижу такую картину

make: /usr/bin/mkdir: No such file or directory
make: *** [Makefile:202: .sitearchdir.-.lxc.time] Error 127

make install failed, exit code 2

Раскопал makefile, да, там явно указано MAKEDIRS = /usr/bin/mkdir -p

Покопался в интернет с похожей ошибкой.

Посмотрел на своей системе(manjaro) $ which mkdir -> /usr/bin/mkdir

Я понимаю, что вроде бы разработчики ожидают что mkdir будет в /usr/bin и что решение ln -s напрашивается. Но в debian это не сделано, в ubuntu судя по всему тоже.

Мне интересно правильнее ли будет править makefile под свою систему? Может я отстал от жизни и надо просто apt upgrade сделать или какой особый пакет доустановить?

PS утащите в talks, если кажется, что там оно более к месту.

 , , ,

Flotsky
()

Звук по сети

Появился у меня второй ПК и наушники подключены то в один ПК, то в другой.

На текущем ПК у меня pulseaudio. На новом хочу попробовать pipewire.

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

В случае pulseaudio всё выглядит просто: module-null-sink + module-rtp-* на обоих сторонах и в pavucontrol меняю default sink для воспроизведения.

pipewire такое уже не умеет, нет альтернатив модулям module-rtp-*.

Способ с module-native-protocol-tcp(env PULSE_SERVER ... или pax11publish) меня не устраивает, это не переключение «на живую».

Note that for the switch to become apparent, the programs using Pulse must be restarted, or their PulseAudio client library otherwise reinitialized (completely stopping and restarting playback may be enough).

К примеру firefox иногда достаточно обновить страницу или приостановить воспроизведение на 10 секунд чтобы «звук заработал». VLC такое не понимает, ему только перезапуск.

Вопрос: я плохо искал и pipewire как-то по другому можно реализовать подобное (чтобы с обоих сторон это были именно виртуальные sink), или оно пока того не стоит и остаться на pulseaudio?

 , ,

Flotsky
()

Перемещать ПО между ПК не закрывая его

Пусть у меня есть скажем 2 ПК и какое-то ПО(браузер/IDE/etc) запущенное на одном из них.

Хочется иметь возможность «перенести ПО» на другой ПК не закрывая его.

К примеру у меня открыт браузер с 5 вкладками на ПК1, я запускаю скрипт, что-то происходит и мой браузер с теми-же вкладками уже работает на ПК2.

При этом:

  • не было перезапуска самого браузера
  • ПК1 не нужен для продолжения работы браузера (т.е. не какая-то обёртка для проброса окна приложения на другой ПК)

Мысли, почему это должно быть возможно и как этому поспособствовать:

  • В lxd заявлена возможность «усыплять»(crio) и переносить контейнеры между узлами
  • Упаковать браузер в контейнер и пробросить ему Xorg и virtualGl сокеты и части ФС хоста считаю более чем возможным, но громоздким, скорее всего можно проще

Вопросы:

  • Кто-то пробовал сделать что-то подобное?
  • Беглый поиск по «сохранить процесс на диск с возможностью дальнейшего восстановления» ведёт в какие-то дебри 2010 годов, оно вообще живое, существует в виде живых утилит?
  • Как вообще себя может повести ПО при попытке восстановления на ПК2, если между ПК [сильно] различаются системы и железо

ЗЫ. Поставить ПК3 и с него «пробрасывать» всё на ПК1 и ПК2 не рассматриваю.

Да, в случае браузера можно закрыть его, перенести профиль на другой ПК и там запустить. Или использовать какую-то стороннюю синхронизацию вкладок/паролей. Хочется именно наогородить чего-то для переноса без закрытия ПО и послушать критику на какие грабли я наступлю в процессе.

 ,

Flotsky
()

ARM mali графикой можно уже пользоваться?

Лежит у меня платка с rk3399, сейчас как хост для lxc контейнеров.

Наткнулся недавно на новости о panfrost драйвере и о различных доработках к rockchip GPU.

Попробовал поставить manjaro, последнее ядро(5.17.что-то.rc), gnome и пакеты mesa-panfrost

С виду окошки отрисовывать оно стало живее чем без mesa-panfrost пакета, судя по dmesg ядро даже увидело и создало интерфейсы для камер.

Но вот, VLC камеры не видит. ffmpeg не может начать с них запись.

Браузер(firefox/chromium) пишет что нашёл gpu, но ускорение использовать не будет.

Вопрос: можно как-то покрасноглазить и заставить это работать, или пусть пока будет как есть lxc-host сервером?

Если кто-то знает в какую сторону красноглазить, направьте.

Я пробовал:

  • Ставить самое свежее ядро из доступных в репозитории
  • Пытался собрать различные версии ffmpeg-v4l2-request-git отсюда с этим PKGBUILD, но без успеха, ошибки сборки.

Думаю я нахватал устаревших инструкций и двигаюсь не в ту сторону.

 , , ,

Flotsky
()

CLI/API к сервисам на python

Есть несколько простых самописных сервисов на python.

Хочется иметь к ним какое-то CLI или API чтобы дёргать внутренние функции.

Но всё, на что я натыкаюсь это flask или подобное ему.

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

Посоветуйте как правильно это делается или где про это почитать?

 , ,

Flotsky
()

Логи из systemd-journald в на удалённый сервер с rsyslog

Есть старый сервер с rsyslog, который собирает логи с нескольких debian машин.

Появилась необходимость логи manjaro систем тоже складывать на этот rsyslog сервер.

Но у manjaro уже нет rsyslog как такового, там systemd-journald.

Что вижу из вариантов:

  • Поставить в manjaro rsyslog(aur) и настроить как обычно, добавив ForwardToSyslog=yes в journald.conf
  • Как-то заставить systemd-journal-upload слать логи на rsyslog сервер

Подскажите, если кто знает о возможности реализации второго варианта, или о подводных камнях первого.

PS. Обновить старый rsyslog до systemd-journal-remote мне не дадут.

 , ,

Flotsky
()

Xephyr 2 окна, но общий display

Делаю

Xephyr -ac  -host-cursor -screen 800x600+0+0 -screen 800x600+800+0 -resizeable :7

Получаю 2 окна, одно :7.0, второе :7.1 Они независимы друг от друга.

Т.е. запускаю DISPLAY=:7 awesome и ожидаю, что у меня будет :7.0 у которого 2 монитора, но по факту получаю просто 2 независимых X сервера.

Если добавить ключ +xinerama, то display manager можно запустить только на :7.0, а :7.1 не декорируется, не управляется мышкой, но рисует продолжение от :7.0

Как это правильно пнуть чтобы оно думало, что у него 2 дисплея? Устроит если дисплей внутри будет один, но разрезанный на 2 окна.

 ,

Flotsky
()

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