31 May 2009

wget - Linux download manager - spis ważniejszych opcji i tricków

man wget - najciekawsze opcje ;)

-q, --quiet
Tryb cichy. Wyłącza wyjście Wget.
-t liczba, --tries=liczba
Ustawia liczbę ponawiania prób na liczbę. Dla nieskończonego ponawiania: 0
-O plik, --output-document=plik
Dokumenty będą zapisywane do pojedynczego pliku (jeśli podano parę - zostaną sklejone). Jeśli plik istnieje, to zostanie nadpisany. Włączenie tej opcji automatycznie ustawia liczbę prób na 1.
-c, --continue
Kontynuuje pobieranie częściowo ściągniętego pliku. Opcja -c wpływa tylko na wznawianie pobrań zaczętych przed bieżącym wywołaniem Wget i tylko dla tych plików, których lokalne kopie nadal istnieją. Istnieje wiele ograniczeń w stosunku do tej opcji należy jej używać z rozwagą.
--limit-rate=wielkość
Ogranicza prędkości pobierania do wielkość bajtów na sekundę. Na przykład --limitrate=20k ograniczy prędkość ściągania do 20KB/s, a --limitrate=1m do 1MB/s.
--header=dodatkowy-nagłówek
Opcja ta pozwala na określenie dodatkowego nagłówka przesyłanego serwerom HTTP. Możliwe jest określenie więcej niż jednego dodatkowego nagłówka przez kilkakrotne podanie opcji --header.
wget --header='Accept-Charset: utf-8' --header='Accept-Language: pl' http://jakas.strona.pl/
Podanie pustego łańcucha jako nagłówka kasuje wszystkie uprzednio zdefiniowane przez użytkownika nagłówki.
--referer=url
Zamieszcza nagłówek ‘Referer: url’ w żądaniu HTTP. Przydatne do pobierania dokumentów z dodatkowym filtrowaniem po stronie serwera (obejście blokowania leechowania obrazków).
--user-agent=nazwa-agenta
Wget przedstawia się serwerowi HTTP jako agent o określonej nazwie - modyfikowany nagłówek "User-Agent"
-r, --recursive
Włącza pobieranie rekurencyjne - czyli wraz z podkatalogami, odnośnikami.
-l głębokość, --level=głębokość
Podaje maksymalny poziom głębokości rekurencji. Domyślnie jest to 5.
-p, --page-requisites
Ta opcja powoduje, że Wget ściągnie wszystkie pliki niezbędne do poprawnego wyświetlenia danej strony HTML. Obejmuje to takie rzeczy jak grafikę i powiązane arkusze stylów - polecam użycie wraz z opcją -k. Należy zauważyć, że Wget pobierze tylko pojedynczą stronę i jej elementy. Program nie będzie podążał za odnośnikami z tej strony do zewnętrznych dokumentów. Do ściągania pojedynczej strony i wszystkich towarzyszących jej elementów (nawet jeśli leżą one na odrębnych serwerach WWW) i upewnienia się, że całość lokalnie poprawnie się wyświetla, autor oprócz -p powinno korzystać się z kilku dodatkowych opcji:
wget -E -H -k -K -p http://jakis.serwer.pl/1.html
-A lista_akc --accept lista_akc
-R lista_odrz --reject lista_odrz
Jedna z opcji rekurencyjnego akceptowania/odrzucania. Podaje listę oddzielonych przecinkami przyrostków nazw plików (rozszerzeń plików) lub wzorców nazw, jakie mają być akceptowane lub odrzucane.
-D lista_domen, --domains=lista_domen
Ustala domeny, do których program może przechodzić. lista_domen jest listą separowaną przecinkami. Opcja ta nie włącza -H.
--exclude-domains lista_domen
Podaje domeny, do których program ma nie przechodzić.
-H, --span-hosts
Włącza przechodzenie pomiędzy hostami przy pobieraniu rekurencyjnym.
-np, --no-parent
Powoduje, że Wget przy pobieraniu rekurencyjnym nigdy nie wchodzi do katalogu nadrzędnego. Przydatna opcja, gdyż gwarantuje, że ściągane będą tylko pliki poniżej pewnego poziomu.
Część z poniższych porad znalazłem, a część sam wymyśliłem ;).

wget ignorowanie pliku robots.txt (ignore robots)

wget -erobots=off http://jakas.strona.pl/

Jak zalogować się do formularza korzystając z wgeta?

wget --post-data="login=user&password=pw" http://jakas.strona.pl/form.php

wget rapidshare hack

A sam też się pobawiłem i odkryłem małego hacka. Jeżeli masz dostęp do konta premium w serwisie rapidshare, a chciałbyś pobierać z tego serwisu pliki tylko w nocy, możesz skorzystać z wgeta i dodatkowego skryptu (skryptu nie należy stosować na publicznych serwerach shellowych):
#!/bin/bash

RS_LOGIN="login_tutaj"
RS_PASS="haslo_tutaj"

# if your version of wget doesn't want to work:
# 1. goto: http://ftp.gnu.org/gnu/wget/
# 2. get 1.10.2
# 3. compile (./configure && make)
# 4. cp src/wget to your file and 
# 5. change command to ./wget

for file in `cat src | grep -E '^http:\/\/rapidshare'` ; do
   echo $file
   wget -c --http-user=$RS_LOGIN --http-password=$RS_PASS $file
done
po uzupełnieniu zmiennych RS_LOGIN i RS_PASS i utworzeniu listy adresów w pliku src skrypt automatycznie zacznie ściągać dane.

Co oznaczają te opcje?

--http-user=użytkownik, --http-passwd=hasło
Określają nazwę użytkownika i hasło, które Wget prześle serwerowi HTTP. W zależności od rodzaju protokołu, Wget koduje je stosując albo uwierzytelnianie podstawowe ("basic", niechronione) albo w oparciu o skrót ("digest"). Żeby uchronić hasła przed podpatrzeniem, należy przechowywać je w pliku .wgetrc lub .netrc i, za pomocą “chmod", zapewnić tym plikom ochronę przed innymi użytkownikami.

Podsumowanie

Wget to naprawdę program o dużych możliwościach, a dzięki niewielkiemu rozmiarowi jest dostępny w niemal wszystkich możliwych dystrybucjach Linuxa. Początkujących użytkowników może odstraszyć jego konsolowy interfejs, ale naprawdę warto się z nim zapoznać - bo nie ma lepszego programu do pobierania plików z sieci (przynajmniej ja nie znam).

28 May 2009

Linux Kernel Phailure in Gnome.

Cool, but please no comments.

Zautomatyzowana konwersja plików

Często do automatycznej konwersji plików pisze się pętle, wyglądające mniej więcej tak:

Sposób 1

#!/bin/bash
IFS=$'\n'

for filename in `ls *.png`; do
   # TODO: Execute sth on each file
   #       this is only example (it may not work - not tested)

   new_file_name=`basename $filename .png`
   convert $filename $new_file_name
done
Sposób fajny, ale za każdym razem trzeba to napisać/skopiować. Jest również rozwiązanie prostsze:

Sposób 2

ls *.png | xargs -I{} echo convert "{}" '`basename {} .png`'.eps > runme.sh && \
bash runme.sh && \
rm runme.sh

Podsumowując

Wynik działania obu skryptów powinien być identyczny - niemniej jednak skrypt numer 1 powinine być wykorzystany, jeżeli wymagane jest wykonanie wielu operacji na jednym pliku. Natomiast skrypt numer 2 ma taką zaletę, że można go napisać w jednej linii - nie jest wymagane tworzenie osobnego pliku .sh.

22 May 2009

Fairy Tale WebApp

Niedawno wpadł mi do głowy pomysł na ciekawy serwis internetowy. Cała spraw jest dosyć podobna do blipa, twittera i paru innych serwisów, niemniej jednak jest to trochę różniące się. Od razu mówię, że nie sprawdzałem, czy coś takiego jest gotowe - to zadanie pozostawiam osobom, które by się podjęły realizacji tego pomysłu. A więc do dzieła pora opowiedzieć o co chodzi.

Na czym to polega?

Dawno, dawno temu gdy byłem jeszcze w szkole średniej na nudnych lekcjach popularne było przesyłanie sobie liścików, albo grupowe pisanie historyjek. Wyglądało to w taki sposób, że była jedna kartka i wielu autorów - całość zabawy zaczynała się od stworzenia początku historyjki, która wyglądała mniej więcej tak: Szedłem przez las aż tu nagle .... Następnie każda osoba, która dostała kartkę dopisywała zdanie albo dwa i podawała kartkę kolejnej osobie - w ten sposób szybko tworzyły się dziwne historyjki z których szło później się pośmiać.

Fairy Tale WebApp - funkcje dla zarejestrowanych

  • Rejestrację, zarządzanie swoim kontem, tworzenie grup znajomych (wszystko to co jest Web2.0 ;))
  • Użytkownik zarejestrowany powinien mieć możliwość tworzenia, moderowania i edytowania swoich historyjek
  • Każda historyjka powinna mieć możliwość ustawienia własnego tła - tworzonego przez użytkownika (jakiś obrazek, css)
  • Ocenianie, obserwowanie i posiadanie rankingu "historyjek"
  • Dodawanie tagów do historyjek
  • Powiadomienia o nowych historyjkach utworzonych przez znajomych
  • Każdy wpis w historyjce która edytowaliśmy/jesteśmy właścicielem powodowałby:
    • nowe części napisane przez kogoś będą widoczne na naszym profilu (tak jak na flickr.com - "Recent Activity")
    • jeżeli jesteśmy właścicielem historyjki od razu możliwość moderowania tekstu
  • Możliwość śledzenia historyjek poprzez RSS - każda posiada swój własny kanał
  • Możliwość zamknięcia i usunięcia historyjki
  • Możliwość utworzenia historyjki nie do dopisywania - statycznej

Fairy Tale WebApp - funkcje dla niezarejestrowanych

  • Wyszukiwanie historyjek po tagach i słowach występujących tekście
  • Dopisywania swoich części do dowolnych historyjek - wymagane by było wpisanie nicka - ważna sprawa ograniczenie ilości możliwych wpisów w ciągu minuty (oczywiście limitowane to powinno być po IP!)

Z uwag które mi przyszły do głowy

  • Można by zintegrować lektora z każda historyjką - jakaś Ivona, czy inne Expressivo
  • Fajnie by było jakby długość komunikatów nie była ograniczona
  • Jakaś integracja z: Blipem, Facebookiem(Aplikacja Facebook), Twitterem by była wskazana - charakter wirusowy samej aplikacji tego by wymagał
  • Jeżeli historia nie była aktualizowana przez 3 miesiące powinna zostać zamknięta - wyłączona możliwość dopisywania
  • Koniecznie musi być zrobione ukrywanie wulgaryzmów! - wiadomo jak dzieci wejdą
  • Powinna być stworzona kategoria 'erotyka' ;) - domyślnie pomijana w momencie wyszukiwania w serwisie

Narzędzia i technologie jakich bym użył

  1. Google AppEngine(Python, Java) lub PHP w zależności od przewidywanych ilości użytkowników
  2. Systemy autentykacji: OpenSocial, OpenID, GoogleID - OAuth, AuthSub, Windows LiveID, Ning, Zembly
  3. Po stronie użytkownika do budowy interfejsu wykorzystałbym XHTML, CSS i JQuery z ajaxem
Z tego co słyszałem takie coś ktoś kiedyś zrobił (pojedyncza instalacja = jedna historyjka), ale nie potrafię tego znaleźć.

PS: Jeśli wykorzystasz ten pomysł, masz jakieś pytania, lub po prostu chcesz się skonsultować napisz do mnie, chętnie Ci pomogę! :)

21 May 2009

SystemRescueCD over SSH

Czym ratować system?

SystemRescueCd - to mini dystrybucja LiveCD bazująca na Gentoo Linux(jądro Linux 2.6.29, serwer X.org w wersji 1.5.3 i odchudzone Xfce), przeznaczona głównie do odzyskiwania danych z uszkodzonych systemów typu Linux, oraz ich "naprawy". Oprogramowanie wydawane jest w dwóch wersjach: dla komputerów PC (x86) oraz PowerPC (PPC), cała dystrybucja obsługuje kodowanie znaków UTF-8 (wszystkie programy zostały skompilowane z USE="unicode"), pozwala na zdalne użytkowanie przy pomocy VNC-server, obsługuje rozszerzone opcje bootowania pozwalające na zaawansowaną konfigurację sieci.
Dystrybucja standardowo obsługuje wiele systemów plików: ext2, ext3, ReiserFS, XFS, JFS, NTFS (ntfs3g), VFAT, btrfs, ISO9660
SystemRescueCD zawiera oprogramowanie niezbędne do naprawy systemu, nadpisania mbr, lub przywrócenia danych najczęściej wykorzystywane pewnie będą narzędzia:
  • GParted - program z GUI do edycji partycji
  • GNU-Parted - konsolowy program do edycji partycji
  • Sfdisk - odmiana fdiska, pozwala zapisać i odczytać obraz tablicy partycji do pliku
  • TestDisk - odszukuje zaginione (usunięte itp.) partycje. Obsługuje ReiserFS, NTFS, FAT32, ext2, ext3
  • Partimage - pozwala na zapisanie i wczytanie obrazu całej partycji
  • FSArchiver - pozwala duplikować partycje (NTFS także)
  • Midnight Commander - menedżer plików
  • Clam AntiVirus - program antywirusowy
  • NTFS-3G - sterownik do obsługi systemu plików NTFS (odczyt i zapis)
  • rsync - narzędzie pozwalające przesyłać pliki przez sieć
  • MemTest+ - program do testowania pamięci
Niedawno została wydana nowa wersja oznaczona numerkiem 1.20, całość jest uruchamiana z dysku CD (obraz ISO zajmuje ~230MB) lub można przygotować PenDrive bootowalny.

Opcje bootowania

SystemRescueCD podczas uruchamiania pozwala na dodanie dodatkowych opcji:
  • docache - Załaduje cały system do pamięci RAM - dzięki temu, można wyjąć płytę z napędu (znacznie przyspiesza działanie)
  • rootpass - Opcja ta pozwala zdefiniować hasło administratora systemu - użyteczne w połączeniu z ssh (czyli coś co nas interesuje - demon SSH jest uruchamiany na starcie systemu)
  • dodhcp - Opcja wymusza próbę pobrania adresu dla karty sieciowej z serwera DHCP
  • ethx=x.x.x.x - Pozwala ustawić adres IP statycznie
  • gateway=x.x.x.x - Pozwala ustawić adres IP serwera DNS
Więcej opcji rozruchowych można podejrzeć naciskając przycisk 'F2'. Użycie parametrów bootowania wygląda następująco:
rescuecd rootpass=password docache

Personalizowanie SystemRescueCD

Jeżeli mamy serwer w zdalnej lokacji, a nie mamy do niego dostępu poprzez KVM, a o dostępie fizycznym możemy tylko pomarzyć (ale mamy tam kogoś kto potrafi włożyć i wyjąć płytkę z napędu CD, ew. zmienić kolejność bootowania) możemy spróbować utworzyć spersonalizowaną wersję SystemRescueCD pozwalającą nam na uruchomienie systemu w taki sposób, żeby można było na niego się zalogować po SSH.

Na zrobienie własnego obrazu płyty SystemRescueCD są tak naprawdę dwa sposoby, jeden prosty i jeden trudny:
  • prosty - Wykorzystać samo LiveCD SystemRescue jakąś maszynę wirtualną (Sun xVM VirtualBox) i narzędzia na dostępne na płycie
  • skomplikowany - Wykorzystać obecny system operacyjny i rozpakować obraz ze squashfs - w moim przypadku się to nie udało, bo w Debianie jest po prostu stara paczka (gałąź stabilna) squashfs-tools i nie mogłem rozpakować obrazu z systemem plików
Ale wracając do samego sedna postu, by uczynić SystemRescueCD bootowalne bez dodatkowej interwencji i od razu ze startującym serwerem ssh i znanym hasłem, mamy znów dwie opcje.
  1. Korzystamy z kluczy SSH
  2. Wpisujemy hasło roota na stałe i je pamiętamy (rozwiązanie prostsze, lecz mniej bezpieczne)

Jeśli masz mało czasu

Zobacz na końcu artykułu jak to zrobić w wersji 'quick and dirty'

Personalizacja

Ja do całego procesu użyłem VirtualBoxa i zestawi skryptów dostępnych na livecd. Ustawienia maszyny wirtualnej to:
  • Dysk twardy: 3GB
  • Pamięć: 1GB
Po uruchomieniu systemu należy wykonać:
  1. Partycjonowanie dysku:fdisk /dev/sda i nacisnąć:
    • n - utwórz nową partycję
    • p - typu primary
    • 1 - nr partycji
    • [enter] [enter] - ustawienia początku partycji i końca (domyślne)
  2. Utworzenie systemu plików na dysku:
    mkfs.xfs -f /dev/sda1
  3. A później:
    % mount /dev/sda1 /mnt/custom
    % sysresccd-custom extract
  4. Spowodują one rozpakowanie obrazu squashfs (trochę to trwa) oraz przygotowanie struktury do utworzenia płyty cd. Jeśli coś jest niejasne zajrzyj na: stronę dokumentacji dotyczącej personalizacji SystemRescueCD.
Skoro mamy już rozpakowany system root, można zająć się częścią właściwą:

Montowanie, chrootowanie i proc

# mount -o bind /proc /mnt/custom/customcd/files/proc
# chroot /mnt/custom/ /bin/bash

Generowanie kluczy serwera i wyłączenie ich generowania na starcie

Uwaga: Tak naprawdę ten krok jest opcjonalny, służy tylko przyspieszeniu startu systemu.
$ ssh-keygen -t rsa1 -b 1024 -f /mnt/custom/customcd/files/etc/ssh/ssh_host_key
$ ssh-keygen -d -f /mnt/custom/customcd/files/etc/ssh/ssh_host_dsa_key
$ ssh-keygen -t rsa -f /mnt/custom/customcd/files/etc/ssh/ssh_host_rsa_key

Dodanie kluczy ssh

Uwaga: Tutaj znajduje się dokłaadniejszy opis generacji kluczy ssh - polecam przeczytać.
$ mkdir /root/.ssh
ssh-keygen -t dsa
cp /root/.ssh/id_dsa.pub /root/.ssh/authorized_keys
Jeśli klucze są umieszczone w katalogu /root/.ssh to wszystko ;). Hint: Znacznie lepiej by było stworzyć dedykowanego użytkownika do logowania się po ssh, a rootowi zabronić tego - no ale to niech każdy sobie sam zrobi.

Spakowanie obrazu squashfs i iso

Należy wyjść się z chroota i odmontować niepotrzebne systemy plików: umount /mnt/custom/customcd/files/proc oraz rozpocząć tworzenie pliku z głównym systemem plików (squashfs) - to potrwa chwilkę
/usr/sbin/sysresccd-custom squashfs
Po zakończeniu zostanie utworzony plik /mnt/custom/customcd/isoroot/sysrcd.dat.

Dodawanie dodatkowych narzędzi, skryptów, itp.

W tej chwili można dodać do płyty dodatkowe narzędzia i skrypty, wystarczy je skopiować do katalogu "/mnt/custom/customcd/isoroot/". Tylko nie należy przesadzić (płyta ma tylko 700MB pojemności - du -sh /mnt/custom/customcd/). Dodatkowe informacje jak np automatyczne uruchamianie narzędzi użytkownika są dostępne na stronie projektu.
Ja ze swojej strony polecam skopiowanie kluczy ssh do głównego katalogu nośnika:
cp -a /mnt/custom/customcd/files/root/.ssh /mnt/custom/customcd/isoroot/ssh-keys

Wybór klawiatury

By system starował bez interwencji użytkownika trzeba wybrać domyślną klawiaturę poleceniem:
sysresccd-custom setkmap pl

Generowanie obrazu iso

/usr/sbin/sysresccd-custom isogen mojeRescue

Wersja 'quick and dirty'

Edycja opcji bootowania

Obraz squashfs rozpakowujemy tak samo tylko nie wykonujemy chrootowania i generacji kluczy. Zamiast generowania całego obrazu kopiujemy go z obecnej płyty:
cp /mnt/cdrom/sysrescd.* /mnt/custom/customcd/isoroot/
A następnie edytujemy plik /mnt/custom/customcd/isoroot/isolinux/isolinux.cfg Umieszczając w nim taką dodatkową treść (zmieniając pierwszy wpis):
default rescuecd
append inintrd=initram.igz rootpass=password setkeymap=pl
Następnie należy wygenerować obraz iso: /usr/sbin/sysresccd-custom isogen my_srcd.

Inne sposoby stworzenia SystemRescueCd z dostępem ssh

  • Wykorzystanie właściwości autorun płyty SystemRescuCD - czyli napisanie skryptu podmieniającego klucze ssh (nie powinno być trudne)
  • Zmiana hasła roota w chrootowanym systemie oraz wyłączenie możliwości jego generowania na starcie - robienie rzeczy na około

Inne narzędzia pomagające odtworzyć system

Jeśli okazało się, że awaria dotyczy dysku twardego, polecam skorzystanie z narzędzia Recovery Is Possible dostępnego tutaj - narzędzie to zawiera chyba większość programów umożliwiających odtworzenie zawartości dysku po jego uszkodzeniu.

18 May 2009

solved: nautilus high cpu usage problem when opening directory

Dziś przy otwieraniu katalogu Nautilusem (menadżer plików dla Gnome) cała aplikacja zaczęła działać strasznie wolno i zjadać cały procesor, rozwiązaniem tego problemu w moim przypadku okazało się:
$ rm -rf ~/.thumbnails/
$ killall nautilus
Thumbnails to katalog gdzie są gromadzone miniaturki obrazów generowane przez Nautilusa. Przy wejściu do każdego katalogu jest odczytywana zawartość ~./thumbnails/ więc to powodowało zwolnienie pracy menadżera plików. Jeśli by to nie pomogło polecam wykonać:
$ mkdir ~/gnome-old
$ mv ~/.gnome* ~/gnome-old
$ mv ~/.nautilus ~/gnome-old
$ mv ~/.metacity ~/gnome-old
$ killall nautilus
Przeniesie to dane konfiguracyjne aplikacji Gnome do innego katalogu, jeśli to nie rozwiąże problemu - należy je przenieść z powrotem - by nie stracić ustawień.

16 May 2009

Pokazywanie postępu w programie konsolowym

Jedną z zasad pisania programów w konsoli powinno być pokazanie użytkownikowi, że program wciąż pracuje np. wykonuje jakąś długą operację - dzięki temu, użytkownik go po prostu bestialsko nie ubije. Sprawa jest dosyć prosta:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char **argv) {
    unsigned int i = 0;
    unsigned int end = 0x99;
    struct timespec go_sleep_for;


    go_sleep_for.tv_sec=0;
    go_sleep_for.tv_nsec=9999999; //999999999;

    for (i=0 ; i<=end ; i++) {
 printf("\r%d of %d",i,end);
 fflush(stdout);
 nanosleep(&go_sleep_for,NULL);
    }
    printf("\n");
}

Jak to działa?

Otóż całym sekretem są dwie linie:
  • fflush(stdout); - zmusza program do opróżnienia strumienia wyjściowego
  • printf("\r%d of %d",i,end); - drukuje (cyferki) postęp poprzedzony przez \r - znak powrotu karetki
To chyba na tyle :) - proste ale może się komuś przydać szczególnie jeśli zapomni o fflush - co na początku przygody z językiem C się zdarzyło. Co ciekawe działa ten sposób też w innych językach - więc nie jest on "C specific". Artykuł pochodzi z odmętów mojego dysku. Kompilacja i uruchomienie tego cudu techniki to: gcc animation_line.c ; ./a.out pod warunkiem, że powyższa treść została zapisana w zbiorze animation_line.c znajdującym się w katalogu w którym mamy uruchomioną konsole.

12 May 2009

Górska odznaka turystyczna GOT PTTK

Jako, że moja "lepsza połowa" i ja raczej lubimy aktywne spędzanie czasu, po jednej z wycieczek górskich wpadliśmy na pomysł w miarę regularnego spędzania w ten sposób czasu. Naszym celem będzie zdobycie Górskiej Odznaki Turystycznej PTTK (wersja mała brązowa).

Górska Odznaka Turystyczna PTTK popularna

Górska Odznaka Turystyczna PTTK mała brązowa

Poniższy post raczej ma za zadanie usystematyzować wiedzę "jak rozpocząć" i jest przeznaczony dla początkujących. Oprócz tego na pewno będzie dla mnie zbiorem linków w które klikać gdy będę chciał policzyć punkty ;).

Jak zdobyć odznakę GOT PTTK?

Zdobywanie odznaki odbywa się w oparciu o samodzielnie prowadzoną książeczkę (koszt 4 PLN) do zakupienia w regionalnym oddziale PTTK. W takiej książeczce zapisywany zapisywany jest dokładny przebieg przebytych tras i punkty należne za poszczególne odcinki trasy. Punkty liczy się według kolejnej książeczki dostępnej w oddziałach terenowych PTTK (36 PLN o ile mnie pamięć nie myli). Co ważne, nie wolno powtarzać tras w ramach zdobywania jednego stopnia odznaki, chyba że przejście odbywa się w przeciwnym kierunku.

Punktacja tras GOT PTTK

W starej wersji punktacja GOT PTTK jest dostępna w serwisie gotki. Odnośniki do nowych, ale częściowych wersji punktacji (tylko na określony region - brak Beskidu Śląskiego) znajdują się w GOTFaq jest to ogólnie bardzo dobre miejsce by zacząć. My będziemy chodzić głównie w Beskidzie Śląskim póki co zaliczyliśmy Baranią Górę - ale bez książeczek.

Mam nadzieję, że na tą strone parę osób za sprawą Google przyjdzie więc umieszczę tutaj jeszcze dekalog turysty górskiego - żeby początkujący wiedzieli ...

Jak się zachować w górach - dekalog turysty górskiego

  1. Zanim wyruszysz w góry zastanów się, czy posiadasz dostateczne doświadczenie. Przed wyjściem poddaj ocenie stan zdrowia i siły, swoje i towarzyszy.
  2. Przygotuj wcześniej dokładny plan wycieczki, najlepiej udają się improwizacje... przygotowane. Poczytaj przewodniki, mapy, skorzystaj z usług informacji turystycznej, wskazówek przewodników górskich, gospodarzy schronisk, miejscowej ludności
  3. W górach szybko i często zmieniają się warunki atmosferyczne, niezbędną jest odzież chroniąca przed złą pogodą i zimnem oraz mocne, wysokie buty na profilowanej podeszwie.
  4. Wychodząc na wycieczkę pozostaw w domu, w schronisku czy u znajomych wiadomość o celu i trasie wycieczki oraz godzinę powrotu. W ten prosty sposób zapewnisz sobie szybką pomoc w razie wypadku.
  5. Szybkość poruszania dostosuj do możliwości najmniej sprawnego uczestnika wycieczki. "Pożeranie kilometrów" prowadzi niechybnie do wyczerpania, a poza tym ogranicza możliwość podziwiania uroków górskiego krajobrazu.
  6. Uważaj na każdy krok - upadki zdarzają się także w łatwym terenie. Szczególnej zwłaszcza ostrożności wymagają trudniejsze partie trasy: strome, mokre i zaśnieżone stoki, płaty starego śniegu. Nie zbaczaj ze znakowanego szlaku.
  7. Nie strącaj kamieni, gdyż narażasz innych turystów na poważne niebezpieczeństwo. Miejsce zagrożone przez spadające kamienie przechodź szybko i uważnie.
  8. Decyzja o zawróceniu z drogi to NIE hańba, lecz głos rozsądku. Nie wstydź się zawrócenia, gdy załamie się pogoda, nadejdzie mgła lub trasa okaże się zbyt trudna.
  9. Szanuj przyrodę, nie hałasuj, jest to niebezpieczne. Dbaj o czystość i porządek w górach. Usuwając śmieci dajesz dowód swej kultury.
  10. Jeżeli mimo ostrożności zdarzy się wypadek - przede wszystkim zachowaj spokój. Poszkodowanego ułóż w bezpiecznej pozycji, w widocznym miejscu i pod opieka a przedewszystkim wezwij pomoc!

Odnośniki przydatne dla turysty górskiego

Ok, to wszystko - pora zacząć chodzić. Możliwe, że teraz będą pojawiać się na tym blogu okazjonalnie relacje z wypraw górskich – będą tagowane słowem „got”, jeśli ktoś jest zainteresowany tylko tym tematem – powinien sobie za subskrybować ten RSS Feed.

11 May 2009

Remote Firewall HOWTO

Zdarza się, że administrator systemu musi zmienić reguły firewalla nie mając fizycznego dostępu do komputera. Sytuacja taka jest dosyć niebezpieczna, ponieważ jedna źle skonstruowana reguła może odciąć dostęp do zdalnego systemu. Poniżej chciałbym przedstawić jeden ze sposobów w miarę bezpiecznego przeprowadzania takiej operacji.

Całość opiera się na skrypcie w języku Bash, powodującym zresetowanie ustawień firewalla jeśli choć jedna zakończy się niepowodzeniem. By nie pisać wiele wstępu, przedstawię kod:
#!/bin/bash

IFS=$'\n'

# output iface
NET_ETH=eth0 

# disable all comands tools we have to use absolute paths
export PATH=""

# Clean up all chains
flush() {
 echo "Setting Accept Policy for all chains ..."
 /sbin/iptables -F
 /sbin/iptables -Z
 /sbin/iptables -X
 /sbin/iptables -P INPUT ACCEPT
 /sbin/iptables -P OUTPUT ACCEPT
 /sbin/iptables -P FORWARD ACCEPT
 
 # czysczenie tablic nat mangle filter
 echo "Flushing all modules ..."
 for table in nat mangle filter ; do
  /sbin/iptables -t $table -F
  /sbin/iptables -t $table -X
 done
 echo "Firewall is now very unoptimized"
}

# iptables command wrapper - if wrong rule - flush
iptables() {
 /sbin/iptables $@
 if [ $? -ne 0 ] ; then
  echo 'Error: >> iptables' $@
  # zeby sie nie odciac z powodu zlej regulki
  flush
  exit 1;
 fi
}

# sysctl wrapper
sysctl() { 
 /sbin/sysctl $@ > /dev/null
}

# modprobe wrapper
modprobe() {
 /sbin/modprobe $@
 if [ $? -ne 0 ] ; then
  echo "Error: loading module "$@
  exit 1;
 fi
}

# do init - add chains, load modules, config sysctls
init() {
 echo "Loading kernel modules ..."
 # start initializations
 echo "Initializing default settings ..."
 # TODO: Add code here
}

# set default policy
policy() {
 echo "Setting firewall default policy ..."
 # TODO: Add default policy
}

# do connect all parts (my fw has few chains here i'm connecting it)
# you can write your rules here
connect() {
 # TODO: Apply firewall rules here
}

##
## MAIN
##
echo -ne "Simple firewall script\n"

if [ $# -lt 1 ] ;then
 echo "usage: $1 [start|stop]"
 exit
fi

case "$1" in
 start ) flush
  policy
  init
  connect ;;
 stop) flush;;
 *)  echo "Wrong arg $1";;
  #flush;;
esac
To chyba na tyle ;). Skrypt działa na pewno sam czasami tego rozwiązania używam, ale trochę bardziej rozbudowanego niemniej jednak cała idea jest taka sama. Czyli każde wywołanie iptables jest opakowane w funkcje i w tej funkcji jest sprawdzany returncode - jeśli jest różny od zero - coś poszło nie tak - następuje reset ustawień.

Jak można rozwinąć skrypt?

  • Dodać regułki iptables
  • Dodać kod pozwalający sprawdzić czy możliwe jest połączenie się po ssh z serwerem
  • Ewentualnie przepisać to na wygodniejszy język (np. Perl)
  • Nie aplikować wszystkich reguł za każdym razem tylko te zmienione