пятница, 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