The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

Корпоративный VoIP сервер на базе Asterisk в Ubuntu Server 8.04.2 (voip sip asterisk linux fax)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: voip, sip, asterisk, linux, fax,  (найти похожие документы)
From: Alchemist <lipovetskiy@yandex.ru.> Newsgroups: email Date: Mon, 16 Mar 2009 17:02:14 +0000 (UTC) Subject: Корпоративный VoIP сервер на базе Asterisk в Ubuntu Server 8.04.2 Задача: поднять корпоративный сервер IP телефонии с несколькими потоками E1 от разных провайдеров и несколькими SIP провайдерами, завернуть логи в базу и настроить подбивку статистики, настроить электронные факсы. В течении двух недель экспериментировал с Asterisk на различных платформах и сборках - FreeBSD, CentOS, Trixbox, AsteriskNOW, Elastix, Akozia... везде что-то не нравилось и не сросталось, и в итоге я остановился на Ubuntu Server 8.04.2. ASTERISK Итак, ставим Ubuntu, во время установки отмечаем LAMP (Linux Apache MySQL PHP) и OpenSSH. Обновляемся и устанавливаем необходимые пакеты: aptitude update aptitude upgrade aptitude install make gcc cpp g++ linux-headers-2.6.24.23-server \ bison ncurses-dev mysql-client libmysqlclient-dev libnewt-dev php-gd Основную часть будем ставить из исходников, скачанных с сервера Digium: wget http://downloads.digium.com/pub/asterisk/releases/asterisk-1.6.0.5.tar.gz wget http://downloads.digium.com/pub/asterisk/asterisk-addons-1.6.0.1.tar.gz wget http://downloads.digium.com/pub/telephony/dahdi-linux/dahdi-linux-2.1.0.4.tar.gz wget http://downloads.digium.com/pub/telephony/dahdi-tools/dahdi-tools-2.1.0.2.tar.gz wget http://downloads.digium.com/pub/libpri/releases/libpri-1.4.9.tar.gz Распаковываем все это дело в /usr/src и начинаем по-порядку устанавливать. Libpri: make make install Dahdi: make make install Dahdi-tools: ./configure make menuselect make make install Asterisk: ./configure make menuselect make make install Asterisk addons: ./configure make menuselect make make install reboot Make menuselect делаем для проверки необходимых компонентов. Особенно нас интересует mysql. После того как все установлено необходимо поправить несколько основных файлов. У меня установлены две платы Openvox D110P, которые являются полным аналогом (китайская подделка =)) плат от Digium TE110P. Провайдеры телефонии - Peterstar & Golden Telecom. # cat /etc/dahdi/system.conf span=1,1,0,ccs,hdb3,crc4 bchan=1-15 echocanceller=mg2,1-15 dchan=16 bchan=17-21 echocanceller=mg2,17-21 loadzone = us defaultzone=us span=2,0,0,ccs,hdb3 bchan=32-46 dchan=47 echocanceller=mg2,32-46 # cat /etc/asterisk/chan_dahdi.conf [channels] switchtype=euroisdn pridialplan=unknown prilocaldialplan=national resetinterval = 100000000 facilityenable = yes signalling=pri_cpe rxwink=300 usecallerid=yes cidsignalling=bell cidstart=ring hidecallerid=no callwaiting=yes usecallingpres=yes sendcalleridafter=1 callwaitingcallerid=yes threewaycalling=yes transfer=yes canpark=yes cancallforward=yes callreturn=yes echocancel=yes echocancelwhenbridged=yes echotraining=800 relaxdtmf=yes rxgain=0.0 txgain=0.0 group=1 context=from_peterstar immediate=no channel=>1-15,17-21 mohsuggest=default group=2 context=from_golden immediate=no channel=>32-46 mohsuggest=default Теперь можно уйти в ребут. После перезагрузки смотрим подгрузились ли необходимые модули: lsmod | sort dahdi 197768 87 dahdi_echocan_mg2,xpp,dahdi_transcode,wcb4xxp,wctdm,wcfxo,wctdm24xxp,wcte11xp,wct1xxp,wcte12xp,wct4xxp dahdi_echocan_mg2 6920 0 dahdi_transcode 9352 1 wctc4xxp ..... wcb4xxp 83492 0 wcfxo 13984 0 wct1xxp 16544 0 wct4xxp 353920 0 wctc4xxp 49180 0 wctdm24xxp 135008 0 wctdm 40652 0 wcte11xp 27424 37 wcte12xp 71392 0 ..... Дальше проверяем как dahdi переварил наши платы: # dahdi_cfg -vvvvvvvv DAHDI Tools Version - 2.1.0.2 DAHDI Version: 2.1.0.4 Echo Canceller(s): MG2 Configuration SPAN 1: CCS/HDB3 Build-out: 0 db (CSU)/0-133 feet (DSX-1) SPAN 2: CCS/HDB3 Build-out: 0 db (CSU)/0-133 feet (DSX-1) Channel map: Channel 01: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 01) ... Channel 15: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 15) Channel 16: D-channel (Default) (Slaves: 16) Channel 17: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 17) ... Channel 46: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 46) Channel 47: D-channel (Default) (Slaves: 47) 37 channels to configure. Setting echocan for channel 1 to mg2 ... Setting echocan for channel 46 to mg2 Еще одна утилита: dahdi_scan [1] active=yes alarms=OK description=Digium Wildcard TE110P T1/E1 Card 0 name=WCT1/0 manufacturer=Digium devicetype=Digium Wildcard TE110P T1/E1 location=PCI Bus 04 Slot 01 basechan=1 totchans=31 irq=23 type=digital-E1 syncsrc=0 lbo=0 db (CSU)/0-133 feet (DSX-1) coding_opts=HDB3 framing_opts=CCS,CRC4 coding=HDB3 framing=CCS [2] active=yes alarms=OK description=Digium Wildcard TE110P T1/E1 Card 1 name=WCT1/1 manufacturer=Digium devicetype=Digium Wildcard TE110P T1/E1 location=PCI Bus 04 Slot 02 basechan=32 totchans=31 irq=21 type=digital-E1 syncsrc=0 lbo=0 db (CSU)/0-133 feet (DSX-1) coding_opts=HDB3 framing_opts=CCS,CRC4 coding=HDB3 framing=CCS Настраиваем Asterisk. Приведу только основные блоки своей конфигурации т.к. всё достаточно индивидуально. # cat /etc/asterisk/extensions.conf [general] static = yes writeprotect = yes clearglobalvars = yes [globals] CONSOLE = Console/dsp ; Console interface for demo TRUNKMSD = 1 ; MSD digits to strip (usually 1 or 0) FEATURES = DIALOPTIONS = RINGTIME = 20 FOLLOWMEOPTIONS = PAGING_HEADER = Intercom PAGING_TIMEOUT = 60 [default] [from_peterstar] exten => 1111111,1,Ringing exten => 1111111,n,Wait(1) exten => 1111111,n,Answer exten => 1111111,n,Dial(SIP/100,90,tr) exten => 1111111,n,Queue(office) exten => 1111111,n,Hangup() [from_golden] exten => 2222222,1,Ringing exten => 2222222,n,Wait(1) exten => 2222222,n,Answer exten => 2222222,n,Dial(SIP/200,90,tr) exten => 2222222,n,Queue(sklad) exten => 2222222,n,Hangup() [to_peterstar] exten => _[1-9]XXXXXX,1,Set(CALLERID(all)=1111111) exten => _[1-9]XXXXXX,2,Dial(dahdi/g1/${EXTEN},90,t) exten => _7XXXXXX,1,Set(CALLERID(all)=1111111) exten => _7XXXXXX,2,Dial(dahdi/g1/${EXTEN},90,t) exten => t,1,Busy [to_golden] exten => _[1234569]XXXXXX,1,Set(CALLERID(all)=2222222) exten => _[1234569]XXXXXX,2,Dial(dahdi/g2/${EXTEN},90,t) exten => _7XXXXXX,1,Set(CALLERID(all)=2222222) exten => _7XXXXXX,2,Dial(dahdi/g2/${EXTEN},90,t) exten => t,1,Busy [to_sipnet] exten => _7921XXXXXXX,1,Dial(SIP/sipnet_et/${EXTEN},90,t) exten => _7921XXXXXXX,2,Hangup() ..... # cat /etc/asterisk/queue.conf [general] [default] [office] music=default strategy=ringall timeout=60 retry=30 wrapuptime=15 ;periodic-announce-frequency=30 ;periodic-announce = queue-periodic-announce monitor-format = wav49 monitor-type = MixMonitor context = office member => SIP/100 [sklad] music=default strategy=ringall timeout=60 retry=30 wrapuptime=15 ;periodic-announce-frequency=30 ;periodic-announce = queue-periodic-announce monitor-format = wav49 monitor-type = MixMonitor context = sklad member => SIP/200 Вобщем в город звоним через Peterstar & Golden, а на мобильные и межгород прописываем sipnet и его аналоги. Дальше я решил запустить астериск стандартным для убунты образом: /etc/init.d/asterisk start Но оказолось что при компиляции никакие стартовые скрипты не создались. Хотя в других версиях такого бага небыло. Мое решение - вписываем в конец скрипта /etc/init.d/rc.local строчку: /usr/sbin/asterisk -f -vvvg -c Для проверки можно перезагрузиться и посмотреть сработало ли: ps -aux | grep asterisk | grep -v grep root 6184 0.1 1.1 28612 12108 ? Sl Feb19 4:05 /usr/sbin/asterisk -f -vvvg -c Залезаем на консоль Астериска, начинаем звонить и смотреть не лезут ли ошибки: asterisk -r .... ФАКС Вобщем все красиво, все работает, дальше будем прикручивать электронный факс. Лирическое отступление: сначала я решил поставить факс из репозиториев убунты - asterisk-app-fax, это чудо потянуло за собой астериск 1.4.22 и все мои труды накрылись медным тазом =). Поэтому будем ставить связку iaxmodem + hylafax, хоть из репозитория, но без вышеуказанных проблем. aptitude install hylafax-serveк hylafax-client iaxmodem Создаем несколько виртуальных модемов: # cat /etc/iaxmodem/ttyIAX0 device /dev/ttyIAX0 owner uucp:uucp mode 660 port 4570 refresh 50 server 127.0.0.1 peername iaxmodem secret password codec alaw cidname Company cidnumber +7(812)1111111 Выполняем для каждого модема: cd /etc/iaxmodem cp ttyIAX0 ttyIAX1 .... Не забываем менять название девайса в первой строчке файла настроек. Запусаем iaxmodem: /etc/init.d/iaxmodem start Проверяем появились ли виртуальные модемы: ls /dev | grep ttyIAX ttyIAX0 ttyIAX1 .... Дальше нужно настроить взаимодействие этих модемов с hylafax. Начальная настройка hylafax: faxsetup И для чего для каждого модема проделываем: faxaddmodem Прописывам модемы в астериске: # cat /etc/asterisk/iax.conf [general] bindport = 4569 bindaddr = 0.0.0.0 disallow=all allow=ulaw allow=alaw [iaxmodem] type=friend secret=password port=4570 host=dynamic context=office disallow=all allow=alaw [iaxmodem1] type=friend secret=password port=4580 host=dynamic context=sklad disallow=all allow=alaw ..... # cat /etc/asterisk/sip.conf ... [111] type=friend context=office secret=111 callerid="FAX-Office"<111> nat=yes host=dynamic qualify=yes [222] type=friend context=sklad secret=222 callerid="FAX-Sklad"<222> nat=yes host=dynamic qualify=yes .... # cat /etc/asterisk/extensions.conf exten => 111,1,Dial(IAX2/iaxmodem) exten => 222,1,Dial(IAX2/iaxmodem1) .... Для того, чтобы факсы отправлялись по e-mail необходимо настроить почтовую систему на релей к вашему почтовому серверу и прописать следующее: # cat /etc/hylafax/FaxDispatch case "$DEVICE" in ttyIAX0) SENDTO=office@comp.spb.ru; FILETYPE=tif;; ttyIAX1) SENDTO=sklad@comp.spb.ru; FILETYPE=tif;; esac При такой схеме факсы, приходящие на номер 111, будут идти на один адрес, а приходящие на 222 - на другой, и т.д... reboot Отправлять факсы из винды можно после установки какой-нибудь клиентской проги. Я использую Winprint Hylafax. СТАТИСТИКА Если аддон астериска собран с поддержкой MySQL: # cat /etc/asterisk/cdr_mysql.conf [global] hostname=localhost dbname=asterisk table=cdr password=password user=root port=3306 sock=/var/run/mysqld/mysqld.sock userfield=1 Создаем базу: mysql -p > CREATE DATABASE asterisk; GRANT INSERT ON asterisk.* TO asterisk@localhost IDENTIFIED BY 'yourpassword'; USE asterisk; CREATE TABLE `cdr` ( `calldate` datetime NOT NULL default '0000-00-00 00:00:00', `clid` varchar(80) NOT NULL default '', `src` varchar(80) NOT NULL default '', `dst` varchar(80) NOT NULL default '', `dcontext` varchar(80) NOT NULL default '', `channel` varchar(80) NOT NULL default '', `dstchannel` varchar(80) NOT NULL default '', `lastapp` varchar(80) NOT NULL default '', `lastdata` varchar(80) NOT NULL default '', `duration` int(11) NOT NULL default '0', `billsec` int(11) NOT NULL default '0', `disposition` varchar(45) NOT NULL default '', `amaflags` int(11) NOT NULL default '0', `accountcode` varchar(20) NOT NULL default '', `userfield` varchar(255) NOT NULL default '' ); ALTER TABLE `cdr` ADD `uniqueid` VARCHAR(32) NOT NULL default ''; ALTER TABLE `cdr` ADD INDEX ( `calldate` ); ALTER TABLE `cdr` ADD INDEX ( `dst` ); ALTER TABLE `cdr` ADD INDEX ( `accountcode` ); reboot Проверяем: asterisk -r pbx*CLI> cdr show status CDR logging: enabled CDR mode: simple CDR output unanswered calls: no CDR registered backend: mysql CDR registered backend: csv CDR registered backend: cdr-custom Сие означает, что логи у нас пошли в базу. Теперь прикручиваем модуль статистики: wget http://areski.net/asterisk-stat-v2/asterisk-stat-v2_0_1.tar.gz Распаковываем сожержимое в /var/www и настраиваем соответствующим образом файлы ./lib/defaults.php и ./lib/DB-modules/phplib_mysql.php apache2ctl restart Заходим через браузер на адрес http://your-pbx-ip/cdr.php (можно сделать и по-красивее) и радуемся тому, что все работает! =) PS: При написании использовались следующие материалы: * http://bbs.chinaunix.net/archiver/tid-1290435.html * http://www.the-asterisk-book.com/unstable/faxserver-mit-iaxmodem-und-hylafax.html * http://www.voip-info.org/wiki-Asterisk+cdr+mysql PPS: http://alchemist-unix.blogspot.com/2009/02/ip-e1-sip.html - мой блог ;)

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, KdF, 14:45, 17/03/2009 [ответить] [смотреть все]
  • +/
    registered backend mysql в выводе cdr show status не означает, что логи пошли в базу.
    Это означает всего лишь то, что написано.

    Чтобы увидеть, что они туда действительно пошли и дошли, нужно сделать какие-нибудь звонки, попадающие в CDR, а потом сказать:

    asterisk>  cdr mysql status

    Connected to asterisk@XXX.XXX.XXX.XXX, port 3306 using table cdr for 14 days, 1 hours, 22 minutes, 47 seconds.
      Wrote 665 records since last restart.

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

     
     
  • 2.12, Alchemist, 13:18, 18/03/2009 [^] [ответить] [смотреть все] [показать ветку]
  • +/
    gt оверквотинг удален Спасибо, учту ... весь текст скрыт [показать] [показать ветку]
     
  • 1.2, Alter, 15:14, 17/03/2009 [ответить] [смотреть все]  
  • +/
    Легким движением make install любая система превращается в Slackware.

    Настолько лениво что ли пакет собрать ?

     
     
  • 2.4, Аноним, 16:42, 17/03/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Пакет удобно собирать когда программу нужно на несколько серверов поставить А к... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.7, Heckfy, 23:23, 17/03/2009 [^] [ответить] [смотреть все]  
  • +/
    Для этого пакеты и существуют Просто ставишь более старый пакет Так в Яндек... весь текст скрыт [показать]
     
     
  • 4.8, Аноним, 23:33, 17/03/2009 [^] [ответить] [смотреть все]  
  • +/
    Тогда покажите как запустить на одной машине две разные версии одной программы, ... весь текст скрыт [показать]
     
     
  • 5.9, netc, 09:20, 18/03/2009 [^] [ответить] [смотреть все]  
  • +/
    Вопрос можно а как ты это делаешь и все ли проги действительно ставяться в один ... весь текст скрыт [показать]
     
     
  • 6.10, Аноним2, 10:54, 18/03/2009 [^] [ответить] [смотреть все]  
  • +/
    Мне симпатична система портов FreeBSD, в которой все дополнительное валится в u... весь текст скрыт [показать]
     
  • 2.13, Alchemist, 13:19, 18/03/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    А при чем тут сборка пакетов У каждого свои методы ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.15, Denis Smirnov, 14:30, 18/03/2009 [^] [ответить] [смотреть все]  
  • +/
    А обновлять потом как будем А отслеживать какие файлы при обновлении надо _удал... весь текст скрыт [показать]
     
     
  • 4.17, geekkoo, 10:05, 19/03/2009 [^] [ответить] [смотреть все]  
  • +/
    Нy, чё прям как маленькие Кому надо, тот и про make install DESTDIR может ... весь текст скрыт [показать]
     
     ....нить скрыта, показать (8)

  • 1.3, 123, 16:20, 17/03/2009 [ответить] [смотреть все]  
  • +/
    Статья отличная

    По поводу Слакваре, пакетных менеджеров и make install - критики, а где ваши статьи? Там где все красиво и правильно?

     
     
  • 2.6, Denis Smirnov, 18:00, 17/03/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    У не пользующихся слакваре эта статья была бы в два раза меньше, ибо половина ст... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.11, Alchemist, 13:15, 18/03/2009 [^] [ответить] [смотреть все]  
  • +/
    В этом случае устанавливается версия 1 4 22 или что-то в этом духе Я тьму верси... весь текст скрыт [показать]
     
     
  • 4.14, Denis Smirnov, 14:29, 18/03/2009 [^] [ответить] [смотреть все]  
  • +/
    И почему у меня на 1 4 PRI карточки нормально работают И Digium, и Sangoma И а... весь текст скрыт [показать]
     
     
  • 5.16, Alchemist, 17:02, 18/03/2009 [^] [ответить] [смотреть все]  
  • +/
    Openvox у меня китайская подделка под Digium ... весь текст скрыт [показать]
     
  • 1.18, Nikitis, 19:00, 31/03/2009 [ответить] [смотреть все]  
  • +/
    Статья ниочем. Любой кто работал с астериском пару месяцев ее напишет
     
     
  • 2.19, Alchemist, 23:20, 31/03/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Что будем делать с теми, кто не работал пару месяцев, а только что столкнулся ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.20, Slyer, 01:56, 01/04/2009 [^] [ответить] [смотреть все]  
  • +/
    1... весь текст скрыт [показать]
     
  • 3.23, litnimax, 12:59, 05/05/2009 [^] [ответить] [смотреть все]  
  • +/
    >>Статья ниочем. Любой кто работал с астериском пару месяцев ее напишет
    >
    >Что будем делать с теми, кто не работал пару месяцев, а только
    >что столкнулся? :)

    Все, что описано в статье, реализовано в дистрибутиве AstPbx - http://asteriskpbx.ru/wiki/AstPbx. Только в кач-ве оси используется Gentoo. Кстати, если у кого-то есть желания поддерживать другую ось - велком. AstPbx для этого и создавался - чтобы облегчить изучение Asterisk правильным админам, которые не любят GUI :-)

     
  • 3.24, лузер, 20:05, 11/06/2009 [^] [ответить] [смотреть все]  
  • +/
    >>Статья ниочем. Любой кто работал с астериском пару месяцев ее напишет
    >
    >Что будем делать с теми, кто не работал пару месяцев, а только
    >что столкнулся? :)

    что, что....подсказывать, тк по данной статье знаний не наберешься, что- копи-пасте?, тоже не прокатит, тк задачи у всех разные.....на мой взгляд рулят форумы по этой тематике, задал вопрос+ обсудили= решение....так себе

     
  • 1.21, botan, 14:42, 06/04/2009 [ответить] [смотреть все]  
  • +/
    чтобы конфиги появилисьтребуется сделать make configs - об этом сам астерсик прямо в консоли пишет!!

     
     
  • 2.22, Alchemist, 14:47, 06/04/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    >чтобы конфиги появилисьтребуется сделать make configs - об этом сам астерсик прямо
    >в консоли пишет!!
    >

    Если вы про конфиги с примерами, то make samples.

     
  • 1.25, Чрный, 12:44, 01/10/2009 [ответить] [смотреть все]  
  • +/
    Alchemist - спасибо за статью! Я считаю что для новичков такие статьи весьма полезны. Не слушай тех, кто говорит что статья бесполезная и т.п. Она мне очень пригодилась несмотря на все форумы, статьи и книги.
     
  • 1.26, OrNix, 14:19, 05/10/2009 [ответить] [смотреть все]  
  • +/
    > сначала я решил поставить факс из репозиториев

    убунты - asterisk-app-fax, это чудо потянуло за собой астериск 1.4.22

    А чем не устроил app_fax, идущий в комплекте в 1.6 ?
    --with-spandsp при конфигуре - и все.

     
     
  • 2.27, Alchemist, 22:35, 06/10/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    >А чем не устроил app_fax, идущий в комплекте в 1.6 ?
    >--with-spandsp при конфигуре - и все.

    В тот момент не нашел никакой документации на эту тему и взялся за связку hylafax+iaxmodem

     
  • 1.28, Олег, 11:41, 19/10/2010 [ответить] [смотреть все]  
  • +/
    А мне статья помогла. СПС автору
     
  • 1.29, EuPhobos, 14:43, 24/11/2010 [ответить] [смотреть все]  
  • +/
    Очень поверхностная статься, тупо выложены части конфигов, без объяснения "что","зачем" и "почему"
    Не могу понять логику контекстов, в каких случаях нужно в sip.conf у девайса какой контекст прописывать, и что(как) именно прописывать контекст в extentions.conf

    Пока читаю официаьлную документацию, и опять же. там только подробные разборы каждой команды.. А общей логики никто не приводит..

     
  • 1.30, Андрей, 16:20, 03/10/2011 [ответить] [смотреть все]  
  • +/
    Я делал по этой статье - http://www.cahilig.net/2008/06/09/installing-web-based-asterisk-cdr-analyzer
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:



    ПОДПИШИСЬ НА ЖУРНАЛ Linux Format 2012!

    Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

    Каждый, кто оформит подписку, получает бонусы и подарки- объёмные наклейки на системный блок, диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

    Оформить подписку на год


      Закладки на сайте
      Проследить за страницей
    Created 1996-2012 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    RUNNet TopList