Архивы за Январь, 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/bashkillall -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 sentgammu-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
и радуемся.