http://www.joomla3x.ru/joomla3-templates.html - joomla 3 шаблоны

Linux

Заметки о  Linux

Gammu (работаем с SMS)

Автор: GAMER вкл. .

После экспериментов с Asterisk (chan_dongle) было принято решение попробовать gammu. Первые тесты показали ряд преимуществ перед астериском.

Выделю два: работа с большим количеством телефонов и поддержка длинных СМС и кирилицы. Но нужно немного допилить.

Итак:

1. Ставим.

# aptitude install gammu-smsd


2. Настраиваем файл конфига.

# cat /etc/gammu-smsdrc

# Configuration file for Gammu SMS Daemon

# Gammu library configuration, see gammurc(5)
[gammu]
# Please configure this!
port = /dev/ttyUSB0
connection = at115200
gammucoding = utf8
synchronizetime = yes
# Debugging
logformat = textall

# SMSD configuration, see gammu-smsdrc(5)
[smsd]
service = files
logfile = /var/log/gammu-smsd
# Increase for debugging information
debuglevel = 4

# Paths where messages are stored
inboxpath = /var/spool/gammu/inbox/
outboxpath = /var/spool/gammu/outbox/
sentsmspath = /var/spool/gammu/sent/
errorsmspath = /var/spool/gammu/error/

# by GAMER
TransmitFormat = unicode
#TransmitFormat = auto

OutboxFormat = unicode


3. У меня криво рестартовал сервис. Ругался на выделение памяти. Сделал больше паузу между стоп и старт.

Кроме того были разные бока с кодировкой. В итоге подправил скрипт запуска демона.

# cat /etc/init.d/gammu-smsd


#! /bin/sh
### BEGIN INIT INFO
# Provides:          gammu-smsd
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Should-Start:      mysql postgresql $syslog
# Should-Stop:       mysql postgresql $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Gammu SMS daemon
# Description:       Daemon for automatically sending and receiving messages using GSM phone.
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/gammu-smsd
NAME=gammu-smsd
DESC="Gammu SMS Daemon"

# user which will run this daemon
USER=gammu

# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0

# Include user parameters if available
if [ -f /etc/default/$NAME ] ; then
        . /etc/default/$NAME
fi

. /lib/lsb/init-functions

case "$1" in
  start)
    if grep -q '^port = /dev/null' /etc/gammu-smsdrc ; then
        log_warning_msg " $NAME not yet configured, please edit /etc/gammu-smsdrc"
        exit 0
    fi
        log_daemon_msg "Starting $DESC" "$NAME"
        export LC_ALL=ru_RU.utf8
        start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
                --exec  $DAEMON -- $DAEMONPARAM --daemon --user $USER \
        --pid /var/run/$NAME.pid
    log_end_msg $?
        ;;
  stop)
    log_daemon_msg "Stopping $DESC" $NAME
        start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
                --exec $DAEMON
    log_end_msg $?
        ;;
  restart|force-reload)
    sh $0 stop
    sleep 3
    sh $0 start
        ;;
  reload)
        log_daemon_msg "Reloading $DESC" $NAME
        start-stop-daemon --stop --signal HUP --quiet --pidfile \
                /var/run/$NAME.pid --name $NAME
        log_end_msg $?
  ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload|reload}" >&2
        exit 1
        ;;
esac

exit 0

Курсивом выделил свои изменения и добавления.

Пример настроек от читателя сайта - ТеМ!k

У меня ubuntu, так что тут может небольшие расхождения могут быть.

Конфигурация gammu для работы из mysql (полагаю что mysql уже имеется):

1. я ставил через apt-get install:
 sudo apt-get install gammu gammu-smsd

2. после такой установки идем сюда
  cd /usr/share/doc/gammu/examples/sql
  ls
  видим
  mysql.sql pgsql.sql.gz sqlite.sql.gz

3. теперь в имеющуюся БД накатываем скрипт:

   mysql -u root -p db_name < mysql.sql

4. после успешной накатки видим таблички:

 daemons
 gammu
 inbox
 outbox
 outbox_multipart
 pbk
 pbk_groups
 phones
 sentitems

5. редактируем конфиг sudo emacs /etc/gammu-smsdrc, все также как у тебя,
что самое забавное я даже не менял
service = files
на
service = sql
driver = native_mysql
хотя по идее надо.

в твоем конфиге комментим блок

# Paths where messages are stored
#inboxpath = /var/spool/gammu/inbox/
#outboxpath = /var/spool/gammu/outbox/
#sentsmspath = /var/spool/gammu/sent/
#errorsmspath = /var/spool/gammu/error/

добавляем:
user = root
password = ******
pc = localhost
database = db_name

6. редактирую /etc/init.d/gammu-smsd (так же как у тебя)

7. теперь самое интересное:

для отправки русского сообщения через mysql нужно сделать insert в таблицу "outbox":

INSERT INTO outbox (
 DestinationNumber,
 TextDecoded,
 CreatorID,
 Coding,
 DeliveryReport
)
VALUES (
 '+7908*******',
 'Текст сообщения!',
 'Program',
 'Unicode_No_Compression',
 'yes'
);

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

delimiter ^
DROP TRIGGER IF EXISTS outbox_after_ins_tr^
CREATE TRIGGER `outbox_after_ins_tr` AFTER INSERT ON `outbox`
  FOR EACH ROW
BEGIN
 set @seq=2;
 set @udh=left(new.udh,10);
 while (length(@remains)>0 and @seq<256) do
   set @part=left(@remains,67);
   
   if length(hex(@seq))=1 then
      set @seqx=CONCAT('0',hex(@seq));
   else
      set @seqx=hex(@seq);
   end if;

   set @remains=substring(@remains from 68);
   insert into outbox_multipart  (SequencePosition,UDH,TextDecoded,id, Coding) values (@seq,concat(@udh,@seqx),@part,new.ID, new.Coding);
   set @seq=@seq+1;
 end while;
END
^
DROP TRIGGER IF EXISTS outbox_before_ins_tr^
CREATE TRIGGER `outbox_before_ins_tr` BEFORE INSERT ON `outbox`
  FOR EACH ROW
BEGIN
IF NEW.InsertIntoDB = '0000-00-00 00:00:00' THEN
   SET NEW.InsertIntoDB = CURRENT_TIMESTAMP();
   END IF;
   IF NEW.SendingDateTime = '0000-00-00 00:00:00' THEN
   SET NEW.SendingDateTime = CURRENT_TIMESTAMP();
   END IF;
   IF NEW.SendingTimeOut = '0000-00-00 00:00:00' THEN
   SET NEW.SendingTimeOut = CURRENT_TIMESTAMP();
   END IF;

 if length(new.TextDecoded)>160 then
    set names utf8;   
    set @countM= hex((char_length(new.TextDecoded) div 68)+1);         
    set @remains=substring(new.TextDecoded from 68);
    set @randomUDH=hex(FLOOR(1 + (RAND() * 254))); /* получим что-то типа '050003D30501';*/    
    
  if length(@countM)=1 then
    set @countM=CONCAT('0',@countM);
  end if;

  if length(@randomUDH)=1 then
    set @randomUDH=CONCAT('0',@randomUDH);
  end if;

  if length(@remains)>0 then
   set new.UDH=concat('050003',@randomUDH,@countM,'01');
   set new.TextDecoded=left(new.TextDecoded,67);
   set new.MultiPart='true';
   set new.RelativeValidity= 255;   
  else
    set new.MultiPart='false';
  end if;
 
  end if;
END;

 



 

ssh без паролей - генерация ключей

Автор: GAMER вкл. .

Необходимость ввода пароля при каждом ssh-соединении может сильно раздражать. С другой стороны, незащищенное удаленное соединение - это огромный риск с точки зрения безопасности. Решением этой проблемы является авторизация с помощью пары из открытого (public) и секретного (private) ключей.

Пара ключей обычно генерируется с помощью команды ssh-keygen. Ниже показан результат выполнения такой команды. Возможно использование ключей RSA или DSA.

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key
(/home/user1/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in
/home/user1/.ssh/id_rsa.
Your public key has been saved in
/home/user1/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx

Когда программа просит указать пароль для ключа, нужно просто нажать ENTER. При этом будет создан ключ без пароля. Имейте в виду, что это представляет угрозу безопасности, так как это понижает безопасность удаленной системы до уровня безопасности вашей локальной системы (злоумышленник, получивший доступ к секретному ключу, хранящемуся в вашей локальной системе, может воспользоваться им для доступа к удаленной системе - прим. пер.). Поэтому делайте это на свой страх и риск. Когда ssh-keygen закончит свою работу, вы увидите, что были сгенерированы два ключа. Секретный ключ находится в /home/user1/.ssh/id_rsa. Его нельзя делать общедоступным ни при каких обстоятельствах. Второй ключ (открытый) находится в /home/user1/.ssh/id_rsa.pub, к нему можно предоставить публичный доступ.

Теперь, если мы хотим получить доступ к удаленной системе с нашего локального компьютера без запроса пароля (используя только эти два ключа), мы должны добавить информацию о нашем открытом ключе в файл authorized_keys, расположенный в папке ~/.ssh в удаленной системе. Для этого можно воспользоваться следующими командами:

$ scp /home/user1/.ssh/id_rsa.pub user1@remote_server:~/
$ ssh user1@remote_server
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

Обратите внимание, что третья команда выполняется на удаленном сервере. После этой процедуры все действия, выполняемые на удаленном сервере через ssh, не будут требовать ввода пароля. Это позволит существенно упростить нашу работу с удаленным сервером.

 

Взято с сайта: http://2291520.kiev.ua/vse-o-setyax/ssh.html

Там еще много чего хорошего написано :)

sudo без пароля

Автор: GAMER вкл. .

Использование sudo без пароля небезопасно. Но, если очень нужно, то можно :)

Для начала, пользователь должен быть в группе admin.

Далее добавляем в файл /etc/sudoers строку:

user1 ALL=(ALL) NOPASSWD: ALL

 

Ещё статьи...