Skrypty SMS - pełna instrukcja obsługi

(UWAGA! tekst jest częściowo nieaktualny.)

Informacje ogólne

Zakładamy, że wszyscy, którzy czytają ten tekst wiedzą, co to jest SMS. Tych, którzy nie wiedzą - zapraszam na www.text.plusgsm.pl/smsinfo.htm. Ponadto zakładam, że Ci którzy chcą sobie zakładać taką bramkę znają podstawy konfiguracji systemu, pisania skryptów shellowych itp.
Skrypty były pisane dla dowolnego shella sh (bash, zsh, ash, ksh, inne) - jeżeli nim nie dysponujesz (co zdarza się baaardzo rzadko) najpierw zapytaj administratora, czy nie ma możliwości zainstalowania jednej z odmian w/w shella.

Tworzenie skryptu powiadamiającego

Po pierwsze, potrzebny jest dostęp do U**xowego konta, z dostępem do shella. Jeśli nie masz takiego - zapytaj administratora o możliwość umieszczenia na Twoim serwerze skryptów powiadamiających.
Teraz ściągnij plik ze skryptami (ze strony głównej, link "download"). Zawiera on wszystkie skrypty potrzebne do wysyłania SMSów do różnych sieci GSM. Po ściągnięciu musisz go rozpakować w katalogu domowym, poleceniem tar xzf skrypty-sms-{numer wersji}.tar.gz. Numer wersji ściągniętego pakietu, dla wygody, oprócz nazwy pliku tar.gz, jest podany w nazwie pliku VERSION-X.XXX. Opis zmian jakie zachodziły w poszczególnych etapach modernizowania pakietu możesz przeczytać w pliku CHANGELOG. Całe drzewo plików, takie jak to, które otrzymasz po rozpakowaniu archiwum znajdziesz tutaj.

Po rozpakowaniu wejdź do katalogu skrypty. Przeedytuj plik powiadom i wpisz do niego numer swojego telefonu (w postaci bez prefiksu miedzynarodowego - czyli np. 602123456). Po wprowadzeniu zmian zmień nazwę pliku na .powiadom (poleceniem mv powiadom ~/.powiadom).
Wybierz potrzebny Ci plik sms.XXX. Opisy wszystkich skryptów znajdziesz w pliku README.SKRYPTY. Zmień jego nazwę na .sms (jak wyżej, poleceniem mv sms.XXX ~/.sms).
Możesz zamieniać w wiadomościach polskie znaki na znaki ASCII oraz wycinać kodowanie Quoted-Printable/Base64 - wystarczy użyć skryptu nopl (możesz go sobie skopiować do katalogu domowego jako .nopl: mv nopl ~/.nopl ) i wpisać ścieżkę do niego do skryptu .powiadom (jest to opisane w pliku README.SKRYPTY)

Teraz możesz przetestować działanie skryptu wysyłającego SMSy - wpisz po kolei . ~/.sms (wcześniej ew. musisz uruchomić sh), a potem wyslij_sms XXXXXXXXX 'wiadomość', gdzie XXXXXXXXX to numer Twojego telefonu, a "wiadomość" to treść wysyłanej wiadomości (co było do przewidzenia). Po jakimś czasie (na ogół krótkim) powinieneś dostać odpowiedź - "Wszystko OK" lub komunikat o błędzie. Dalej poczekasz, to po chwili (czasem, gdy bramki są obciążone, ta "chwila" może trwać nawet i kilka godzin) powinieneś dostać SMSa.
Jeśli wszystko działa, to dobrze. Jeśli pojawia się komunikat o błędzie, to spróbuj się zastanowić co jest nie tak - najczęściej odpowiedź programu pozwala dość jednoznacznie określić przyczynę problemu. Jeśli kiedykolwiek dostaniesz w odpowiedzi komunikat "Nieznana odpowiedź: " i masę tekstu, to poślij to na listę dyskusyjną. Nie jestem w stanie sam wyłapać wszystkich możliwych odpowiedzi, które produkują serwery i dlatego czasem (a w nowszych skryptach znacznie częściej) program natrafi na stronę-odpowiedź której nie będzie w stanie zidentyfikować.
Jeśli zadziałało, to teraz sprawdź, czy zadziała powiadomienie: napisz . ~/.powiadom. Teraz komputer poczeka aż wprowadzisz treść listu, tak jakby go podawał program pocztowy. Wpisz:

From: test@test.test
To: ja.sam
Subject: test bramki

Jakastamtresc
[CTRL-D]

CTRL-D trzeba oczywiście nacisnąć, a nie wpisać. Po jakimś czasie powinna dotrzeć wiadomość o treści: Od: test@test.test Temat: test bramki. Jesli dotrze, to wszystko dobrze. Jeśli program "wywali się" wyrzucając jakieś informacje o błędach, to napisz na listę dyskusyjną, prześlij to, co wypisał komputer.
Jeśli wiadomość dotarła, to znaczy że wszystko działa.

Programy dodatkowe

Podczepianie skryptu do programu pocztowego

To co teraz będziesz robić zależy od tego, jaki program obsługuje u Ciebie pocztę. Najczęściej będzie to Sendmail, czasem inne: Qmail, Zmail, Smail, Exim... Najlepiej zapytaj swojego administratora.

Instrukcja podczepiania skryptów do poczty została przeniesiona do pliku Szybki Start (na Google Code).

Tworzenie własnych bramek

Tworzenie bramki mail -> SMS

Do postawienia własnej bramki SMS służą zamieszczone pliki bramka-*. Pierwsza rzecz którą należy zrobić to założyć sobie jakiś katalog: np. ~/.sms-bramka, i w nim umieścić wszystkie pliki sms.*, oraz pliki bramka-mail i bramka-common. Dodatkowo może być potrzebny skrypt nc i/lub nopl.
Po przekopiowaniu plików wypełniamy wszystkie pliki potrzebnymi informacjami: lokacja netcata, adres zwrotny dla bramki plusa, pełna ścieżka dostępu do bramka-common itp.
Właściwie to już wszystko (proste, nie? :) ). Zostaje ustawić regułkę dla procmaila. Przykładowy plik .procmailrc:

:0
* !^FROM_MAILER
| /bin/sh $HOME/.sms-bramka/bramka-mail

Tworzenie bramki WWW -> SMS

Jest odrobinę bardziej skomplikowane od stawiania zwykłej bramki mail->SMS. Podobnie jak dla mail->SMS, najpierw tworzymy osobny katalog na potrzebne pliki. Możemy wykorzystać ten sam katalog w którym już działa nasza bramka mail->SMS. Dodatkowy warunek: każdy użytkownik musi mieć dostęp do tego katalogu i do wszystkich plików (prawo +r dla plików i +x dla katalogów dla wszystkich użytkowników) - ponieważ serwer WWW pracuje nie jako nasz użytkownik, a najczęściej jako "nobody" albo "root" (rzadziej), to właśnie "nobody" musi mieć możliwość dotarcia do plików.
Załóżmy tak jak wyżej, że utworzyliśmy katalog ~/.sms-bramka. Teraz trzeba do niego przekopiować: pliki sms.*, bramka-common, ew. nopl i/lub nc. Nie kopiujemy pliku bramka-www. Ten plik będzie leżał w zupełnie innym miejscu... Pamiętaj: pliki muszą mieć atrybut +r (czytanie) dla wszystkich użytkowników.
Dalej: jak w poprzednim przypadku najpierw należy wyedytować wszystkie pliki, wpisując potrzebne dane. Wypełniając nie można bazować na zmiennej "$HOME" lub znaczku "~" - użytkownik "nobody" ma dla tych zmiennych zupełnie inne wartości niż my. Należy podać bezwzględną ścieżkę: /home/...
Teraz tworzymy własną stronę WWW dla bramki - przykładowa strona jest dostępna tutaj. Warto przejrzeć sobie jej źródło. W katalogu ze stroną umieszczamy dodatkowo plik bramka-www, zmieniając jego nazwę na bramka-www.cgi (to jest dość istotne) nadając mu prawa +rx dla wszystkich (chmod a+rx bramka-www.cgi). Musimy mieć możliwość uruchamiania skryptów CGI w tym katalogu w którym umieszczamy nasz plik. Wypełniamy w nim potrzebne dane, podobnie jak poprzednio podając ścieżki bezwzględne. W pliku ze stroną wpisujemy jako parametr "ACTION" formularza lokację pliku z bramką: np. http://moj.serwer.com/nazwa_usera/bramka-www.cgi. Jako metodę formularza wybieramy "POST". I znowu właściwie na tym koniec - po wypełnieniu formularza na naszej stronie i naciśnięciu "Wyślij" zostanie uruchomiony skrypt bramka-www.cgi, który odpowiednio wywoła potrzebne dalej skrypty i wyśle wiadomość. Krótka informacja pokaże się na ekranie - czy wiadomość została wysłana itp.

Instalacja powiadomień w sieci za firewallem/maskaradą

Typowe są dwie sytuacje:

1. Mamy zablokowane na świat wyjście przez port 80 i możemy jedynie używać w3cache'a.

Wystarczy wprowadzić niewielką modyfikację do skryptów:

2. Firewall całkowicie blokuje wyjście w świat

Potrzebne będą pewne zmiany w konfiguracji serwera. Istnieje kilka możliwych rozwiązań dla takiego przypadku:
Pierwszy sposób: instalujemy na firewallu coś co będzie przekazywało dane z naszego skryptu do odpowiedniego komputera w sieci zewnętrznej. Na początku musimy wybrać sobie port, do którego odwołania będą przekazywane do bramki SMS. Wybrany port wpisujemy w pliku /etc/services, nazywając go np. sms-idea:

sms-idea	999/tcp

W tym wypadku wybraliśmy port 999. Dalej musimy ustawić nasz "przekaźnik" połączeń. Robimy to w pliku /etc/inetd.conf:

sms-idea stream tcp nowait nobody /usr/sbin/tcpd /usr/sbin/nc
sms.centertel.pl 80

Dzięki takiemu wpisowi każde połączenie z portem 999 na naszym firewallu będzie przekazywane do portu 80 (HTTP) bramki sms.centertel.pl.
Ostatnia rzecz do zrobienia na firewallu to zablokowanie dostępu do bramki dla wszystkich oprócz naszego komputera (albo kilku komputerów): w pliku /etc/hosts.deny wpisujemy:

sms-idea: ALL

a w pliku /etc/hosts.allow:

sms-idea: nazwa.mojego.komputera

lub coś podobnego. Podane ścieżki są przykładowe (takie jak na moim komputerze) i w rzeczywistości mogą się nieznacznie różnić. Więcej informacji na temat konfigurowania demona inetd można znaleźć w manualach albo na mojej stronie głównej ("Security-HOWTO", czyli jak zabezpieczać sieć pod Linuxem).
Teraz żeby móc skorzystać z naszego "tunelu" ustawiamy skrypt na korzystanie z firewalla: w miejscu gdzie w skrypcie pojawia sie wywołanie "$NETCAT sms.centertel.pl 80" powinno być wpisane "$NETCAT nasz.firewall 999".
To rozwiązanie zostało podsunięte przez Mariusza Potockiego.

Druga metoda to zainstalowanie na firewallu małej bramki mail->SMS, która po połączeniu się z nią będzie w pierwszym wierszu danych otrzymywała numer na który ma wysłać SMSa, a dalej treść tego SMSa. Po czym samodzielnie łączyła by się z odpowiednim serwerem, i wysyłała wiadomość. To rozwiązanie jest o tyle prostsze, że nie wymaga ustawiania przekazywania połączeń na konkretne porty, inne dla wszystkich bramek.

Co robić, gdy coś nie działa?

Najpierw obejrzeć rozdział "Najczęściej zadawane pytania". Jeśli nie pomoże: pisać na listę dyskusyjną, starając się zamieścić w liście jak najdokładniejszy opis problemu, wypisywane komunikaty, opis sytuacji w jakiej błąd wystąpił itp.
Bardzo pomagają logi z uruchamiania skryptów. Można je wygenerować w ten sposób: wywoływać .powiadom za pomocą polecenia "/bin/sh -x ~/.powiadom 2>plik.z.logami". Dokładna lista wykonywanych poleceń zostanie zachowana w "pliku.z.logami", który można mi przesłać.

Ostatnia modyfikacja: 30-08-2008, 16:38:24.
<< Powrót na stronę główną skryptów SMS