Polska Planeta Debiana

Wpis zamieszczony o 00:06:35, 30 listopada 2007 - 16 komentarzy


Ubuntu ma swoją Planetę, czemu zatem Debian nie ma mieć polskiego odpowiednika Planet Debian?

Zatem - otwiera... tzn. startujemy! ;-) Hadret przeprowadził na swoim blogu ankietę, w której większość jego czytelników opowiedziała się za potrzebą powstania Planet Debian w naszym ojczystym języku. Troszkę pracy i oto jest:

Polska Planeta Debiana


Jesteś bloggerem? Piszesz o Debianie? Chcesz zwiększyć poczytność bloga (a któż nie chce ;-))? Napisz... Więcej szczegółów do znalezienia na stronie Polskiej Planety Debiana.

Ponadto, jeśli chcesz pomóc w tworzeniu serwisu, masz ciekawe pomysły do realizacji, piszesz artykuły bądź newsy ze świata Debiana, możesz dołączyć do naszej skromnej dwójki :-)
Pozostaje pytanie - czemu nikt się nie zajął portalem traktującym o systemie Debian GNU/Linux wcześniej?

Czytaj dalej : 16 komentarzy

Instalacja pakietu Debiana bez zależności

Wpis zamieszczony o 08:21:45, 17 listopada 2007 - 22 komentarze


UWAGA! Poniższego rozwiązania używasz na własną odpowiedzialność. SOA#1

System zależności zaimplementowany w apt-get ma swoje wady i zalety. Niewątpliwą zaletą jest "zrób-i-zapomnij". Jedna komenda instaluje pakiet, jego zależności i wszystko co potrzebne do działania programu. Jednak największa zaleta czasem staje się największą wadą...

Dawno temu zauroczony systemem pakietów w Slackware napisałem sobie mały skrypt do instalacji pakietu Debiana bez jego zależności.

#!/bin/bash
sciezka=$(apt-cache show $1 | grep Filename | awk '{print $2}')
sciagnij=$(wget -c http://ftp.debian.org/$sciezka)
plik=$(apt-cache show $1 | grep Filename | awk '{print $2}' | sed "s/\//  /g" | awk '{print $5}')
dpkg -x $plik /

Tak proste że aż głupie :-). Jeden minus - trzeba znać nazwę paczki i podać ją jako parametr. Sam plik zapisujemy np. jako /sbin/apt-inst i cieszymy się jak dzieci że każdy program który zainstalujemy w ten sposób będzie zachowywał się mniej więcej "in_Slackware_style":

$ krusader
krusader: error while loading shared libraries: libkjsembed.so.1: cannot open shared object file: No such file or directory

No ale co za problem ;-).

# apt-inst libkjsembed1

I krusader działa :-).

Raz jeszcze piszę - używasz na własną odpowiedzialność. Sam skrypt przydaje się przy budowaniu minimalistycznego systemu, trzeba jednak posiadać dość sporą wiedzę na temat systemu Linux. Za pomocą tego "czegoś" udało mi się swego czasu zmieścić działającego Debiana + KDE (dość minimalistyczne) w około 350MiB. Wiem że możliwe jest postawienie bardzo minimalistycznego systemu (np. dla routera sprzętowego) na mniej niż 64MiB. Komuś się uda? :-)

ps. wbrew pozorom lubię slacka a wpis nie ma charakteru prowokacji :)

ps2. uprzedzam pytanie: "Jak odinstalować taki program?" - ręcznie. Sprawdzasz gdzie się zainstalował i ręcznie usuwasz pliki.

Czytaj dalej : 22 komentarze

Bluetooth Proximity

Wpis zamieszczony o 21:47:49, 15 listopada 2007 - 42 komentarze


Posiadasz laptopa z wbudowanym interfejsem BlueTooth? Korzystasz z telefonu//palmtopa z Bluetooth? Ten artykuł może Ciebie zainteresować.

Gdy tylko zakupiłem nowego laptopa zamarzyła mi się dodatkowa funkcja wykorzystująca BlueTooth. Chciałem, aby laptop automatycznie blokował ekran gdy tylko odejdę od niego po czym logował się automatycznie gdy zasiądę przy klawiaturze. Troszkę szperania w google, troszeczkę własnej inwencji i oto jest :-). Skrypt BlueTooth Proximity:

#!/bin/bash

DEVICE="MAC"
CHECK_INTERVAL=2
THRESHOLD="-1"
PID=0
START_CMD='true'
FAR_CMD='dcop kdesktop KScreensaverIface lock'
NEAR_CMD='dcop kdesktop KScreensaverIface quit'
HCITOOL="/usr/bin/hcitool"
DEBUG="/tmp/logi"

connected=1

function msg {
    echo "$1" >> $DEBUG
}

function check_connection {
    connected=0;
    found=0

    for s in `$HCITOOL con`; do
        if [[ "$s" == "$DEVICE" ]]; then
            found=1;
        fi
    done
    if [[ $found == 1 ]]; then
        connected=1;
    else
       msg 'Attempting connection...'
        if [ -z "`$HCITOOL cc $DEVICE 2>&1`" ]; then
            msg 'Connected.'
            connected=1;
        else
            connected=0;
        fi
    fi
}

function check_xscreensaver {
    PID=`ps -C xscreensaver --no-heading | awk '{ print $1 }'`
    if [ "$PID" == "" ];  then
        $START_CMD &
    fi
}

name=`$HCITOOL name $DEVICE`
msg "Monitoring proximity of \"$name\" [$DEVICE]";

state="near"
while /bin/true; do

    check_xscreensaver
    check_connection

    if [[ $connected -eq 1 ]]; then
        rssi=`$HCITOOL rssi $DEVICE | sed -e 's/RSSI return value: //g'`

        if (( "$rssi" <= $THRESHOLD )); then
            if [[ "$state" == "near" ]]; then
                msg "*** Device \"$name\" [$DEVICE] has left proximity"
                state="far"
                echo "daleko - wlaczam screena"
                $FAR_CMD
                echo $?
            fi
        else
            if [[ "$state" == "far" ]]; then
                msg "*** Device \"$name\" [$DEVICE] is within proximity"
                state="near"
                sleep 7;
                $NEAR_CMD
                kdialog --passivepopup "Urządzenie w zasięgu Bluetooth, odblokowanie ekranu" 5
                $START_CMD &
            fi
        fi
        msg "state = $state, RSSI = $rssi, PID = $PID"

    else
        if [[ "$state" == "near" ]]; then
            msg "*** Device \"$name\" [$DEVICE] has been disconnected"
            state="far"
            $FAR_CMD > /dev/null 2>&1
        fi
    fi

    sleep $CHECK_INTERVAL
done

Oryginał znajduje się pod tym adresem, ja jednakże nieznacznie go zmodyfikowałem aby odpowiadał moim preferencjom. W konfiguracji skryptu znajdujemy następujące parametry:

Skrypt najlepiej umieścić w /bin/btprox

# cp btprox /bin/btprox

Ostatnim krokiem jest udostępnienie użytkownikowi bez uprawnień korzystania z hcitool i l2ping.

# chmod +s /usr/bin/hcitool
# chmod +s /usr/bin/l2ping

I tyle. Odpalamy btprox i sprawdzamy działanie skryptu :-).

Podobną funkcjonalność oferuje nam bluez-utils wersji >3.0 jednak u mnie i kilku moich kolegów to po prostu nie działa. Ekran zostaje zablokowany gdy komórka całkowicie wyjdzie poza zasięg BlueTooth co może sprawdza się w gorszych chipsetach, jednak u mnie BT łapie na ponad 10 metrów przez dwie ściany...

Czytaj dalej : 42 komentarze

Toshiba Portege R200 + Debian GNU/Linux

Wpis zamieszczony o 15:15:54, 06 listopada 2007 - 25 komentarzy


Niedawno zakupiłem nowego notebooka - Toshiba Portege R200 (nadal posiadam Toshibę Portege R111, którą nie tak dawno opisywałem). I ponownie - w sieci nie znalazłem żadnego w miarę aktualnego opisu konfiguracji systemu Linux pod tą maszynkę. Opiszę sposób uruchomienia wszystkich możliwości tego sprzętu pod Linuksem. Troszkę się z tym męczyłem, więc mam nadzieję że komuś się to przyda i zaoszczędzi sobie kilka godzin pracy.

Specyfikacja techniczna

Dokładniejszy spis daje nam lspci:

00:00.0 Host bridge: Intel Corporation Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller (rev 03)
00:02.0 VGA compatible controller: Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller (rev 03)
00:02.1 Display controller: Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 1 (rev 03)
00:1d.0 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #1 (rev 03)
00:1d.1 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #2 (rev 03)
00:1d.2 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #3 (rev 03)
00:1d.3 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #4 (rev 03)
00:1d.7 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller (rev 03)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev d3)
00:1e.2 Multimedia audio controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller (rev 03)
00:1e.3 Modem: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Modem Controller (rev 03)
00:1f.0 ISA bridge: Intel Corporation 82801FBM (ICH6M) LPC Interface Bridge (rev 03)
00:1f.1 IDE interface: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) IDE Controller (rev 03)
01:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8053 PCI-E Gigabit Ethernet Controller (rev 15)
02:05.0 Ethernet controller: Atheros Communications, Inc. AR5212 802.11abg NIC (rev 01)
02:0b.0 CardBus bridge: Texas Instruments PCIxx21/x515 Cardbus Controller
02:0b.4 Generic system peripheral [0805]: Texas Instruments PCI6411, PCI6421, PCI6611, PCI6621, PCI7411, PCI7421, PCI7611, PCI7621 Secure Digital (SD) Controller

Oraz lsusb:

Bus 001 Device 003: ID 08ff:2580 AuthenTec, Inc.

No to lecimy! Jeśli nie wymieniam poniżej któregoś z podzespołów znaczy to, że działa bez żadnych modyfikacji - OOTB.

CPU - do poprawnej obsługi skalowania częstotliwości procesora potrzebujemy modułów toshiba_acpi asus_acpi freq_table acpi_cpufreq backlight processor toshiba i wszystkich zależnych od nich. Dodatkowe pakiety:

# apt-get install powersaved acpid kpowersave

Karta graficzna - chipset Intela jest jednym z najlepiej wspieranych obecnie układów graficznych pod linuksem. Ustawiamy sterownik na i810 i po bólu, dostajemy pełną akcelerację. Czasem trzeba zainstalować dodatkowy pakiet (np. w przypadku instalacji netinstall):

# apt-get install libgl1-mesa-dri

Karta bezprzewodowa - tutaj zaczynają się schody. Musimy skorzystać z modułów madwifi.

# apt-get install module-assistant madwifi-source

Resztę wyklikujemy w module-assistant. Kompilacja przechodzi bezboleśnie. Dodatkowe informacje o module możemy zobaczyć w:

# modinfo ath_pci

Klawisze dodatkowe - pakiet fnfxd zapewnia pełną obsługę klawiszy dostępnych pod kombinacją Fn+X.

# apt-get install fnfxd

Czytnik linii papilarnych - działa, jednakże nie istnieją jeszcze wrappery do komunikacji z biolib. Możemy skanować swoje paluszki ale do systemu nie zalogujemy się. Zacząłem pracę nad implementacją uwierzytelniania aes2501. Aby pobawić się skanerem instalujemy:

# apt-get install aes2501-wy

I odpalamy przez:

# aes2501 -r

W katalogu bieżącym dostaniemy skan swoich linii papilarnych. Niestety, wszelkie próby zastosowania istniejących metod identyfikacji i porównania skanu (m.in. mechanizm thinkfinger czy też biolib) kończą się klęską. Jeśli komuś udało odpalić się ten czytnik proszę o kontakt.

Bluetooth - implementacja toshiba_acpi nie umożliwia w domyślnej wersji korzystania z interfejsu Bluetooth. Toshset nie jest wspierany, więc trzeba ręcznie nakładać łatki na toshiba_acpi. Udostępniam Wam kod źródłowy toshiba_acpi.c dla jądra 2.6.23.1 do zastąpienia ręcznie w źródłach oraz patch na toshiba_acpi.c do nałożenia na dowolne jądro.
toshiba_acpi.c dla 2.6.23.1
patch_toshiba_acpi
Jedna i druga metoda zakłada kompilację jądra. Zamieszczam dodatkowo swój plik .config.
Config dla 2.6.23.1
Po kompilacji mamy dostęp do dodatkowego urządzenia /proc/acpi/toshiba/bluetooth. Parametry które przyjmuje interfejs to:

# echo enable > /proc/acpi/toshiba/bluetooth
# echo disable > /proc/acpi/toshiba/bluetooth

Zalety i wady, czyli czy warto...

Z zalet tego notebooka należy wymienić ciężar, małe rozmiary, bardzo długi czas działania na baterii, niski pobór prądu oraz design. Laptop po prostu świetnie się prezentuje :-). Całości dopełnia matowa matryca z bardzo dobrym podświetleniem.
Wady? Ano są... R200 potrafi niesamowicie się grzać. Jeśli nie zapewnimy prawidłowej wentylacji (np. będziemy korzystać z laptopa leżąc w łózku) temperatura procesora wzrośnie do 74 stopni Celsjusza(!). Obudowa jednak pozostaje chłodna (co dziwne). Z wad należy wymienić za małą klawiaturę. Osoby z dużymi palcami będą miały kłopoty z płynnym pisaniem.

Pełna recenzja zawarta jest w linku z początku tego artykułu więc nie będę się już rozwodził. Polecam ten sprzęt, pod Linuksem sprawuje się świetnie! Jeśli zatem potrzebujesz laptopa ultraprzenośnego, działającego kilka do kilkunastu godzin na baterii, dobrze wspieranego przez Linuksa wybierz Toshibę Portege R200. Nie będziesz żałował :-).

Czytaj dalej : 25 komentarzy

Mała sieć domowa w oparciu o system Linux

Wpis zamieszczony o 17:57:35, 14 października 2007 - 59 komentarzy


Dzisiaj zajmiemy się tworzeniem małej, dość dobrze zabezpieczonej sieci domowej. Udostępnianie internetu zrealizujemy poprzez komputer-host z zainstalowanym systemem Linux (dowolnym, może być Ubuntu, Debian, Mandriva i inne). Pamiętajcie jednak, że Wasze środowisko może różnić się od środowiska zaprezentowanego w artykule – analizujcie treść a nie tylko przeklejajcie komendy do konsoli! Lecimy!

Załóżmy środowisko:

siec


Dla ułatwienia ustalmy hostname dla komputerów:


Oczywiście w sieci może być więcej komputerów – wystarczy do routera wsadzić większą ilość kart sieciowych. W przykładzie wykorzystałem 3 komputery z zainstalowanym systemem Debian GNU/Linux, nic jednak nie stoi na przeszkodzie aby był to jakikolwiek inny system operacyjny.

Dokładny opis naszej przykładowej sieci domowej:
Komputer1 (orion) ma 4 karty sieciowe na złączu PCI:

[22:00:05] night@orion:~$ lspci | grep -i ether
02:05.0 Ethernet controller: 3Com Corporation 3c940 10/100/1000Base-T [Marvell] (rev 12)
02:0b.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
02:0c.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8029(AS)
02:0d.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)


W kolejności są to interfejsy od eth0 do eth3, przy czym interfejs eth0 (gigabitowa karta 3com) jest wpięta do sieci internet dostając adres z klasy prywatnej 192.168.0.10.

<22:02:26> root@orion:/home/night# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0E:2E:90:A7:37
          inet addr:192.168.0.10  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20e:2eff:fe90:a737/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2274170 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2224882 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2140325129 (1.9 GiB)  TX bytes:1161463487 (1.0 GiB)
          Interrupt:21 Base address:0xd400

Konfiguracja kart sieciowych


Zaczynamy od konfiguracji pozostałych kart sieciowych. W tym celu wyedytujemy plik /etc/network/interfaces w poniższy sposób:

(...)
auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet static
address 10.0.0.1
netmask 255.255.255.0

auto eth2
iface eth2 inet static
address 10.0.1.1
netmask 255.255.255.0

auto eth3
iface eth3 inet static
address 10.0.2.1
netmask 255.255.255.0
(...)


I restart sieci:

# /etc/init.d/networking restart


To tyle w kwestii kart sieciowych. Teraz DHCP!

Konfiguracja serwera DHCP


Na początek szybka instalacja:

# apt-get install dhcp3-server


... i konfiguracja:

# rm /etc/dhcp3/dhcpd.conf; nano -w /etc/dhcp3/dhcpd.conf


W pliczku (który będzie pusty) wpisujemy dla każdej podsieci:

subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.3 10.0.0.254;
default-lease-time 6100;
option domain-name „nasza.domena”;
option domain-name-servers pierwszy.dns, drugi.dns;
option routers 10.0.0.1;
option subnet-mask 255.255.255.0;
option broadcast-address 10.0.0.255;

host scorpio { # komputer nr 1
      hardware ethernet adres.mac;
      fixed-address 10.0.0.2;
  }
}


Oczywiście zmieniamy domenę, dns’y na własne a adres.mac wypełniamy adresem MAC komputera nr 1 (scorpio). Pozwoli nam to przypisywać jeden i zawsze ten sam adres IP dla tej maszyny. Dla reszty podsieci deklarujemy podobnie:

subnet 10.0.1.0 netmask 255.255.255.0 {
range 10.0.1.3 10.0.1.254;
default-lease-time 6100;
option domain-name „nasza.domena”;
option domain-name-servers dns,pierwszy, dns.drugi;
option routers 10.0.1.1;
option subnet-mask 255.255.255.0;
option broadcast-address 10.0.1.255;


host scorpio { hardware ethernet adres.mac; fixed-address 10.0.1.2; } }


Analogicznie dla podsieci trzeciej zmiejając odpowiednio ustawienia IP w konfiguracji. Drobna zmiana w skrypcie startowym:

# nano -w /etc/default/dhcp3-server


gdzie definiujemy interfejsy na których działać ma serwer DHCP

INTERFACES="eth1 eth2 eth3"


... i restart demona

/etc/init.d/dhcp3-server restart


W tym momencie możemy sprawdzić, czy nasze stacje robocze otrzymały adres sieciowy (należy odświeżyć ustawienia IP na każdym z nich). Jeśli wszystko zrobiliśmy dobrze powinniśmy móc pingować każdy z naszych komputerów. Pozostało nam udostępnienie dla nich internetu.

Udostępnianie sieci


W tym celu stworzymy dodatkowy skrypt startowy:

# nano -w /etc/init.d/firewall


Do którego to wpiszemy następujące regułki iptables:

#linijka potrzebna do włączenia udostępniania internetu
echo 1 > /proc/sys/net/ipv4/ip_forward
#wyczyszczenie starych reguł z pamięci iptables
iptables -F
iptables -X
iptables -t nat -X
iptables -t nat -F
# ustawienie domyślnej polityki (o tym później)
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -o lo -j ACCEPT
# Najważniejsze - udostępnienie sieci dla wybranych podsieci
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.0.2.0/24 -j MASQUERADE


Plik zapisujemy, nadajemy mu prawa wykonywalności:

# chmod +x /etc/init.d/firewall


dopisujemy do standardowych runleveli:

# update-rc.d firewall defaults 90


i odpalamy:

# /etc/init.d/firewall


W tym momencie mamy działający internet na wszystkich 3 komputerach. Voila! Trzy ostatnie linijki w skrypcie powinny stworzyć nam odpowiednią tablicę routingu:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth1
10.0.1.0        0.0.0.0         255.255.255.0   U     0      0        0 eth2
10.0.2.0        0.0.0.0         255.255.255.0   U     0      0        0 eth3
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0


Dzięki tym wpisom komputery w sieci domowej będą „widzieć się wzajemnie”. Możemy to sprawdzić pingując hosta scorpio z hosta omega, lub na odwrót. No i najważniejsze – możemy korzystać z internetu na wszystkich końcówkach podpiętych do sieci domowej :-).

Powiedzmy jednak, że to nas nie satysfakcjonuje. Chcemy mieć możliwość logowania się poprzez ssh do każdego z komputerów w sieci domowej. Musimy zatem zająć się forwardowaniem portów.

Przekierowanie portów


Aby przekierować wybrany port z hosta A na nasz router musimy na końcu naszego skryptu firewall dopisać:

iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 800 -j DNAT --to 10.0.0.2:22


Co to robi? Forwarduje każde zapytanie przychodzące na port 800 karty sieciowej eth0 na adres 10.0.0.2, port 22 w sieci lokalnej. Zatem, jeśli odpytamy nasz router z sieci zewnętrznej w ten sposób:

$ ssh <user>@<host> -p 800


Dostaniemy de facto połączenie z komputerem z adresem 10.0.0.2 w sieci lokalnej. W naszym przykładzie będzie to scorpio. Dodajmy resztę hostów:

iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 800 -j DNAT --to 10.0.0.2:22
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 801 -j DNAT --to 10.0.1.2:22
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 802 -j DNAT --to 10.0.1.2:22


I w ten sposób mamy możliwość zalogowania się na każdy z naszych komputerów w sieci domowej z zewnątrz.

Jutro opiszę sposób zabezpieczenia naszego routera przed najpopularniejszymi atakami z zewnątrz w przypadku gdy posiadamy publiczny adres IP. Enjoy!
W artykule mogły pojawić się błędy i nieścisłości. Będzie on zaktualizowany w przypadku wykryciu takowych.

Czytaj dalej : 59 komentarzy

LinkLift