пятница, 16 ноября 2012 г.

среда, 9 марта 2011 г.

Арифметические операции с переменными в bash

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

$[$OPER1 + $OPER2]
где
OPER1 - имя первого операнда выражения.
OPER2 - имя второго операнда выражения.
+ - арифметическая операция.

Пример:
bash-3.00$ OPER1=100
bash-3.00$ OPER2=20
bash-3.00$ echo $[$OPER1+$OPER2]
120
bash-3.00$ echo $[$OPER1-$OPER2]
80
bash-3.00$ echo $[$OPER1/$OPER2]
5
bash-3.00$ echo $[$OPER1*$OPER2]
2000
bash-3.00$ echo $[$OPER1%$OPER2]
0

вторник, 22 февраля 2011 г.

Проблема с запуском apache2 на solaris 10

После установки apache2 на solaris 10, если использовать стандартную конфигурацию появляется критическая ошибка:
[Tue Feb 22 10:41:56 2011] [alert] (22)Invalid argument: setgid: unable to set group i
d to Group 4294967295

Если внимательно почитать комментарии в конфигурационном файле можно найти и причину этого
# NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET)
# when the value of (unsigned)Group is above 60000;
# don't use Group #-1 on these systems!

Что в буквальном переводе означает
Некоторые типы ядер операционных систем не поддерживают системные вызовы setgid(Group) или semctl(IPC_SET) в случае, если значение параметра Group более 60000. Не используйте директиву Group #-1 на этих ОС

Таким образом причина ошибки связана с несовместимостью системного вызова на solaris.

Для исправление этой ошибки необходимо вручную создать группу/пользователя под которым будет выполняться apache2.

Например так:
useradd -s /bin/true apache2user
groupadd apache2group
usermod -g apache2group apache2user

Теперь соответственно изменяем директивы в httpd.conf на
User apache2user
Group apache2group

Одно замечание - необходимо поменять хозяени папок apache2 на нашего пользователя apache2user:

chown -R $PATH_TO_APACHE apache2user
chgrp -R $PATH_TO_APACHE apache2group

четверг, 9 декабря 2010 г.

SMPP - краткое описание на русском

Описание

SMPP протокол, который используется мобильными операторами для организации службы коротких сообщений (SMS).
Согласно своему имени протокол SMPP определяет клиента (ESME) и сервер (часто называемого SMSC).
Клиент инициализирует TCP соединение и выполняет команду bind для организации соединения со специфичными параметрами.
Схемы соединения клиента:
1. receiver — клиент может только получать сообщения от SMSC.
2. transmitter — клиент может только отправлять сообещения на SMSC
3. transceiver — клиент осуществляет двухстороннюю передачу сообщений.

Таким образом для организации двухстороней передачи сообщений можно либо установить соединение тип transceiver, либо устанавливать 2 соединения типов transmitter и receiver.



Для завершения SMPP сессии используется команда unbind.

После установки SMPP соединения происходит обмен сообщениями, называемыми PDU (protocol data unit). Общение между клиентом и сервером происходит по принципу запрос-ответ (request-response). Запросы содержат в себе определенное уникальное в данной сессии число, и в свою очередь ответные PDU, содержат в себе то же самое число — благодаря этому механизму возможна асинхронная передача сообщений.

Протоколом определены несколько команд для отправки разных типов сообщений, замены и отмены ранее отправленных сообщений и т. д. Наиболее часто используемой из них командой является submit_sm — отправка простого текстового сообщения. Ответом на эту команду является PDU submit_sm_resp. Отчет о доставке сообщения посылается в виде PDU deliver_sm.

Также стоит сказать про ограничение длины SMPP сообщений. В протоколе SMPP, длина поля short_message ограничена 254 байтами, однако нижележащие протоколы накладывают другие требования. Например GSM ограничивает длину коротких сообщений в 140 байт.

Пример организации соединения и отправки текстового сообщения на языке Perl с использованием модуля Net::SMPP

#!/usr/bin/perl -w

use strict;
use Net::SMPP;

#Номер от которого отправляется СМС
my $SMPP_SOURCE_ADDR='FROM';
#Номер кому отправляется СМС
my $SMPP_DEST_ADDR='79000000000';

#Инициируем соединение типа transceiver
#В параметрах указываем system_id и password - аналог имени пользователя и пароля для аутентификации на SMSC
#адрес и порт, с которым соединяемся и версию протокола SMPP
my $smpp = Net::SMPP->new_transceiver('192.168.1.1',
system_id => 'username',
password => 'password',
port => '2775',
smpp_version=> 0x34
)
or die "Can't connect to SMSC: $!";

&send_message($SMPP_SOURCE_ADDR, $SMPP_DEST_ADDR, 'Hello SMS!!!');


#Процедура отправки сообщения submit_sm
#В параметрах send_message передаем адрес отправителя, адрес получателя, то есть его номер телефона и текст
#сообщения
#Параметры source_addr_ton, source_addr_npi, dest_addr_ton, dest_addr_npi определяют дополнительные параметры
#адресов отправителя и получателя. Подробнее о них в спецификации протокола SMPP.
sub send_message {
my ($sm_source_addr, $sm_dest_addr, $sm_message) = @_;
my $result = eval {
my $pru = $smpp->submit_sm(
source_addr_ton => 0x05,
source_addr_npi => 0x01,
source_addr => $sm_source_addr,
dest_addr_ton => 0x01,
dest_addr_npi => 0x01,
destination_addr => $sm_dest_addr,
data_coding => 0x01,
short_message =>$sm_message
) or return 1;
return 0;

};
if ($result == 1){
"Can't send message: $!";
}

}

#Разрываем соединение с SMSC
$smpp->unbind();


Где-то уже не помню где  нашел неофициальный перевод спецификации протокола SMPP на русский, вот он.
Если найдется его автор, скажу большое спасибо ))).

вторник, 7 декабря 2010 г.

Простейшая конфигурация mod_proxy

Представим ситуацию:
У нас стоит веб-сервер, смотрящий в интернет, и внутренний ресурс внутри корпоративной сети. Появляется задача предоставления доступа к некоторым ресурсам внутреннего веб-сервера в интернет.
Если в качестве внешнего веб-сервера используется apache, то для этих целей можно и нужно использовать модуль mod_proxy. Насколько мне помниться во всей 2 линейке (apache2) модуль является встроенным и активируется при компиляции
./configure --enable-proxy

Простейшая настройка:

В httpd.conf добавляем следующие директивы:

ProxyRequests On

Order deny,allow
Allow from all

ProxyPass /external_site/ http://internal_site/

Здесь Мы указываем - что веб-сервер пропускал запросы вида /external/ и перенаправлял на url http://internal_site/

Вот в принципе для начала и все.

Полное описание директив здесь

понедельник, 6 декабря 2010 г.

Таблица HTML escape символов

Symbol Code Entity Name
™
€
Space    
! !
" " "
# #
$ $
% %
& & &
' '
( (
) )
* *
+ +
, ,
- -
. .
/ /
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
: :
; &#59;
< &#60; &lt;
= &#61;
> &#62; &gt;
? &#63;
@ &#64;
A &#65;
B &#66;
C &#67;
D &#68;
E &#69;
F &#70;
G &#71;
H &#72;
I &#73;
J &#74;
K &#75;
L &#76;
M &#77;
N &#78;
O &#79;
P &#80;
Q &#81;
R &#82;
S &#83;
T &#84;
U &#85;
V &#86;
W &#87;
X &#88;
Y &#89;
Z &#90;
[ &#91;
\ &#92;
] &#93;
^ &#94;
_ &#95;
` &#96;
a &#97;
b &#98;
c &#99;
d &#100;
e &#101;
f &#102;
g &#103;
h &#104;
i &#105;
j &#106;
k &#107;
l &#108;
m &#109;
n &#110;
o &#111;
p &#112;
q &#113;
r &#114;
s &#115;
t &#116;
u &#117;
v &#118;
w &#119;
x &#120;
y &#121;
z &#122;
{ &#123;
| &#124;
} &#125;
~ &#126;
Non-breaking space &#160; &nbsp;
¡ &#161; &iexcl;
¢ &#162; &cent;
£ &#163; &pound;
¤ &#164; &curren;
¥ &#165; &yen;
¦ &#166; &brvbar;
§ &#167; &sect;
¨ &#168; &uml;
© &#169; &copy;
ª &#170; &ordf;
« &#171;
¬ &#172; &not;
­ &#173; &shy;
® &#174; &reg;
¯ &#175; &macr;
° &#176; &deg;
± &#177; &plusmn;
² &#178; &sup2;
³ &#179; &sup3;
´ &#180; &acute;
µ &#181; &micro;
&#182; &para;
· &#183; &middot;
¸ &#184; &cedil;
¹ &#185; &sup1;
º &#186; &ordm;
» &#187; &raquo;
¼ &#188; &frac14;
½ &#189; &frac12;
¾ &#190; &frac34;
¿ &#191; &iquest;
À &#192; &Agrave;
Á &#193; &Aacute;
 &#194; &Acirc;
à &#195; &Atilde;
Ä &#196; &Auml;
Å &#197 &Aring;
Æ &#198; &AElig;
Ç &#199; &Ccedil;
È &#200; &Egrave;
É &#201; &Eacute;
Ê &#202; &Ecirc;
Ë &#203; &Euml;
Ì &#204; &Igrave;
Í &#205; &Iacute;
Î &#206; &Icirc;
Ï &#207; &Iuml;
Ð &#208; &ETH;
Ñ &#209; &Ntilde;
Ò &#210; &Ograve;
Ó &#211; &Oacute;
Ô &#212; &Ocirc;
Õ &#213; &Otilde;
Ö &#214; &Ouml;
× &#215; &times;
Ø &#216; &Oslash;
Ù &#217; &Ugrave;
Ú &#218; &Uacute;
Û &#219; &Ucirc;
Ü &#220; &Uuml;
Ý &#221; &Yacute;
Þ &#222; &THORN;
ß &#223; &szlig;
à &#224; &agrave;
á &#225; &aacute;
â &#226; &acirc;
ã &#227; &atilde;
ä &#228; &auml;
å &#229; &aring;
æ &#230; &aelig;
ç &#231; &ccedil;
è &#232; &egrave;
é &#233; &eacute;
ê &#234; &ecirc;
ë &#235; &euml;
ì &#236; &igrave;
í &#237 &iacute;
î &#238; &icirc;
ï &#239; &iuml;
ð &#240; &eth;
ñ &#241; &ntilde;
ò &#242; &ograve;
ó &#243; &oacute;
ô &#244; &ocirc;
õ &#245; &otilde;
ö &#246; &ouml;
÷ &#247; &divide;
ø &#248; &oslash;
ù &#249; &ugrave;
ú &#250; &uacute;
û &#251; &ucirc;
ü &#252; &uuml;
ý &#253; &yacute;
þ &#254; &thorn;
ÿ &#255;
Ā &#256;
ā &#257;
Ă &#258;
ă &#259;
Ą &#260;
ą &#261;
Ć &#262;
ć &#263;
Ĉ &#264;
ĉ &#265;
Ċ &#266;
ċ &#267;
Č &#268;
č &#269;
Ď &#270;
ď &#271;
Đ &#272;
đ &#273;
Ē &#274;
ē &#275;
Ĕ &#276;
ĕ &#277
Ė &#278;
ė &#279;
Ę &#280;
ę &#281;
Ě &#282;
ě &#283;
Ĝ &#284;
ĝ &#285;
Ğ &#286;
ğ &#287;
Ġ &#288;
ġ &#289;
Ģ &#290;
ģ &#291;
Ĥ &#292;
ĥ &#293;
Ħ &#294;
ħ &#295;
Ĩ &#296;
ĩ &#297;
Ī &#298;
ī &#299;
Ĭ &#300;
ĭ &#301;
Į &#302;
į &#303;
İ &#304;
ı &#305;
IJ &#306;
ij &#307;
Ĵ &#308;
ĵ &#309;
Ķ &#310;
ķ &#311;
ĸ &#312;
Ĺ &#313;
ĺ &#314;
Ļ &#315;
ļ &#316;
Ľ &#317
ľ &#318;
Ŀ &#319;
ŀ &#320;
Ł &#321;
ł &#322;
Ń &#323;
ń &#324;
Ņ &#325;
ņ &#326;
Ň &#327;
ň &#328;
ʼn &#329;
Ŋ &#330;
ŋ &#331;
Ō &#332;
ō &#333;
Ŏ &#334;
ŏ &#335;
Ő &#336;
ő &#337;
Π&#338;
œ &#339;
Ŕ &#340;
ŕ &#341;
Ŗ &#342;
ŗ &#343;
Ř &#344;
ř &#345;
Ś &#346;
ś &#347;
Ŝ &#348;
ŝ &#349;
Ş &#350;
ş &#351;
Š &#352;
š &#353;
Ţ &#354;
ţ &#355;
Ť &#356;
ť &#357
Ŧ &#358;
ŧ &#359;
Ũ &#360;
ũ &#361;
Ū &#362;
ū &#363;
Ŭ &#364;
ŭ &#365;
Ů &#366;
ů &#367;
Ű &#368;
ű &#369;
Ų &#370;
ų &#371;
Ŵ &#372;
ŵ &#373;
Ŷ &#374;
ŷ &#375;
Ÿ &#376;
Ź &#377;
ź &#378;
Ż &#379;
ż &#380;
Ž &#381;
ž &#382;
ſ &#383;
Ŕ &#340;
ŕ &#341;
Ŗ &#342;
ŗ &#343;
Ř &#344;
ř &#345;
Ś &#346;
ś &#347;
Ŝ &#348;
ŝ &#349;
Ş &#350;
ş &#351;
Š &#352;
š &#353;
Ţ &#354;
ţ &#355;
Ť &#356;
ť &#577;
Ŧ &#358;
ŧ &#359;
Ũ &#360;
ũ &#361;
Ū &#362;
ū &#363;
Ŭ &#364;
ŭ &#365;
Ů &#366;
ů &#367;
Ű &#368;
ű &#369;
Ų &#370;
ų &#371;
Ŵ &#372;
ŵ &#373;
Ŷ &#374;
ŷ &#375;
Ÿ &#376;
Ź &#377
ź &#378;
Ż &#379;
ż &#380;
Ž &#381;
ž &#382;
ſ &#383;