LINUX.ORG.RU

Сообщения samson

 

mikrotik ipsec vs wireguard

Форум — Admin

Доброго времени суток всем!

Есть несколько удаленных «офисов». В основном и еще в одном белая статика, еше в двух просто белый IP, но не статика. Инет в двух офисах 100мБит, в остальных 200+.

Сечас ovpn через tcp. Все коннектятся к основному офису «звездой». Сети везде прописаны разные, прописаны статические маршруты, все работает. Не устараивает скорость, хотелось бы по полной использовать интернет канал. И по возможности соединить не звездой в «все со всем», чтоб не гонять трафик через осоновной офис.

Роутеры rb750gr3 и hap-ac2, где скорость не критична RB951G и hap-lite (в планах заменить). Везде обновил ROS до v7.7.

Собственно вопрос, как лучше завязать, wireguard или ipsec? 750gr3 и ac2 вроде имеют аппаратную поддержку ipsec.

 , ,

samson
()

Посоветуйте USB3 контроллер

Форум — Linux-hardware

Доброго времени суток всем!

Посоветуйте плиз хороший PCI-E -> USB3 контроллер. Надо в серверную мамку воткнуть. Ну и чтоб с linux проблем не было.

Мамка на 2011 сокете, e5-2670v2, intel c602, разьемы: 3x16 PCI-E 3.0 + 3x8 PCI-E 3.0

Заранее спасибо.

 ,

samson
()

Debian Stretch backports фиксация версии ядра

Форум — Admin

Доброго всем времени суток!

Надо зафиксировать определенную версию ядра из бекпортов. Установить и запретить обновлять ядро - это все понятно. Но проблема в следующем - при следующей сборке/установке системы уже не получается подтянуть ядро определенной версии, т.к. оно там уже более свежей версии и старой версии нет (есть только kernel-headers). На сколько я понимаю, в бекпортах политика такая, что ядро постоянно обновляется и старые версии становаятся не доступны. Ядро из stable ветки старовато.

В голову приходит мысль выкачать пакеты linux-image, kernel-headers, linux-kbuild, ну и какие там еще зависимости и ставить их через dpkg -i, либо создать свой репозиторий с этими необходимыми пакетами и оттуда ставить.

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

Ну и где мне взять на данный момент например linux-*-4.15.0-0.bpo.2-amd64.deb (т.е. срез репозиторя на определенное число) и основные зависимости?

Подскажите пожалуйста правильный путь.

 , ,

samson
()

Установка nvidia-driver без карты

Форум — Linux-install

Доброго времени суток всем!

Собираю систему на базе debian stretch c backports. Ставлю драйвер

# uname -a
Linux netlive 4.17.0-0.bpo.1-amd64 #1 SMP Debian 4.17.8-1~bpo9+1 (2018-07-23) x86_64 GNU/Linux

# ./NVIDIA-Linux-x86_64-390.25.run -s

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

ERROR: Unable to load the kernel module 'nvidia.ko'.  This happens most frequently when this kernel module was built against the wrong or improperly configured kernel
       sources, with a version of gcc that differs from the one used to build the target kernel, or if a driver such as rivafb, nvidiafb, or nouveau is present and
       prevents the NVIDIA kernel module from obtaining ownership of the NVIDIA graphics device(s), or no NVIDIA GPU installed in this system is supported by this NVIDIA
       Linux graphics driver release.
       
       Please see the log entries 'Kernel module load error' and 'Kernel messages' at the end of the file '/var/log/nvidia-installer.log' for more information.

С картой на более раннем ядре (4.15) все ставилось. Без карты была эта же ошибка.

Подскажите, есть ли возможность установить nvidia-driver без карты?

В хелпе # ./NVIDIA-Linux-x86_64-390.25.run -A нужного параметра не нашел.

 ,

samson
()

безопасность RDP

Форум — Admin

Доброго времени суток Всем!

Возникла необходимость удаленного подключения/работы к win7x32 машинам. Хотелось бы самым простым стандартным средством средством. В связи с чем появилась пара вопросов:

  1. Как на сегодняшний день обстоят дела с безопастностью RDP?
  2. Какой клиент для Debian использовать? Подойдет ли rdesktop или xrdp (хотелось бы самый простой и стандартный)?

PDP порт win-машин будет светиться наружу. Настравивать планирую как то так:
https://alexmdv.ru/zashhita-rdp-podklyucheniya
https://www.atraining.ru/windows-rdp-tuning/

ps: Сори за офтоп, но все таки ветка admin и вопрос касается так же и клиентна под linux...

pps: Виндой пользуюсь мало, для удаленки обычно использовал teamviewer.

Заранее спасибо!

 , , ,

samson
()

Как отследить, кто отключает dpms?

Форум — Desktop

Доброго времени суток Всем!

Постоянно отключается DPMS, монитор пересает гаситься. xset s activate рабоатет. Делаем:

$ xset dpms 60 180 360 && xset q
.....
Screen Saver:
  prefer blanking:  yes    allow exposures:  yes
  timeout:  0    cycle:  600
.....
DPMS (Energy Star):
  Standby: 0    Suspend: 0    Off: 0
  DPMS is Enabled
  Monitor is On
но через какое-то время (несколько минут):
$ xset -q
DPMS (Energy Star):
  Standby: 0    Suspend: 0    Off: 0
  DPMS is Disabled

В настройках KDE: https://postimg.org/image/diww3r6ol/ Как только нажимем Apply, тоже сразу отключается (DPMS is Disabled). Или KDE как то по другому управляет?

Если сделать sleep 1 && xset s activate - гаснет, но не на долго.

Ухожу в консоль Ctrl+Alt+F1 - все ок, гаснет через какое то время и не включется, пока мышью/клавой не пошевелишь. Так и живем :(

Кто может отключать dpms? В X-ах запущен только chromuim, konsole. Раньше после ребута системы (может достаточно только X-ов) какое то время все работало как надо, а вот потом, не понятно после каких действий начиналось аналогичное поведение. Сейчас даже и не знаю (комп работает 24х7), но все равно рано или поздно проявится.

Знаю что (когда то давно такое наблюдал, сейчас не в курсе), например, mplayer может отключать dpms. Может chromium отключает? Может kde?

Система: свежий debian 9, kde. Проблема наблюдалась и на jessie.

Заранее благодарен за Ваши советы!

ps: год назад тема поднималась, но без результата: перестал отключаться монитор (dpms)

 , ,

samson
()

winbox, запущенный из под wine, стал создавать файлы ~/viw*.tmp. Ранее не наблюдалось.

Форум — Admin

Доброго времени суток Всем!

Собственно, весь вопрос в заголовке топика. Встречалось ли такое поведение кому-либо? Нормально это или нет?

winbox v3.11
RouterOS 6.38.5
wine-1.8.7 (Debian 1.8.7-2)
Debian 9.0

С этими же winbox и ros ранее такого не наблюдалось.

Сама история:

Недавно обнаружил в хоме странный мусор (~/viw*.tmp). И зачем то сразу грохнул, даже не посмотрев что там и откуда оно взялось... Но через некоторое время опять:

~$ find ./ -name 'viw*tmp'
./viw7f02.tmp
./bin/viwa7eb.tmp
./bin/viwa15a.tmp
./viw7e39.tmp
./viwb3c4.tmp
...
Что то подозрительное в home у меня, да еще и *.tmp какое то!

Посмотрел содержимое - похоже на конфиг winbox-а с паролем (в открытом виде), логином, IP роутера итд. Выяснил, что создаются при логине на роутер, при disconnect и при завершении winbox.

Кстати (о паролях):

   ~$ cd /tmp
/tmp$ winbox
/tmp$ ls -la *.tmp

-rw-r--r-- 1 samson samson  37930 Jul 19 08:50 viwbfdc.tmp
-rw-r--r-- 1 samson samson 142136 Jul 19 08:50 viwc6a5.tmp

Посмотрел лог winbox-a в консоли - действительно сохраняет настройки:

saving settings to .\viwbb77.tmp... for C:\users\USERNAME\Application Data\Mikrotik\Winbox\sessions\IP-or-HOST_NAME.viw
Полный лог: https://pastebin.com/fKCwXRVw

Подозреваю, что может не прописан какой-нибудь TMPDIR, либо не может туда писать... Может он и раньше сохранял эти viw*.tmp, только где то в другом месте.

Стартовал и так: ~$ wine C:\\winbox.exe

md5 winbox.exe совпадает со скачаным с https://mikrotik.com/download

PS:

Для работы с RouterOS вполне достаточно и ssh-cli. Наружу светится только ssh, никаких winbox, api, webfig. Ну если уж очень хочется - временно разрешаю извне. С чужых машин через winbox не хожу. Ну нравится/удобно иногда этот winbox...

wine особо никогда не настраивал (поставил и забыл), только для winbox и установлен, по старой привычке (с ноута роутеры раньше так настраивал).

Может есть альтернатива типа winbox4linux (как то давно искал - не нашел)? Или вообще отказаться от него...

 ,

samson
()

emacsclient выйти не убивая соответствующий буфер на сервере

Форум — Development

Доброго времени суток Всем!

собственно сабж

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

ps: alias ec="emacsclient"

pps: можно «оправить файл на редактирование» ec -n file - обычно так и делаю, но как то оно не то...

ppps: выхожу и C-x C-c и C-x # и C-x 5 0 - все одно и то же

 ,

samson
()

soft-raid «миграция» с raid1 на raid10

Форум — Admin

Есть рабочее зеркало на 1Тб на двух одинаковых хардах, поверх него lvm. Есть еще два одинаковых харда по 3Тб. Задача сделать из них raid10 на 2Тб, остаток в зеркало. Поверх всего что получится так же будет lvm.

Получается несколько вариантов разбития дисков:

  1. Зеркальные пары 1 и 2 обединяем в stripe. Тут в зеркалах будут одинаковые диски. Из разделов 3-4 делаем зеркало.
       |---1--||---2--+---3--+---4--|
       |---1--||---2--+---3--+---4--|
    
  2. Зеркальные пары 1 и 4 объединяем в stripe. Тут в зеркалах разные диски. С остатком все аналогично первому случаю.
       |---1--||--2---+--3---+---4--|
       |---1--+---2--+---3--||---4--|
    
  3. Ну и еще такой вариант. Зеркальные пары 1 и 2 объединяем в stripe. Тут вообще хз что с raid10 творится, зато на 4ой паре можно собрать зеркало из разных дисков, ну и 3 тоже под зеркало.
       |---1--||--2---+--3---+---4--|
       |---1--+---2--+---3--||---4--|
    

Что лучше выбрать? Правильно ли я понимаю, что если в «зеркальных парах» стоят разные харды, вероятность выхода из строя сразу двух должна быть меньше? Но стоит ли так делать? Может рассмотреть какие-либо еще альтернативы?

И как правильнее собирать 10ку в этих случаях? Создавать md[1,2]-raid1 и из них создавать md3-raid0 или сразу mdadm --create /dev/md3 --level=10 --raid-devices=4 ... (тут не понятно как указать «зеркальные пары»).

Лично мне больше первый вариант нравится.

Или вообще забить на raid10 и создать +еще одно зеркало на 3Тб:)

--

Диски 1Тб: WDC WD10EZEX-22RKKA0, 3Тб: ST3000DM001-1CH166. Более подробно: https://pastebin.com/JFDHur2j Диски не новые, обе пары использовались до этого как raid1. Кстати, насколько они живые? Вроде ок, но может я что то проглядел. Вывод smartctl: https://pastebin.com/SVCHVwaz

 , ,

samson
()

Препроцессор c/c++. Подстановка/макрогенерация.

Форум — Development

Hi all!

Подскажите плиз как (и реально ли) сделать что то подобное?

#define VARIANT small
// #define VARIANT large                                                                                                                                                                                             

#include "config_##VARIANT##.h"

void main_small() { /* ... */ }
void main_large() { /* ... */ }

int main(void) {
  main_#VARIANT##();
}

пока получается только как то так:

/* g++ -DVARIANT_LARGE test.cpp */

#ifdef VARIANT_LARGE
#include "test_large.h"
#endif

#ifdef VARIANT_SMALL
#include "test_small.h"
#endif

void main_small() { /* ... */ }
void main_large() { /* ... */ }

int main(void) {

  #ifdef VARIANT_LARGE
  main_large();
  #endif

  #ifdef VARIANT_SMALL
  main_small();
  #endif

  return 0;
}

 , ,

samson
()

boost::python Как получить указатель на python функцию и вызвать ее из C++ кода?

Форум — Development

Hi all!!!

  1. Как получить ссылку на python функцию и какой будет ее тип?
  2. Как ее вызвать из C++?
  3. И как получить ссылку на python объект?

Хотелось бы средствами boost::python.

Есть python скрипт в котором определана pyFunc() и строка strA:

import sys, os
sys.path.append(os.getcwd())
strA = "python string"
def pyFunc():
    print('python: pyFunc()')
    return True

Есть C++ код, который выполняет этот код и забирает из окружения python что то:

 /* pytest.cpp */
 /* build: g++ -std=c++1y -fPIC -I/usr/include/python3.4 -lboost_python -lpython3.4m pytest.cpp */
 /* bould: g++ -std=c++1y -fPIC -I/usr/include/python3.4 -lboost_python-py34 -lpython3.4m pytest.cpp */
#include <string>
#include <iostream>
#include <boost/python.hpp>
using namespace boost::python;

int main() {
  try {
    Py_Initialize();
    object main_module = import("__main__");
    object main_namespace = main_module.attr("__dict__");

    object pyScript = exec_file("test.py", main_namespace);

    /* Тут хотелось бы получить ссылку на python строку, а не копировать ее в C++ строку s: */
    std::string s = extract<std::string>(main_namespace["strA"]);
    /* можно так: s = extract<std::string>(main_module.attr("strA")); */

    std::cout << "strA in C++ space: "<< s << std::endl;

    /* Второй вариант, */
    /* тут тоже хочу иметь ссылку на d["strA"], не пойму как привезти тип к std::string&: */
    dict d = extract<dict>(main_module.attr("__dict__"));
    d["strA"] += " +changed in cpp";

    object pyScript1 = exec("pyFunc()\n" /* это вызов pyFunc() из python кода */
                            "strA += ' +changed in python'\n"
                            , main_namespace);

    /* Вот именно поэтому нужна ссылка на pyhon строку: */
    s = extract<std::string>(main_namespace["strA"]);

    std::cout << "strA in C++ space: "<< s << std::endl;


    /* ********************************************************** */
    /* И самый главный вопрос: как мне получить ссылку на pyFunc, */
    /* да еще и вызвать ее из C++ кода???  */
    /* ********************************************************** */

    
    /* Note that at this time you must not call Py_Finalize() to stop the interpreter. This may be fixed in a future version of boost.python. */
    /* http://www.boost.org/doc/libs/master/libs/python/doc/html/tutorial/tutorial/embedding.html */
    /* Py_Finalize(); */
  } catch(error_already_set const &) {
    if (PyErr_ExceptionMatches(PyExc_ZeroDivisionError)) {
      /* handle ZeroDivisionError specially */
    } else {
      /* print all other errors to stderr */
      PyErr_Print();
    }
  }
}

Заранее благодарен за Ваши ответы.

UPD: С вызовом функции разобрался. Не пойму только какой тип. И остался вопрос со ссылкой на strA.

    auto fptr1 = d["pyFunc"];
    std::function<bool()> fptr2(d["pyFunc"]);
    std::cout << bool(fptr1()) << " " << fptr2() <<std::endl;

    std::cout << typeid(fptr1).name() << std::endl;

 , ,

samson
()

Тормозит eclipse

Форум — Development

Hi all!

При добавлении #include <boost/python.hpp> Eclipse начинает жутко тормозить, жрет процессор (процесс java). В итоге выкидывает сообщение:

An internal error occurred during: "Update Monitor".
GC overhead limit exceeded
Торомозить начинает сразу после того как сохраняемся. Другие бибилиотеки boost инклудятся нормально. Причем написанный код (использующий boost::python) собирается и работает норм. Тормозит именно IDE.
В чем может быть дело?

ps: Сори, если это не в раздел development. Но все же вопрос про IDE.

Инфа о системе:

$ cat /etc/debian_version
8.7

$ dpkg -l |grep eclipse
ii  eclipse                                3.8.1-7                               all          Extensible Tool Platform and Java IDE
ii  eclipse-cdt                            8.5.0-1                               all          C/C++ Development Tools for Eclipse
ii  eclipse-cdt-autotools                  8.5.0-1                               all          Autotools support for Eclipse CDT
ii  eclipse-cdt-jni                        8.5.0-1                               amd64        C/C++ Development Tools for Eclipse (JNI)
ii  eclipse-cdt-pkg-config                 1.0.0~git20130115-2                   all          pkg-config support for Eclipse C/C++ development tools
ii  eclipse-cdt-qt                         8.5.0-1                               all          Qt framework support for Eclipse CDT
ii  eclipse-jdt                            3.8.1-7                               all          Eclipse Java Development Tools (JDT)
ii  eclipse-pde                            3.8.1-7                               amd64        Eclipse Plug-in Development Environment (PDE)
ii  eclipse-platform                       3.8.1-7                               amd64        Eclipse platform without development plug-ins
ii  eclipse-platform-data                  3.8.1-7                               all          Eclipse platform without development plug-ins (data)
ii  eclipse-rcp                            3.8.1-7                               amd64        Eclipse Rich Client Platform (RCP)
ii  eclipse-remote-services-api            8.0.0-1                               all          Eclipse Remote Services API

$ dpkg -l |grep boost-py
ii  libboost-python-dev                    1.55.0.2                              amd64        Boost.Python Library development files (default version)
ii  libboost-python1.55-dev                1.55.0+dfsg-3                         amd64        Boost.Python Library development files
ii  libboost-python1.55.0                  1.55.0+dfsg-3                         amd64        Boost.Python Library

$ dpkg -l |grep jdk
ii  default-jdk                            2:1.7-52                              amd64        Standard Java or Java compatible Development Kit
ii  openjdk-7-jdk:amd64                    7u121-2.6.8-2~deb8u1                  amd64        OpenJDK Development Kit (JDK)
ii  openjdk-7-jre:amd64                    7u121-2.6.8-2~deb8u1                  amd64        OpenJDK Java runtime, using Hotspot JIT
ii  openjdk-7-jre-headless:amd64           7u121-2.6.8-2~deb8u1                  amd64        OpenJDK Java runtime, using Hotspot JIT (headless)

$ java -version
java version "1.7.0_121"
OpenJDK Runtime Environment (IcedTea 2.6.8) (7u121-2.6.8-2~deb8u1)
OpenJDK 64-Bit Server VM (build 24.121-b00, mixed mode)

 

samson
()

Boost::python::import не импортируется модуль

Форум — Development

Добрый вечер всем!

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

Задача следующая. Пишем свой модуль для python. Потом в c++ коде выполняем некий python код, использующий этот модуль. Потом надо преобразовать python объекты в c++ объекты.

Вот код:

/// pytest.cpp                                                                                                                                                                                                                                 
/// build: g++ -std=c++1y -fPIC -I/usr/include/python3.4 -lboost_python -lpython3.4m pytest.cpp                                                                                                                                                
/// bould: g++ -std=c++1y -fPIC -I/usr/include/python3.4 -lboost_python-py34 -lpython3.4m pytest.cpp                                                                                                                                           

#include <string>
#include <iostream>
#include <boost/python.hpp>

using namespace boost::python;

int main() {
  try {
    Py_Initialize();
    object main_module = import("__main__");
    object main_namespace = main_module.attr("__dict__");

    // Тут import os нормально отработал                                                                                                                                                                                                       
    object tstObj = exec("print('This is Python code...')\n"
                         "import os\n"
                         "print(os.getcwd())\n",
                          main_namespace);


    // А тут import mymodule не импортирует:                                                                                                                                                                                                   
    object testThree = exec("import mymodule\n"
                            "obj = mymodule.cppClass('i am a string member of cppClass')\n"
                            "obj.print()\n"
                            "\n",
                            main_namespace);

    // Тоже не катит                                                                                                                                                                                                                           
    object mymodObj = import("mymodule");

    // Note that at this time you must not call Py_Finalize() to stop the interpreter. This may be fixed in a future version of boost.python.                                                                                                  
    // http://www.boost.org/doc/libs/master/libs/python/doc/html/tutorial/tutorial/embedding.html                                                                                                                                              
    // Py_Finalize();                                                                                                                                                                                                                          

  } catch(error_already_set const &) {
    if (PyErr_ExceptionMatches(PyExc_ZeroDivisionError)) {
      // handle ZeroDivisionError specially                                                                                                                                                                                                    
    } else {
      // print all other errors to stderr                                                                                                                                                                                                      
      PyErr_Print();
    }
  }
}

$ g++ -std=c++1y -fPIC -I/usr/include/python3.4 -lboost_python -lpython3.4m pytest.cpp && ./a.out
This is Python code...
/home/samson/cppPyhton
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named 'mymodule'

$ python
Python 3.4.2 (default, Oct  8 2014, 10:45:20) 
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import mymodule
>>> obj = mymodule.cppClass('i am a string member of cppClass')
8cppClass::cppClass(std::string)
>>> obj.print()
cppClass::print(): i am a string member of cppClass

import os выполняется нормально, а import mymodule - нет. Модуль mymodule создан и нормально импортируется из python:

Что я не так делаю? Как правильно сделать import?

ps: на всякий случай код модуля тут:
http://pastebin.com/L8VPvZbf
http://pastebin.com/QTqgxLc0

 , ,

samson
()

Вызов Python функций из C++. boost::python, Pyhton C-API.

Форум — Development

Доброго времени суток Всем!

Работаю над проектом, представляющим собой некую систему, собирающую данные с разных устройств. Данные предствлены в виде каналов. Устройства постоянно опрашиваются, данные в каналах обновляются. По происшествию каких-либо событий надо посылать команды на устройства.

Есть неоходимость ввести сценарии работы, определяющие эти события (events) и соответствующие обработчики (handlers). В качестве языка сценариев хочу использовать python.

Небольшое описание:

Сценарий будет представлять из себя python код, содержащийся, например в std::string строке. У него будет функия pyInit(), выполняемая при загрузке сценария. В pyInit() будем создавать события и биндовать на них обработчики. Далее в рабочем цикле C++ сервер будет запускать события, которые могут вызывать обработчики (если событие произошло).

Событие с точки зрения C++ - это объект, содержащий указатель на python функцию, определяющую это событие и указатель на python функцию определяющую обработчик.

На самом деле в C++ будет две основных категории событий cppEvents и pythonEvents. pythonEvents - это как раз те события, которые будут определяться в скрипте. cppEvents - это определенные в C++ события, такие как например eventValueChanged. Т.е. определяем eventBase от которого наследуем eventPython, eventChanged.

Так же в python нужно экспортировать некоторые функции, такие как auto getChannelValue(std::string chName) bool sendCmd(std::sting cmd) и т. д...

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

Вопросы:

  1. Как правильно передать в python скрипт? Те в каком виде у меня должен быть сценарий (например в виде std::string или файла)?
  2. Как вызвать функцию python из C++ кода, не завершая далее python окружения? Что бы в дальнейшем в этом же окружении вызвать другую.
  3. На сколько долгими будут вызовы python функций из C++ кода?
  4. Достаточно ли будет boost::python для реализации этого? Или придется рабоать с Python C-API? Хотелось бы по максммум использовать boost::python, по минимум Python C-API.

Везде описывают как создать C++ модуль для python. Мне же нужно из C++ кода вызывать python функйии, которые будут работать с моими C++ объектами.

Хотелось бы, что бы сценарий выглядел как то так: http://pastebin.com/2ZsiPeFT

В C++ все описано примерно так: http://pastebin.com/HHqbRRVx

Заранее благодарен за ответы!

ps: Если кому удобнее, то приведу код и тут.

# Пример сценария (как хотелось бы)

from mymodule import *
from subprocess import Popen, PIPE

# Вспомогательная функция. Запускает комманду в ОС.
def pExec(cmd):
    try:
        p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=False)
        return p
    except:
        print "Execute error"
        return NULL

# Глобальная переменная. На самом деле нужна static переменная в функии pyEventOne().
# Она будет использоваться для хранения предидущего значения между вызовами pyEventOne()
pVal = getChannelValue("ChName")

# Наше событие.
# Возвращяет true, если оно произошло.
# И если true, то при вызове eventBase->update() будет запущен handler - функция python
# Для простоты описано событие аналогичное eventChanged
def pyEventOne():
    newVal = getChannelValue("ChName")
    if (newVal == pVal):
        return False
    else:
        pVal = newVal
        return True

# Обработчик события.
# Вызывает экспотрированные из C++ методы, и может делать что-то еще.
def handlerOne():
    ev1.LockHanler()
    cppSendCmd("cmd...")
    ev2.UnlockHandler()

# еще один обработчик
def handlerTwo():
    cppSendCmd("cmd...")
    pExec("some system command")

# Функуия, вызываемая при инициализации сценария.
# Создает события, биндует обработчики.
def pyInit():
    # Создает событие (конструирует объект eventChanged)
    # и привязывает его к каналу данных с именем "SomeChannelName".
    # Возвращает объект ev1
    ev1 = CreateChEvent("SomeChannelName")

    # Конструирует объект eventPython
    ev2 = CreatePyEvent(pyEventOne)

    # Передаем в наши объекты указатели на функции обработчики
    ev1.SetHandler(handlerOne)
    ev2.SetHandler(handlerTwo)

    # Пока отключаем обработку события ev2,
    # что бы на него не реагировать раньше времени
    ev2.LockHandler()
//// С++ код (как то так реализованы event-ы):

class eventBase {
public:
  using eventHandler_t = std::function<void()>; /* для примера указал такой тип */
  eventBase();
  virtual ~eventBase();
  void setHandler(eventHandler_t h);
  void lockHandler();
  void unlockHandler();
  bool handlerLocked() const;
  bool update() { /* do something */ return this->run(); };
  int id() const;
protected:
  void runHandler();            /* call python function in python space */
private:
  eventHandler_t handler;       /* pointer to python function */
  bool handlerLock = false;
  virtual bool run() = 0;       /* event function */
  int _id = 0;
};

class eventChanged : public eventBase {
public:
  eventChanged(qc::Channel* ch);
  virtual ~eventChanged();
private:
  qc::Channel* _channel;
  virtual bool run() override;  /* true if value of channel has changed */
};

class eventPython : public eventBase {
public:
  using eventPythonFunc_t = std::function<bool()>; /* тоже для примера */
  eventPython();
  eventPython(eventPythonFunc_t);
  virtual ~eventPython();
  void setFunc(eventPythonFunc_t f) { evFunc = f; }
private:
  eventPythonFunc_t evFunc;
  virtual bool run() override;  /* run python event function, return true if event ocurred */
};

/* events collection. */
class eventsFld {
public:
  friend eventBase;
  static void update() { for (auto ev : events) ev->update(); }
  static auto size() { return events.size(); }
private:
  static std::list<eventBase*> events;
  static int lastid;
  static int  add(eventBase*);     /* use in eventBase::eventBase() */
  static bool remove(eventBase*);  /* use in eventBase::~eventBase() */
};

class scenario {
public:
  scenario(const std::string& );
  void init() {
    try {
      /* run pyInit(): */
      /*   make new events and bind handlers */
    } catch (...) {

    }
  }
private:
  std::string pyScript;
};

/* далее создаем сценарий  */
/* нинциализируем его */
/* а в рабочем цикле вызываем eventsFld::update() - обновляем все события */

 , ,

samson
()

перестал отключаться монитор (dpms)

Форум — Desktop

Доброго времени суток всем!

Перестал отключаться монитор. Не пойму, кто не дает ему это делать.

Вот вывод xset -q:

Keyboard Control:
  auto repeat:  on    key click percent:  0    LED mask:  00000002
  XKB indicators:
    00: Caps Lock:   off    01: Num Lock:    on     02: Scroll Lock: off
    03: Compose:     off    04: Kana:        off    05: Sleep:       off
    06: Suspend:     off    07: Mute:        off    08: Misc:        off
    09: Mail:        off    10: Charging:    off    11: Shift Lock:  off
    12: Group 2:     off    13: Mouse Keys:  off
  auto repeat delay:  660    repeat rate:  25
  auto repeating keys:  00ffffffdffffbbf
                        fadfffefffedffff
                        9fffffffffffffff
                        fff7ffffffffffff
  bell percent:  50    bell pitch:  400    bell duration:  100
Pointer Control:
  acceleration:  20/10    threshold:  4
Screen Saver:
  prefer blanking:  yes    allow exposures:  yes
  timeout:  180    cycle:  600
Colors:
  default colormap:  0x22    BlackPixel:  0x0    WhitePixel:  0xffffff
Font Path:
  /usr/share/fonts/X11/misc,built-ins
DPMS (Energy Star):
  Standby: 600    Suspend: 900    Off: 1200
  DPMS is Enabled
  Monitor is On

делаешю xset s 100 - без результата.

Подскажите плиз, кто сталкивался с данной проблемой.

Заранее спасибо!

ps: система debian jessie, регулярно обновляется

 ,

samson
()

debian 8.3 install не дает создавать разделы ex4

Форум — Linux-install

Доброго времени суток LOR!

Ставлю debian jessie 8.3 c tftp, либо с образа mini.iso - когда компоненты самого инсталлера загружаются по сети.

При разбиении дисков не дает создавать раздел типа ext4. Его просто нет в предлагаемых вариантах. Есть только xfs.

Если сделать автоматическое разбиение, установщик предлагает сделать корень ext4, но при нажатии «применить» не может замонтировать корень. Выдает: the attempt to mount a filesystem with type ext4 in scsi1... Если попытаться изменить тип раздела, то, как и в первом случае, ext4 нет в предлагаемых вариантах.

Если ставить с образа debian-8.2.0-amd64-netinst.iso - то все ОК. Но тут компоненты инсталлера грузяться с CD, а не по сети и версия 8.2, а не 8.3.

Всегда так утсанавливал более ранние версии - все проходило без проблем. Не пойму, в чем сейчас дело...

ps: ставлю на виртуалку. Загружаюсь по сети. Диск не большой - окло 17Гб. Таблица разделов dos (не gpt).

Поиск в инете по запросу «the attempt to mount a filesystem with type ext4 in scsi1» ответа именно на мой вопрос не дает (или не так ищу).

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

Заранее спасибо.

 ,

samson
()

phantomjs не закрывает сокет (CLOSE_WAIT)

Форум — Development

Доброго времени суток!

PhantomJSDriver почему-то не закрывает сокет. После вызова close() и quit() сокет подвисает в состоянии CLOSE_WAIT:

# netstat -alptun
...
tcp        1      0 127.0.0.1:56092         127.0.0.1:2402          CLOSE_WAIT  18946/java      
tcp        1      0 127.0.0.1:36449         127.0.0.1:5734          CLOSE_WAIT  18946/java      
...

Вот кусок кода с закрытием:

try
  {
      final URL url = getCrawlerUrl(httpRequest);
      if (useSnapshot)
          {
              html = readSnapshot(url);
          } 
      if (html == null)
          { 
              driver = new PhantomJSDriver(caps);
              driver.get(url.toString());
              Thread.sleep(500);

              WebDriverWait wait = new WebDriverWait(driver, 2);
              wait.until(ExpectedConditions.invisibilityOfElementLocated(By.cssSelector("div[global-spinner]")));
              html = driver.getPageSource();
              if (useSnapshot)
                  {
                      writeSnapshot(url, html);
                  } 
          }   
  }
catch (Exception ex)
  { 
      ex.printStackTrace();
  }
finally
  {
      if (driver != null)
          { 
              driver.close();
              driver.quit();
          }   
  }

Подскажите, что мы делаем не правильно? Или это прблема самого фантома?

Версия phantomjs:

$ phantomjs -v
1.9.8

$ java -version
java version "1.7.0_79"
OpenJDK Runtime Environment (IcedTea 2.5.6) (7u79-2.5.6-1~deb8u1)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)

ps: Тема началась тут: CLOSE_WAIT сокеты

Вот еще по теме: https://github.com/SeleniumHQ/selenium/issues/1080

 ,

samson
()

CLOSE_WAIT сокеты

Форум — Admin

Здравствуте, уважаемый LOR!

Имеется машина с tomcat7. Там крутится сайтик. Время от времени phantom-ом генерятся статические снимки страниц для роботов + иногда на какие-либо запросы, на которые надо отдать статику результат выполняется phantom-ом и клиенту отдается уже статика.

Все бы ничего, кроме одного НО:

# netstat -alptun
...
tcp        1      0 127.0.0.1:54303         127.0.0.1:24995         CLOSE_WAIT  458/java        
tcp        1      0 127.0.0.1:44742         127.0.0.1:19472         CLOSE_WAIT  458/java        
tcp        1      0 127.0.0.1:37757         127.0.0.1:20600         CLOSE_WAIT  458/java        
...

Их много, и в один прекрасный момент сервак перестает отвечать. Пока не задизейблил ipv6 на lo интерфейсе, сокеты были tcp6, сейчас стали tcp4.

Что можно сделать в данном случае? Для начала хочу уменьшить таймаут ожидания, кстати где?

На момент написания поста tcp_keepalive_time и tcp_keepalive_probes было 7200 и 9, только что изменил на 120 и 3.

ps: на серваке debian jessie

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

 , ,

samson
()

Intel, GPU HANG

Форум — Linux-hardware

Добрый день ЛОР!

Подскажите плиз, решена ли на сегодня данна проблема?

Может вообще практически не проявляться, может через каждые 2 минуты. Вот что в dmesg сыпется:

409911.912736] [drm] stuck on render ring
[409911.913608] [drm] GPU HANG: ecode 0:0x87d3bffa, in kwin [1803], reason: Ring hung, action: reset
[409913.912137] [drm] Enabling RC6 states: RC6 on, RC6p off, RC6pp off
[410052.865618] [drm] stuck on render ring
[410052.866509] [drm] GPU HANG: ecode 0:0x87d3bffa, in kwin [1803], reason: Ring hung, action: reset
[410054.865084] [drm] Enabling RC6 states: RC6 on, RC6p off, RC6pp off
[410114.832917] [drm] stuck on render ring

Система: debian 8.2, ядро 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u5 (2015-10-09) x86_64 GNU/Linux

Так и не пойму, есть решение или нет?

 , , , ,

samson
()

отсутствует /etc/init.d/vboxautostart-service

Форум — Admin

Нуно сделать автозапуск виртуалок VirtualBox. Делал так: https://forums.virtualbox.org/viewtopic.php?f=7&t=65194#p307437 Проблема в том, что у меня отсутствует vboxautostart-service.

Создал вручную следующего содержания: http://pastebin.com/LqMSyNKb (не вникал, взял где то в инете)

При попытке запуска выдает:

# /etc/init.d/vboxautostart-service start
[....] Starting vboxautostart-service (via systemctl): vboxautostart-service.serviceFailed to start vboxautostart-service.service: Unit vboxautostart-service.service failed to load: No such file or directory.
 failed!

Что я делаю не так?

Система: debian 8.2, vbox 4.3.32

 ,

samson
()

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