(UWAGA! tekst jest częściowo nieaktualny.)
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.
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.
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).
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
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.
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.
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