пятница, 11 мая 2018 г.

SmartBox Pro beeline, как добавить wan в свитч.

Понадобилось сделать из SmartBox pro обычный свитч, но было неприятно оставлять порт WAN неиспользуемым. Мануал для тех кто разбирается как на этой точке доступа попасть в ssh консоль.

Суть в том что надо добавить eth2.2 (wan) в бридж br0 и тогда все 5 простов будут просто свитчом.
Предварительно надо снять галки на всех wan подключениях, отключить dhcp и выставить статику в настройках LAN., а так же включить доступ по SSH
логинимся
  ssh SuperUser@192.168.1.2
  sh
  brctl addif br0 eth2.2


Сделал страницу для быстрого включения

mount -o rw,remount /
vi /usr/www-ap/test.cgi

#!/bin/sh
PATH=PATH:/usr/bin:/usr/sbin:/bin
echo "Content-type: text/html"
echo ""         
                       
#echo "<br>$QUERY_STRING"
                                         
if [ "$QUERY_STRING" == "switch=1" ]; then
  brctl addif br0 eth2.2               
fi                                     
                                         
if [ "$QUERY_STRING" == "switch=0" ]; then
  brctl delif br0 eth2.2               
fi                                     
                                       
wanb=$(brctl show br0|grep eth2.2|wc -l)
                         
if [ $wanb -eq 1 ]; then                         
  action="wan switched <a href="?switch=0">DEL</a>"                         
else                                                 
  action="wan not switched <a href="?switch=1">ADD</a>"                     
fi                                           
                                             
cat <<EOF                                   
<html>                                       
<head>                                       
</head>                                     
<body>                                       
<h3>Current WAN status<h3>             
<div>                                       
<b>${action}</b>                                   
</div>                                             
<div>                       
<a href="?">refresh status</a>
</div>
</body>
</html>

EOF

среда, 20 сентября 2017 г.

Как перейти без переустановки с linuxmint на ubuntu и обновить с 16.04 до 17.04, успешный эксперимент

Решил обновиться на свежую убунту с linuxmint.
В инете решения не нашел, поэтому мой эксперимент выглядит так.

/etc/linuxmint/mintSystem.conf
[global]
enabled = False
[restore]
lsb-release = False
etc-issue = False

перегрузиться
reboot

apt install base-files/xenial

/etc/apt/sources.list.d/official-package-repositories.list
# comment this
# deb http://packages.linuxmint.com sonya main upstream import backport #id:linuxmint_main

apt update

/etc/update-manager/release-upgrades
Prompt=normal

do-release-upgrade

теперь долго ждем завершения обновления и время от времени жмем Y

продолжение после перезагрузки... ;)

Перезагрузка прошла успешно!

lsb_release -a

Distributor ID: Ubuntu
Description: Ubuntu 17.04
Release: 17.04
Codename: zesty

uname -a                                                                                                                                                    
Linux devhost 4.10.0-35-generic #39-Ubuntu SMP Wed Sep 13 07:46:59 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

P.S. Если сломался регулятор звука в xfce, то заменить регулятор на версию PulseAudio и
apt install pavucontrol

четверг, 25 февраля 2016 г.

Запуск только одной задачи на celery в один момент времени

Бывают задачи которые должны работать в одном экземпляре в данный момент.
В моем случае это была генерация прайсов.
Простой декоратор для задач не требущий никаких дополнительных файлов блокировок и серверов типа memcache и т.д.
Перед выполнением задачи смотрит на список запущенных задач в celery и если задача уже запущена с такими же аргументами, то не запускает выполнение.

https://gist.github.com/WorldException/9ce045f61627e6fa8d59

четверг, 18 февраля 2016 г.

mysql и много insert-ов с помощью sqlalchemy, ускоряемся.

Как то потребовалось мне сделать генерацию пары десятков прайсов, да хранить их всех в одной таблице. А прайсы были большие по паре сотен тысяч записей в каждом. Да и обновлять их надо минимум раз в час.
Попытки вставки в цикле обычным insert привело к тому что 10 тыс. записей вставлялось примерно минут 15.
В общем правильный путь вставки за несколько секунд полного прайса оказался следующим.

sqlalchemy:

  1. class Price(base):
  2.     __tablename__ = 'prices'
  3.     ....
  4. s = session()
  5. buffer = []
  6. for item in items:
  7.    ...
  8.    buffer.append({'name':.., 'price':...})
  9. s.bulk_insert_mappings(Price, buffer)
  10. s.commit()

Так подсказывают делать все примеры и это правильно. Должен по идее выполниться pymysql.cursor.executemany(). Но как оказалось в последней версии pymysql есть ошибка, executemany не распознает конструкцию INSERT ... VALUES (%(name)s, %(price)s) и делает в цикле запрос на каждую запись, т.е. получаем те же тормоза.
После небольшого патча pymysql все встает на свои места.
Готовую версию можно взять так
  1. #!/bin/bash
  2. git clone https://github.com/WorldException/PyMySQL.git
  3. pip uninstall pymysql
  4. cd PyMySQL
  5. python setup.py install


Патч выглядит так
pymysql/cursor.py

-RE_INSERT_VALUES = re.compile(r"""(INSERT\s.+\sVALUES\s+)(\(\s*%s\s*(?:,\s*%s\s*)*\))(\s*(?:ON DUPLICATE.*)?)\Z""",
+RE_INSERT_VALUES = re.compile(r"""(INSERT\s.+\sVALUES\s+)(\(\s*(?:%s|%\(.+\)s)\s*(?:,\s*(?:%s|%\(.+\)s)\s*)*\))(\s*(?:ON DUPLICATE.*)?)\Z""",
ВНИМАНИЕ!
Мой патч приняли в основную ветку PyMySQL начиная с версии 0.7.2, так что вам достаточно обновиться!

Еще важный момент настройки MySQL который позволил мне избежать постоянных deadlock при параллельной вставке и ускорить вставку на порядок. Это разбивка таблицы на партиции по ключу, в моем случае это было имя прайса. Выглядит это примерно так: 

PARTITION BY KEY (unikey) PARTITIONS 100

А так же 

DELAY_KEY_WRITE=1

вторник, 25 марта 2014 г.

Отображение русских букв в TIpHtmlPanel freepascal

Требуется заменить одну строку в исходниках что бы заработало нормальное отображение кирилицы в компоненте.
И мой вам совет, используйте CodeTyphon от pilotlogic. Это очень удобная сборка freepascal со всеми немыслимыми компонентами.

 IpHtml.pas
procedure TIpHtml.Parse;
{$IFDEF IP_LAZARUS}
var
  ch1,ch2,ch3: AnsiChar;
{$ENDIF}
begin
  Getmem(TokenStringBuf, 65536);                                       {!!.01}
  try                                                                  {!!.01}
    CharSP := 0;
    ListLevel := 0;
    StartPos := CharStream.Position;
    {$IFDEF IP_LAZARUS}
    FDocCharset := 'UTF-8';//'ISO-8859-1';   

вторник, 19 ноября 2013 г.

производительность xen и hyper-v для windows 2003 и 1C 7.7

Тестовые виртуалки Win2003 x64 ent + sql 2005 x64 std + 1cv7.7 sql
Тестировал на максимальную производительность с 1С 7-кой
Результаты проведения одного месяца

Citrix XEN 6.2
Две виртуалки: терминалка и SQL - 2:40 ч
Одна виртуалка SQL + 1C        - 2:30
Оптимизация путем закрепления физических ядер за Dom0 и за каждым VCPU - 2:10 ч

HYPER-V 2012
Одна виртуалка SQL + 1C       - 2:30 ч

Без использования виртуализации - 50 мин


суббота, 2 ноября 2013 г.

Разгон core quad 9300

Зря я раньше относился к вопросу разгона компа с недоверием. Эффект очень положительный
Разогнал core quad 9300 2.5 GHz до 3 GHz и заодно поставил работать память в её максимальной частоте 800 МГц. Ну и на десерт собрал из 4 дисков рэйд 10 на встроенном в материнку рэйд контролере. при тестировании на скорость запись чтение он показа примерно 100МБ/с. Отзывчивость системы улучшилась в разы. Впринципе можно нормально жить без SSD

четверг, 31 октября 2013 г.

Производительность XEN в примере 1С 7.7

В кратце.
Установлен Citrix XEN 6.2. Интересовала скорость проведения месяца.
1. Без виртуализации - 1 час
2. Без виртуализации на сервере только MSSQL, клиентская часть на компе в сети - 2 ч.
3. Xen с настройками по умолчанию - 2:30 ч
4. Xen  с закрепленными ядрами за Dom0 и каждой виртуалкой - 2 ч

Интересно сколько выжмет VMWare и Hyper 2012...
Интересная особенность проброса Hasp key для 1С под Xen.
Пробовал пробросить ключи на двух серверах
  HP DL380 G7
и
 Manufacturer: Intel Corporation
        Product Name: S2600GZ
        Version: G11481-352
        Serial Number: QSGR21500392
Сервер первый HP.
Несмотря на множество показанных USB контролеров, пробрасывается только все целиком. Т.е. можно пробросить только один ключ в одну виртуалку со всеми остальными портами и при этом ключ начинает работать только если его подключить через ВНЕШНИЙ УСБ ХАБ!!.

Сервер второй Intel
lspci показал всего два контролера УСБ и в итоге они успешно были проброшены в разные виртуалки и работают без всяких извращений и хабов. На серваке удалось так завести два ключа. Один серверный и пользовательский.
Формирование запрос СКД вручную

Модуль формы
&НаСервере
Процедура ПодготовитьЗапросКВыполнению()
    Отчет = РеквизитФормыВЗначение("Объект");   
    СхемаКомпоновкиДанных = Отчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");   
   
    ТЕКСТЗАПРОСА = СхемаКомпоновкиДанных.НаборыДанных[0].Запрос;

    Расшифровка = Новый ДанныеРасшифровкиКомпоновкиДанных;
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетОформления = Новый МакетОформленияКомпоновкиДанных;
    МакетКомпоновки   = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Отчет.КомпоновщикНастроек.ПолучитьНастройки(),Расшифровка,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    //МакетКомпоновки   = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Отчет.КомпоновщикНастроек.ПолучитьНастройки(),,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
   
    Процессор = Новый ПроцессорКомпоновкиДанных;
    Процессор.Инициализировать(МакетКомпоновки,,Расшифровка);
   
    Вывод = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений();
    тз = Новый ТаблицаЗначений;
    Вывод.УстановитьОбъект(тз);
    Вывод.Вывести(Процессор,Истина);
    Сообщить(тз.Количество());
КонецПроцедуры

// Важный момент, иначе будет ругаться на "Макет1" и возращать пустые данные
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Отчет = РеквизитФормыВЗначение("Объект");   
    СхемаКомпоновкиДанных = Отчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");   
    //Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
    Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
    ЗначениеВРеквизитФормы(Отчет,"Объект");
КонецПроцедуры

пятница, 25 октября 2013 г.

Надо будет на выходных поставить steam и родные дрова на видюху.
http://steamcommunity.com/app/221410/discussions/0/882965118613928324

Поставил.
Результат теста в World Of Tanks до 50 fps, не очень впечатляющие результаты. С glxinfo при  этом все в порядке. Причем glxgears выдал то же около 50 fps. Наверное что то не так с моими руками или сборкой debian.
Но на wine нельзя грешить, он и так слишком прекрасен.

четверг, 24 октября 2013 г.

Попытка поставить debian на встроенный в материнке raid1 (intel matrix raid) завершилась провалом на установке загрузчика.
Если используем lvm, то загрузчик надо ставить на раздел не в lvm.
После установки на обычный раздел в raid1 и попытки загрузится вывалится ошибка modprobe: module dm-raid45 not found in modules.dep, на неё можно не обращать внимания.
Потом оно вас пошлет в консоль, т.к. не найдет устройство для загрузки.
Что бы все починить при попадании в меню загрузки заходит в параметры "e" и правим ...
root=UUID=... -> root=/dev/mapper/isw_cgffhjdeb_Volume01 или что там у вас в качестве рэйда

После того как система загрузилась, надо раскоментировать в /etc/default/grub строку вида ...DISABLE_UUID..=true
и в командной строке под рутом естественно update-grub.

при установке ubuntu спасло это http://www.dangibbs.co.uk/journal/repair-restore-grub-2-with-ubuntu-10-04-live-cd
только в статье не указано что надо еще mount --bind /sys /mnt/sys

вторник, 22 октября 2013 г.

Убил сегодня local storage на xen
в общем путь пересоздания примерно такой. Естественно что это удалит содержимое. (но у меня уже был заготовлен бэкап виртуалки)

pvcreate /dev/sda3

vgcreate XSlkjlkj /dev/sda3

xe sr-create host-uuid=2585f1ff-2c0c-4fe3-9e90-a6cd41e6a3ea content-type=user name-label="Local storage" shared=false device-config:device=/dev/disk/by-id/cciss-3600508b1001cccf54193339e1d6756e0-part3 type=ext

xe pbd-create host-uuid=2585f1ff-2c0c-4fe3-9e90-a6cd41e6a3ea sr-uuid=c7c786d9-b228-ddef-de84-6eca846c0b4d device-config:device=/dev/disk/by-id/cciss-3600508b1001cccf54193339e1d6756e0-part3

и в конце не забыть почистить старые xe sr-forget... & xe pbd-destroy...

понедельник, 21 октября 2013 г.

Заделал скрипт для быстрой установки обновлений Citrix Xen 6.2
Само содержимое скрипта http://pastebin.com/CRP4QUd7
Использовать так:
Зайти в консоль под рутом и 
python install_update.py XS62E001.zip

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

среда, 16 октября 2013 г.


Нужная информация по Citrix XEN

При переносе виртуалок с HP на Intel пригодилось это
http://xen.xensource.com/download/xcp/releasenotes_1.6.0.html
When using Single Root I/O Virtualization (SR-IOV) enabled Intel NICs, the creation of Virtual Functions (VFs) has been disabled by default in the driver. This will mean that any VMs with VFs passed through will refuse to boot. You may see an error such as xenopsd internal error: Unix.Unix_error(19, "write", ""). To fix this, you must edit /etc/modprobe.d/igb (for Intel 1GBe NICs) or /etc/modprobe.d/ixgbe (for Intel 10GBe NICs), and uncomment the line that looks like this: #options igb max_vfs=7,7,7,7 or #options ixgbe max_vfs=40,40. [CA-89008]. 

Введение

Буду публиковать здесь то что пригодилось. Основная тематика будет IT