sysctl -w kernel.shmmax=100000000Na stałe można to dopisać w pliku /etc/sysctl.conf
Skompilowałem sobie Firefoksa 3.6. OK, wszystko ładnie. Tylko dlaczego nowa karta otwiera się obok aktywnej karty, a nie, jak do tej pory, jako ostatnia? Hę??
Ja rozumiem, że to jest może "bardziej naturalne", jednakże mi nie podchodzi i nie jest to kwestia przyzwyczajenia.
Nikomu nie przyszło do głowy, aby zmieniając politykę otwierania kart zostawić możliwość zmiany tego w konfiguracji?
#!/bin/bash LINII=$(cat chap-secrets |wc -l) I=1 while [ $I != $LINII ] do LINIA=$(sed -n "$I"p chap-secrets) echo "$LINIA" echo "$LINIA"|grep "^#"> /dev/null if [ $? -eq 0 ]; then echo $LINIA >> test.out else if [ -z "$LINIA" ]; then echo "pusta" else echo "$LINIA" |awk -F' ' '{ printf $1 } { print "\tCleartext-Password := \"" $3 "\"\n" "\t\tService-Type = Framed-User,\n\t\tFramed-Protocol = PPP,\n","\t\tFramed-IP-Address = " $4 ",\n"}' >> test.out fi fi I="$(($I +1))" donePiękne nie jest, ale jak to mówią "works for me" :)
Jako, że adminuję małą siecią radiową, a nie lubię dowiadywać się o padzie któregoś nadajnika od jej użytkowników, wpadłem na pomysł, żeby do monitorowania i sygnalizacji wykorzystać serwerowy głośniczek, co jest dla mnie optymalnym rozwiązaniem, biorąc pod uwagę, że serwer stoi w zasięgu słuchu. Zresztą, zawsze można sobie głośnik podprowadzić kablem...
Skrypt można w łatwy sposób dostosować do tego, aby wykonywał inną akcję, np. wysyłał maile lub sms-y.
Do działania wymaga zainstalowanego programu fping i beep - do zdobycia w większości dystrybucji :)
Skrypt jaki jest każdy widzi, może komuś się przyda :)
#!/bin/bash # Skrypt do monitorowania dostępności hosta w sieci w oparciu o PING (program fping) i sygnalizowania tego - w tym przypadku przez PC speaker. # Uruchamia się go przez podanie właściwych zmiennych, np. ADRES1="192.168.100.132" INTERVAL_IF_ALIVE="30" DESC="MT2-most5G" BEEP_PARAM="-r 4 -l 10" /etc/livecheck.sh # zmienne: # ADRES1: adres sprawdzanego hosta # ADRES2: adres drugiego sprawdzanego hosta, z powyższym tworza parę - skrypt "zabipa", gdy obydwa hosty nie odpowiedzą na ping # DESC: przyjazny opis, jeśli brak to w logu zostanie zapisany adres ADRES1 # INTERVAL_IF_ALIVE: czas pomiędzy sprawdzeniami, jeśli ostatnie sprawdzenie dało wynik pozytywny # INTERVAL_IF_DEAD: czas pomiędzy sprawdzeniami, jeśli ostatnie sprawdzenie dało wynik negatywny (unreachable) # FPING_PARAM: parametry jakie można przekazać do programu fping, np. można wydłużyć czas sprawdzania poprzez FPING_PARAM="-t 5000" # BEEP_PARAM: parametry jakie można przekazać do programu beep, np. w celu zróznicowania wydawanych dzwięków. # LOG: plik, do którego są logowane "pady" # ścieżka do programów na wszelki wypadek PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin" TAG_SENT_LOG="0" # zmienna do ustalenia czy log został wcześniej zapisany #sekcja sprawdzania zmiennych if [ -x $ADRES1 ] then ADRES1="127.0.0.1" fi if [ -x $ADRES1 ] && [ -x $ADRES2 ] then CASE="single" else CASE="double" fi if [ -x $DESC ] then DESC=$ADRES1 fi if [ -x $LOG ] then LOG="/var/log/livecheck.log" fi if [ -x $INTERVAL_IF_ALIVE ] then INTERVAL_IF_ALIVE="300" fi if [ -x $INTERVAL_IF_DEAD ] then INTERVAL_IF_DEAD="10" fi # sekcja funkcji dead() { if [ $TAG_SENT_LOG -eq 0 ] then DATE="`date +%X\,\ %d\ %b`" echo "host nie odpowiedział - zaznaczono w logu" echo -e "$DATE: DEAD - $DESC" >> $LOG TAG_SENT_LOG="1" fi INTERVAL=$INTERVAL_IF_DEAD beep $BEEP_PARAM return $INTERVAL } alive() { if [ $TAG_SENT_LOG -eq 1 ] then DATE="`date +%X\,\ %d\ %b`" echo "host odpowiedział - zaznaczono w logu" echo -e "$DATE: ALIVE - $DESC" >> $LOG TAG_SENT_LOG="0" fi INTERVAL=$INTERVAL_IF_ALIVE return $INTERVAL } case "$CASE" in single) # sekcja sprawdzania pojedynczego hosta while true # nieskończona pętla do fping $ADRES1 $FPING_PARAM # fping działa w ten sposób, że wysyła ping do hosta; zwraca status wyjścia 0 przy pierwszej pozytywnej odpowiedzi. Jeśli host jest niedostępny, to robi 3 próby i zwraca status wyjścia 1 if [ $? -gt 0 ] # sprawdzenie stanu wyjścia pinga then dead # wywołanie funkcji dead() else alive # wywołanie funkcji alive() fi sleep $INTERVAL done ;; double) # sekcja sprawdzania dwóch hostów; skrypt "zabipa", gdy obydwa hosty nie odpowiedzą na ping while true # nieskończona pętla do fping $ADRES1 $FPING_PARAM ADRES1_STATUS=$? fping $ADRES2 $FPING_PARAM ADRES2_STATUS=$? if [ $ADRES1_STATUS -gt 0 ] && [ $ADRES2_STATUS -gt 0 ] then dead # wywołanie funkcji dead() else alive # wywołanie funkcji alive() fi sleep $INTERVAL done ;; esac
Przykład logów:
serwer ~ # tail -n 4 /var/log/livecheck.log 12:10:04, 18 kwi: DEAD - MT1-most5G 12:12:14, 18 kwi: ALIVE - MT1-most5G 19:57:33, 18 kwi: DEAD - MT2-most5G 20:05:26, 18 kwi: ALIVE - MT2-most5G
Jeśli ktoś jeszcze nie zauważył, to informuję, że pojawiła się nowa wersja sterownika RadeonHD. Aktualnie nosi ona numerek 1.2.0 i wnosi:
- obsługę dla chipsetu RV620, RV635 i R680
- akcelerację 2D dla chipsetów R5xx
- wsparcie dla trybów z przeplotem
- i kilka innych, istotnych funkcji
Więcej informacji: http://wiki.x.org/wiki/radeonhd
Jakiś czas temu pisałem, że szukam rozwiązania dla pewnego problemu związanego z PPPoE. Sprawa sprowadza się do tego, że gdy zostanie zerwana sesja PPPoE (np. z powodu rozłączenia z nadajnikiem lub z powodu wyciągnięcia wtyczki sieciowej), a klient nawiąże drugie połączenie, w tablicy routingu serwera są dwie (lub więcej) trasy dotyczące tego samego "peera", np.
# ip route show 192.168.101.10 dev ppp0 proto kernel scope link src 192.168.101.254 192.168.101.10 dev ppp1 proto kernel scope link src 192.168.101.254
Stary wpis wisi dopóki koncentrator PPPoE nie zorientuje się, że link jest martwy - wtedy usuwa wpis, a net u klienta zaczyna działać. Jednakże chwilę to trwa, w zależności od konfiguracji koncentratora.
Rozwiązanie jest banalne; opierając się na powyższym przykładzie wystarczy tylko wpisać:
ip route del 192.168.101.10
No i dochodzimy do sedna. Wystarczyłoby tylko podpiąć to polecenie do pliku /etc/ppp/ip-up. Byłoby jednak zbyt pięknie, gdyby dało się to zrobić w takiej czystej postaci. Trzeba to opakować w pętlę, która usunie wszystkie zdublowane wpisy i zostawi ten jeden właściwy. Sztuczka polega na tym, że wpisy w tablicy routingu są kasowane "od góry", dzięki czemu ten ostatni jest tym działającym.
#!/bin/bash # /etc/ppp/ip-up # this is a script which is executed after connecting the ppp interface. # look at man pppd for details # the followings parameters are available: # $1 = interface-name # $2 = tty-device # $3 = speed # $4 = local-IP-address # $5 = remote-IP-address # $6 = ipparam ROUTES=$(ip route|grep -w "$5"|wc -l) while [ "$ROUTES" -gt 1 ] do ip route del $5 ROUTES=$(ip route|grep -w "$5"|wc -l) done
W gruncie rzeczy to wszystko - powyższy skrypt sprawdza się doskonale na moim serwerze.
Właściwie tytuł wpisu powinien brzmieć "one session per IP", ponieważ opcja w Mikrotiku, o której wspominałem, opiera się na sprawdzaniu adresu MAC klienta, a nie jak w przypadku mojego skryptu, na adresie IP. Z tego powodu nie da się podpiąć kilku komputerów do MT poprzez AP (w trybie client), który maskuje adresy MAC (fixme?).
Powiązane wpisy:
Żeby zainstalować sobie KDE w wersji 4 w pod Gentoo trzeba skorzystać z overlay-a o nazwie kde-crazy.
W skrócie:
- instalujemy najnowszy portage (v. 2.2)
- emerge -va layman
- w pliku /etc/make.conf dodajemy: source /usr/portage/local/layman/make.conf
- layman -a kde-crazy
- layman -S
- w pliku /etc/portage/package.keywords dodajemy listę pakietów "odmaskowanych"
- emerge -va @kdebase
Uwagi:
- lepiej sobie właczyć flagę "kdeprefix", dzięki czemu nowe KDE trafi do /usr/kde/4.2 zamiast do głównego drzewa (jeśli mamy KDE 3.5 może nam to namieszać)
- lepiej wyłączyć flagę "python" - u mnie kompilacja się wysypuje z powodu modułu "sip"
- nowe KDE jest podzielone na "sety", więc jeśli chcemy zainstalować np. całe kdegraphics to wpisujemy 'emerge -va @kdegraphics
- polski pakiet językowy nazywa się teraz "kde-l10n"
Składnia:
:[zakres]s/szukane_wyrażenie/podstawiane_wyrażenie/[g]
gdzie:
zakres - oznacza zakres linii oddzielonych przecinkiem (np. 1,10); definiując zakres możemy użyć znaków: $ ostatnia linia, kropka "." to aktualna linia, % cały plik (np. .,$ oznacza od aktualnego miejsca do końca pliku)
g - zastąp globalnie (więcej niż raz w linii)
Przykład:
:%s/br0/eth1/g - zamienia ciąg znaków br0 na eth1 w całym pliku
Uaktualniałem dzisiaj OpenSSH z wersji 4.3 do 4.5. Niestety po aktualizacji zaczęło dziać się źle - serwer zaczął odrzucać połączenia a w jego logach to:
Jul 7 22:27:42 mynet101 sshd[30488]: error: ssh_rsa_sign: EVP_get_digestbynid 64 failed Jul 7 22:27:42 mynet101 sshd[30488]: fatal: mm_answer_sign: key_sign failed
Trochę pokombinowałem, a w końcu wpadłem na to, że może OpenSSL jest zbyt stary. Sprawdziłem i faktycznie - w systemie archaizm, bo jeszcze wersja 0.9.7i wisiała. Po zainstalowaniu aktualnej wersji tej biblioteki (0.9.8d) i przekompilowaniu pakietu OpenSSH wszystko zaczęło działać jak na leży.
Może komuś się to przyda :)
Korzystam czasami z programu Skype i denerwująca dla mnie jest ciągła konieczność odłączania głośników i podłączania słuchawek. Wpadłem na pomysł, że skoro w Skajpie da się wybrać dedykowane urządzenie do obsługi dźwięku, to przecież mogę skorzystać z drugiej karty dźwiękowej i nie gimnastykować się za każdym razem, gdy ktoś zechce sobie ze mną pokonwersować, tym bardziej że trafienie do jednej z pięciu dziurek w słabych warunkach oświetleniowych do łatwych zadań nie należy ;)
Sytuacja u mnie (w moim kompie) wygląda tak: mam wbudowaną kartę marki nVidia,
00:04.0 Multimedia audio controller: nVidia Corporation CK804 AC'97 Audio Controller (rev a2)którą do tej pory miałem wyłączoną w BIOS-ie, ponieważ korzystałem z innej karty na PCI
01:08.0 Multimedia audio controller: Creative Labs SB Live! EMU10k1 (rev 08)gdyż w moim subiektywnym odczuciu ta karta generuje dźwięk lepszej jakości niż jakieś tam AC-97.
Niestety, po włączeniu karty wbudowanej automagicznie stała się ona domyślną kartą dźwiękową w systemie (snd-card-0), a założenie jest takie, że nVidia dla Skype, a Live! dla całej reszty. Trzeba to zmienić!
W tym momencie dochodzimy do pliku konfiguracyjnego '/etc/modules.d/alsa'. Jest to ten sam pliczek, w którym swoją konfigurację zapisuje narzędzie 'alsaconf'. Co ciekawe narzędzie to tak jakby nie potrafi zapisać ustawień dla dwóch kart - po prostu nadpisuje poprzednią konfigurację. Mniejsza z tym.
Googlając doszedłem do wniosku, że wystarczy poniższa konfiguracja, aby SB stał się domyślną kartą:
alias snd-card-0 snd-emu10k1 alias sound-slot-0 snd-card-0 alias snd-card-1 snd-intel8x0 alias sound-slot-1 snd-card-1Niestety, tak się nie stało - nadal ta wbudowana miała numer 0. Okazało się, że trzeba jeszcze dodać opcję 'index':
options snd-emu10k1 index=0 options snd-intel8x0 index=1
I teraz wszystko działa tak jak chciałem - domyślną kartą (snd-card-0), do której są podłączone głośniki jest SoundBlaster, a dla Skype jest AC'97 (snd-card-1), do której są podłączone (już na stałe) słuchawki :)
Czasem zdarza się, że net przestaje działać, a w logach komunikat 'ip_conntrack: table full, dropping packet'. Wtedy przydaje się to:
echo "2400" > /proc/sys/net/ipv4/tcp_keepalive_time echo "30" > /proc/sys/net/ipv4/tcp_fin_timeout echo "60" > /proc/sys/net/ipv4/netfilter/ip_conntrack_generic_timeout echo "20" > /proc/sys/net/ipv4/netfilter/ip_conntrack_icmp_timeout echo "60" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_close_wait echo "1" > /proc/sys/net/ipv4/igmp_max_memberships echo "0" > /proc/sys/net/ipv4/tcp_window_scaling echo "0" > /proc/sys/net/ipv4/tcp_sack echo "32768-64000" > /proc/sys/net/ipv4/ip_local_port_range echo "43200" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established echo "5" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_close echo "20" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_fin_wait echo "30" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_last_ack echo "20480" > /proc/sys/net/ipv4/ip_conntrack_max echo "10240" > /proc/sys/net/ipv4/netfilter/ip_conntrack_max echo "40" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_time_wait echo "30" > /proc/sys/net/ipv4/netfilter/ip_conntrack_udp_timeout echo "180" > /proc/sys/net/ipv4/netfilter/ip_conntrack_udp_timeout_stream echo "20" > /proc/sys/net/ipv4/ipfrag_time echo "1280" > /proc/sys/net/ipv4/tcp_max_syn_backlog
Program do zmiany stylu dla aplikacji GTK nazywa się 'gtk-theme-switch'
Styl Qtcurve dla GTK nazywa się 'gtk-engines-qtcurve'
Chcąc mieć dostęp do swojego komputera musimy znać jego IP. Nic trudnego. Sprawa się komplikuje, gdy dostawca przydziela nam zmienne IP - jeśli zmiana następuje raz na miesiąc to pół biedy, można raz na miesiąc wkuć/zapisać sobie to IP i po problemie. Jednak w przypadku neo zmiana następuje co 24 godziny i tutaj ten sposób jest już mało przydatny.
Co możemy zrobić?
Ano możemy napisać sobie skrypt, który będzie co jakiś czas sprawdzał czy IP uległo zmianie i jeśli tak wyśle nam sms lub e-mail. Podoba wam się ten pomysł?
To był taki żart :)
Lepszym rozwiązaniem jest skorzystanie z usługi określanej mianem Dynamic DNS, w skrócie DDNS. Sposób w jaki to działa, jest w miarę przystępnie opisany na stronie firmy Dipol, dlatego daruję sobie odkrywanie koła ;)
Tak jakoś wyszło, że posiadając neostradę używam programu ez-ipupdate - chyba dlatego, że był to pierwszy program, który mi zadziałał :)
Instalacja:
emerge -va ez-ipupdate These are the packages that would be merged, in order: Calculating dependencies... done! [ebuild N ] net-dns/ez-ipupdate-3.0.11_beta8-r1 80 kB Total size of downloads: 80 kB
Konfiguracja:
Ez-ipupdate posiada pokaźną liczbę przykładowych plików dla różnych serwisów oferujących usługę DDNS. Najłatwiej jest przekopiować sobie przykład i zmienić w nim poszczególne opcje; przykład dla DynDNS.org:
zcat /usr/share/doc/ez-ipupdate-3.0.11_beta8-r1/example-dyndns.conf.gz > /etc/ez-ipupdate.conf
W pliku konfiguracyjnym należy wpisać swoją nazwę użytkownika, hasło, zarezerwowaną domenę i interfejs, który ma być monitorowany.
Oczywiście wcześniej trzeba się zarejestrować w serwisie DynDNS.org i aktywować odpowiednią usługę.
Pozostaje już tylko uruchomić naszego demona:
/etc/init.d/ez-ipupdate start * Starting ez-ipupdate for zibik.ath.cx on ppp0 ... [ ok ]
Poleceniem ping możemy sprawdzić czy aktualizacja się powiodła:
ping -n zibik.ath.cx PING zibik.ath.cx (83.28.71.129) 56(84) bytes of data. 64 bytes from 83.28.71.129: icmp_seq=1 ttl=57 time=30.9 ms 64 bytes from 83.28.71.129: icmp_seq=2 ttl=57 time=47.2 ms 64 bytes from 83.28.71.129: icmp_seq=3 ttl=57 time=37.8 ms 64 bytes from 83.28.71.129: icmp_seq=4 ttl=57 time=30.2 ms --- zibik.ath.cx ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3000ms rtt min/avg/max/mdev = 30.210/36.575/47.278/6.855 msJeśli aktualizacja adresu IP nie powiodła się warto zajrzeć do logów (/var/log/messages), żeby zobaczyć co jest nie tak.
Jeśli wszystko gra to warto sprawić, aby nasz programik uruchamiał się przy starcie:
rc-update add ez-ipupdate default
Wpis ten dedykuję wszystkim, którzy posiadają dostęp do Internetu ze zmiennym, publicznym IP i korzystają z Linuksa (tak, Przemek to do Ciebie :P )

No ładny postęp, ładny :) Czyżby dzięki temu dało się Neostradę odpalić na modemie USB?
Instalacja jest banalna - ściągamy ze strony domowej najnowszego Sarga, rozpakowujemy i
./configure --prefix=/usr #prefix jest opcjonalny
make
make install
potem
ln -s /usr/local/sarg/sarg.conf /etc/sarg.confponieważ domyślnie program szuka pliku konfiguracyjnego w /etc/.
Następnie trzeba dopasować plik konfiguracyjny do swoich wymagań, czyli zdefiniować gdzie leżą logi Squida i gdzie mają być zapisywane pliki wynikowe. Poniżej opcje, które zmieniłem w pliki /etc/sarg.conf
language Polish
access_log /var/log/squid/access.log
output_dir /usr/local/sarg/reports
resolve_ip yes
useragent_log /var/log/squid/useragent.log
date_format e
overwrite_report yes
Jeśli coś jest niejasne to mogę wyjaśnić :)
#Include for LinuxStat (http://lstat.sf.net)Przez godzinę zastanawiałem się dlaczego ciągle dostaję FORBIDDEN zamiast pięknych statystyk systemowych. Wszystko dlatego, że difoltowo Apache gdy nie ma regułki dotyczącej dostępu do danego zasobu zakłada, że powinien on być zabroniony.
Alias /lstat/ "/usr/local/lstat/www/"
#for execute CGI files
Options Indexes ExecCGI
AddHandler cgi-script .cgi
Order allow,deny
Allow from all
AllowOverride AuthConfig Limit
Oryginał wyglądał tak:
#Include for LinuxStat (http://lstat.sf.net)
Alias /lstat/ "/usr/local/lstat/www/"
#for execute CGI files
Options Indexes ExecCGI
AddHandler cgi-script .cgi
AllowOverride AuthConfig Limit
Prawda? Prawda!
