Internet

    Już nie taki brzydki hack na hylafax i png

    W poprzednim wpisie – http://maciejewski.org/2012/05/16/hack-na-hylafax-i-faksy-w-png-lub-innym/ opisałem jak przerabiać tiffy generowane przez hylafax na png i wysyłać je ludziom na mail.

    Skrypt w FaxDispatch co prawda działał bardzo dobrze ale był dość brzydki i toporny (tworzenie headerów przez echo >> do plików itp).

    Pozatym okazało się że miał jedną zasadniczą wadę. Nie dało się przekazać wiadomości z załącznikami inline. Po naciśnięciu FORWARD wiadomość wyglądała mniej więcej tak:

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    Dlatego zrezygnowałem z sendmaila i uuencode na rzecz mime-construct

    Poprzedni skrypt wygląda teraz tak:

    convert /var/spool/hylafax/`cat /tmp/FILE` /tmp/fax/fax.png
    for D in /tmp/fax/*png
    do
    echo -n "--file-attach " >> /tmp/fax/faxy
    echo $D >> /tmp/fax/faxy
    done
    mime-construct --header 'From: Serwer faxów ' --to fax@***.pl --subject "Odebrano fax od $SENDER" `cat /tmp/fax/faxy`
    rm -rf /tmp/fax/*

    Teraz pętla for tworzy listę plików które mime-construct ma załączyć do wiadomości.

    Po zmianie skryptu dostarczanie faksów działa jak dotychczas, natomiast po przekazaniu mamy eleganckie załączniki tam gdzie powinny być :)

     

    Job / Praca

    Hack na hylafax i faksy w png (lub innym formacie graficznym)

    Na początku była euforia. Będziemy mieli firmowy wirtualny faks z pięcioma numerami! Notabene „paczkę” dziesięciu kolejnych numerów od Netii dostaliśmy za darmo, a myślałem, że za darmo nikt już nic nie daje. Zatem, serwer faksów stanął na nogi dość szybko i co również ważne, pierwszy numer udało się uruchomić bez większych problemów. Serwer to hylafax 4.4.7.

    $ faxstat
    HylaFAX scheduler on nidhog.***.pl: Running
    Modem tty00 (+48616******): Running and idle

    Po początkowym (moim) zachwycie jak to dobrze działa i jak stabilnie, zaczęły napływać pytania i prośby o zmianę formatu dostarczania faksów. Tutaj małe wtrącenie jak wygląda u nas dostarczanie faksów. Na jeden numer do księgowości kontrahenci wysyłają faks, który następnie jest dystrybuowany do wszystkich osób którym może być to przydatne. Te kilkadziesiąt osób patrzy sobie w swoje Thunderbirdy a niektóre wybitnie oporne jednostki w Outlooki i im szybciej po łypnięciu okiem można stwierdzić, że ten faks jest potrzebny lub nie tym lepiej.

    I tu właśnie zaczynają się schody bowiem hylafax po odebraniu faksu umie go dostarczyć jako postscript (domyślnie) lub wielostronicowy tiff lub pdf. Niby mamy wszystko co potrzeba, oryginał, obrazek, pdf. Niestety problem tkwi poniekąd w klientach pocztowych, które bez zagłębiania się w szczegóły nie mogą wyświetlić podglądu załącznika w pdf lub tiff.

    Domyślnie hylafax nie ma także opcji dla png, jpg czy gif ponieważ w/g twórców hylafax’a formaty te nie nadają się do odwzorowywania czarno-białych faksów oraz mają problem z wielostronicowymi faksami.

    Po kilkudniowych (naprawdę) poszukiwaniach jakichś pluginów i patchy okazało się, że są co prawda jakieś patche na /var/spool/hylafax/bin/faxrcvd , który jest odpowiedzialny za przyjmowanie faksów istnieją na forum hylafax ale posty są datowane między 1999 a 2004 i teraz ten plik wygląda zupełnie inaczej. Oczywiście przy każdym poście akademicka dyskusja dlaczego nie używać png czy jpg…

    Jak już pisałem, w modelu odbioru faksów, który u nas z powodzeniem funkcjonuje liczy się szybkość – dostajemy kilkanaście/kilkadziesiąt faksów dziennie, który to faks może dotyczyć jednej lub kilku osób z kiludziesięciu. Musi być obrazek dostępny w podglądzie dla programów pocztowych, koniec, kropka.

    Zamiast próbować zaimplementować obsługę png do faxrcvd, który dla mnie jest zbyt pokręcony, poszedłem inną drogą. Hylafax używa pliku /var/spool/hylafax/etc/FaxDispatch do dostosowywania dostarczania faksów. Można tam oprócz predefiniowanych pól dokonywać modyfikacji np przy pomocy CASE (gdy numer taki, dostarcz gdzieś) itp. Mi natomiast rzucił się w oczy przedostatni przykład z jakiegoś FaxDispatcha w cvsie hylafaxa:

    ## To make each received fax saved outside hylafax
    ## ( Don't forget to chown uucp /some/place )

    /bin/cp $FILE /some/place

    Czysty skrypt shellowy w pliku konfiguracyjnym :)

    Po kilkunastu wysłanych faksach testowych i poprawieniu kilku błędów oraz praw urodziło się coś takiego:

    FILETYPE=pdf;
    SENDTO=fax@***.pl;
    TEMPLATE=pl;

    convert $FILE /tmp/fax/fax.png
    echo "To: fax@***.pl" > /tmp/fax/mail_fax
    echo "From: Serwer faxĂłw *** Sp. z o.o. " >> /tmp/fax/mail_fax
    echo "Subject: Odebrano fax od $SENDER" >> /tmp/fax/mail_fax
    echo "MIME-Version: 1.0" >> /tmp/fax/mail_fax
    echo "Content-Type: text" >> /tmp/fax/mail_fax
    echo "Content-Disposition: inline" >> /tmp/fax/mail_fax
    for D in /tmp/fax/*png
    do
    uuencode $D $D >> /tmp/zalaczniki
    done
    cat /tmp/zalaczniki >> /tmp/fax/mail_fax
    sendmail "fax@***.pl" < /tmp/fax/mail_fax rm -rf /tmp/fax/* rm -rf /tmp/zalaczniki

    Do działania potrzebny jest ImageMagic.

    Krótkie objaśnienie

    - pierwsze trzy linijki to najbardziej podstawowa konfiguracja, odbiorca, format i szablon wiadomości. Zostawiłem podczas testowania jak przychodził faks aby przez wadliwy skrypt poniżej nie zostać pozbawionym faksów :)

    - następnie konwertujemy plik tiff który tworzy hylafax w /var/spool/hylafax/recvq na png. Konkretny plik hylafax przechowuje w zmiennej $FILE więc nie musimy nawet szukać tego o którego nam chodzi. Wielostronicowy tiff konwertowany jest na wiele plików png w/g schematu - jeśli dajemy nazwę fax.png jako pliku wyjściowego dostajemy fax-1.png, fax-2.png itd.

    - kolejne 6 linijek tworzy nagłówek maila, bez tego też zadziała, ale odbiorca dostanie fax bez tematu od UNIX-to-UNIX Copy (uucp@domena), założę się, że to się nie spodoba ludziom z poza IT :) Mamy zatem ładnie od kogo dla kogo, z numerem telefonu który do nas wysyłał w temacie.

    - następne 4 linijki to pętla działająca na katalogu gdzie są nasze skonwertowane pliki png. Każdy plik png trzeba zakodować do ascii i dokleić do wcześniej stworzonego pliku z nagłówkiem.

    - ostatecznie wysyłamy mail sendmailem dołączając nagłówki i załączniki z pliku.

    - ostatnie dwie linijki - sprzątamy oczekując następnego faksu :)

    Trzeba pamiętać, aby wszystkie polecenia i katalogi użyte w tym skrypcie mogły być wykonane przez użytkownika uucp.

    Jeśli wszystko gra, adresat maila powinien otrzymać mniej więcej taką wiadomość:

    NetBSD

    wip/downtimed

    Po wip/digitemp dzisiaj dodałem drugą paczkę do wip’a. Downtimed śledzi czasy uruchomienia, rebootów, zawieszeń, braku prądów itp i prowadzi statystyki jak długo system był offline. Co ciekawe, planowe restarty (przynajmniej w przypadku mojego serwera) trwają dokładnie tyle samo – 66 sekund (reboot) przy czym „shutdown -r now” jest o 3 sekundy szybszy (63 sek) niż reboot :)

    Przykładowe statystyki wyglądają tak:

    $ downtimes
    down 2012-02-28 14:57:17 -> up 2012-02-28 14:58:23 = 00:01:06 (66 s)
    down 2012-02-28 15:05:12 -> up 2012-02-28 15:06:18 = 00:01:06 (66 s)
    down 2012-02-28 15:07:25 -> up 2012-02-28 15:08:28 = 00:01:03 (63 s)

    © odwiedź stronę http://maciejewski.org po więcej fajnych postów!

    Budowa

    Eko CO?

    Dzisiaj nie będzie o IT, a o… ogrzewaniu :)

    Po ostatnich zmianach z akcyzą na materiały węglowe, kupno w sensownym czasie węgla, czy ekogroszku jest niemożliwe, trzeba wypełnić mnóstwo papierków za każdym razem. Papierki te podejrzewam za jakiś czas będą donosem samym na siebie za zanieczyszczanie środowiska CO2 , nawet jeśli palimy EKO-groszkiem :) Ja zatem aby oszczędzić sobie nerwów, kłopotów i czasu (kwitki trzeba przechowywać 5 lat!) wolałem akcyzę dopłacić (od 40gr do 1 zł na worku 25 kg). Wróćmy jednak do ekologii i ogrzewania pomijając zawiłości finansowe. Co nam daje ekogroszek teoretycznie:

    – gwarancję frakcji – 8-25mm aby nam się nie klinował w podajniku

    – mało popiołu (5-10%)

    – małą spiekalność

    – ma być pozbawiony pyłu węglowego

    – wygodne składowanie.

    Zapewne każdy, kto miał jakąkolwiek styczność z ekogroszkiem przyzna, że powyższe jest prawdą w przypadku stosowania najwyższej jakości węgla. Ja mogę jedynie pochwalić „Pieklorza”, którego cena niestety jest już zniechęcająca do kupna. Jak to wygląda w praktyce:

    – frakcja – kilka razy wymieniałem zawleczkę oraz rozkręcałem podajnik aby cofnąć ślimak który zaklinował się z kawałkiem węgla lub kamieniem (!) znacznie większym niż 25mm.

    – popiół – z podanego przedziału (5-10%) raczej skłaniałbym się ku 10% albo powyżej. Czyli na każdy zasyp (150kg) musimy wybrać teoretycznie 15kg popiołu i coś z nim zrobić. Do póki możemy go zagospodarować wypełniając jakieś luki w drodze gruntowej to nie jest źle, ale zagospodarować np 100 czy 200 kg po sezonie (jeśli spalimy tylko 2 T) a wszędzie ładne drogi z pozbruku to niestety – trzeba zapłacić za wywóz. O bałaganie (to łągodne określenie) związanym z wyjmowaniem popiołu i czyszczeniem pieca nie wspomnę.

    – spiekalność – tutaj jakiego węgla bym nie użył – ZAWSZE – powstawały spiekliny i w dłuższym okresie czasu wypalony węgiel nie lądował w popielniku tylko zaczął odkładać się w okolicy retorty czasami budując okazałe menhiry w górę. Do czego może prowadzić zaczopowanie kotła nie do końca spalonym węglem i jego poruszenie pokazuje poniższy film z mojego niedawnego czyszczenia pieca….

    Jak wygląda kotłownia po wywietrzeniu i pozbyciu się dymu chyba nie muszę wspominać – opad atomowy na całej powierzchni. Popiół jest też radioaktywny – polecam dodanie go jako nawóz do roślin – od razu szybciej rosną mutanty :)

    – brak pyłu węglowego – co jest istotą ekogroszku. Ponownie, w najlepszych węglach faktycznie nie ma go, widać że jest porządnie wypłukany, wysuszony i zapakowany w plastikowe worki. Z innymi jest już gorzej, szczytem jest węgiel na stacjach benzynowych (w takich czarny workach) gdzie popiołu jest ilość wprost gigantyczna. Całkowite pomylenie idei ekogroszku jest na składach węglowych gdzie „ekogorsek” leży w hałdzie, niejednokrotnie zamarzniętej a pakowany jest przez obsługę w worki parciane i przewiązany sznurem od snopowiązałki. Jak się wygląda po kontakcie z takim workiem (mokry, brudny) nie muszę mówić. Leżący i czekający na spalenie węgiel także traci swoje właściwości grzewcze (nawet do 30% kaloryczności w ciągu 2 miesięcy).

    – składowanie – jest wygodne pod warunkiem, że mamy szczelne worki plastikowe (w parcianych z czasem traci swoje właściwości), nie zamarznięte i nie uwalone węglem. O ręcznie pakowanych po 50 kg nawet nie wspominam – unieś sobie taki na 1,8m żeby wsypać. Jeśli kupujemy mokry węgiel ze składu na dworze np o wilgotności 20% czyli cieknie z niego jako cholera to gratulacje – kupiłeś 5 litrów wody w worku 25 kg – o tyle masz mniej węgla i tyle musisz poświęcić energii spalając węgiel aby odparować wodę i przy okazji przyczynić się do korozji swojego kotła.

    Ponarzekałem na węgiel – mimo to twiererdzę, że nadal jest to najlepsze paliwo do kotłów na paliwo stałe. Ale jest alternatywa. Alternatywa o właściwościach na tyle cudownych, że aż trudno samego siebie przekonać do spróbowania, bo przecież jak spalać efektownie… trocinę.

    A właściwie sprasowaną trocinę czyli pelety. Okazało się, że niedaleko mnie jest producent pelet więc kupiłem 5 worków 25 kg na próbę. Po kilku dniach palenia i używania co mogę powiedzieć. Jest rewelacja! Kaloryczność zbliżona do węgla 20-21 kJ (najlepszy węgiel miał około 26 kJ). Kocioł pracuje sprawniej, szybciej osiąga temperaturę pozwalającą dogrzać dom kiedy termostat wyśle mu sygnał, że temp. spada. Dłużej też temperatura spada po wyłączeniu nawiewu. Na wykresie strzałką (klik aby powiększyć) zaznaczone jest od kiedy palą się same pelety. Na lewo od strzałki sam węgiel. Jak widać nie ma w zasadzie, żadnej różnicy, pelety jednak szybciej osiągają zadaną temperaturę co widać po bardziej stromych zboczach wykresu na prawo od strzałki i to nawet już w wyższych temperaturach. Pewnie zastanawiasz się – no dobra – fajnie się pali, ale co w przypadku kiedy piec czeka aż temperatura opadnie. Na przykład piec dogrzewa do 20st C do godziny 20 i akurat o 20 ma 65 stopni. Po 20:00 przełącza się na temperaturę nocną i dogrzewa jeśli spadnie temperatura w pomieszczeniu do 15 stopni. Czyli o 20:01 piec ma 65 stopni i temperatura wody musi spaść do 34 st. aby kocioł na nowo zaczął dmuchać aby podtrzymać ogień. Też się nad tym zastanawiałem i oprócz wątpliwości co do szybkości spalania się trocin to było główną obawą czy pelety mają sens. Powróćmy do wykresu. Zaraz obok strzałki po prawej stronie najwyższy pik to 23:00 już na samych peletach. Tak ustawiłem termostat aby mi utrzymywał temperaturę dzienną 20stC do 23:00 dla testów. Od 23:00 temperatura zaczęła spadać i aby spaść do granicznych 34stC zajęło to prawie 1,5h… Następnie dmuchawa zaczęła rozdmuchiwać ciemności pieca i o dziwo pojawił się żar a zaraz za nim ogien. Podajnik wepchnął nową porcję pelet (około dwóch garści w danym momencie się pali) i temperatura zaczęła rosnąć. Przy 35 stopniach dmuchawa się wyłącza, temperatura wzrasta bezwładnie pod wpływem ognia i żaru jeszcze do około 40 stopni i tak w kółko. Podtrzymanie ognia miałem ustawione na „co 30 minut – 40 sekund” czyli w ciągu prawie 1,5h podtrzymanie odpaliło 2 razy. Nastawy sterownika też zmieniłem nieznacznie – pałza między dawkami paliwa a pelet zmniejszyła się o 5 sekund, a podawanie paliwa zwiększyłem o 5 sekund. Takie ustawienia zapewniają mi ciągłe podtrzymanie ognia oraz szybkie dogrzewanie w/g potrzeb.

    Teraz jeszcze krótko na temat punktów, które opisałem przy ekogorszku:

    – frakcja – gwarancja 6mm od producenta. Pelety są niesamowicie lekkie (a przy tym twarde jak kamień, nie mogłem ich rozdusić w palcach) zatem nie obciążamy też podajnika tak mocno jak w przypadku węgla.

    – popiół – tu jest rewelacja! Pelety nie przekraczają 0,5% popiołu, w praktyce można mieć pelety o zawartości popiołu 0,25% czyli z 1T pelet dostajemy … 2,5kg popiołu. Popiół jest oczywiście ekologiczny, można wykorzystać jako nawóz. Palimy zatem dokładnie to za co zapłaciliśmy :)

    – spiekalaność – brak – pelet spala się w 100%.

    – pył i ogólnie bałagan – brak, można w normalnych rzeczach dosypywać pelety do zasobnika i niczym się nie pobrudzimy, z kotła nic nie dymi, nie paruje (wilgotność około 5%), zupełnie inna jakość.

    – składowanie – jak widać na zdjęciu – tak jak w przypadku węgla – wygodne worki 25kg. Z tym że worki są czyste, nie są mokre (bo mokry pelet to pelet do wyrzucenia więc nikt go tak nie składuje).

    Oprócz powyższego dochodzi jeszcze miły zapach w kotłowni – jak z zakładu stolarskiego lub tokarskiego. Cena także zachęcająca – około 890 zł brutto za tonę. Jeśli chodzi o ekologię to także tutaj duży plus. Nie ma tlenku siarki jak w ekogorszku, efektem spalania jest tylk CO2 w ilości takiej jakie posiadało drzewo użyte do produkcji peletu.

    Gorąco polecam jeśli szukasz alternatywy dla ekogroszku lub zastanawiasz się nad wyborem sposobu realizacji swojego CO.

     

    Job / Praca

    Windows Server + GPO + LogIN/OFF Script + XCOPY Incremental Backup

    W dużym przedsiębiorstwie zadbanie o backup serwerów i stacji roboczych to dość istotne przedsięwzięcie. Użytkownicy raczej nie są świadomi, że powinni robić kopie tego co ważne. Po czym wnoszę? Po prawie 4 latach pracy jako Admin w dużej korpo, na palcach jednej ręki mogę policzyć osoby które zapytały się, jak lub gdzie mają zgrywać swoje dane lub poprosiły o kupno np dysku USB. Zatem dbamy. Serwery opiszę kiedy indziej – rsync, tar, certyfikaty do ssh, mt – raczej są znane i stosowane, dodatkowo można zastosować bonding do zwiększenia transferu, ale o tym jak już pisałem – kiedy indziej.

    Dzisiaj prosty sposób na użycie polityk Windows Serwera do kopiowania plików użytkowników na zdalny storage w mieszanym środowisku Windows 7 i Windows XP.

    Co to będzie robiło:
    – rozpoznaje jakiego używamy Windowsa :)
    – rozpoznaje czy katalog z nazwą użytkownika jest już stworzony , jeśli nie – tworzy.
    – w katalogach użytkownika dzieli na podkatalogi „dokumenty” i „pulpit” aby nie było bałaganu.
    – wyłącza potwierdzenia kopiowania plików na istniejące pliki
    – kopiuje także pliki ukryte
    – po pierwszym kopiowaniu nadpisuje tylko te które się zmieniły lub dodaje nowe.

    Skrypt BAT wygląda tak:

    IF EXIST %userprofile%\Documents GOTO BackupWin7

    :BackupWinXP

    IF EXIST \\storage\data\%username% GOTO TylkoKopia
    mkdir \\storage\data\%username%
    xcopy /Y "c:\Documents and Settings\%username%\Moje Dokumenty" \\storage\data\%username%\dokumenty /e /i /h /d
    xcopy /Y "c:\Documents and Settings\%username%\Pulpit" \\storage\data\%username%\pulpit /e /i /h /d
    :TylkoKopia
    xcopy /Y "c:\Documents and Settings\%username%\Moje Dokumenty" \\storage\data\%username%\dokumenty /e /i /h /d
    xcopy /Y "c:\Documents and Settings\%username%\Pulpit" \\storage\data\%username%\pulpit /e /i /h /d
    Goto EOF

    :BackupWin7
    IF EXIST \\storage\data\%username% GOTO TylkoKopia7
    mkdir \\storage\data\%username%
    xcopy /Y "c:\Users\%username%\Documents" \\storage\data\%username%\dokumenty /e /i /h /d
    xcopy /Y "c:\Users\%username%\Desktop" \\storage\data\%username%\pulpit /e /i /h /d
    :TylkoKopia7
    xcopy /Y "c:\Users\%username%\Documents" \\storage\data\%username%\dokumenty /e /i /h /d
    xcopy /Y "c:\Users\%username%\Desktop" \\storage\data\%username%\pulpit /e /i /h /d
    Goto EOF

    :EOF

    Zdalna lokalizacja to oczywiście storage – trzeba dopisać swój serwer lub IP gdzie ma się kopiować, lub dopisać do swojego DNS’a IP do maszyny która będzie nazywać się storage.

    /Y – wyłącza promptowanie o potwierdzenie nadpisania pliku
    /D – bez podania czasu działa jak incremental backup

    Pierwszy IF EXIST na podstawie katalogu Documents sprawdza czy używamy Windows XP czy 7. Następnie w odpowiednich blokach IF EXIST sprawdza czy jest na serwerze storage katalog z nazwą użytkownika, jeśli nie ma tworzy ją i zaczyna kopiowanie. Jeśli jest, po prostu zaczyna kopiowanie.

    Skrypt należy zapisać na serwerze w miejscu dla login lub logoff skryptów (odpowiedni katalog otworzy się przy dodawaniu skryptu do GPO).

    W zależności od potrzeb podczepiamy skrypt na logowanie lub wylogowywanie. Przy wylogowywaniu backup następuje zaraz po zakończeniu pracy. Jeśli użytkownik używa komputera stacjonarnego to jest to najlepsza opcja, wyłącza komputer, idzie do domu, komputer kopiuje to co trzeba i się wyłącza. Gorzej jeśli to laptop i użytkownik chce go zabrać i musi czekać, wtedy lepiej dać skrypt jako login. Skrypt odpali się jednocześnie z logowaniem i będzie działał w tle umożliwiając pracę. Można dodać @echo off na początku aby nie było widoczne stado latających plików :)

    Implementacja na Windows Serwer:

    1. gpmc.msc
    2. Wybieramy odpowiednie OU
    3. Prawy klawisz na OU – Create And Link GPO Here…
    4. Nadajemy nazwę
    5. Prawym klawiszem na nazwie
    6. Edit
    7. Wybieramy User Configuration
    8. Wybieramy Windows Settings
    9. Wybieramy Scripts(Login/Logoff)
    10. Dwa razy klikamy na wybranym skrypcie (login lub logoff)
    11. W Logon lub Logoff Properties Wybieramy Add..
    12. Wybieramy Browse.. i wybieramy skrypt do wykonania. (Jeśli go nie ma to właśnie w tej lokalizacji ma się znaleźć – trzeba go tam wkopiować).
    13. OK i zamykamy edycję GPO.
    14. W shellu uaktualniamy polityki – gpupdate /force

    Próbujemy się wylogować lub zalogować, efektem powinny być katalogi użytkowników na zdalnym storageu.

    root@storage:/data/samba# ll
    razem 44
    drwxrwxrwx 10 root root 4096 2012-01-17 14:12 ./
    drwxr-xr-x 7 root root 4096 2012-01-12 21:42 ../
    drwxr-xr-x 4 nobody nogroup 4096 2012-01-17 13:08 user1/
    drwxr-xr-x 4 nobody nogroup 4096 2012-01-17 13:49 user2/
    drwxr-xr-x 4 nobody nogroup 4096 2012-01-17 12:59 user3/
    drwxr-xr-x 4 nobody nogroup 4096 2012-01-17 13:56 user4/
    drwxr-xr-x 4 nobody nogroup 4096 2012-01-17 14:05 user5/
    drwxr-xr-x 4 nobody nogroup 4096 2012-01-17 13:49 user6/
    drwxr-xr-x 4 nobody nogroup 4096 2012-01-17 13:06 user7/
    drwxr-xr-x 4 nobody nogroup 4096 2012-01-17 14:12 user8/

    Po ciężkim dniu pracy, jeśli storage wyposażony jest w streamer można cały katalog /data/samba nagrać jako gotowy dzienny backup.
    Do skryptu oczywiście można dopisać dodatkowe katalogi w/g potrzeb.
    Raz na jakiś czas (np. miesiąc)warto skasować całą zawartość backupu, aby wykonał się pełen backup, ponieważ skrypt nie kasuje plików które były lokalnie, ale już ich nie ma.

    © odwiedź stronę http://maciejewski.org po więcej fajnych postów!

    NetBSD

    wip/digitemp

    Zostałem maintainerem (ah jak to brzmi ;) pierwszej paczki w Work In Progress Pkgsrc (pkgsrc-wip).

    Paczka, którą zacommitowałem to Digitemp. Dzięki której można odczytywać temperatury z termometrów podłączonych przez RS232. Ja używam go do odczytywania temperatury na kotle CO oraz rysowaniu wykresu temperatury przy pomocy RRDTool. Jak to wygląda na żywo można zobaczyć tu: http://maciejewski.org/temperatura/.

    W pkgsrc digitempa niestety nie było, a skompilowany ze źródeł nie za bardzo chciał działać. Utrzymywanie linuksa na osobnej maszynie tylko po to, aby mielił powietrze raz na jakiś czas odczytując temperaturę także było bez sensu. Dlatego przy pomocy tego guide’a, morr’a i bartosza z #netbsd.pl oraz patchy Marka Felskowskiego ostatecznie digitemp zagościł w pkgsrc jako gotowa paczka i działa bez najmniejszych problemów tak jak należy :)

    # uname -mrs
    NetBSD 5.1.0_PATCH amd64
    # digitemp -s /dev/tty00 -a
    DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
    GNU Public License v2.0 - http://www.digitemp.com
    Oct 31 11:16:13 Sensor 0 C: 33.19 F: 91.74
    #

    © odwiedź stronę http://maciejewski.org po więcej fajnych postów!

    Job / Praca

    Bezpieczne filtrowanie poczty przy pomocy imapfilter

    Jeśli dostajecie mnóstwo maili codziennie, zapewne filtrujecie je w tym czy innym programie pocztowym. Jeśli jednak wyłączycie ten program, wszystkie maile trafiają do INBOX i tam czekają na swój los do czasu uruchomienia programu pocztowego który je odfiltruje. Problem pojawia się kiedy odbieramy maile na telefonie, lub na innym komputerze. Na innej maszynie można od biedy przenieść regułki filtrowania, ale robić to przy okazji każdego użycia nowego komputera albo webmaila nie ma sensu. W przypadku telefonu jest jeszcze gorzej, a ikonka koperty z liczbą 900+ zniechęca w ogóle do przeglądania poczty.

    Do sprawy podchodzimy oczywiście kompleksowo, jako Admini wiemy, że trzeba się tak napracować aby się na dłuższą metę nie narobić :) Dlatego najrozsądniejszym rozwiązaniem jest użycie imapfilter’a na jakiejś UNIXowej maszynie, która i tak ciągle mieli powietrze (oczywiście w przerwach kiedy coś robi pożytecznego ;). Jeśli jesteście adminami własnego serwera pocztowego to już nie ma lepszego miejsca – łączenie do localhost jest najszybsze i najbezpieczniejsze bo nie wychodzimy poza maszynę gdzie mamy pocztę.

    Imapfilter korzysta z języka LUA, którego składnia jest dość prosta a opcje imapfiltra bardzo dobrze opisane w man imapfilter_config.

    Mój przykładowy konfig wygląda tak:

    options.timeout = 120
    options.subscribe = true

    account = IMAP {
    server = 'localhost',
    username = 'login@domena.pl',
    password = 'haslo',
    }

    arpwatch = account.INBOX:contain_from('arpwatch@domena.pl')
    account.INBOX:move_messages(account['Raporty.Arpwatch'], arpwatch)

    vpnok = account.INBOX:contain_subject('VPN Accepted!')
    account.INBOX:move_messages(account['Raporty.VPN.OK'], vpnok)

    vpnbad = account.INBOX:contain_subject('VPN Rejected')
    account.INBOX:move_messages(account['Raporty.VPN.Rejected'], vpnbad)

    eventsentry = account.INBOX:contain_from('eventsentry@domena.pl')
    account.INBOX:move_messages(account['Raporty.Event\ Sentry'], eventsentry)

    potwierdzenia = account.INBOX:contain_subject('Przeczyt') +
    account.INBOX:contain_subject('Potwierdzenie doręczenia wiadomości') +
    account.INBOX:contain_subject('Potwierdzenie dostarczenia wiadomosci') +
    account.INBOX:contain_subject('Read:') +
    account.INBOX:contain_subject('Potwierdzenie otrzymania:') +
    account.INBOX:contain_subject('Potwierdzenie dostarczenia wiadomości') +
    account.INBOX:contain_subject('wietlono)')
    account.INBOX:move_messages(account['Potwierdzenia'], potwierdzenia)

    Na co warto zwrócić uwagę:
    + oznacza OR
    * oznacza AND
    – oznacza NOT

    Jeśli podkatalog w Maildirze zawiera spację, trzeba ją wyESCkejpować – np. Raporty.Event\ Sentry

    Cały konfig zapisujemy w domyślnym katalogu dla imapfiltra czyli $HOME/.imapfilter/config.lua i odpalamy na początek z opcją -v aby zobaczyć więcej komunikatów. Jeśli plik z konfiguracją nazywa się inaczej lub jest w innym miejscu wywołujemy imapfilter -v -c /sciezka/do/konfiga

    Jeśli nie ma błędów możemy przejść do dalszej części.

    W zasadzie to jest gotowe rozwiązanie, jeśli jesteśmy sami na serwerze. Jeśli są inni użytkownicy, którzy dodatkowo posiadają prawa root’a albo po prostu nie pasuje nam pozostawiania swojego hasła gdzieś w postaci jawnego tekstu możemy zrobić taki manewr.

    W przypadku NetBSD instalujemy paczkę:
    wip/ccrypt: Encrypts/decrypts files using Rijndael block cipher
    oraz
    sysutils/shc: Shell script to C compiler

    Piszemy prosty skrypt który będzie:

    – dekryptował nasz konfig
    – wykonywał konfig przy pomocy imapfiltra
    – kryptował konfig z powrotem

    na poczatek kodujemy config:

    ccencrypt -e -K supertajnehaslo! config.lua

    w wyniku dostajemy plik config.lua.cpt

    Teraz skrypt:

    #!/bin/sh
    ccencrypt -d -K supertajnehaslo! config.lua.cpt
    imapfilter -c /sciezka/do/pliku/config.lua
    ccencrypt -e -K supertajnehaslo! config.lua

    Po wykonaniu tego skryptu jeśli ścieżki się w nim zgadzają do programów i do konfiga, uprzednio skonfigurowane filtrowanie powinno zadziałać.

    No dobra, tylko co daje kodowanie pliku jeśli hasło podajemy jako parametr? W takim wypadku nic nie daje, łatwo podejrzeć hasło i zdekodować plik konfiguracji gdzie jest hasło do naszej poczty.

    Należy zatem „skompilować” skrypt przy pomocy shc.

    shc -v -r -T -f skrypt.sh

    W wyniku dostaniemy:

    skrypt.sh.x – binarka gotowa do odpalenia
    skrypt.sh.x.c – kod źródłowy wygenerowany z naszego skryptu w takim jakby C.

    Sprawdzamy czy uruchomienie ./skrypt.sh.x robi dokładnie to samo co odpalenie imapfiltra lub skrypt.sh. Jeśli tak to pozostaje nam skasować skrypt.sh gdzie mamy jawny klucz do zakodowanego pliku z konfigiem do imapfiltra gdzie mamy jawne hasło do naszego konta pocztowego :) oraz kasujemy skrypt.sh.x.c gdzie mamy źródła naszej binarki. Nadajemy prawo x do wykonywanie pliku – chmod 700 skrypt.sh.x

    Na koniec dodajemy do crona wywoływanie programu co ileś tam minut:

    crontab -e
    */1 * * * * /usr/home/cancer/skrypt.sh.x

    Od teraz skrypt będzie dokonywał filtrowania co minutę na chwilę dekodując plik z konfiguracją, po czym będzie go kodował. Oczywiście rozwiązanie nie jest idealne, co prawda w ps hasło się nie pojawi, ale można debugować jakby się ktoś uparł. Lepsze jednak takie rozwiązanie niż żadne.

    © odwiedź stronę http://maciejewski.org po więcej fajnych postów!

    Internet

    Fanpage!

    Wszystko idzie do przodu, nawet moje własne miejsce w sieci musi zadomowić się w części czegoś większego. Prawda jest taka, że więcej osób wyraża jakąś interakcję z tym co napiszę na FB niż na Blogu. Z drugiej strony to nie powinienem narzekać, bo blog oprócz bycia online nic tak naprawdę nie wnosi, a jak już wnosi, to są to moje zapiski w formie howto przydatnych rzeczy. Średnio ciekawe dla nietechnicznych osób. Dlatego, od wczoraj posiadam fanpage ! Można „polubić” (interesujące jak znaczenie tego słowa zmieniło się, polubienie oznacza tak naprawdę zasubskrybowanie wpisów na stronie bloga :) i cieszyć się aktualizacjami. Nieśmiało dodam, że samego bloga można też zasubskrybować przze RSS (pewnie brzmi jak magia dla tylkofacebookowiczów ;) i mail (mniej magii ;). Strona bloga na FB dostępna pod tym adresem: https://www.facebook.com/pages/cancers-blog/222703311128891

     

    Job / Praca

    tmux FTW!

    W codziennej pracy Administratora, logowanie na wiele maszyn i przeprowadzanie update’ów, przeglądów, testów, audytów to niemal codzienność. Przy paru maszynach nie jest to takie problematyczne, przy kilku albo kilkunastu – codzienne logowanie może być już powoli frustrujące. Z pomocą przychodzi tmux czyli terminal multiplexer. Tmux to coś takiego jak screen, tylko lepszy :) Potrafi oprócz wielu sesji w jednym oknie które można przełączać, także dzielić okno na panele horyzontalnie i wertykalnie czyli dla osób które wytkną mi zaraz „polglisz” pionowo i poziomo. Wszystkie polecenia można podać jako parametr dlatego jedną komendą możemy sobie przygotować całe środowisko. Dla moich potrzeb – czyli logowanie się na bramki VPNowe w ilości 6 najlepszym rozwiązaniem jest siatką 3 wiersze na 2 kolumny. Dodatkowo po odpowiednim podzieleniu okna, następuje automatyczne logowanie przez ssh do odpowiednich maszyn dzięki kluczom bez hasła. Efekt ma być taki, że jedna komenda przygotowuje 6 maszyn do pracy zdalnej :)

    Jedziemy:

    tmux new-session -d 'ssh cancer@10.1.2.6' \; split-window -d 'ssh cancer@10.1.3.6'\; split-window -d 'ssh cancer@10.1.4.6'\; split-window -h 'ssh cancer@10.1.5.6'\; select-pane -t 2\; split-window -h 'ssh cancer@10.1.6.6'\; select-pane -t 4\; split-window -h\; attach

    Krótkie wyjaśnienie:

    new-session -d 'ssh cancer@10.1.2.6′ – tworzy nową sesję (okno główne i wywołuje komendę systemową w ”) -d powoduje odłączenie wszystkich klientów jeśli byli podłączeni.
    split-window – dzieli okno, domyślnie w poziomie
    select-pane -t n – wybiera okno (licząc od zera i od lewej do prawej)
    attach dołącza do całej sesji.

    Efekt:

    Teraz już można od razu działać, nie tracąc czasu na logowanie się do wszystkich maszyn oddzielnie :)

    © odwiedź stronę http://maciejewski.org po więcej fajnych postów!

    Family / Rodzina

    9 miesięcy debugowania !

    W 2007 roku zacząłem pisać pewien skrypt:

    #!/bin/sh
    kid1=Antonina
    echo Moje dziecie to $kid1

    Już wlistopadzie działał całkiem nieźle :)

    # sh kid0.sh
    Moje dziecie to Antonina

    W 2010 jednak czegoś zaczęło mi w nim brakować i postanowiłem coś do niego dodać, żeby był bardziej rozbudowany.

    Zacząłem od prostej zmiany nie wiedząc jeszcze co mi z tego wyjdzie:

    #!/bin/sh
    kid1=Antonina
    kid2=""
    echo Pierwsze dziecie to $kid1
    echo Drugie dziecie to $kid2

    Jak łatwo było przewidzieć wynik nie był zadowalający:

    # sh kid.sh
    Pierwsze dziecie to Antonina
    Drugie dziecie to

    ale obrany kierunek mi się spodobał więc brnąłem dalej. Kolejna wersja też nie była zachęcająca, wręcz bezsensu:

    #!/bin/sh
    kid1=Antonina
    kid2=$kid1
    echo Pierwsze dziecie to $kid1
    echo Drugie dziecie to $kid2

    co dawało nic nie wnoszące:

    # sh kid2.sh
    Pierwsze dziecie to Antonina
    Drugie dziecie to Antonina

    Aż w końcu po 9 miesiącach debugowania co jest nie tak

    #!/bin/sh
    kid1=Antonina
    kid2=$kid1
    echo $kid1 > /tmp/tmp1
    cat /tmp/tmp1 | sed "s/Anton/Michal/g" > /tmp/tmp2
    kid2=`cat /tmp/tmp2`
    echo Pierwsze dziecie to $kid1
    echo Drugie dziecie to $kid2

    dokładnie 2 kwietnia o 13:49 – skrypt zadziałał z prędkością 3800g, zajmował też przyzwoicie bo 58 cm, ale najważniejsze, że był w 100% sprawny :)

    # sh kid3.sh
    Pierwsze dziecie to Antonina
    Drugie dziecie to Michalina

    (Tak, wiem, że jest tam brzydki hack z sedem i przekierowaniem wyników do pliku, ale coś nie chciał mi sed na zmiennych działać a pomysł na posta szybko chciałem wcielić w słowo pisane :)

    A dla wszystkich, którzy nie lubią lub nie rozumieją konsolowych krzaczków – GUI w HD !

    To jest właśnie $kid2 czyli Michalina po 9 miesiącach debugowania :)

    To jest właśnie $kid2 czyli Michalina po 9 miesiącach debugowania :)

    Troskliwy $kid1 opiekuje się $kid2

    Troskliwy $kid1 opiekuje się $kid2

    Siostry $kid[1-2] w komplecie ! :)

    A teraz już trochę poważniej, jeśli ktoś nadal myśli co autor palił ;) Dnia 2.4.2011 na świat przyszła nasza druga córka, której nadaliśmy imię Michalina (ładnie koresponduje z Antonina :). Poród odbył się w tym samym lecz wyremontowanym szpitalu św. Rodziny przy ul. Jarochowskiego w Poznaniu i o dziwno trwał około 15 minut (w przeciwieństwie do Tosi, która rodziła się 10 godzin). Tata oczywiście był obecny przy porodzie, mama zresztą też ;) Wszystko odbyło się tak błyskawicznie, że położna ledwo zdążyła z zestawem do rodzenia. Zarówno mama jak i dziecko spisały się wyśmienicie, co potwierdza dziesiątka Apgara dla małej i szybki powrót obojga do domu :) Tosia z kolei pomijając dzień odbioru ze szpitala, w której była bardzo niepewna co się właściwie dzieje, od razu polubiła swoją siostrę (nie mówi o niej inaczej jak Michalinka :) i aktywnie uczestniczy w jej życiu pomagając przy pielęgnacji oraz śpiewając jej piosenki i kołysanki :)

    Related Posts with Thumbnails

    © odwiedź stronę http://maciejewski.org po więcej fajnych postów!

    Add your widget here