Архивы за Январь, 2014

Собственный SMS шлюз

Сначала подготовим сервер. Я ставил это на Fedora 18 и Debian 7, на x86, amd64 и arm в исполнении Raspberry Pi. Разница только в способе установки пакетов.
Сначала инструменты для работы с sms через 3g/4g модемы Huawei, которые создают /dev/ttyUSB* устройства при подключении.

Huawei выбран потому что эти модемы работают очень стабильно в отличие от ZTE. Прочие производители не тестировались ввиду отсутствия в свободной продаже в Самаре.

При подключении 3G модема в USB должны появиться три устройства:


/dev/ttyUSB0
/dev/ttyUSB1
/dev/ttyUSB2

Обычно нулевое устройство — основное для передачи данных. Оно же занимается для подключения по GPRS и производным протоколам. Если модем не используется для этого, то 0 устройство можно использовать для SMS. А вот если используется, что для разных модемов для отправки SMS придётся подбирать экспериментальным путём либо 1 либо 2 устройство.

Приступим.

apt-get install gammu gammu-smsd

В связи с особенностью используемых мной шлюзов хранить всё это будем в /home/sms


mkdir -p /home/sms
cd /home/sms
rm -f /etc/gammu-smsdrc
ln -s /etc/gammu-smsdrc /home/sms/gammu-smsdrc

Конфиг /home/sms/gammu-smsdrc:


[smsd]
Service = files
PIN = 0000
LogFile = syslog
InboxPath = /home/sms/inbox/
OutboxPath = /home/sms/outbox/
SentSMSPath = /home/sms/sent/
ErrorSMSPath = /home/sms/error/

debuglevel = 1
logfile = /home/sms/smsd.log

[gammu]
port = /dev/ttyUSB0
model = at
connection = at19200
synchronizetime = yes
logfile = /home/sms/gammu.log
logformat = textalldate
use_locking = yes
;gammuloc =
;gammucoding = utf8

Файл запуска/перезапуска сервиса /home/sms/restart:


#!/bin/bash

killall -q gammu-smsd && sleep 10

cd /home/sms
>smsd.log
touch smrsh.log
chmod 1660 smsd.log smrsh.log
mkdir -p error inbox outbox sent
chmod 1770 error inbox outbox sent
chgrp mail smsd.log smrsh.log error inbox outbox sent

gammu-smsd -c /home/sms/gammu-smsdrc -d

С учётом того под каким юзером будем запускать этого домена нужно сделать:

chown -R user:group /home/sms

Нужно учесть, что юзер должен принадлежать группе, которая может писать в /dev/ttyUSB0.

Ну и запускаем:

/home/sms/start

Для автоматического запуска в /etc/rc.local вписываем эту же команду.

Проверить работу можно так, заменив телефон на свой:

gammu-smsd-inject -c gammu-smsdrc TEXT "+79020000000" -textutf8 "дата/date `date`" -unicode

Теперь создаём отдельный поддомен для отправки sms через e-mail. В sendmail добавляем его в /etc/mail/local-host-names и прописываем в virtusertable:

@subdomain.domain.tld smsg

а в aliases:

smsg: "|/etc/mail/smrsh/smsg"

smsg может выглядеть так:

#!/bin/bash

LOG=/tmp/smsg
BF=''
SMS=''
MOB=''

date >> $LOG
set >> $LOG
env >> $LOG

while read L; do
    echo $L >> $LOG
    if [ -z "$L" ]; then
        BF=1
        continue
    fi
    if [ -z "$BF" ]; then
        if [ "${L:0:4}" == "To: " ]; then
            TO=${L:4}
            TO=${TO# *}
            TO=${TO%@*}
            if [ ${#TO} != 10 ] || [ "${TO:0:1}" != "9" ]; then
                echo "BAD TO" >> $LOG
                exit 403
            fi
            MOB="+7"$TO
        fi
    else
        if [ -z "$SMS" ]; then
            SMS=$L
        else
            SMS=$SMS$'\n'$L
        fi
    fi
done

if [ -n "$MOB" ] && [ -n "$SMS" ]; then
    echo "--- SMS ---" >> $LOG
    echo "$MOB" >> $LOG
    echo "$SMS" >> $LOG
    echo "=== === ===" >> $LOG
    gammu-smsd-inject -c /home/sms/gammu-smsdrc TEXT "$MOB" -textutf8 "$SMS" -unicode -len 319  1>>$LOG 2>&1
fi

Upgrade Fedora 19 до 20 x86_64

На днях обновился до Fedora 20.
Сам процесс прошел по банальному сценарию:

export LANG=C
rpm --import https://fedoraproject.org/static/246110C1.txt
yum update yum
yum --releasever=20 distro-sync

Всё прошло без сучка и задоринки. Перезагрузился тоже без проблем.
А вот со входом в систему случилось странное. По привычке ввёл пароль и попал… в Gnome 3, которым не пользуюсь вообще. Да и не было его на моём ноуте до этого. А теперь аж три гуя на выбор: Gnome, MATE, Xfce. После перевхода с принудительным выбором Xfce стало привычно. Но чего-то не хватало, а именно bluetooth аплета. А у меня наушники беспроводные.

Смотрим чего натворил yum:

Jan 28 21:12:34 Erased: PackageKit-device-rebind-0.8.9-6.fc19.x86_64

Jan 28 21:12:40 Erased: mate-bluetooth-libs-1.6.0-5.fc19.x86_64
Jan 28 21:12:40 Erased: mate-bluetooth-1.6.0-5.fc19.x86_64

Jan 28 21:12:42 Erased: gvfs-obexftp-1.16.3-2.fc19.x86_64
Jan 28 21:12:43 Erased: 1:obex-data-server-0.4.6-5.fc19.x86_64
Jan 28 21:13:21 Erased: jpackage-utils-1.7.5-27.fc19.noarch
Jan 28 21:13:30 Erased: systemd-sysv-204-18.fc19.x86_64
Jan 28 21:13:44 Erased: xfce4-icon-theme-4.4.3-8.fc19.noarch

Читаем release note (http://docs.fedoraproject.org/en-US/Fedora/20/html/Release_Notes/sect-Release_Notes-Changes_for_Desktop.html), охреневаем, думаем, чешемся, пробуем замену (yum install -bluedevil),
охреневаем еще больше:

Установить  2 пакета (+33 зависимых)

Объем загрузки: 83 M
Объем изменений: 182 M

Плюём и пользуем консоль:

$ /usr/bin/bluetoothctl
[NEW] Controller C4:85:08:46:3C:E5 ssg-0 [default]
[NEW] Device 00:60:D1:00:55:30 Bluetooth Mouse
[NEW] Device 76:8E:46:66:20:4C ANDROID BT
[NEW] Device 98:6C:F5:7E:6A:5E ZTE_LEO_Q1
[NEW] Device 2C:26:C5:DB:63:87 ZTE V880E
[NEW] Device 00:0D:FD:35:CD:14 Motorola S305
[NEW] Device 00:60:D1:00:17:AA Bluetooth Mouse
[bluetooth]# agent on
Agent registered
[bluetooth]# connect 00:0D:FD:35:CD:14
Attempting to connect to 00:0D:FD:35:CD:14
[CHG] Device 00:0D:FD:35:CD:14 Connected: yes
Connection successful
[bluetooth]# quit

Всё. Наушники работают.

Иногда можно получить ошибку:

Failed to connect: org.bluez.Error.NotReady

Лечится так:

hciconfig hci0 up

Proxmox и IPv6

Время заставляет использовать IPv6. Работать IPv6 под Proxmox удалось настроить только в режиме моста.
Хост под Proxmox настраиваем как обычно:
/etc/network/interfaces:

iface vmbr0 inet6 static
        address 2a00:15f8:C001:3::2
        netmask 64
        gateway 2a00:15f8:c001:3::22

Переподнимаем интерфейс или перезапускаем сеть.

Далее останавливаем контейнер. Добавляем в контейнер «Сетевое оборудование» (например, ipv6). Правим в контейнере файл /etc/network/interfaces.tail:

auto ipv6
iface ipv6 inet6 static
	address 2a00:15f8:C001:3::3
	netmask 64
	gateway 2a00:15f8:c001:3::22
	up route -A inet6 del default dev venet0

Последняя строчка нужна чтобы уничтожить вражеский маршрут добавляемый в /etc/network/interfaces (вот зачем они так сделали?):

iface venet0 inet6 manual
	up route -A inet6 add default dev venet0
	down route -A inet6 del default dev venet0

Запускаем контейнер.

После этого делаем ping6 ipv6.google.com и радуемся.